Skip to content

Commit f23d22a

Browse files
committed
test: cover new instrumenter client option
1 parent c085e2b commit f23d22a

File tree

3 files changed

+111
-26
lines changed

3 files changed

+111
-26
lines changed

client_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/google/go-cmp/cmp"
1414
"github.com/google/go-cmp/cmp/cmpopts"
1515
pkgErrors "github.com/pkg/errors"
16+
"github.com/stretchr/testify/assert"
1617
"github.com/stretchr/testify/require"
1718
)
1819

@@ -841,3 +842,16 @@ func TestClientSetsUpTransport(t *testing.T) {
841842
client, _ = NewClient(ClientOptions{})
842843
require.IsType(t, &noopTransport{}, client.Transport)
843844
}
845+
846+
func TestClientSetupInstrumenter(t *testing.T) {
847+
client, err := NewClient(ClientOptions{Dsn: ""})
848+
require.NoError(t, err)
849+
assert.Equal(t, "sentry", client.Options().Instrumenter)
850+
851+
_, err = NewClient(ClientOptions{Dsn: "", Instrumenter: "foo"})
852+
require.Error(t, err)
853+
854+
client, err = NewClient(ClientOptions{Dsn: "", Instrumenter: "otel"})
855+
require.NoError(t, err)
856+
assert.Equal(t, "otel", client.Options().Instrumenter)
857+
}

gin/sentrygin_test.go

+40-26
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,20 @@ import (
1616
"github.com/gin-gonic/gin"
1717
"github.com/google/go-cmp/cmp"
1818
"github.com/google/go-cmp/cmp/cmpopts"
19+
"github.com/stretchr/testify/require"
1920
)
2021

2122
func TestIntegration(t *testing.T) {
2223
largePayload := strings.Repeat("Large", 3*1024) // 15 KB
2324

2425
tests := []struct {
25-
RequestPath string
26-
RoutePath string
27-
Method string
28-
WantStatus int
29-
Body string
30-
Handler gin.HandlerFunc
26+
RequestPath string
27+
RoutePath string
28+
Method string
29+
WantStatus int
30+
Body string
31+
Handler gin.HandlerFunc
32+
Instrumenter string
3133

3234
WantEvent *sentry.Event
3335
WantTransaction *sentry.Event
@@ -284,25 +286,20 @@ func TestIntegration(t *testing.T) {
284286
},
285287
WantEvent: nil,
286288
},
289+
{
290+
RequestPath: "/404/1",
291+
RoutePath: "/otel",
292+
Method: "GET",
293+
Instrumenter: "otel",
294+
WantStatus: 404,
295+
Handler: nil,
296+
WantTransaction: nil,
297+
WantEvent: nil,
298+
},
287299
}
288300

289301
eventsCh := make(chan *sentry.Event, len(tests))
290302
transactionsCh := make(chan *sentry.Event, len(tests))
291-
err := sentry.Init(sentry.ClientOptions{
292-
EnableTracing: true,
293-
TracesSampleRate: 1.0,
294-
BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event {
295-
eventsCh <- event
296-
return event
297-
},
298-
BeforeSendTransaction: func(tx *sentry.Event, hint *sentry.EventHint) *sentry.Event {
299-
transactionsCh <- tx
300-
return tx
301-
},
302-
})
303-
if err != nil {
304-
t.Fatal(err)
305-
}
306303

307304
router := gin.New()
308305
router.Use(sentrygin.New(sentrygin.Options{}))
@@ -321,17 +318,34 @@ func TestIntegration(t *testing.T) {
321318
var wanttrans []*sentry.Event
322319
var wantCodes []sentry.SpanStatus
323320
for _, tt := range tests {
321+
err := sentry.Init(sentry.ClientOptions{
322+
EnableTracing: true,
323+
TracesSampleRate: 1.0,
324+
Instrumenter: tt.Instrumenter,
325+
BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event {
326+
eventsCh <- event
327+
return event
328+
},
329+
BeforeSendTransaction: func(tx *sentry.Event, hint *sentry.EventHint) *sentry.Event {
330+
transactionsCh <- tx
331+
return tx
332+
},
333+
})
334+
require.NoError(t, err)
335+
324336
if tt.WantEvent != nil && tt.WantEvent.Request != nil {
325337
wantRequest := tt.WantEvent.Request
326338
wantRequest.URL = srv.URL + wantRequest.URL
327339
wantRequest.Headers["Host"] = srv.Listener.Addr().String()
328340
want = append(want, tt.WantEvent)
329341
}
330-
wantTransaction := tt.WantTransaction.Request
331-
wantTransaction.URL = srv.URL + wantTransaction.URL
332-
wantTransaction.Headers["Host"] = srv.Listener.Addr().String()
333-
wanttrans = append(wanttrans, tt.WantTransaction)
334-
wantCodes = append(wantCodes, sentry.HTTPtoSpanStatus(tt.WantStatus))
342+
if tt.WantTransaction != nil {
343+
wantTransaction := tt.WantTransaction.Request
344+
wantTransaction.URL = srv.URL + wantTransaction.URL
345+
wantTransaction.Headers["Host"] = srv.Listener.Addr().String()
346+
wanttrans = append(wanttrans, tt.WantTransaction)
347+
wantCodes = append(wantCodes, sentry.HTTPtoSpanStatus(tt.WantStatus))
348+
}
335349

336350
req, err := http.NewRequest(tt.Method, srv.URL+tt.RequestPath, strings.NewReader(tt.Body))
337351
if err != nil {

http/sentryhttp_test.go

+57
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"github.com/getsentry/sentry-go/internal/testutils"
1515
"github.com/google/go-cmp/cmp"
1616
"github.com/google/go-cmp/cmp/cmpopts"
17+
"github.com/stretchr/testify/assert"
18+
"github.com/stretchr/testify/require"
1719
)
1820

1921
func TestIntegration(t *testing.T) {
@@ -222,3 +224,58 @@ func TestIntegration(t *testing.T) {
222224
t.Fatalf("Events mismatch (-want +got):\n%s", diff)
223225
}
224226
}
227+
228+
func TestInstrumenters(t *testing.T) {
229+
tests := []struct {
230+
instrumenter string
231+
expectedEvents int
232+
}{
233+
{
234+
instrumenter: "sentry",
235+
expectedEvents: 1,
236+
},
237+
{
238+
instrumenter: "otel",
239+
expectedEvents: 0,
240+
},
241+
}
242+
243+
for _, tt := range tests {
244+
t.Run(tt.instrumenter, func(t *testing.T) {
245+
sentEvents := make(map[string]struct{})
246+
err := sentry.Init(sentry.ClientOptions{
247+
Dsn: "http://[email protected]/123",
248+
Debug: true,
249+
EnableTracing: true,
250+
TracesSampleRate: 1.0,
251+
Instrumenter: tt.instrumenter,
252+
BeforeSendTransaction: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event {
253+
sentEvents[string(event.EventID)] = struct{}{}
254+
return event
255+
},
256+
})
257+
require.NoError(t, err)
258+
259+
sentryHandler := sentryhttp.New(sentryhttp.Options{})
260+
noopHandler := func(w http.ResponseWriter, r *http.Request) {}
261+
srv := httptest.NewServer(sentryHandler.HandleFunc(noopHandler))
262+
defer srv.Close()
263+
264+
c := srv.Client()
265+
c.Timeout = time.Second
266+
267+
req, err := http.NewRequest("GET", srv.URL, http.NoBody)
268+
require.NoError(t, err)
269+
270+
resp, err := c.Do(req)
271+
require.NoError(t, err)
272+
defer resp.Body.Close()
273+
274+
if ok := sentry.Flush(testutils.FlushTimeout()); !ok {
275+
t.Fatal("sentry.Flush timed out")
276+
}
277+
278+
assert.Equal(t, tt.expectedEvents, len(sentEvents), "wrong number of sent events")
279+
})
280+
}
281+
}

0 commit comments

Comments
 (0)