1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-02-03 13:11:53 +02:00

bugfix: fix baggage set member failed (#3165)

* fix baggage set member failed

* add unittest

* fix unittest

* rewrite unittest code
This commit is contained in:
Chester Cheung 2022-09-18 03:54:12 +08:00 committed by GitHub
parent e1a1f07e44
commit 30fcf786c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 73 additions and 1 deletions

View File

@ -465,6 +465,7 @@ func (b Baggage) Member(key string) Member {
key: key,
value: v.Value,
properties: fromInternalProperties(v.Properties),
hasData: true,
}
}
@ -484,6 +485,7 @@ func (b Baggage) Members() []Member {
key: k,
value: v.Value,
properties: fromInternalProperties(v.Properties),
hasData: true,
})
}
return members

View File

@ -589,6 +589,74 @@ func TestBaggageSetMember(t *testing.T) {
assert.Equal(t, 2, len(b4.list))
}
func TestBaggageSetFalseMember(t *testing.T) {
b0 := Baggage{}
key := "k"
m := Member{key: key, hasData: false}
b1, err := b0.SetMember(m)
assert.Error(t, err)
assert.NotContains(t, b0.list, key)
assert.Equal(t, baggage.Item{}, b1.list[key])
assert.Equal(t, 0, len(b0.list))
assert.Equal(t, 0, len(b1.list))
m.value = "v"
b2, err := b1.SetMember(m)
assert.Error(t, err)
assert.Equal(t, baggage.Item{}, b1.list[key])
assert.Equal(t, baggage.Item{Value: ""}, b2.list[key])
assert.Equal(t, 0, len(b1.list))
assert.Equal(t, 0, len(b2.list))
}
func TestBaggageSetFalseMembers(t *testing.T) {
b0 := Baggage{}
key := "k"
m := Member{key: key, hasData: true}
b1, err := b0.SetMember(m)
assert.NoError(t, err)
assert.NotContains(t, b0.list, key)
assert.Equal(t, baggage.Item{}, b1.list[key])
assert.Equal(t, 0, len(b0.list))
assert.Equal(t, 1, len(b1.list))
m.value = "v"
b2, err := b1.SetMember(m)
assert.NoError(t, err)
assert.Equal(t, baggage.Item{}, b1.list[key])
assert.Equal(t, baggage.Item{Value: "v"}, b2.list[key])
assert.Equal(t, 1, len(b1.list))
assert.Equal(t, 1, len(b2.list))
p := properties{{key: "p", hasData: false}}
m.properties = p
b3, err := b2.SetMember(m)
assert.NoError(t, err)
assert.Equal(t, baggage.Item{Value: "v"}, b2.list[key])
assert.Equal(t, baggage.Item{Value: "v", Properties: []baggage.Property{{Key: "p"}}}, b3.list[key])
assert.Equal(t, 1, len(b2.list))
assert.Equal(t, 1, len(b3.list))
// The returned baggage needs to be immutable and should use a copy of the
// properties slice.
p[0] = Property{key: "different", hasData: false}
assert.Equal(t, baggage.Item{Value: "v", Properties: []baggage.Property{{Key: "p"}}}, b3.list[key])
// Reset for below.
p[0] = Property{key: "p", hasData: false}
m = Member{key: "another", hasData: false}
b4, err := b3.SetMember(m)
assert.Error(t, err)
assert.Equal(t, baggage.Item{Value: "v", Properties: []baggage.Property{{Key: "p"}}}, b3.list[key])
assert.NotContains(t, b3.list, m.key)
assert.Equal(t, baggage.Item{Value: "v", Properties: []baggage.Property{{Key: "p"}}}, b4.list[key])
assert.Equal(t, baggage.Item{}, b4.list[m.key])
assert.Equal(t, 1, len(b3.list))
assert.Equal(t, 1, len(b4.list))
}
func TestNilBaggageMembers(t *testing.T) {
assert.Nil(t, Baggage{}.Members())
}
@ -602,6 +670,7 @@ func TestBaggageMembers(t *testing.T) {
{key: "state", value: "on", hasValue: true},
{key: "red"},
},
hasData: true,
},
{
key: "bar",
@ -609,6 +678,7 @@ func TestBaggageMembers(t *testing.T) {
properties: properties{
{key: "yellow"},
},
hasData: true,
},
}
@ -631,7 +701,7 @@ func TestBaggageMembers(t *testing.T) {
func TestBaggageMember(t *testing.T) {
bag := Baggage{list: baggage.List{"foo": {Value: "1"}}}
assert.Equal(t, Member{key: "foo", value: "1"}, bag.Member("foo"))
assert.Equal(t, Member{key: "foo", value: "1", hasData: true}, bag.Member("foo"))
assert.Equal(t, Member{}, bag.Member("bar"))
}