88import static io .opentelemetry .sdk .extension .incubator .fileconfig .FileConfigTestUtil .createTempFileWithContent ;
99import static org .assertj .core .api .Assertions .assertThat ;
1010import static org .assertj .core .api .Assertions .assertThatThrownBy ;
11- import static org .mockito .Mockito .spy ;
12- import static org .mockito .Mockito .verify ;
13- import static org .mockito .Mockito .when ;
1411
1512import com .google .common .collect .ImmutableMap ;
1613import com .linecorp .armeria .testing .junit5 .server .SelfSignedCertificateExtension ;
2118import io .opentelemetry .exporter .otlp .logs .OtlpGrpcLogRecordExporter ;
2219import io .opentelemetry .internal .testing .CleanupExtension ;
2320import io .opentelemetry .sdk .autoconfigure .internal .SpiHelper ;
24- import io .opentelemetry .sdk .autoconfigure .spi .internal .ComponentProvider ;
2521import io .opentelemetry .sdk .extension .incubator .fileconfig .component .LogRecordExporterComponentProvider ;
2622import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .ExperimentalOtlpFileExporterModel ;
2723import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .LogRecordExporterModel ;
3632import java .time .Duration ;
3733import java .util .ArrayList ;
3834import java .util .Arrays ;
39- import java .util .Collections ;
4035import java .util .List ;
41- import java .util .stream .Collectors ;
4236import org .junit .jupiter .api .BeforeEach ;
4337import org .junit .jupiter .api .Test ;
44- import org .junit .jupiter .api .extension .ExtendWith ;
4538import org .junit .jupiter .api .extension .RegisterExtension ;
4639import org .junit .jupiter .api .io .TempDir ;
47- import org .mockito .ArgumentCaptor ;
48- import org .mockito .Mockito ;
49- import org .mockito .junit .jupiter .MockitoExtension ;
50- import org .mockito .junit .jupiter .MockitoSettings ;
51- import org .mockito .quality .Strictness ;
52-
53- @ ExtendWith (MockitoExtension .class )
54- @ MockitoSettings (strictness = Strictness .LENIENT )
40+
5541class LogRecordExporterFactoryTest {
5642
5743 @ RegisterExtension
@@ -62,39 +48,24 @@ class LogRecordExporterFactoryTest {
6248
6349 @ RegisterExtension CleanupExtension cleanup = new CleanupExtension ();
6450
65- private final SpiHelper spiHelper =
66- spy (SpiHelper .create (SpanExporterFactoryTest .class .getClassLoader ()));
67- private final DeclarativeConfigContext context = new DeclarativeConfigContext (spiHelper );
68- private List <ComponentProvider > loadedComponentProviders = Collections .emptyList ();
51+ private CapturingComponentLoader capturingComponentLoader ;
52+ private SpiHelper spiHelper ;
53+ private DeclarativeConfigContext context ;
6954
7055 @ BeforeEach
71- @ SuppressWarnings ("unchecked" )
7256 void setup () {
73- when (spiHelper .load (ComponentProvider .class ))
74- .thenAnswer (
75- invocation -> {
76- List <ComponentProvider > result =
77- (List <ComponentProvider >) invocation .callRealMethod ();
78- loadedComponentProviders =
79- result .stream ().map (Mockito ::spy ).collect (Collectors .toList ());
80- return loadedComponentProviders ;
81- });
82- }
83-
84- private ComponentProvider getComponentProvider (String name , Class <?> type ) {
85- return loadedComponentProviders .stream ()
86- .filter (
87- componentProvider ->
88- componentProvider .getName ().equals (name )
89- && componentProvider .getType ().equals (type ))
90- .findFirst ()
91- .orElseThrow (IllegalStateException ::new );
57+ capturingComponentLoader = new CapturingComponentLoader ();
58+ spiHelper = SpiHelper .create (capturingComponentLoader );
59+ context = new DeclarativeConfigContext (spiHelper );
9260 }
9361
9462 @ Test
9563 void create_OtlpHttpDefaults () {
9664 List <Closeable > closeables = new ArrayList <>();
97- OtlpHttpLogRecordExporter expectedExporter = OtlpHttpLogRecordExporter .getDefault ();
65+ OtlpHttpLogRecordExporter expectedExporter =
66+ OtlpHttpLogRecordExporter .getDefault ().toBuilder ()
67+ .setComponentLoader (capturingComponentLoader ) // needed for the toString() check to pass
68+ .build ();
9869 cleanup .addCloseable (expectedExporter );
9970
10071 LogRecordExporter exporter =
@@ -106,14 +77,10 @@ void create_OtlpHttpDefaults() {
10677
10778 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
10879
109- assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
110-
111- ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
112- ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
113- ComponentProvider componentProvider =
114- getComponentProvider ("otlp_http" , LogRecordExporter .class );
115- verify (componentProvider ).create (configCaptor .capture ());
116- DeclarativeConfigProperties configProperties = configCaptor .getValue ();
80+ // Verify the configuration passed to the component provider
81+ DeclarativeConfigProperties configProperties =
82+ capturingComponentLoader .getCapturedConfig ("otlp_http" );
83+ assertThat (configProperties ).isNotNull ();
11784 assertThat (configProperties .getString ("protocol" )).isNull ();
11885 assertThat (configProperties .getString ("endpoint" )).isNull ();
11986 assertThat (configProperties .getStructured ("headers" )).isNull ();
@@ -135,6 +102,7 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
135102 .addHeader ("key2" , "value2" )
136103 .setTimeout (Duration .ofSeconds (15 ))
137104 .setCompression ("gzip" )
105+ .setComponentLoader (capturingComponentLoader ) // needed for the toString() check to pass
138106 .build ();
139107 cleanup .addCloseable (expectedExporter );
140108
@@ -174,12 +142,10 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
174142
175143 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
176144
177- ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
178- ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
179- ComponentProvider componentProvider =
180- getComponentProvider ("otlp_http" , LogRecordExporter .class );
181- verify (componentProvider ).create (configCaptor .capture ());
182- DeclarativeConfigProperties configProperties = configCaptor .getValue ();
145+ // Verify the configuration passed to the component provider
146+ DeclarativeConfigProperties configProperties =
147+ capturingComponentLoader .getCapturedConfig ("otlp_http" );
148+ assertThat (configProperties ).isNotNull ();
183149 assertThat (configProperties .getString ("endpoint" )).isEqualTo ("http://example:4318/v1/logs" );
184150 List <DeclarativeConfigProperties > headers = configProperties .getStructuredList ("headers" );
185151 assertThat (headers )
@@ -204,7 +170,10 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
204170 @ Test
205171 void create_OtlpGrpcDefaults () {
206172 List <Closeable > closeables = new ArrayList <>();
207- OtlpGrpcLogRecordExporter expectedExporter = OtlpGrpcLogRecordExporter .getDefault ();
173+ OtlpGrpcLogRecordExporter expectedExporter =
174+ OtlpGrpcLogRecordExporter .getDefault ().toBuilder ()
175+ .setComponentLoader (capturingComponentLoader ) // needed for the toString() check to pass
176+ .build ();
208177 cleanup .addCloseable (expectedExporter );
209178
210179 LogRecordExporter exporter =
@@ -216,14 +185,10 @@ void create_OtlpGrpcDefaults() {
216185
217186 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
218187
219- assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
220-
221- ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
222- ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
223- ComponentProvider componentProvider =
224- getComponentProvider ("otlp_grpc" , LogRecordExporter .class );
225- verify (componentProvider ).create (configCaptor .capture ());
226- DeclarativeConfigProperties configProperties = configCaptor .getValue ();
188+ // Verify the configuration passed to the component provider
189+ DeclarativeConfigProperties configProperties =
190+ capturingComponentLoader .getCapturedConfig ("otlp_grpc" );
191+ assertThat (configProperties ).isNotNull ();
227192 assertThat (configProperties .getString ("endpoint" )).isNull ();
228193 assertThat (configProperties .getStructured ("headers" )).isNull ();
229194 assertThat (configProperties .getString ("compression" )).isNull ();
@@ -244,6 +209,7 @@ void create_OtlpGrpcConfigured(@TempDir Path tempDir)
244209 .addHeader ("key2" , "value2" )
245210 .setTimeout (Duration .ofSeconds (15 ))
246211 .setCompression ("gzip" )
212+ .setComponentLoader (capturingComponentLoader ) // needed for the toString() check to pass
247213 .build ();
248214 cleanup .addCloseable (expectedExporter );
249215
@@ -283,12 +249,10 @@ void create_OtlpGrpcConfigured(@TempDir Path tempDir)
283249
284250 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
285251
286- ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
287- ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
288- ComponentProvider componentProvider =
289- getComponentProvider ("otlp_grpc" , LogRecordExporter .class );
290- verify (componentProvider ).create (configCaptor .capture ());
291- DeclarativeConfigProperties configProperties = configCaptor .getValue ();
252+ // Verify the configuration passed to the component provider
253+ DeclarativeConfigProperties configProperties =
254+ capturingComponentLoader .getCapturedConfig ("otlp_grpc" );
255+ assertThat (configProperties ).isNotNull ();
292256 assertThat (configProperties .getString ("endpoint" )).isEqualTo ("http://example:4317" );
293257 List <DeclarativeConfigProperties > headers = configProperties .getStructuredList ("headers" );
294258 assertThat (headers )
@@ -327,11 +291,10 @@ void create_OtlpFile() {
327291
328292 assertThat (exporter .toString ()).isEqualTo (expectedExporter .toString ());
329293
330- ArgumentCaptor <DeclarativeConfigProperties > configCaptor =
331- ArgumentCaptor .forClass (DeclarativeConfigProperties .class );
332- ComponentProvider componentProvider =
333- getComponentProvider ("otlp_file/development" , LogRecordExporter .class );
334- verify (componentProvider ).create (configCaptor .capture ());
294+ // Verify the configuration passed to the component provider
295+ DeclarativeConfigProperties configProperties =
296+ capturingComponentLoader .getCapturedConfig ("otlp_file/development" );
297+ assertThat (configProperties ).isNotNull ();
335298 }
336299
337300 @ Test
0 commit comments