package middleware import ( "net/http" "net/http/httptest" "testing" "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" ) type header struct { Key string Value string } func performRequest( r http.Handler, method, path string, headers ...header, ) *httptest.ResponseRecorder { req := httptest.NewRequest(method, path, nil) for _, h := range headers { req.Header.Add(h.Key, h.Value) } w := httptest.NewRecorder() r.ServeHTTP(w, req) return w } func TestRequestID(t *testing.T) { r := gin.New() r.Use(RequestID()) var got string wanted := "123" r.GET("/example", func(c *gin.Context) { got = c.GetString(requestID) c.Status(http.StatusOK) }) r.POST("/example", func(c *gin.Context) { got = c.GetString(requestID) c.String(http.StatusAccepted, "ok") }) // Test with Request ID _ = performRequest(r, "GET", "/example?a=100", header{requestID, wanted}) assert.Equal(t, "123", got) _ = performRequest(r, "GET", "/example?a=100") assert.NotEqual(t, "", got) }