@@ -33,14 +33,31 @@ var (
33
33
spanID = uint64 (0x00f067aa0ba902b7 )
34
34
)
35
35
36
- func TestExtractTraceContextFromHTTPReq (t * testing.T ) {
36
+ func TestExtractValidTraceContextFromHTTPReq (t * testing.T ) {
37
37
trace .SetGlobalTracer (& mocktrace.MockTracer {})
38
38
propagator := propagation .HttpTraceContextPropagator ()
39
39
tests := []struct {
40
40
name string
41
41
header string
42
42
wantSc core.SpanContext
43
43
}{
44
+ {
45
+ name : "valid header" ,
46
+ header : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00" ,
47
+ wantSc : core.SpanContext {
48
+ TraceID : traceID ,
49
+ SpanID : spanID ,
50
+ },
51
+ },
52
+ {
53
+ name : "valid header and sampled" ,
54
+ header : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" ,
55
+ wantSc : core.SpanContext {
56
+ TraceID : traceID ,
57
+ SpanID : spanID ,
58
+ TraceOptions : core .TraceOptionSampled ,
59
+ },
60
+ },
44
61
{
45
62
name : "future version" ,
46
63
header : "02-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" ,
@@ -51,28 +68,118 @@ func TestExtractTraceContextFromHTTPReq(t *testing.T) {
51
68
},
52
69
},
53
70
{
54
- name : "zero trace ID and span ID" ,
55
- header : "00-00000000000000000000000000000000-0000000000000000-01" ,
56
- wantSc : core .EmptySpanContext (),
71
+ name : "future options with sampled bit set" ,
72
+ header : "02-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-09" ,
73
+ wantSc : core.SpanContext {
74
+ TraceID : traceID ,
75
+ SpanID : spanID ,
76
+ TraceOptions : core .TraceOptionSampled ,
77
+ },
57
78
},
58
79
{
59
- name : "valid header" ,
60
- header : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" ,
80
+ name : "future options with sampled bit cleared" ,
81
+ header : "02-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-08" ,
82
+ wantSc : core.SpanContext {
83
+ TraceID : traceID ,
84
+ SpanID : spanID ,
85
+ },
86
+ },
87
+ {
88
+ name : "future additional data" ,
89
+ header : "02-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-09-XYZxsf09" ,
61
90
wantSc : core.SpanContext {
62
91
TraceID : traceID ,
63
92
SpanID : spanID ,
64
93
TraceOptions : core .TraceOptionSampled ,
65
94
},
66
95
},
96
+ }
97
+
98
+ for _ , tt := range tests {
99
+ t .Run (tt .name , func (t * testing.T ) {
100
+ req , _ := http .NewRequest ("GET" , "http://example.com" , nil )
101
+ req .Header .Set ("traceparent" , tt .header )
102
+
103
+ ctx := context .Background ()
104
+ gotSc := propagator .Extract (ctx , req .Header )
105
+ if diff := cmp .Diff (gotSc , tt .wantSc ); diff != "" {
106
+ t .Errorf ("Extract Tracecontext: %s: -got +want %s" , tt .name , diff )
107
+ }
108
+ })
109
+ }
110
+ }
111
+
112
+ func TestExtractInvalidTraceContextFromHTTPReq (t * testing.T ) {
113
+ trace .SetGlobalTracer (& mocktrace.MockTracer {})
114
+ propagator := propagation .HttpTraceContextPropagator ()
115
+ wantSc := core .EmptySpanContext ()
116
+ tests := []struct {
117
+ name string
118
+ header string
119
+ }{
120
+ {
121
+ name : "wrong version length" ,
122
+ header : "0000-00000000000000000000000000000000-0000000000000000-01" ,
123
+ },
124
+ {
125
+ name : "wrong trace ID length" ,
126
+ header : "00-ab00000000000000000000000000000000-cd00000000000000-01" ,
127
+ },
128
+ {
129
+ name : "wrong span ID length" ,
130
+ header : "00-ab000000000000000000000000000000-cd0000000000000000-01" ,
131
+ },
132
+ {
133
+ name : "wrong trace flag length" ,
134
+ header : "00-ab000000000000000000000000000000-cd00000000000000-0100" ,
135
+ },
136
+ {
137
+ name : "bogus version length" ,
138
+ header : "qw-00000000000000000000000000000000-0000000000000000-01" ,
139
+ },
140
+ {
141
+ name : "bogus trace ID length" ,
142
+ header : "00-qw000000000000000000000000000000-cd00000000000000-01" ,
143
+ },
144
+ {
145
+ name : "bogus span ID length" ,
146
+ header : "00-ab000000000000000000000000000000-qw00000000000000-01" ,
147
+ },
148
+ {
149
+ name : "bogus trace flag length" ,
150
+ header : "00-ab000000000000000000000000000000-cd00000000000000-qw" ,
151
+ },
152
+ {
153
+ name : "upper case version length" ,
154
+ header : "A0-00000000000000000000000000000000-0000000000000000-01" ,
155
+ },
156
+ {
157
+ name : "upper case trace ID length" ,
158
+ header : "00-AB000000000000000000000000000000-cd00000000000000-01" ,
159
+ },
160
+ {
161
+ name : "upper case span ID length" ,
162
+ header : "00-ab000000000000000000000000000000-CD00000000000000-01" ,
163
+ },
164
+ {
165
+ name : "upper case trace flag length" ,
166
+ header : "00-ab000000000000000000000000000000-cd00000000000000-A1" ,
167
+ },
168
+ {
169
+ name : "zero trace ID and span ID" ,
170
+ header : "00-00000000000000000000000000000000-0000000000000000-01" ,
171
+ },
172
+ {
173
+ name : "trace-flag unused bits set" ,
174
+ header : "00-ab000000000000000000000000000000-cd00000000000000-09" ,
175
+ },
67
176
{
68
177
name : "missing options" ,
69
178
header : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7" ,
70
- wantSc : core .EmptySpanContext (),
71
179
},
72
180
{
73
181
name : "empty options" ,
74
182
header : "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-" ,
75
- wantSc : core .EmptySpanContext (),
76
183
},
77
184
}
78
185
@@ -83,7 +190,7 @@ func TestExtractTraceContextFromHTTPReq(t *testing.T) {
83
190
84
191
ctx := context .Background ()
85
192
gotSc := propagator .Extract (ctx , req .Header )
86
- if diff := cmp .Diff (gotSc , tt . wantSc ); diff != "" {
193
+ if diff := cmp .Diff (gotSc , wantSc ); diff != "" {
87
194
t .Errorf ("Extract Tracecontext: %s: -got +want %s" , tt .name , diff )
88
195
}
89
196
})
@@ -149,4 +256,4 @@ func TestHttpTraceContextPropagator_GetAllKeys(t *testing.T) {
149
256
if diff := cmp .Diff (got , want ); diff != "" {
150
257
t .Errorf ("GetAllKeys: -got +want %s" , diff )
151
258
}
152
- }
259
+ }
0 commit comments