Skip to content

Commit b9d41c9

Browse files
committed
Add some tests for logger middleware
1 parent 77da8df commit b9d41c9

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

logger.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ func RequestLogger(logger *zap.Logger) func(next http.Handler) http.Handler {
6666
if requestID == "" {
6767
requestID, _ = gonanoid.Nanoid()
6868
}
69+
w.Header().Add(requestIDHeader, requestID)
6970
ctx = WithRequestID(ctx, requestID)
7071

7172
ww := NewWrapResponseWriter(w, r.ProtoMajor)

logger_test.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,101 @@
11
package logger
2+
3+
import (
4+
"net/http"
5+
"net/http/httptest"
6+
"testing"
7+
8+
"github.com/getsentry/sentry-go"
9+
"github.com/golang/mock/gomock"
10+
"github.com/stretchr/testify/suite"
11+
"go.uber.org/zap"
12+
"go.uber.org/zap/zapcore"
13+
)
14+
15+
type TestRequestLoggerSuite struct {
16+
suite.Suite
17+
18+
ctrl *gomock.Controller
19+
sendEventMock *gomock.Call
20+
21+
logger *zap.Logger
22+
}
23+
24+
func (s *TestRequestLoggerSuite) SetupTest() {
25+
s.logger = zap.New(zapcore.NewNopCore())
26+
27+
s.ctrl = gomock.NewController(s.T())
28+
29+
transportMock := NewMockTransport(s.ctrl)
30+
transportMock.EXPECT().
31+
Configure(gomock.AssignableToTypeOf(sentry.ClientOptions{})).
32+
Return()
33+
s.sendEventMock = transportMock.EXPECT().
34+
SendEvent(gomock.AssignableToTypeOf(&sentry.Event{})).
35+
Return().
36+
MinTimes(0)
37+
transportMock.EXPECT().
38+
Flush(gomock.Any()).
39+
Return(true).
40+
MinTimes(0)
41+
42+
_ = sentry.Init(sentry.ClientOptions{
43+
Transport: transportMock,
44+
})
45+
}
46+
47+
func (s *TestRequestLoggerSuite) TearDownTest() {
48+
s.ctrl.Finish()
49+
}
50+
51+
func (s *TestRequestLoggerSuite) wrapHandler(handler http.HandlerFunc) http.Handler {
52+
return RequestLogger(s.logger)(handler)
53+
}
54+
55+
func (s *TestRequestLoggerSuite) TestShouldGenerateRequestID() {
56+
requestID := "<not valid>"
57+
wrappedHandler := s.wrapHandler(func(w http.ResponseWriter, r *http.Request) {
58+
requestID = RequestID(r.Context())
59+
})
60+
61+
req := httptest.NewRequest("GET", "http://example.com/foo", nil)
62+
w := httptest.NewRecorder()
63+
wrappedHandler.ServeHTTP(w, req)
64+
65+
s.EqualValues(w.Header().Get("X-Request-Id"), requestID)
66+
}
67+
68+
func (s *TestRequestLoggerSuite) TestShouldUserRequestIDFromHeader() {
69+
wrappedHandler := s.wrapHandler(func(w http.ResponseWriter, r *http.Request) {
70+
s.EqualValues(`request_id_in_header`, RequestID(r.Context()))
71+
})
72+
73+
req := httptest.NewRequest("GET", "http://example.com/foo", nil)
74+
req.Header.Add("X-Request-Id", `request_id_in_header`)
75+
w := httptest.NewRecorder()
76+
77+
wrappedHandler.ServeHTTP(w, req)
78+
}
79+
80+
func (s *TestRequestLoggerSuite) TestLoggerShouldSendEventToSentryAndReturnEventID() {
81+
s.logger = zap.New(NewSentryCoreWrapper(zapcore.NewNopCore(), sentry.CurrentHub()))
82+
83+
eventID := sentry.EventID("<not valid>")
84+
s.sendEventMock.Do(func(event *sentry.Event) {
85+
eventID = event.EventID
86+
})
87+
88+
wrappedHandler := s.wrapHandler(func(w http.ResponseWriter, r *http.Request) {
89+
Ctx(r.Context()).Error("test error")
90+
})
91+
92+
req := httptest.NewRequest("GET", "http://example.com/foo", nil)
93+
w := httptest.NewRecorder()
94+
95+
wrappedHandler.ServeHTTP(w, req)
96+
s.EqualValues(w.Header().Get("X-Sentry-Id"), eventID)
97+
}
98+
99+
func TestRequestLogger(t *testing.T) {
100+
suite.Run(t, new(TestRequestLoggerSuite))
101+
}

0 commit comments

Comments
 (0)