1 package requestid
2
3 import (
4 "context"
5 "net/http"
6 "net/http/httptest"
7 "testing"
8
9 "github.com/gin-gonic/gin"
10 "github.com/stretchr/testify/assert"
11 )
12
13 const testXRequestID = "test-request-id"
14
15 func emptySuccessResponse(c *gin.Context) {
16 c.String(http.StatusOK, "")
17 }
18
19 func Test_RequestID_CreateNew(t *testing.T) {
20 r := gin.New()
21 r.Use(New())
22 r.GET("/", emptySuccessResponse)
23
24 w := httptest.NewRecorder()
25 req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil)
26 r.ServeHTTP(w, req)
27
28 assert.Equal(t, http.StatusOK, w.Code)
29 assert.NotEmpty(t, w.Header().Get(headerXRequestID))
30 }
31
32 func Test_RequestID_PassThru(t *testing.T) {
33 r := gin.New()
34 r.Use(New())
35 r.GET("/", emptySuccessResponse)
36
37 w := httptest.NewRecorder()
38 req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil)
39 req.Header.Set(headerXRequestID, testXRequestID)
40 r.ServeHTTP(w, req)
41
42 assert.Equal(t, http.StatusOK, w.Code)
43 assert.Equal(t, testXRequestID, w.Header().Get(headerXRequestID))
44 }
45
46 func TestRequestIDWithCustomID(t *testing.T) {
47 r := gin.New()
48 r.Use(
49 New(
50 WithGenerator(func() string {
51 return testXRequestID
52 }),
53 ),
54 )
55 r.GET("/", emptySuccessResponse)
56
57 w := httptest.NewRecorder()
58 req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil)
59 r.ServeHTTP(w, req)
60
61 assert.Equal(t, http.StatusOK, w.Code)
62 assert.Equal(t, testXRequestID, w.Header().Get(headerXRequestID))
63 }
64
65 func TestRequestIDWithCustomHeaderKey(t *testing.T) {
66 r := gin.New()
67 r.Use(
68 New(
69 WithCustomHeaderStrKey("customKey"),
70 ),
71 )
72 r.GET("/", emptySuccessResponse)
73
74 w := httptest.NewRecorder()
75 req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil)
76 req.Header.Set("customKey", testXRequestID)
77 r.ServeHTTP(w, req)
78
79 assert.Equal(t, http.StatusOK, w.Code)
80 assert.Equal(t, testXRequestID, w.Header().Get("customKey"))
81 }
82
83 func TestRequestIDWithHandler(t *testing.T) {
84 r := gin.New()
85 called := false
86 r.Use(
87 New(
88 WithHandler(func(c *gin.Context, requestID string) {
89 called = true
90 assert.Equal(t, testXRequestID, requestID)
91 }),
92 ),
93 )
94
95 w := httptest.NewRecorder()
96 req, _ := http.NewRequestWithContext(context.Background(), "GET", "/", nil)
97 req.Header.Set("X-Request-ID", testXRequestID)
98 r.ServeHTTP(w, req)
99
100 assert.True(t, called)
101 }
102
View as plain text