66 lines
2.3 KiB
Go
66 lines
2.3 KiB
Go
package middleware
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
|
|
"kra/app/system/internal/conf"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func TestAccessLogRejectsOversizedRequestBody(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
engine := gin.New()
|
|
called := false
|
|
engine.Use(AccessLog(conf.NewRuntime(nil, &conf.AdminBackend{}), nil, "test"))
|
|
engine.POST("/payload", func(c *gin.Context) { called = true })
|
|
request := httptest.NewRequest(http.MethodPost, "/payload", strings.NewReader(strings.Repeat("a", int(defaultRequestBodyLimit+1))))
|
|
request.Header.Set("Content-Type", "application/json")
|
|
response := httptest.NewRecorder()
|
|
|
|
engine.ServeHTTP(response, request)
|
|
if response.Code != http.StatusRequestEntityTooLarge || called {
|
|
t.Fatalf("status=%d called=%v body=%s", response.Code, called, response.Body.String())
|
|
}
|
|
}
|
|
|
|
func TestAccessLogRejectsOversizedMultipartOnOrdinaryRoute(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
engine := gin.New()
|
|
called := false
|
|
engine.Use(AccessLog(conf.NewRuntime(nil, &conf.AdminBackend{}), nil, "test"))
|
|
engine.POST("/login", func(c *gin.Context) { called = true })
|
|
request := httptest.NewRequest(http.MethodPost, "/login", strings.NewReader(strings.Repeat("a", int(defaultRequestBodyLimit+1))))
|
|
request.ContentLength = -1
|
|
request.Header.Set("Content-Type", "multipart/form-data; boundary=test")
|
|
response := httptest.NewRecorder()
|
|
|
|
engine.ServeHTTP(response, request)
|
|
if response.Code != http.StatusRequestEntityTooLarge || called {
|
|
t.Fatalf("status=%d called=%v body=%s", response.Code, called, response.Body.String())
|
|
}
|
|
}
|
|
|
|
func TestAccessLogAllowsMediaLimitOnlyOnUploadRoute(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
engine := gin.New()
|
|
called := false
|
|
engine.Use(AccessLog(conf.NewRuntime(nil, &conf.AdminBackend{}), nil, "test"))
|
|
engine.POST("/api/fileUploadAndDownload/upload", func(c *gin.Context) {
|
|
called = true
|
|
_, _ = io.Copy(io.Discard, c.Request.Body)
|
|
})
|
|
request := httptest.NewRequest(http.MethodPost, "/api/fileUploadAndDownload/upload", strings.NewReader(strings.Repeat("a", int(defaultRequestBodyLimit+1))))
|
|
request.Header.Set("Content-Type", "multipart/form-data; boundary=test")
|
|
response := httptest.NewRecorder()
|
|
|
|
engine.ServeHTTP(response, request)
|
|
if response.Code != http.StatusOK || !called {
|
|
t.Fatalf("status=%d called=%v body=%s", response.Code, called, response.Body.String())
|
|
}
|
|
}
|