@@ -9,6 +9,8 @@ import datadog.trace.test.util.DDSpecification
9
9
10
10
import java.util.function.BiConsumer
11
11
12
+ import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_BYTES
13
+ import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_BAGGAGE_MAX_ITEMS
12
14
import static datadog.trace.core.baggage.BaggagePropagator.BAGGAGE_KEY
13
15
14
16
class BaggagePropagatorTest extends DDSpecification {
@@ -33,7 +35,7 @@ class BaggagePropagatorTest extends DDSpecification {
33
35
}
34
36
35
37
def setup () {
36
- this . propagator = new BaggagePropagator (true , true )
38
+ this . propagator = new BaggagePropagator (true , true , DEFAULT_TRACE_BAGGAGE_MAX_ITEMS , DEFAULT_TRACE_BAGGAGE_MAX_BYTES )
37
39
this . setter = new MapCarrierAccessor ()
38
40
this . carrier = [:]
39
41
this . context = Context . root()
@@ -61,10 +63,9 @@ class BaggagePropagatorTest extends DDSpecification {
61
63
[" abcdefg" : " hijklmnopq♥" ] | " abcdefg=hijklmnopq%E2%99%A5"
62
64
}
63
65
64
- def " test baggage item limit" () {
66
+ def " test baggage inject item limit" () {
65
67
setup :
66
- injectSysConfig(" trace.baggage.max.items" , ' 2' )
67
- propagator = new BaggagePropagator (true , true ) // creating a new instance after injecting config
68
+ propagator = new BaggagePropagator (true , true , 2 , DEFAULT_TRACE_BAGGAGE_MAX_BYTES ) // creating a new instance after injecting config
68
69
context = Baggage . create(baggage). storeInto(context)
69
70
70
71
when :
@@ -79,10 +80,9 @@ class BaggagePropagatorTest extends DDSpecification {
79
80
[key1 : " val1" , key2 : " val2" , key3 : " val3" ] | " key1=val1,key2=val2"
80
81
}
81
82
82
- def " test baggage bytes limit" () {
83
+ def " test baggage inject bytes limit" () {
83
84
setup :
84
- injectSysConfig(" trace.baggage.max.bytes" , ' 20' )
85
- propagator = new BaggagePropagator (true , true ) // creating a new instance after injecting config
85
+ propagator = new BaggagePropagator (true , true , DEFAULT_TRACE_BAGGAGE_MAX_ITEMS , 20 ) // creating a new instance after injecting config
86
86
context = Baggage . create(baggage). storeInto(context)
87
87
88
88
when :
@@ -116,6 +116,30 @@ class BaggagePropagatorTest extends DDSpecification {
116
116
" %22%2C%3B%5C%28%29%2F%3A%3C%3D%3E%3F%40%5B%5D%7B%7D=%22%2C%3B%5C" | [' ",;\\ ()/:<=>?@[]{}' : ' ",;\\ ' ]
117
117
}
118
118
119
+ def " test extracting non ASCII headers" () {
120
+ setup :
121
+ def headers = [
122
+ (BAGGAGE_KEY ) : " key1=vallée,clé2=value" ,
123
+ ]
124
+
125
+ when :
126
+ context = this . propagator. extract(context, headers, ContextVisitors . stringValuesMap())
127
+ def baggage = Baggage . fromContext(context)
128
+
129
+ then : ' non ASCII values data are still accessible as part of the API'
130
+ baggage != null
131
+ baggage. asMap(). get(' key1' ) == ' vallée'
132
+ baggage. asMap(). get(' clé2' ) == ' value'
133
+ baggage. w3cHeader == null
134
+
135
+
136
+ when :
137
+ this . propagator. inject(Context . root(). with(baggage), carrier, setter)
138
+
139
+ then : ' baggage are URL encoded if not valid, even if not modified'
140
+ assert carrier[BAGGAGE_KEY ] == ' key1=vall%C3%A9e,cl%C3%A92=value'
141
+ }
142
+
119
143
def " extract invalid baggage headers" () {
120
144
setup :
121
145
def headers = [
@@ -139,8 +163,28 @@ class BaggagePropagatorTest extends DDSpecification {
139
163
" =" | _
140
164
}
141
165
142
- def " testing baggage cache" (){
166
+ def " test baggage cache" (){
167
+ setup :
168
+ def headers = [
169
+ (BAGGAGE_KEY ) : baggageHeader,
170
+ ]
171
+
172
+ when :
173
+ context = this . propagator. extract(context, headers, ContextVisitors . stringValuesMap())
174
+
175
+ then :
176
+ Baggage baggageContext = Baggage . fromContext(context)
177
+ baggageContext. w3cHeader == cachedString
178
+
179
+ where :
180
+ baggageHeader | cachedString
181
+ " key1=val1,key2=val2,foo=bar" | " key1=val1,key2=val2,foo=bar"
182
+ ' ";\\ ()/:<=>?@[]{}=";\\ ' | null
183
+ }
184
+
185
+ def " test baggage cache items limit" (){
143
186
setup :
187
+ propagator = new BaggagePropagator (true , true , 2 , DEFAULT_TRACE_BAGGAGE_MAX_BYTES ) // creating a new instance after injecting config
144
188
def headers = [
145
189
(BAGGAGE_KEY ) : baggageHeader,
146
190
]
@@ -150,17 +194,32 @@ class BaggagePropagatorTest extends DDSpecification {
150
194
151
195
then :
152
196
Baggage baggageContext = Baggage . fromContext(context)
153
- baggageContext. asMap() == baggageMap
197
+ baggageContext. getW3cHeader() as String == cachedString
198
+
199
+ where :
200
+ baggageHeader | cachedString
201
+ " key1=val1,key2=val2" | " key1=val1,key2=val2"
202
+ " key1=val1,key2=val2,key3=val3" | " key1=val1,key2=val2"
203
+ " key1=val1,key2=val2,key3=val3,key4=val4" | " key1=val1,key2=val2"
204
+ }
205
+
206
+ def " test baggage cache bytes limit" (){
207
+ setup :
208
+ propagator = new BaggagePropagator (true , true , DEFAULT_TRACE_BAGGAGE_MAX_ITEMS , 20 ) // creating a new instance after injecting config
209
+ def headers = [
210
+ (BAGGAGE_KEY ) : baggageHeader,
211
+ ]
154
212
155
213
when :
156
- this . propagator. inject (context, carrier, setter )
214
+ context = this . propagator. extract (context, headers, ContextVisitors . stringValuesMap() )
157
215
158
216
then :
159
- assert carrier[BAGGAGE_KEY ] == baggageHeader
217
+ Baggage baggageContext = Baggage . fromContext(context)
218
+ baggageContext. getW3cHeader() as String == cachedString
160
219
161
220
where :
162
- baggageHeader | baggageMap
163
- " key1=val1,key2=val2,foo=bar " | [ " key1" : " val1" , " key2" : " val2" , " foo " : " bar " ]
164
- " %22%2C%3B%5C%28%29%2F%3A%3C%3D%3E%3F%40%5B%5D%7B%7D=%22%2C%3B%5C " | [ ' ",; \\ ()/:<=>?@[]{} ' : ' ",; \\ ' ]
221
+ baggageHeader | cachedString
222
+ " key1=val1,key2=val2" | " key1= val1, key2= val2"
223
+ " key1=val1,key2=val2,key3=val3 " | " key1=val1,key2=val2 "
165
224
}
166
225
}
0 commit comments