github.com/ngocphuongnb/tetua@v0.0.7-alpha/app/middlewares/middlewares_test.go (about) 1 package middlewares_test 2 3 import ( 4 "errors" 5 "fmt" 6 "net/http" 7 "strings" 8 "testing" 9 10 "github.com/ngocphuongnb/tetua/app/config" 11 "github.com/ngocphuongnb/tetua/app/logger" 12 "github.com/ngocphuongnb/tetua/app/middlewares" 13 "github.com/ngocphuongnb/tetua/app/mock" 14 "github.com/ngocphuongnb/tetua/app/server" 15 fiber "github.com/ngocphuongnb/tetua/packages/fiberserver" 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestCookieMiddleware(t *testing.T) { 20 mockServer := mock.CreateServer() 21 mockServer.Use(middlewares.Cookie) 22 mockServer.Get("/test", func(c server.Context) error { 23 return c.SendString("ok") 24 }) 25 body, resp := mock.GetRequest(mockServer, "/test") 26 assert.Equal(t, "ok", string(body)) 27 assert.Equal(t, true, strings.HasPrefix(resp.Header["Set-Cookie"][0], config.COOKIE_UUID+"=")) 28 } 29 30 func TestRecoverMiddleware(t *testing.T) { 31 mockLogger := mock.CreateLogger(true) 32 mockServer := mock.CreateServer() 33 mockServer.Use(middlewares.Recover) 34 mockServer.Get("/test", func(c server.Context) error { 35 panic("test recover") 36 }) 37 body, _ := mock.GetRequest(mockServer, "/test") 38 assert.Equal(t, `{"error":"test recover"}`, body) 39 param0Str := fmt.Sprintf("%v", mockLogger.Last().Params[0]) 40 assert.Equal(t, true, strings.HasPrefix(param0Str, "test recover goroutine")) 41 } 42 43 func TestRecoverMiddlewareResponseError(t *testing.T) { 44 mockLogger := mock.CreateLogger(true) 45 mockServer := fiber.New(fiber.Config{ 46 JwtSigningKey: "sesj5JYrRxrB2yUWkBFM7KKWCY2ykxBw", 47 JSONEncoder: func(v interface{}) ([]byte, error) { 48 return nil, errors.New("json error") 49 }, 50 }) 51 52 mockServer.Use(middlewares.Recover) 53 mockServer.Get("/test", func(c server.Context) error { 54 panic("test recover") 55 }) 56 mock.GetRequest(mockServer, "/test") 57 assert.Equal(t, errors.New("json error"), mockLogger.Last().Params[0]) 58 } 59 60 func TestRequestIDMiddlewares(t *testing.T) { 61 mockServer := mock.CreateServer() 62 mockServer.Use(middlewares.RequestID) 63 mockServer.Get("/test", func(c server.Context) error { 64 assert.Equal(t, true, c.RequestID() != "") 65 return c.SendString("ok") 66 }) 67 mockServer.Get("/test2", func(c server.Context) error { 68 assert.Equal(t, "my-request-id", c.RequestID()) 69 return c.SendString("ok") 70 }) 71 72 _, resp := mock.GetRequest(mockServer, "/test") 73 assert.Equal(t, true, resp.Header["X-Request-Id"][0] != "") 74 75 _, resp = mock.GetRequest(mockServer, "/test2", map[string]string{ 76 middlewares.HEADER_REQUEST_ID: "my-request-id", 77 }) 78 assert.Equal(t, "my-request-id", resp.Header["X-Request-Id"][0]) 79 } 80 81 func TestRequestLogMiddlewares(t *testing.T) { 82 mockLogger := mock.CreateLogger(true) 83 mockServer := mock.CreateServer() 84 mockServer.Use(middlewares.RequestLog) 85 mockServer.Get("/test", func(c server.Context) error { 86 c.Status(http.StatusBadRequest) 87 return errors.New("Test request error") 88 }) 89 90 mock.GetRequest(mockServer, "/test") 91 92 msg := mockLogger.Last().Params[0] 93 ctx, ok := mockLogger.Last().Params[1].(logger.Context) 94 95 assert.Equal(t, true, ok) 96 assert.Equal(t, "Request completed", msg) 97 assert.Equal(t, http.StatusBadRequest, ctx["status"]) 98 assert.Equal(t, "GET", ctx["method"]) 99 assert.Equal(t, "/test", ctx["path"]) 100 assert.Equal(t, "0.0.0.0", ctx["ip"]) 101 assert.Equal(t, "Test request error", ctx["error"]) 102 assert.Equal(t, true, ctx["latency"] != "") 103 } 104 105 func TestGetAllMiddlewares(t *testing.T) { 106 assert.Equal(t, 6, len(middlewares.All())) 107 }