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()) } }