package tests import ( "net/http" "net/http/httptest" "strings" "testing" "github.com/gin-gonic/gin" "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/Wikid82/charon/backend/internal/api/routes" "github.com/Wikid82/charon/backend/internal/config" ) // TestIntegration_WAF_BlockAndMonitor exercises middleware behavior and metrics exposure. func TestIntegration_WAF_BlockAndMonitor(t *testing.T) { gin.SetMode(gin.TestMode) // Helper to spin server with given WAF mode newServer := func(mode string) (*gin.Engine, *gorm.DB) { db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{}) if err != nil { t.Fatalf("db open: %v", err) } cfg, err := config.Load() if err != nil { t.Fatalf("load cfg: %v", err) } cfg.Security.WAFMode = mode r := gin.New() if err := routes.Register(r, db, cfg); err != nil { t.Fatalf("register: %v", err) } return r, db } // Block mode should reject suspicious payload on an API route covered by middleware rBlock, _ := newServer("block") req := httptest.NewRequest(http.MethodGet, "/api/v1/remote-servers?test=