2222import io .opentelemetry .context .Context ;
2323import io .opentelemetry .context .propagation .TextMapGetter ;
2424import org .assertj .core .api .BDDAssertions ;
25+ import org .junit .jupiter .api .BeforeEach ;
2526import org .junit .jupiter .api .Test ;
2627
2728import java .util .*;
2829
30+ import static java .util .Collections .emptyList ;
31+
2932class BaggageTextMapPropagatorTests {
3033
34+ private static final List <String > REMOTE_FIELDS = Arrays .asList ("foo" , "foo2" );
35+
36+ private BaggageTextMapPropagator baggageTextMapPropagator ;
37+
38+ private TextMapGetter <Map <String , String >> textMapGetter ;
39+
40+ @ BeforeEach
41+ void setup () {
42+ baggageTextMapPropagator = new BaggageTextMapPropagator (REMOTE_FIELDS ,
43+ new OtelBaggageManager (new OtelCurrentTraceContext (), REMOTE_FIELDS , emptyList ()));
44+ textMapGetter = textMapGetter (REMOTE_FIELDS );
45+ }
46+
3147 @ Test
3248 void should_append_baggage_to_existing_one () {
33- Baggage baggage = Baggage .current ().toBuilder ().put ("foo" , "bar" ).put ("baz" , "baz2" ).build ();
34- Context parent = Context .current ().with (baggage );
35- List <String > remoteFields = Arrays .asList ("foo" , "foo2" );
36- BaggageTextMapPropagator baggageTextMapPropagator = new BaggageTextMapPropagator (remoteFields ,
37- new OtelBaggageManager (new OtelCurrentTraceContext (), remoteFields , Collections .emptyList ()));
49+ Baggage baggage = Baggage .empty ().toBuilder ().put ("foo" , "undesired" ).put ("lorem" , "ipsum" ).build ();
50+ Context parent = Context .root ().with (baggage );
51+
3852 Map <String , String > carrier = new HashMap <>();
3953 carrier .put ("foo" , "bar" );
4054 carrier .put ("foo2" , "bar2" );
4155
42- Context extracted = baggageTextMapPropagator .extract (parent , carrier , new TextMapGetter <Map <String , String >>() {
56+ Context extracted = baggageTextMapPropagator .extract (parent , carrier , textMapGetter );
57+
58+ Map <String , BaggageEntry > extractedBaggage = Baggage .fromContext (extracted ).asMap ();
59+ BDDAssertions .then (extractedBaggage ).containsOnlyKeys ("foo" , "foo2" , "lorem" );
60+
61+ BDDAssertions .then (extractedBaggage .get ("foo" ).getValue ()).isEqualTo ("bar" );
62+ BDDAssertions .then (extractedBaggage .get ("foo2" ).getValue ()).isEqualTo ("bar2" );
63+ BDDAssertions .then (extractedBaggage .get ("lorem" ).getValue ()).isEqualTo ("ipsum" );
64+ }
65+
66+ @ Test
67+ void should_not_mix_baggage_with_current_baggage () {
68+ Baggage currentBaggage = Baggage .empty ()
69+ .toBuilder ()
70+ .put ("current-key" , "undesired" )
71+ .put ("foo" , "undesired" )
72+ .build ();
73+ Context currentContext = Context .root ().with (currentBaggage );
74+
75+ Context extracted = currentContext .wrapSupplier (() -> {
76+ Map <String , String > carrier = new HashMap <>();
77+ carrier .put ("foo" , "bar" );
78+
79+ return baggageTextMapPropagator .extract (Context .root (), carrier , textMapGetter (REMOTE_FIELDS ));
80+ }).get ();
81+
82+ Map <String , BaggageEntry > extractedBaggage = Baggage .fromContext (extracted ).asMap ();
83+ BDDAssertions .then (extractedBaggage ).doesNotContainKey ("current-key" );
84+ BDDAssertions .then (extractedBaggage .get ("foo" ).getValue ()).isEqualTo ("bar" );
85+ }
86+
87+ private TextMapGetter <Map <String , String >> textMapGetter (final List <String > remoteFields ) {
88+ return new TextMapGetter <Map <String , String >>() {
4389 @ Override
4490 public Iterable <String > keys (Map <String , String > carrier ) {
4591 return remoteFields ;
@@ -49,10 +95,7 @@ public Iterable<String> keys(Map<String, String> carrier) {
4995 public String get (Map <String , String > carrier , String key ) {
5096 return carrier .get (key );
5197 }
52- });
53-
54- Map <String , BaggageEntry > newBaggage = Baggage .fromContext (extracted ).asMap ();
55- BDDAssertions .then (newBaggage ).containsOnlyKeys ("foo" , "foo2" , "baz" );
98+ };
5699 }
57100
58101}
0 commit comments