1616
1717package com .splunk .opentelemetry .appd ;
1818
19+ import static com .splunk .opentelemetry .appd .AppdBonusConstants .APPD_ATTR_ACCT ;
20+ import static com .splunk .opentelemetry .appd .AppdBonusConstants .APPD_ATTR_APP ;
21+ import static com .splunk .opentelemetry .appd .AppdBonusConstants .APPD_ATTR_BT ;
22+ import static com .splunk .opentelemetry .appd .AppdBonusConstants .APPD_ATTR_TIER ;
1923import static com .splunk .opentelemetry .appd .AppdBonusConstants .CONFIG_CISCO_CTX_ENABLED ;
24+ import static com .splunk .opentelemetry .appd .AppdBonusCustomizer .DEFAULT_PROPAGATORS ;
25+ import static com .splunk .opentelemetry .appd .AppdBonusPropagator .CONTEXT_KEY ;
2026import static io .opentelemetry .semconv .ServiceAttributes .SERVICE_NAME ;
2127import static io .opentelemetry .semconv .incubating .DeploymentIncubatingAttributes .DEPLOYMENT_ENVIRONMENT_NAME ;
2228import static org .assertj .core .api .Assertions .assertThat ;
2329import static org .mockito .ArgumentMatchers .any ;
24- import static org .mockito .ArgumentMatchers .anyString ;
2530import static org .mockito .Mockito .mock ;
2631import static org .mockito .Mockito .never ;
2732import static org .mockito .Mockito .verify ;
2833import static org .mockito .Mockito .when ;
2934
3035import io .opentelemetry .context .Context ;
31- import io .opentelemetry .context .propagation .TextMapPropagator ;
3236import io .opentelemetry .sdk .autoconfigure .spi .AutoConfigurationCustomizer ;
3337import io .opentelemetry .sdk .autoconfigure .spi .ConfigProperties ;
3438import io .opentelemetry .sdk .resources .Resource ;
39+ import io .opentelemetry .sdk .trace .ReadWriteSpan ;
40+ import io .opentelemetry .sdk .trace .SdkTracerProviderBuilder ;
3541import io .opentelemetry .sdk .trace .SpanProcessor ;
42+ import java .util .Map ;
3643import java .util .function .BiFunction ;
44+ import java .util .function .Function ;
3745import org .junit .jupiter .api .Test ;
3846import org .junit .jupiter .api .extension .ExtendWith ;
3947import org .mockito .ArgumentCaptor ;
@@ -54,27 +62,30 @@ class AppdBonusCustomizerTest {
5462 void customizeEnabled () {
5563 AppdBonusContext appdContext = new AppdBonusContext ("acct123" , "app456" , "bt123" , "tier456" );
5664
65+ when (context .get (CONTEXT_KEY )).thenReturn (appdContext );
5766 when (config .getBoolean (CONFIG_CISCO_CTX_ENABLED , false )).thenReturn (true );
67+ when (config .getList ("otel.propagators" , DEFAULT_PROPAGATORS )).thenReturn (DEFAULT_PROPAGATORS );
5868 when (resource .getAttribute (SERVICE_NAME )).thenReturn ("amazingService" );
5969 when (resource .getAttribute (DEPLOYMENT_ENVIRONMENT_NAME )).thenReturn ("amazingEnv" );
6070
6171 AppdBonusCustomizer testClass = new AppdBonusCustomizer ();
6272 testClass .customize (customizer , propagator );
6373
64- ArgumentCaptor <BiFunction < SpanProcessor , ConfigProperties , SpanProcessor >> spcCaptor =
65- ArgumentCaptor .forClass (BiFunction .class );
66- verify (customizer ).addSpanProcessorCustomizer ( spcCaptor .capture ());
74+ ArgumentCaptor <Function < ConfigProperties , Map < String , String >>> pcCaptor =
75+ ArgumentCaptor .forClass (Function .class );
76+ verify (customizer ).addPropertiesCustomizer ( pcCaptor .capture ());
6777
6878 ArgumentCaptor <BiFunction <Resource , ConfigProperties , Resource >> rcCaptor =
6979 ArgumentCaptor .forClass (BiFunction .class );
7080 verify (customizer ).addResourceCustomizer (rcCaptor .capture ());
7181
72- ArgumentCaptor <BiFunction <TextMapPropagator , ConfigProperties , TextMapPropagator >> pcCaptor =
73- ArgumentCaptor .forClass (BiFunction .class );
74- verify (customizer ).addPropagatorCustomizer (pcCaptor .capture ());
82+ ArgumentCaptor <BiFunction <SdkTracerProviderBuilder , ConfigProperties , SdkTracerProviderBuilder >>
83+ tpcCaptor = ArgumentCaptor .forClass (BiFunction .class );
84+ verify (customizer ).addTracerProviderCustomizer (tpcCaptor .capture ());
85+
86+ Map <String , String > updatedConfig = pcCaptor .getValue ().apply (config );
87+ assertThat (updatedConfig ).containsEntry ("otel.propagators" , "tracecontext,baggage,appd-bonus" );
7588
76- SpanProcessor spanProcessor = spcCaptor .getValue ().apply (defaultSpanProcessor , config );
77- assertThat (spanProcessor ).isNotSameAs (defaultSpanProcessor );
7889 defaultSpanProcessor .onStart (mock (), mock ());
7990 verify (defaultSpanProcessor ).onStart (any (), any ());
8091
@@ -83,46 +94,52 @@ void customizeEnabled() {
8394 verify (propagator ).setServiceName ("amazingService" );
8495 verify (propagator ).setEnvironmentName ("amazingEnv" );
8596
86- TextMapPropagator defaultPropagator = mock ();
87- TextMapPropagator prop = pcCaptor .getValue ().apply (defaultPropagator , config );
88- assertThat (prop ).isNotSameAs (defaultPropagator );
89- prop .extract (context , mock (), mock ());
90- verify (defaultPropagator ).extract (any (), any (), any ());
91- verify (propagator ).extract (any (), any (), any ());
97+ SdkTracerProviderBuilder builder = mock ();
98+ tpcCaptor .getValue ().apply (builder , config );
99+ ArgumentCaptor <SpanProcessor > spCapture = ArgumentCaptor .forClass (SpanProcessor .class );
100+ verify (builder ).addSpanProcessor (spCapture .capture ());
101+ ReadWriteSpan span = mock ();
102+ spCapture .getValue ().onStart (context , span );
103+ verify (span ).setAttribute (APPD_ATTR_APP , appdContext .getAppId ());
104+ verify (span ).setAttribute (APPD_ATTR_ACCT , appdContext .getAccountId ());
105+ verify (span ).setAttribute (APPD_ATTR_TIER , appdContext .getTierId ());
106+ verify (span ).setAttribute (APPD_ATTR_BT , appdContext .getBusinessTransactionId ());
92107 }
93108
94109 @ Test
95110 void customizeNotEnabled () {
96111 when (config .getBoolean (CONFIG_CISCO_CTX_ENABLED , false )).thenReturn (false );
112+ when (resource .getAttribute (SERVICE_NAME )).thenReturn ("amazingService" );
113+ when (resource .getAttribute (DEPLOYMENT_ENVIRONMENT_NAME )).thenReturn ("amazingEnv" );
97114
98115 AppdBonusCustomizer testClass = new AppdBonusCustomizer ();
99116 testClass .customize (customizer , propagator );
100117
101- ArgumentCaptor <BiFunction < SpanProcessor , ConfigProperties , SpanProcessor >> spcCaptor =
102- ArgumentCaptor .forClass (BiFunction .class );
103- verify (customizer ).addSpanProcessorCustomizer ( spcCaptor .capture ());
118+ ArgumentCaptor <Function < ConfigProperties , Map < String , String >>> pcCaptor =
119+ ArgumentCaptor .forClass (Function .class );
120+ verify (customizer ).addPropertiesCustomizer ( pcCaptor .capture ());
104121
105122 ArgumentCaptor <BiFunction <Resource , ConfigProperties , Resource >> rcCaptor =
106123 ArgumentCaptor .forClass (BiFunction .class );
107124 verify (customizer ).addResourceCustomizer (rcCaptor .capture ());
108125
109- ArgumentCaptor <BiFunction <TextMapPropagator , ConfigProperties , TextMapPropagator >> pcCaptor =
110- ArgumentCaptor .forClass (BiFunction .class );
111- verify (customizer ).addPropagatorCustomizer ( pcCaptor .capture ());
126+ ArgumentCaptor <BiFunction <SdkTracerProviderBuilder , ConfigProperties , SdkTracerProviderBuilder >>
127+ tpcCaptor = ArgumentCaptor .forClass (BiFunction .class );
128+ verify (customizer ).addTracerProviderCustomizer ( tpcCaptor .capture ());
112129
113- SpanProcessor spanProcessor = spcCaptor .getValue ().apply (defaultSpanProcessor , config );
114- assertThat (spanProcessor ).isSameAs (defaultSpanProcessor );
130+ Map <String , String > updatedConfig = pcCaptor .getValue ().apply (config );
131+ assertThat (updatedConfig ).isEmpty ();
132+
133+ defaultSpanProcessor .onStart (mock (), mock ());
134+ verify (defaultSpanProcessor ).onStart (any (), any ());
115135
116136 Resource res = rcCaptor .getValue ().apply (resource , config );
117137 assertThat (res ).isSameAs (resource );
118- verify (propagator , never ()).setServiceName (anyString ());
119- verify (propagator , never ()).setEnvironmentName (anyString ());
120-
121- TextMapPropagator defaultPropagator = mock ();
122- TextMapPropagator prop = pcCaptor .getValue ().apply (defaultPropagator , config );
123- assertThat (prop ).isSameAs (defaultPropagator );
124- prop .extract (context , mock (), mock ());
125- verify (defaultPropagator ).extract (any (), any (), any ());
126- verify (propagator , never ()).extract (any (), any (), any ());
138+ verify (propagator ).setServiceName ("amazingService" );
139+ verify (propagator ).setEnvironmentName ("amazingEnv" );
140+
141+ SdkTracerProviderBuilder builder = mock ();
142+ tpcCaptor .getValue ().apply (builder , config );
143+ verify (builder , never ()).addSpanProcessor (any ());
127144 }
128145}
0 commit comments