@@ -26,74 +26,91 @@ import (
2626// Taken from the W3C tests:
2727// https://github.com/w3c/trace-context/blob/dcd3ad9b7d6ac36f70ff3739874b73c11b0302a1/test/test_data.json
2828var testcases = []struct {
29+ name string
2930 in string
3031 tracestate TraceState
3132 out string
3233 err error
3334}{
3435 {
35- in : "foo=1,foo=1" ,
36- err : errDuplicate ,
36+ name : "duplicate with the same value" ,
37+ in : "foo=1,foo=1" ,
38+ err : errDuplicate ,
3739 },
3840 {
39- in : "foo=1,foo=2" ,
40- err : errDuplicate ,
41+ name : "duplicate with different values" ,
42+ in : "foo=1,foo=2" ,
43+ err : errDuplicate ,
4144 },
4245 {
43- in : "foo =1" ,
44- err : errInvalidMember ,
46+ name : "improperly formatted key/value pair" ,
47+ in : "foo =1" ,
48+ err : errInvalidMember ,
4549 },
4650 {
47- in : "FOO=1" ,
48- err : errInvalidMember ,
51+ name : "upper case key" ,
52+ in : "FOO=1" ,
53+ err : errInvalidMember ,
4954 },
5055 {
51- in : "foo.bar=1" ,
52- err : errInvalidMember ,
56+ name : "key with invalid character" ,
57+ in : "foo.bar=1" ,
58+ err : errInvalidMember ,
5359 },
5460 {
55- in : "foo@=1,bar=2" ,
56- err : errInvalidMember ,
61+ name : "multiple keys, one with empty tenant key" ,
62+ in : "foo@=1,bar=2" ,
63+ err : errInvalidMember ,
5764 },
5865 {
59- in : "@foo=1,bar=2" ,
60- err : errInvalidMember ,
66+ name : "multiple keys, one with only tenant" ,
67+ in : "@foo=1,bar=2" ,
68+ err : errInvalidMember ,
6169 },
6270 {
63- in : "foo@@bar=1,bar=2" ,
64- err : errInvalidMember ,
71+ name : "multiple keys, one with double tenant separator" ,
72+ in : "foo@@bar=1,bar=2" ,
73+ err : errInvalidMember ,
6574 },
6675 {
67- in : "foo@bar@baz=1,bar=2" ,
68- err : errInvalidMember ,
76+ name : "multiple keys, one with multiple tenants" ,
77+ in : "foo@bar@baz=1,bar=2" ,
78+ err : errInvalidMember ,
6979 },
7080 {
71- in : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
72- err : errInvalidMember ,
81+ name : "key too long" ,
82+ in : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
83+ err : errInvalidMember ,
7384 },
7485 {
75- in : "foo=1,tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@v=1" ,
76- err : errInvalidMember ,
86+ name : "key too long, with tenant" ,
87+ in : "foo=1,tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@v=1" ,
88+ err : errInvalidMember ,
7789 },
7890 {
79- in : "foo=1,t@vvvvvvvvvvvvvvv=1" ,
80- err : errInvalidMember ,
91+ name : "tenant too long" ,
92+ in : "foo=1,t@vvvvvvvvvvvvvvv=1" ,
93+ err : errInvalidMember ,
8194 },
8295 {
83- in : "foo=bar=baz" ,
84- err : errInvalidMember ,
96+ name : "multiple values for a single key" ,
97+ in : "foo=bar=baz" ,
98+ err : errInvalidMember ,
8599 },
86100 {
87- in : "foo=,bar=3" ,
88- err : errInvalidMember ,
101+ name : "no value" ,
102+ in : "foo=,bar=3" ,
103+ err : errInvalidMember ,
89104 },
90105 {
91- in : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32,bar33=33" ,
92- err : errMemberNumber ,
106+ name : "too many members" ,
107+ in : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32,bar33=33" ,
108+ err : errMemberNumber ,
93109 },
94110 {
95- in : "abcdefghijklmnopqrstuvwxyz0123456789_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
96- out : "abcdefghijklmnopqrstuvwxyz0123456789_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
111+ name : "valid key/value list" ,
112+ in : "abcdefghijklmnopqrstuvwxyz0123456789_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
113+ out : "abcdefghijklmnopqrstuvwxyz0123456789_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
97114 tracestate : TraceState {list : []member {
98115 {
99116 Key : "abcdefghijklmnopqrstuvwxyz0123456789_-*/" ,
@@ -102,8 +119,9 @@ var testcases = []struct {
102119 }},
103120 },
104121 {
105- in : "abcdefghijklmnopqrstuvwxyz0123456789_-*/@a-z0-9_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
106- out : "abcdefghijklmnopqrstuvwxyz0123456789_-*/@a-z0-9_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
122+ name : "valid key/value list with tenant" ,
123+ in : "abcdefghijklmnopqrstuvwxyz0123456789_-*/@a-z0-9_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
124+ out : "abcdefghijklmnopqrstuvwxyz0123456789_-*/@a-z0-9_-*/= !\" #$%&'()*+-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\ ]^_`abcdefghijklmnopqrstuvwxyz{|}~" ,
107125 tracestate : TraceState {list : []member {
108126 {
109127 Key : "abcdefghijklmnopqrstuvwxyz0123456789_-*/@a-z0-9_-*/" ,
@@ -112,35 +130,40 @@ var testcases = []struct {
112130 }},
113131 },
114132 {
133+ name : "empty input" ,
115134 // Empty input should result in no error and a zero value
116135 // TraceState being returned, that TraceState should be encoded as an
117136 // empty string.
118137 },
119138 {
120- in : "foo=1" ,
121- out : "foo=1" ,
139+ name : "single key and value" ,
140+ in : "foo=1" ,
141+ out : "foo=1" ,
122142 tracestate : TraceState {list : []member {
123143 {Key : "foo" , Value : "1" },
124144 }},
125145 },
126146 {
127- in : "foo=1," ,
128- out : "foo=1" ,
147+ name : "single key and value with empty separator" ,
148+ in : "foo=1," ,
149+ out : "foo=1" ,
129150 tracestate : TraceState {list : []member {
130151 {Key : "foo" , Value : "1" },
131152 }},
132153 },
133154 {
134- in : "foo=1,bar=2" ,
135- out : "foo=1,bar=2" ,
155+ name : "multiple keys and values" ,
156+ in : "foo=1,bar=2" ,
157+ out : "foo=1,bar=2" ,
136158 tracestate : TraceState {list : []member {
137159 {Key : "foo" , Value : "1" },
138160 {Key : "bar" , Value : "2" },
139161 }},
140162 },
141163 {
142- in : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
143- out : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
164+ name : "with a key at maximum length" ,
165+ in : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
166+ out : "foo=1,zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz=1" ,
144167 tracestate : TraceState {list : []member {
145168 {
146169 Key : "foo" ,
@@ -153,8 +176,9 @@ var testcases = []struct {
153176 }},
154177 },
155178 {
156- in : "foo=1,ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@vvvvvvvvvvvvvv=1" ,
157- out : "foo=1,ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@vvvvvvvvvvvvvv=1" ,
179+ name : "with a key and tenant at maximum length" ,
180+ in : "foo=1,ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@vvvvvvvvvvvvvv=1" ,
181+ out : "foo=1,ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt@vvvvvvvvvvvvvv=1" ,
158182 tracestate : TraceState {list : []member {
159183 {
160184 Key : "foo" ,
@@ -167,8 +191,9 @@ var testcases = []struct {
167191 }},
168192 },
169193 {
170- in : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32" ,
171- out : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32" ,
194+ name : "with maximum members" ,
195+ in : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32" ,
196+ out : "bar01=01,bar02=02,bar03=03,bar04=04,bar05=05,bar06=06,bar07=07,bar08=08,bar09=09,bar10=10,bar11=11,bar12=12,bar13=13,bar14=14,bar15=15,bar16=16,bar17=17,bar18=18,bar19=19,bar20=20,bar21=21,bar22=22,bar23=23,bar24=24,bar25=25,bar26=26,bar27=27,bar28=28,bar29=29,bar30=30,bar31=31,bar32=32" ,
172197 tracestate : TraceState {list : []member {
173198 {Key : "bar01" , Value : "01" },
174199 {Key : "bar02" , Value : "02" },
@@ -205,8 +230,9 @@ var testcases = []struct {
205230 }},
206231 },
207232 {
208- in : "foo=1,bar=2,rojo=1,congo=2,baz=3" ,
209- out : "foo=1,bar=2,rojo=1,congo=2,baz=3" ,
233+ name : "with several members" ,
234+ in : "foo=1,bar=2,rojo=1,congo=2,baz=3" ,
235+ out : "foo=1,bar=2,rojo=1,congo=2,baz=3" ,
210236 tracestate : TraceState {list : []member {
211237 {Key : "foo" , Value : "1" },
212238 {Key : "bar" , Value : "2" },
@@ -216,40 +242,45 @@ var testcases = []struct {
216242 }},
217243 },
218244 {
219- in : "foo=1 \t , \t bar=2, \t baz=3" ,
220- out : "foo=1,bar=2,baz=3" ,
245+ name : "with tabs between members" ,
246+ in : "foo=1 \t , \t bar=2, \t baz=3" ,
247+ out : "foo=1,bar=2,baz=3" ,
221248 tracestate : TraceState {list : []member {
222249 {Key : "foo" , Value : "1" },
223250 {Key : "bar" , Value : "2" },
224251 {Key : "baz" , Value : "3" },
225252 }},
226253 },
227254 {
228- in : "foo=1\t \t ,\t \t bar=2,\t \t baz=3" ,
229- out : "foo=1,bar=2,baz=3" ,
255+ name : "with multiple tabs between members" ,
256+ in : "foo=1\t \t ,\t \t bar=2,\t \t baz=3" ,
257+ out : "foo=1,bar=2,baz=3" ,
230258 tracestate : TraceState {list : []member {
231259 {Key : "foo" , Value : "1" },
232260 {Key : "bar" , Value : "2" },
233261 {Key : "baz" , Value : "3" },
234262 }},
235263 },
236264 {
237- in : "foo=1 " ,
238- out : "foo=1" ,
265+ name : "with space at the end of the member" ,
266+ in : "foo=1 " ,
267+ out : "foo=1" ,
239268 tracestate : TraceState {list : []member {
240269 {Key : "foo" , Value : "1" },
241270 }},
242271 },
243272 {
244- in : "foo=1\t " ,
245- out : "foo=1" ,
273+ name : "with tab at the end of the member" ,
274+ in : "foo=1\t " ,
275+ out : "foo=1" ,
246276 tracestate : TraceState {list : []member {
247277 {Key : "foo" , Value : "1" },
248278 }},
249279 },
250280 {
251- in : "foo=1 \t " ,
252- out : "foo=1" ,
281+ name : "with tab and space at the end of the member" ,
282+ in : "foo=1 \t " ,
283+ out : "foo=1" ,
253284 tracestate : TraceState {list : []member {
254285 {Key : "foo" , Value : "1" },
255286 }},
@@ -269,13 +300,15 @@ var maxMembers = func() TraceState {
269300
270301func TestParseTraceState (t * testing.T ) {
271302 for _ , tc := range testcases {
272- got , err := ParseTraceState (tc .in )
273- assert .Equal (t , tc .tracestate , got )
274- if tc .err != nil {
275- assert .ErrorIs (t , err , tc .err , tc .in )
276- } else {
277- assert .NoError (t , err , tc .in )
278- }
303+ t .Run (tc .name , func (t * testing.T ) {
304+ got , err := ParseTraceState (tc .in )
305+ assert .Equal (t , tc .tracestate , got )
306+ if tc .err != nil {
307+ assert .ErrorIs (t , err , tc .err , tc .in )
308+ } else {
309+ assert .NoError (t , err , tc .in )
310+ }
311+ })
279312 }
280313}
281314
@@ -285,8 +318,9 @@ func TestTraceStateString(t *testing.T) {
285318 // Only test non-zero value TraceState.
286319 continue
287320 }
288-
289- assert .Equal (t , tc .out , tc .tracestate .String ())
321+ t .Run (tc .name , func (t * testing.T ) {
322+ assert .Equal (t , tc .out , tc .tracestate .String ())
323+ })
290324 }
291325}
292326
@@ -296,15 +330,16 @@ func TestTraceStateMarshalJSON(t *testing.T) {
296330 // Only test non-zero value TraceState.
297331 continue
298332 }
333+ t .Run (tc .name , func (t * testing.T ) {
334+ // Encode UTF-8.
335+ expected , err := json .Marshal (tc .out )
336+ require .NoError (t , err )
299337
300- // Encode UTF-8.
301- expected , err := json .Marshal (tc .out )
302- require .NoError (t , err )
338+ actual , err := json .Marshal (tc .tracestate )
339+ require .NoError (t , err )
303340
304- actual , err := json .Marshal (tc .tracestate )
305- require .NoError (t , err )
306-
307- assert .Equal (t , expected , actual )
341+ assert .Equal (t , expected , actual )
342+ })
308343 }
309344}
310345
@@ -332,7 +367,9 @@ func TestTraceStateGet(t *testing.T) {
332367 }
333368
334369 for _ , tc := range testCases {
335- assert .Equal (t , tc .expected , maxMembers .Get (tc .key ), tc .name )
370+ t .Run (tc .name , func (t * testing.T ) {
371+ assert .Equal (t , tc .expected , maxMembers .Get (tc .key ))
372+ })
336373 }
337374}
338375
@@ -377,7 +414,9 @@ func TestTraceStateDelete(t *testing.T) {
377414 }
378415
379416 for _ , tc := range testCases {
380- assert .Equal (t , tc .expected , ts .Delete (tc .key ), tc .name )
417+ t .Run (tc .name , func (t * testing.T ) {
418+ assert .Equal (t , tc .expected , ts .Delete (tc .key ))
419+ })
381420 }
382421}
383422
@@ -453,13 +492,15 @@ func TestTraceStateInsert(t *testing.T) {
453492 }
454493
455494 for _ , tc := range testCases {
456- actual , err := tc .tracestate .Insert (tc .key , tc .value )
457- assert .ErrorIs (t , err , tc .err , tc .name )
458- if tc .err != nil {
459- assert .Equal (t , tc .tracestate , actual , tc .name )
460- } else {
461- assert .Equal (t , tc .expected , actual , tc .name )
462- }
495+ t .Run (tc .name , func (t * testing.T ) {
496+ actual , err := tc .tracestate .Insert (tc .key , tc .value )
497+ assert .ErrorIs (t , err , tc .err , tc .name )
498+ if tc .err != nil {
499+ assert .Equal (t , tc .tracestate , actual )
500+ } else {
501+ assert .Equal (t , tc .expected , actual )
502+ }
503+ })
463504 }
464505}
465506
0 commit comments