Skip to content
File

Blob: cmd/server/sentry_test.go

go58 lines
1package server
2 
3import (
4 "context"
5 "errors"
6 "testing"
7 "time"
8 
9 "github.com/TheZeroSlave/zapsentry"
10 "github.com/getsentry/sentry-go"
11 "github.com/stretchr/testify/require"
12 "go.uber.org/zap"
13)
14 
15type recordingSentryTransport struct {
16 events []*sentry.Event
17}
18 
19func (t *recordingSentryTransport) Configure(sentry.ClientOptions) {}
20func (t *recordingSentryTransport) Flush(time.Duration) bool { return true }
21func (t *recordingSentryTransport) FlushWithContext(context.Context) bool {
22 return true
23}
24func (t *recordingSentryTransport) Close() {}
25func (t *recordingSentryTransport) SendEvent(event *sentry.Event) {
26 t.events = append(t.events, event)
27}
28 
29func TestSentryLoggerPreservesEventsAndBreadcrumbs(t *testing.T) {
30 transport := &recordingSentryTransport{}
31 client, err := sentry.NewClient(sentry.ClientOptions{
32 Dsn: "https://public@example.com/1",
33 Release: "test-release",
34 Transport: transport,
35 })
36 require.NoError(t, err)
37 t.Cleanup(client.Close)
38 
39 logger := modifyToSentryLogger(zap.NewNop(), client).With(zapsentry.NewScope())
40 logger.Info("connected")
41 logger.Warn("retrying", zap.String("peer", "test-peer"))
42 logger.Error("disconnected", zap.Error(errors.New("connection lost")))
43 require.NoError(t, logger.Sync())
44 
45 require.Len(t, transport.events, 2, "info logs should only become breadcrumbs")
46 warning, failure := transport.events[0], transport.events[1]
47 require.Equal(t, sentry.LevelWarning, warning.Level)
48 require.Equal(t, "retrying", warning.Message)
49 require.Equal(t, "test-release", warning.Release)
50 require.Equal(t, "test-peer", warning.Contexts["Extra"]["peer"])
51 require.NotEmpty(t, warning.Breadcrumbs)
52 require.Equal(t, "connected", warning.Breadcrumbs[0].Message)
53 require.Equal(t, sentry.LevelError, failure.Level)
54 require.Equal(t, "disconnected", failure.Message)
55 require.Len(t, failure.Exception, 1)
56 require.Equal(t, "connection lost", failure.Exception[0].Value)
57}