99import static org .assertj .core .api .Assertions .assertThat ;
1010import static org .assertj .core .api .Assertions .assertThatThrownBy ;
1111import static org .mockito .ArgumentMatchers .any ;
12- import static org .mockito .Mockito .spy ;
1312import static org .mockito .Mockito .verify ;
14- import static org .mockito .Mockito .when ;
1513
1614import com .google .common .collect .ImmutableMap ;
1715import com .linecorp .armeria .testing .junit5 .server .SelfSignedCertificateExtension ;
2321import io .opentelemetry .exporter .otlp .trace .OtlpGrpcSpanExporter ;
2422import io .opentelemetry .exporter .zipkin .ZipkinSpanExporter ;
2523import io .opentelemetry .internal .testing .CleanupExtension ;
26- import io .opentelemetry .sdk .autoconfigure .internal .SpiHelper ;
2724import io .opentelemetry .sdk .autoconfigure .spi .internal .ComponentProvider ;
2825import io .opentelemetry .sdk .extension .incubator .fileconfig .component .SpanExporterComponentProvider ;
2926import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .AuthenticatorModel ;
4441import java .util .Arrays ;
4542import java .util .Collections ;
4643import java .util .List ;
47- import java .util .stream .Collectors ;
48- import org .junit .jupiter .api .BeforeEach ;
4944import org .junit .jupiter .api .Test ;
5045import org .junit .jupiter .api .extension .ExtendWith ;
5146import org .junit .jupiter .api .extension .RegisterExtension ;
5247import org .junit .jupiter .api .io .TempDir ;
5348import org .mockito .ArgumentCaptor ;
54- import org .mockito .Mockito ;
5549import org .mockito .junit .jupiter .MockitoExtension ;
5650import org .mockito .junit .jupiter .MockitoSettings ;
5751import org .mockito .quality .Strictness ;
@@ -68,40 +62,10 @@ class SpanExporterFactoryTest {
6862
6963 @ RegisterExtension CleanupExtension cleanup = new CleanupExtension ();
7064
71- private final SpiHelper spiHelper =
72- spy (SpiHelper .create (SpanExporterFactoryTest .class .getClassLoader ()));
73- private final DeclarativeConfigContext context = new DeclarativeConfigContext (spiHelper );
74-
75- private List <ComponentProvider <?>> loadedComponentProviders = Collections .emptyList ();
76-
77- @ BeforeEach
78- @ SuppressWarnings ("unchecked" )
79- void setup () {
80- when (spiHelper .load (ComponentProvider .class ))
81- .thenAnswer (
82- invocation -> {
83- List <ComponentProvider <?>> result =
84- (List <ComponentProvider <?>>) invocation .callRealMethod ();
85-
86- // only capture first invocation for exporter, not second for authenticator
87- if (loadedComponentProviders .isEmpty ()) {
88- loadedComponentProviders =
89- result .stream ().map (Mockito ::spy ).collect (Collectors .toList ());
90- return loadedComponentProviders ;
91- }
92- return result ;
93- });
94- }
65+ @ RegisterExtension
66+ ComponentProviderExtension componentProviderExtension = new ComponentProviderExtension ();
9567
96- private ComponentProvider <?> getComponentProvider (String name , Class <?> type ) {
97- return loadedComponentProviders .stream ()
98- .filter (
99- componentProvider ->
100- componentProvider .getName ().equals (name )
101- && componentProvider .getType ().equals (type ))
102- .findFirst ()
103- .orElseThrow (IllegalStateException ::new );
104- }
68+ private final DeclarativeConfigContext context = componentProviderExtension .getContext ();
10569
10670 @ Test
10771 void create_OtlpHttpDefaults () {
@@ -111,15 +75,17 @@ void create_OtlpHttpDefaults() {
11175
11276 SpanExporter exporter =
11377 SpanExporterFactory .getInstance ()
114- .create (new SpanExporterModel ().withOtlpHttp (new OtlpHttpExporterModel ()), context );
78+ .create (
79+ new SpanExporterModel ().withOtlpHttp (new OtlpHttpExporterModel ()),
80+ context );
11581 cleanup .addCloseable (exporter );
11682 cleanup .addCloseables (closeables );
11783
11884 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
11985
12086 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
12187 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
122- ComponentProvider <?> componentProvider = getComponentProvider ("otlp_http" , SpanExporter .class );
88+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("otlp_http" , SpanExporter .class );
12389 verify (componentProvider ).create (configCaptor .capture (), any ());
12490 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
12591 assertThat (configProperties .getString ("protocol" )).isNull ();
@@ -184,7 +150,7 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
184150
185151 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
186152 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
187- ComponentProvider <?> componentProvider = getComponentProvider ("otlp_http" , SpanExporter .class );
153+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("otlp_http" , SpanExporter .class );
188154 verify (componentProvider ).create (configCaptor .capture (), any ());
189155 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
190156 assertThat (configProperties .getString ("endpoint" )).isEqualTo ("http://example:4318/v1/traces" );
@@ -224,7 +190,7 @@ void create_OtlpGrpcDefaults() {
224190
225191 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
226192 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
227- ComponentProvider <?> componentProvider = getComponentProvider ("otlp_grpc" , SpanExporter .class );
193+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("otlp_grpc" , SpanExporter .class );
228194 verify (componentProvider ).create (configCaptor .capture (), any ());
229195 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
230196 assertThat (configProperties .getString ("endpoint" )).isNull ();
@@ -291,7 +257,7 @@ void create_OtlpGrpcConfigured(@TempDir Path tempDir)
291257
292258 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
293259 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
294- ComponentProvider <?> componentProvider = getComponentProvider ("otlp_grpc" , SpanExporter .class );
260+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("otlp_grpc" , SpanExporter .class );
295261 verify (componentProvider ).create (configCaptor .capture (), any ());
296262 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
297263 assertThat (configProperties .getString ("endpoint" )).isEqualTo ("http://example:4317" );
@@ -347,7 +313,7 @@ void create_ZipkinDefaults() {
347313
348314 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
349315 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
350- ComponentProvider <?> componentProvider = getComponentProvider ("zipkin" , SpanExporter .class );
316+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("zipkin" , SpanExporter .class );
351317 verify (componentProvider ).create (configCaptor .capture (), any ());
352318 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
353319 assertThat (configProperties .getString ("endpoint" )).isNull ();
@@ -380,7 +346,7 @@ void create_ZipkinConfigured() {
380346
381347 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
382348 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
383- ComponentProvider <?> componentProvider = getComponentProvider ("zipkin" , SpanExporter .class );
349+ ComponentProvider <?> componentProvider = componentProviderExtension . getComponentProvider ("zipkin" , SpanExporter .class );
384350 verify (componentProvider ).create (configCaptor .capture (), any ());
385351 DeclarativeConfigProperties configProperties = configCaptor .getValue ();
386352 assertThat (configProperties .getString ("endpoint" )).isEqualTo ("http://zipkin:9411/v1/v2/spans" );
@@ -407,7 +373,7 @@ void create_OtlpFile() {
407373 ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
408374 ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
409375 ComponentProvider <?> componentProvider =
410- getComponentProvider ("otlp_file/development" , SpanExporter .class );
376+ componentProviderExtension . getComponentProvider ("otlp_file/development" , SpanExporter .class );
411377 verify (componentProvider ).create (configCaptor .capture (), any ());
412378 }
413379
0 commit comments