13
13
import static io .opentelemetry .sdk .trace .internal .TracerConfig .enabled ;
14
14
15
15
import io .opentelemetry .api .common .Attributes ;
16
- import io .opentelemetry .api .incubator .trace .ExtendedTracer ;
17
16
import io .opentelemetry .api .trace .Span ;
18
17
import io .opentelemetry .api .trace .SpanId ;
19
- import io .opentelemetry .api .trace .Tracer ;
20
18
import io .opentelemetry .context .Scope ;
21
19
import io .opentelemetry .sdk .common .InstrumentationScopeInfo ;
22
20
import io .opentelemetry .sdk .internal .ScopeConfigurator ;
@@ -42,9 +40,9 @@ void disableScopes() throws InterruptedException {
42
40
.addSpanProcessor (SimpleSpanProcessor .create (exporter ))
43
41
.build ();
44
42
45
- Tracer tracerA = tracerProvider .get ("tracerA" );
46
- Tracer tracerB = tracerProvider .get ("tracerB" );
47
- Tracer tracerC = tracerProvider .get ("tracerC" );
43
+ ExtendedSdkTracer tracerA = ( ExtendedSdkTracer ) tracerProvider .get ("tracerA" );
44
+ ExtendedSdkTracer tracerB = ( ExtendedSdkTracer ) tracerProvider .get ("tracerB" );
45
+ ExtendedSdkTracer tracerC = ( ExtendedSdkTracer ) tracerProvider .get ("tracerC" );
48
46
49
47
Span parent ;
50
48
Span child ;
@@ -92,9 +90,9 @@ void disableScopes() throws InterruptedException {
92
90
.hasParentSpanId (parent .getSpanContext ().getSpanId ())
93
91
.hasAttributes (Attributes .builder ().put ("c" , "1" ).build ()));
94
92
// tracerA and tracerC are enabled, tracerB is disabled.
95
- assertThat ((( ExtendedTracer ) tracerA ) .isEnabled ()).isTrue ();
96
- assertThat ((( ExtendedTracer ) tracerB ) .isEnabled ()).isFalse ();
97
- assertThat ((( ExtendedTracer ) tracerA ) .isEnabled ()).isTrue ();
93
+ assertThat (tracerA .isEnabled ()).isTrue ();
94
+ assertThat (tracerB .isEnabled ()).isFalse ();
95
+ assertThat (tracerC .isEnabled ()).isTrue ();
98
96
}
99
97
100
98
@ ParameterizedTest
@@ -158,4 +156,67 @@ private static Stream<Arguments> tracerConfiguratorArgs() {
158
156
Arguments .of (enableStartsWithD , scopeDog , enabled ()),
159
157
Arguments .of (enableStartsWithD , scopeDuck , enabled ()));
160
158
}
159
+
160
+ @ Test
161
+ void setScopeConfigurator () {
162
+ // 1. Initially, configure all tracers to be enabled except tracerB
163
+ InMemorySpanExporter exporter = InMemorySpanExporter .create ();
164
+ SdkTracerProvider tracerProvider =
165
+ SdkTracerProvider .builder ()
166
+ .addTracerConfiguratorCondition (nameEquals ("tracerB" ), disabled ())
167
+ .addSpanProcessor (SimpleSpanProcessor .create (exporter ))
168
+ .build ();
169
+
170
+ ExtendedSdkTracer tracerA = (ExtendedSdkTracer ) tracerProvider .get ("tracerA" );
171
+ ExtendedSdkTracer tracerB = (ExtendedSdkTracer ) tracerProvider .get ("tracerB" );
172
+ ExtendedSdkTracer tracerC = (ExtendedSdkTracer ) tracerProvider .get ("tracerC" );
173
+
174
+ // verify isEnabled()
175
+ assertThat (tracerA .isEnabled ()).isTrue ();
176
+ assertThat (tracerB .isEnabled ()).isFalse ();
177
+ assertThat (tracerC .isEnabled ()).isTrue ();
178
+
179
+ // verify spans are emitted as expected
180
+ tracerA .spanBuilder ("spanA" ).startSpan ().end ();
181
+ tracerB .spanBuilder ("spanB" ).startSpan ().end ();
182
+ tracerC .spanBuilder ("spanC" ).startSpan ().end ();
183
+ assertThat (exporter .getFinishedSpanItems ())
184
+ .satisfiesExactlyInAnyOrder (
185
+ span -> assertThat (span ).hasName ("spanA" ), span -> assertThat (span ).hasName ("spanC" ));
186
+ exporter .reset ();
187
+
188
+ // 2. Update config to disable all tracers
189
+ tracerProvider .setTracerConfigurator (
190
+ ScopeConfigurator .<TracerConfig >builder ().setDefault (TracerConfig .disabled ()).build ());
191
+
192
+ // verify isEnabled()
193
+ assertThat (tracerA .isEnabled ()).isFalse ();
194
+ assertThat (tracerB .isEnabled ()).isFalse ();
195
+ assertThat (tracerC .isEnabled ()).isFalse ();
196
+
197
+ // verify spans are emitted as expected
198
+ tracerA .spanBuilder ("spanA" ).startSpan ().end ();
199
+ tracerB .spanBuilder ("spanB" ).startSpan ().end ();
200
+ tracerC .spanBuilder ("spanC" ).startSpan ().end ();
201
+ assertThat (exporter .getFinishedSpanItems ()).isEmpty ();
202
+
203
+ // 3. Update config to restore original
204
+ tracerProvider .setTracerConfigurator (
205
+ ScopeConfigurator .<TracerConfig >builder ()
206
+ .addCondition (nameEquals ("tracerB" ), disabled ())
207
+ .build ());
208
+
209
+ // verify isEnabled()
210
+ assertThat (tracerA .isEnabled ()).isTrue ();
211
+ assertThat (tracerB .isEnabled ()).isFalse ();
212
+ assertThat (tracerC .isEnabled ()).isTrue ();
213
+
214
+ // verify spans are emitted as expected
215
+ tracerA .spanBuilder ("spanA" ).startSpan ().end ();
216
+ tracerB .spanBuilder ("spanB" ).startSpan ().end ();
217
+ tracerC .spanBuilder ("spanC" ).startSpan ().end ();
218
+ assertThat (exporter .getFinishedSpanItems ())
219
+ .satisfiesExactly (
220
+ span -> assertThat (span ).hasName ("spanA" ), span -> assertThat (span ).hasName ("spanC" ));
221
+ }
161
222
}
0 commit comments