Skip to content

Commit 124d940

Browse files
committed
[propagator] Add injection integration test.
1 parent a30f351 commit 124d940

File tree

3 files changed

+126
-2
lines changed

3 files changed

+126
-2
lines changed

propagators/jaeger/jaeger_data_test.go

+68-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ package jaeger_test
1616

1717
import (
1818
"fmt"
19-
2019
"go.opentelemetry.io/otel/api/trace"
2120
)
2221

@@ -193,3 +192,71 @@ var invalidExtractHeaders = []extractTest{
193192
},
194193
},
195194
}
195+
196+
type injectTest struct {
197+
name string
198+
sc trace.SpanContext
199+
wantHeaders map[string]string
200+
}
201+
202+
var injectHeaders = []injectTest{
203+
{
204+
name: "sampled",
205+
sc: trace.SpanContext{
206+
TraceID: traceID,
207+
SpanID: spanID,
208+
TraceFlags: trace.FlagsSampled,
209+
},
210+
wantHeaders: map[string]string{
211+
jaegerHeader: fmt.Sprintf("%s:%s:0:1", traceID32Str, spanIDStr),
212+
},
213+
},
214+
{
215+
name: "debug",
216+
sc: trace.SpanContext{
217+
TraceID: traceID,
218+
SpanID: spanID,
219+
TraceFlags: trace.FlagsSampled | trace.FlagsDebug,
220+
},
221+
wantHeaders: map[string]string{
222+
jaegerHeader: fmt.Sprintf("%s:%s:0:3", traceID32Str, spanIDStr),
223+
},
224+
},
225+
{
226+
name: "not sampled",
227+
sc: trace.SpanContext{
228+
TraceID: traceID,
229+
SpanID: spanID,
230+
},
231+
wantHeaders: map[string]string{
232+
jaegerHeader: fmt.Sprintf("%s:%s:0:0", traceID32Str, spanIDStr),
233+
},
234+
},
235+
}
236+
237+
var invalidInjectHeaders = []injectTest{
238+
{
239+
name: "empty",
240+
sc: trace.SpanContext{},
241+
},
242+
{
243+
name: "missing traceID",
244+
sc: trace.SpanContext{
245+
SpanID: spanID,
246+
TraceFlags: trace.FlagsSampled,
247+
},
248+
},
249+
{
250+
name: "missing spanID",
251+
sc: trace.SpanContext{
252+
TraceID: traceID,
253+
TraceFlags: trace.FlagsSampled,
254+
},
255+
},
256+
{
257+
name: "missing both traceID and spanID",
258+
sc: trace.SpanContext{
259+
TraceFlags: trace.FlagsSampled,
260+
},
261+
},
262+
}

propagators/jaeger/jaeger_integration_test.go

+55
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,17 @@ import (
2121

2222
"github.com/google/go-cmp/cmp"
2323

24+
mocktracer "go.opentelemetry.io/contrib/internal/trace"
2425
"go.opentelemetry.io/contrib/propagators/jaeger"
2526
"go.opentelemetry.io/otel/api/propagation"
2627
"go.opentelemetry.io/otel/api/trace"
2728
)
2829

30+
var (
31+
mockTracer = mocktracer.NewTracer("")
32+
_, mockSpan = mockTracer.Start(context.Background(), "")
33+
)
34+
2935
func TestExtractJaeger(t *testing.T) {
3036
testGroup := []struct {
3137
name string
@@ -62,3 +68,52 @@ func TestExtractJaeger(t *testing.T) {
6268
}
6369
}
6470
}
71+
72+
type testSpan struct {
73+
trace.Span
74+
sc trace.SpanContext
75+
}
76+
77+
func (s testSpan) SpanContext() trace.SpanContext {
78+
return s.sc
79+
}
80+
81+
func TestInjectJaeger(t *testing.T) {
82+
testGroup := []struct {
83+
name string
84+
testcases []injectTest
85+
}{
86+
{
87+
name: "valid test case",
88+
testcases: injectHeaders,
89+
},
90+
{
91+
name: "invalid test case",
92+
testcases: invalidInjectHeaders,
93+
},
94+
}
95+
96+
for _, tg := range testGroup {
97+
for _, tc := range tg.testcases {
98+
propagator := jaeger.Jaeger{}
99+
t.Run(tc.name, func(t *testing.T) {
100+
req, _ := http.NewRequest("GET", "http://example.com", nil)
101+
ctx := trace.ContextWithSpan(
102+
context.Background(),
103+
testSpan{
104+
Span: mockSpan,
105+
sc: tc.sc,
106+
},
107+
)
108+
propagator.Inject(ctx, req.Header)
109+
110+
for h, v := range tc.wantHeaders {
111+
result, want := req.Header.Get(h), v
112+
if diff := cmp.Diff(result, want); diff != "" {
113+
t.Errorf("%s: %s, header=%s: -got +want %s", tg.name, tc.name, h, diff)
114+
}
115+
}
116+
})
117+
}
118+
}
119+
}

propagators/jaeger/jaeger_propagator.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ func (jaeger Jaeger) Inject(ctx context.Context, supplier propagation.HTTPSuppli
7373
headers = append(headers, fmt.Sprintf("%x", flagsNotSampled))
7474
}
7575

76-
supplier.Set(jaegerHeader, strings.Join(headers, separator))
76+
if len(headers) == 4 {
77+
supplier.Set(jaegerHeader, strings.Join(headers, separator))
78+
}
7779
}
7880

7981
func (jaeger Jaeger) Extract(ctx context.Context, supplier propagation.HTTPSupplier) context.Context {

0 commit comments

Comments
 (0)