66package io .opentelemetry .sdk .extension .incubator .fileconfig ;
77
88import static io .opentelemetry .sdk .testing .assertj .OpenTelemetryAssertions .assertThat ;
9+ import static org .assertj .core .api .Assertions .assertThatThrownBy ;
910
1011import io .opentelemetry .api .baggage .propagation .W3CBaggagePropagator ;
12+ import io .opentelemetry .api .incubator .config .DeclarativeConfigException ;
13+ import io .opentelemetry .api .incubator .config .DeclarativeConfigProperties ;
1114import io .opentelemetry .api .trace .propagation .W3CTraceContextPropagator ;
1215import io .opentelemetry .context .propagation .ContextPropagators ;
1316import io .opentelemetry .context .propagation .TextMapPropagator ;
1417import io .opentelemetry .extension .trace .propagation .B3Propagator ;
1518import io .opentelemetry .extension .trace .propagation .JaegerPropagator ;
1619import io .opentelemetry .extension .trace .propagation .OtTracePropagator ;
1720import io .opentelemetry .sdk .autoconfigure .internal .SpiHelper ;
21+ import io .opentelemetry .sdk .extension .incubator .fileconfig .component .TextMapPropagatorComponentProvider ;
22+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .B3MultiPropagatorModel ;
23+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .B3PropagatorModel ;
24+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .BaggagePropagatorModel ;
25+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .JaegerPropagatorModel ;
26+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OpenTracingPropagatorModel ;
1827import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .PropagatorModel ;
28+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .TextMapPropagatorModel ;
29+ import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .TraceContextPropagatorModel ;
1930import java .util .Arrays ;
2031import java .util .Collections ;
2132import java .util .stream .Stream ;
33+ import org .junit .jupiter .api .Test ;
2234import org .junit .jupiter .params .ParameterizedTest ;
2335import org .junit .jupiter .params .provider .Arguments ;
2436import org .junit .jupiter .params .provider .MethodSource ;
@@ -39,17 +51,101 @@ void create(PropagatorModel model, ContextPropagators expectedPropagators) {
3951
4052 private static Stream <Arguments > createArguments () {
4153 return Stream .of (
54+ // structured list
4255 Arguments .of (
4356 new PropagatorModel ()
4457 .withComposite (
45- Arrays .asList ("tracecontext" , "baggage" , "ottrace" , "b3multi" , "b3" , "jaeger" )),
58+ Arrays .asList (
59+ new TextMapPropagatorModel ()
60+ .withTracecontext (new TraceContextPropagatorModel ()),
61+ new TextMapPropagatorModel ().withBaggage (new BaggagePropagatorModel ()),
62+ new TextMapPropagatorModel ().withOttrace (new OpenTracingPropagatorModel ()),
63+ new TextMapPropagatorModel ().withB3multi (new B3MultiPropagatorModel ()),
64+ new TextMapPropagatorModel ().withB3 (new B3PropagatorModel ()),
65+ new TextMapPropagatorModel ().withJaeger (new JaegerPropagatorModel ()))),
4666 ContextPropagators .create (
4767 TextMapPropagator .composite (
4868 W3CTraceContextPropagator .getInstance (),
4969 W3CBaggagePropagator .getInstance (),
5070 OtTracePropagator .getInstance (),
5171 B3Propagator .injectingMultiHeaders (),
5272 B3Propagator .injectingSingleHeader (),
53- JaegerPropagator .getInstance ()))));
73+ JaegerPropagator .getInstance ()))),
74+ // string list
75+ Arguments .of (
76+ new PropagatorModel ()
77+ .withCompositeList ("tracecontext,baggage,ottrace,b3multi,b3,jaeger ,none" ),
78+ ContextPropagators .create (
79+ TextMapPropagator .composite (
80+ W3CTraceContextPropagator .getInstance (),
81+ W3CBaggagePropagator .getInstance (),
82+ OtTracePropagator .getInstance (),
83+ B3Propagator .injectingMultiHeaders (),
84+ B3Propagator .injectingSingleHeader (),
85+ JaegerPropagator .getInstance ()))),
86+ // structured list and string list
87+ Arguments .of (
88+ new PropagatorModel ()
89+ .withComposite (
90+ Arrays .asList (
91+ new TextMapPropagatorModel ()
92+ .withTracecontext (new TraceContextPropagatorModel ()),
93+ new TextMapPropagatorModel ().withBaggage (new BaggagePropagatorModel ())))
94+ .withCompositeList ("ottrace,b3multi,b3,jaeger" ),
95+ ContextPropagators .create (
96+ TextMapPropagator .composite (
97+ W3CTraceContextPropagator .getInstance (),
98+ W3CBaggagePropagator .getInstance (),
99+ OtTracePropagator .getInstance (),
100+ B3Propagator .injectingMultiHeaders (),
101+ B3Propagator .injectingSingleHeader (),
102+ JaegerPropagator .getInstance ()))),
103+ // structured list and string list with overlap
104+ Arguments .of (
105+ new PropagatorModel ()
106+ .withComposite (
107+ Arrays .asList (
108+ new TextMapPropagatorModel ()
109+ .withTracecontext (new TraceContextPropagatorModel ()),
110+ new TextMapPropagatorModel ().withBaggage (new BaggagePropagatorModel ())))
111+ .withCompositeList ("tracecontext,ottrace,b3multi,b3,jaeger" ),
112+ ContextPropagators .create (
113+ TextMapPropagator .composite (
114+ W3CTraceContextPropagator .getInstance (),
115+ W3CBaggagePropagator .getInstance (),
116+ OtTracePropagator .getInstance (),
117+ B3Propagator .injectingMultiHeaders (),
118+ B3Propagator .injectingSingleHeader (),
119+ JaegerPropagator .getInstance ()))),
120+ // spi
121+ Arguments .of (
122+ new PropagatorModel ()
123+ .withComposite (
124+ Collections .singletonList (
125+ new TextMapPropagatorModel ().withAdditionalProperty ("test" , null ))),
126+ ContextPropagators .create (
127+ TextMapPropagator .composite (
128+ new TextMapPropagatorComponentProvider .TestTextMapPropagator (
129+ DeclarativeConfigProperties .empty ())))),
130+ Arguments .of (
131+ new PropagatorModel ().withCompositeList ("test" ),
132+ ContextPropagators .create (
133+ TextMapPropagator .composite (
134+ new TextMapPropagatorComponentProvider .TestTextMapPropagator (
135+ DeclarativeConfigProperties .empty ())))));
136+ }
137+
138+ @ Test
139+ void create_SpiPropagator_Unknown () {
140+ assertThatThrownBy (
141+ () ->
142+ PropagatorFactory .getInstance ()
143+ .create (
144+ new PropagatorModel ().withCompositeList ("foo" ),
145+ spiHelper ,
146+ Collections .emptyList ()))
147+ .isInstanceOf (DeclarativeConfigException .class )
148+ .hasMessage (
149+ "No component provider detected for io.opentelemetry.context.propagation.TextMapPropagator with name \" foo\" ." );
54150 }
55151}
0 commit comments