Skip to content

Commit 79b3ad8

Browse files
authored
Fix incorrect parsing of a single b3 header (#190)
gh-189
1 parent 0b3ebdb commit 79b3ad8

File tree

2 files changed

+18
-25
lines changed

2 files changed

+18
-25
lines changed

propagation/b3/spancontext.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ func ParseSingleHeader(contextHeader string) (*model.SpanContext, error) {
120120
pos = 16
121121
}
122122

123-
low, err := strconv.ParseUint(contextHeader[pos+1:pos+16], 16, 64)
123+
low, err := strconv.ParseUint(contextHeader[pos:pos+16], 16, 64)
124124
if err != nil {
125125
return nil, ErrInvalidTraceIDValue
126126
}

propagation/b3/spancontext_test.go

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,19 @@ import (
2121
)
2222

2323
func TestParseHeaderSuccess(t *testing.T) {
24-
trueVal := true
25-
falseVal := false
26-
ParentIDVal := model.ID(456)
27-
2824
testCases := []struct {
2925
header string
3026
expectedContext *model.SpanContext
3127
expectedErr error
3228
}{
3329
{"d", &model.SpanContext{Debug: true}, nil},
34-
{"1", &model.SpanContext{Sampled: &trueVal}, nil},
30+
{"1", &model.SpanContext{Sampled: pointerBool(true)}, nil},
3531
{"000000000000007b00000000000001c8-000000000000007b", &model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123)}, nil},
36-
{"000000000000007b00000000000001c8-000000000000007b-0", &model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123), Sampled: &falseVal}, nil},
37-
{
38-
"000000000000007b00000000000001c8-000000000000007b-1-00000000000001c8",
39-
&model.SpanContext{
40-
TraceID: model.TraceID{High: 123, Low: 456},
41-
ID: model.ID(123),
42-
ParentID: &ParentIDVal,
43-
Sampled: &trueVal,
44-
},
45-
nil,
46-
},
32+
{"000000000000007b00000000000001c8-000000000000007b-0", &model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123), Sampled: pointerBool(false)}, nil},
33+
{"000000000000007b00000000000001c8-000000000000007b-1-00000000000001c8", &model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123), ParentID: pointerID(model.ID(456)), Sampled: pointerBool(true)}, nil},
4734
{"", nil, ErrEmptyContext},
35+
{"80f198ee56343ba864fe8b2a57d3eff7-e457b5a2e4d86bd1-1-05e3ac9a4f6e3b90", &model.SpanContext{TraceID: model.TraceID{High: 9291375655657946024, Low: 7277407061855694839}, ID: model.ID(16453819474850114513), ParentID: pointerID(model.ID(424372568660523920)), Sampled: pointerBool(true)}, nil},
36+
{"d4c3c787ce202dc5-77c6a763a5a72544-0-6a3211d95bed2c99", &model.SpanContext{TraceID: model.TraceID{High: 0, Low: 15331316942592028101}, ID: model.ID(8630769782324929860), ParentID: pointerID(model.ID(7652198342103739545)), Sampled: pointerBool(false)}, nil},
4837
}
4938

5039
for _, testCase := range testCases {
@@ -95,24 +84,20 @@ func TestParseHeaderFails(t *testing.T) {
9584
}
9685

9786
func TestBuildHeader(t *testing.T) {
98-
trueVal := true
99-
falseVal := false
100-
ParentIDVal := model.ID(456)
101-
10287
testCases := []struct {
10388
context model.SpanContext
10489
expectedHeader string
10590
}{
10691
{model.SpanContext{ID: model.ID(123)}, ""},
10792
{model.SpanContext{Debug: true}, "d"},
108-
{model.SpanContext{Sampled: &trueVal}, "1"},
93+
{model.SpanContext{Sampled: pointerBool(true)}, "1"},
10994
{model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123)}, "000000000000007b00000000000001c8-000000000000007b"},
110-
{model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123), Sampled: &falseVal}, "000000000000007b00000000000001c8-000000000000007b-0"},
95+
{model.SpanContext{TraceID: model.TraceID{High: 123, Low: 456}, ID: model.ID(123), Sampled: pointerBool(false)}, "000000000000007b00000000000001c8-000000000000007b-0"},
11196
{model.SpanContext{
11297
TraceID: model.TraceID{High: 123, Low: 456},
11398
ID: model.ID(123),
114-
ParentID: &ParentIDVal,
115-
Sampled: &falseVal,
99+
ParentID: pointerID(model.ID(456)),
100+
Sampled: pointerBool(false),
116101
}, "000000000000007b00000000000001c8-000000000000007b-0-00000000000001c8"},
117102
}
118103

@@ -123,3 +108,11 @@ func TestBuildHeader(t *testing.T) {
123108
}
124109
}
125110
}
111+
112+
func pointerID(value model.ID) *model.ID {
113+
return &value
114+
}
115+
116+
func pointerBool(value bool) *bool {
117+
return &value
118+
}

0 commit comments

Comments
 (0)