1
1
// Copyright The OpenTelemetry Authors
2
2
// SPDX-License-Identifier: Apache-2.0
3
3
4
- package opentracing
4
+ package opentracing // import "go.opentelemetry.io/otel/bridge/opentracing"
5
5
6
6
import (
7
7
"context"
8
8
"math/rand"
9
- "net"
10
9
"reflect"
11
10
"sync"
12
- "testing"
13
11
"time"
14
12
15
- otgrpc "github.com/opentracing-contrib/go-grpc"
16
- testpb "github.com/opentracing-contrib/go-grpc/test/otgrpc_testing"
17
- ot "github.com/opentracing/opentracing-go"
18
- "github.com/stretchr/testify/assert"
19
- "github.com/stretchr/testify/require"
20
- "google.golang.org/grpc"
21
- "google.golang.org/grpc/credentials/insecure"
22
-
23
13
"go.opentelemetry.io/otel/attribute"
24
14
"go.opentelemetry.io/otel/bridge/opentracing/migration"
25
15
"go.opentelemetry.io/otel/codes"
26
- "go.opentelemetry.io/otel/propagation"
27
16
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
28
17
"go.opentelemetry.io/otel/trace"
29
18
"go.opentelemetry.io/otel/trace/embedded"
30
19
"go.opentelemetry.io/otel/trace/noop"
31
20
)
32
21
33
- type testGRPCServer struct {}
34
-
22
+ //nolint:revive // ignoring missing comments for unexported global variables in an internal package.
35
23
var (
36
24
statusCodeKey = attribute .Key ("status.code" )
37
25
statusMessageKey = attribute .Key ("status.message" )
@@ -57,6 +45,11 @@ type mockTracer struct {
57
45
rand * rand.Rand
58
46
}
59
47
48
+ var (
49
+ _ trace.Tracer = & mockTracer {}
50
+ _ migration.DeferredContextSetupTracerExtension = & mockTracer {}
51
+ )
52
+
60
53
func newMockTracer () * mockTracer {
61
54
return & mockTracer {
62
55
FinishedSpans : nil ,
@@ -203,6 +196,11 @@ type mockSpan struct {
203
196
Links []mockLink
204
197
}
205
198
199
+ var (
200
+ _ trace.Span = & mockSpan {}
201
+ _ migration.OverrideTracerSpanExtension = & mockSpan {}
202
+ )
203
+
206
204
func (s * mockSpan ) SpanContext () trace.SpanContext {
207
205
return s .spanContext
208
206
}
@@ -304,68 +302,3 @@ func (s *mockSpan) OverrideTracer(tracer trace.Tracer) {
304
302
}
305
303
306
304
func (s * mockSpan ) TracerProvider () trace.TracerProvider { return noop .NewTracerProvider () }
307
-
308
- func (* testGRPCServer ) UnaryCall (ctx context.Context , r * testpb.SimpleRequest ) (* testpb.SimpleResponse , error ) {
309
- return & testpb.SimpleResponse {Payload : r .Payload * 2 }, nil
310
- }
311
-
312
- func (* testGRPCServer ) StreamingOutputCall (* testpb.SimpleRequest , testpb.TestService_StreamingOutputCallServer ) error {
313
- return nil
314
- }
315
-
316
- func (* testGRPCServer ) StreamingInputCall (testpb.TestService_StreamingInputCallServer ) error {
317
- return nil
318
- }
319
-
320
- func (* testGRPCServer ) StreamingBidirectionalCall (testpb.TestService_StreamingBidirectionalCallServer ) error {
321
- return nil
322
- }
323
-
324
- func startTestGRPCServer (t * testing.T , tracer ot.Tracer ) (* grpc.Server , net.Addr ) {
325
- lis , _ := net .Listen ("tcp" , ":0" )
326
- server := grpc .NewServer (
327
- grpc .UnaryInterceptor (otgrpc .OpenTracingServerInterceptor (tracer )),
328
- )
329
- testpb .RegisterTestServiceServer (server , & testGRPCServer {})
330
-
331
- go func () {
332
- err := server .Serve (lis )
333
- require .NoError (t , err )
334
- }()
335
-
336
- return server , lis .Addr ()
337
- }
338
-
339
- func TestBridgeTracer_ExtractAndInject_gRPC (t * testing.T ) {
340
- tracer := newMockTracer ()
341
- bridge := NewBridgeTracer ()
342
- bridge .SetOpenTelemetryTracer (tracer )
343
- bridge .SetTextMapPropagator (propagation.TraceContext {})
344
-
345
- srv , addr := startTestGRPCServer (t , bridge )
346
- defer srv .Stop ()
347
-
348
- conn , err := grpc .NewClient (
349
- addr .String (),
350
- grpc .WithTransportCredentials (insecure .NewCredentials ()),
351
- grpc .WithUnaryInterceptor (otgrpc .OpenTracingClientInterceptor (bridge )),
352
- )
353
- require .NoError (t , err )
354
- cli := testpb .NewTestServiceClient (conn )
355
-
356
- ctx , cx := context .WithTimeout (context .Background (), 10 * time .Second )
357
- defer cx ()
358
- res , err := cli .UnaryCall (ctx , & testpb.SimpleRequest {Payload : 42 })
359
- require .NoError (t , err )
360
- assert .EqualValues (t , 84 , res .Payload )
361
-
362
- checkSpans := func () bool {
363
- return len (tracer .FinishedSpans ) == 2
364
- }
365
- require .Eventuallyf (t , checkSpans , 5 * time .Second , 5 * time .Millisecond , "expecting two spans" )
366
- assert .Equal (t ,
367
- tracer .FinishedSpans [0 ].SpanContext ().TraceID (),
368
- tracer .FinishedSpans [1 ].SpanContext ().TraceID (),
369
- "expecting same trace ID" ,
370
- )
371
- }
0 commit comments