package middleware import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" ) func init() { gin.SetMode(gin.TestMode) } func TestRequestIDMiddleware_GeneratesID(t *testing.T) { r := gin.New() r.Use(RequestIDMiddleware()) r.GET("/test", func(c *gin.Context) { c.Status(http.StatusOK) }) w := httptest.NewRecorder() req, _ := http.NewRequest(http.MethodGet, "/test", nil) r.ServeHTTP(w, req) gotID := w.Header().Get("X-Request-ID") if gotID == "" { t.Error("expected X-Request-ID to be generated, got empty string") } if len(gotID) != 16 { t.Errorf("expected 16-char hex ID, got %d chars: %q", len(gotID), gotID) } } func TestRequestIDMiddleware_PreservesExisting(t *testing.T) { r := gin.New() r.Use(RequestIDMiddleware()) r.GET("/test", func(c *gin.Context) { c.Status(http.StatusOK) }) w := httptest.NewRecorder() req, _ := http.NewRequest(http.MethodGet, "/test", nil) req.Header.Set("X-Request-ID", "my-custom-id") r.ServeHTTP(w, req) gotID := w.Header().Get("X-Request-ID") if gotID != "my-custom-id" { t.Errorf("expected X-Request-ID to be preserved as %q, got %q", "my-custom-id", gotID) } }