...

Source file src/github.com/gin-contrib/requestid/requestid_test.go

Documentation: github.com/gin-contrib/requestid

     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