Skip to content

Commit 5918a17

Browse files
committed
extract extension
1 parent 0faa939 commit 5918a17

File tree

4 files changed

+81
-114
lines changed

4 files changed

+81
-114
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package io.opentelemetry.sdk.extension.incubator.fileconfig;
2+
3+
import static org.mockito.Mockito.spy;
4+
import static org.mockito.Mockito.when;
5+
6+
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
7+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
8+
import java.util.Collections;
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
import org.junit.jupiter.api.extension.BeforeEachCallback;
12+
import org.junit.jupiter.api.extension.ExtensionContext;
13+
import org.mockito.Mockito;
14+
15+
public class ComponentProviderExtension implements BeforeEachCallback {
16+
17+
private final SpiHelper spiHelper =
18+
spy(SpiHelper.create(SpanExporterFactoryTest.class.getClassLoader()));
19+
private final DeclarativeConfigContext context = new DeclarativeConfigContext(spiHelper);
20+
21+
private List<ComponentProvider<?>> loadedComponentProviders = Collections.emptyList();
22+
23+
@SuppressWarnings("unchecked")
24+
@Override
25+
public void beforeEach(ExtensionContext context) throws Exception {
26+
when(spiHelper.load(ComponentProvider.class))
27+
.thenAnswer(
28+
invocation -> {
29+
List<ComponentProvider<?>> result =
30+
(List<ComponentProvider<?>>) invocation.callRealMethod();
31+
32+
// only capture first invocation for exporter, not second for authenticator
33+
if (loadedComponentProviders.isEmpty()) {
34+
loadedComponentProviders =
35+
result.stream().map(Mockito::spy).collect(Collectors.toList());
36+
return loadedComponentProviders;
37+
}
38+
return result;
39+
});
40+
}
41+
42+
public DeclarativeConfigContext getContext() {
43+
return context;
44+
}
45+
46+
public ComponentProvider<?> getComponentProvider(String name, Class<?> type) {
47+
return loadedComponentProviders.stream()
48+
.filter(
49+
componentProvider ->
50+
componentProvider.getName().equals(name)
51+
&& componentProvider.getType().equals(type))
52+
.findFirst()
53+
.orElseThrow(IllegalStateException::new);
54+
}
55+
}

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/LogRecordExporterFactoryTest.java

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import static org.assertj.core.api.Assertions.assertThat;
1010
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1111
import static org.mockito.ArgumentMatchers.any;
12-
import static org.mockito.Mockito.spy;
1312
import static org.mockito.Mockito.verify;
14-
import static org.mockito.Mockito.when;
1513

1614
import com.google.common.collect.ImmutableMap;
1715
import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension;
@@ -21,7 +19,6 @@
2119
import io.opentelemetry.exporter.otlp.http.logs.OtlpHttpLogRecordExporter;
2220
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
2321
import io.opentelemetry.internal.testing.CleanupExtension;
24-
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
2522
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
2623
import io.opentelemetry.sdk.extension.incubator.fileconfig.component.LogRecordExporterComponentProvider;
2724
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalOtlpFileExporterModel;
@@ -37,16 +34,12 @@
3734
import java.time.Duration;
3835
import java.util.ArrayList;
3936
import java.util.Arrays;
40-
import java.util.Collections;
4137
import java.util.List;
42-
import java.util.stream.Collectors;
43-
import org.junit.jupiter.api.BeforeEach;
4438
import org.junit.jupiter.api.Test;
4539
import org.junit.jupiter.api.extension.ExtendWith;
4640
import org.junit.jupiter.api.extension.RegisterExtension;
4741
import org.junit.jupiter.api.io.TempDir;
4842
import org.mockito.ArgumentCaptor;
49-
import org.mockito.Mockito;
5043
import org.mockito.junit.jupiter.MockitoExtension;
5144
import org.mockito.junit.jupiter.MockitoSettings;
5245
import org.mockito.quality.Strictness;
@@ -63,34 +56,10 @@ class LogRecordExporterFactoryTest {
6356

6457
@RegisterExtension CleanupExtension cleanup = new CleanupExtension();
6558

66-
private final SpiHelper spiHelper =
67-
spy(SpiHelper.create(SpanExporterFactoryTest.class.getClassLoader()));
68-
private final DeclarativeConfigContext context = new DeclarativeConfigContext(spiHelper);
69-
private List<ComponentProvider<?>> loadedComponentProviders = Collections.emptyList();
70-
71-
@BeforeEach
72-
@SuppressWarnings("unchecked")
73-
void setup() {
74-
when(spiHelper.load(ComponentProvider.class))
75-
.thenAnswer(
76-
invocation -> {
77-
List<ComponentProvider<?>> result =
78-
(List<ComponentProvider<?>>) invocation.callRealMethod();
79-
loadedComponentProviders =
80-
result.stream().map(Mockito::spy).collect(Collectors.toList());
81-
return loadedComponentProviders;
82-
});
83-
}
59+
@RegisterExtension
60+
ComponentProviderExtension componentProviderExtension = new ComponentProviderExtension();
8461

85-
private ComponentProvider<?> getComponentProvider(String name, Class<?> type) {
86-
return loadedComponentProviders.stream()
87-
.filter(
88-
componentProvider ->
89-
componentProvider.getName().equals(name)
90-
&& componentProvider.getType().equals(type))
91-
.findFirst()
92-
.orElseThrow(IllegalStateException::new);
93-
}
62+
private final DeclarativeConfigContext context = componentProviderExtension.getContext();
9463

9564
@Test
9665
void create_OtlpHttpDefaults() {
@@ -112,7 +81,7 @@ void create_OtlpHttpDefaults() {
11281
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
11382
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
11483
ComponentProvider<?> componentProvider =
115-
getComponentProvider("otlp_http", LogRecordExporter.class);
84+
componentProviderExtension.getComponentProvider("otlp_http", LogRecordExporter.class);
11685
verify(componentProvider).create(configCaptor.capture(), any());
11786
DeclarativeConfigProperties configProperties = configCaptor.getValue();
11887
assertThat(configProperties.getString("protocol")).isNull();
@@ -178,7 +147,7 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
178147
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
179148
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
180149
ComponentProvider<?> componentProvider =
181-
getComponentProvider("otlp_http", LogRecordExporter.class);
150+
componentProviderExtension.getComponentProvider("otlp_http", LogRecordExporter.class);
182151
verify(componentProvider).create(configCaptor.capture(), any());
183152
DeclarativeConfigProperties configProperties = configCaptor.getValue();
184153
assertThat(configProperties.getString("endpoint")).isEqualTo("http://example:4318/v1/logs");
@@ -222,7 +191,7 @@ void create_OtlpGrpcDefaults() {
222191
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
223192
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
224193
ComponentProvider<?> componentProvider =
225-
getComponentProvider("otlp_grpc", LogRecordExporter.class);
194+
componentProviderExtension.getComponentProvider("otlp_grpc", LogRecordExporter.class);
226195
verify(componentProvider).create(configCaptor.capture(), any());
227196
DeclarativeConfigProperties configProperties = configCaptor.getValue();
228197
assertThat(configProperties.getString("endpoint")).isNull();
@@ -287,7 +256,7 @@ void create_OtlpGrpcConfigured(@TempDir Path tempDir)
287256
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
288257
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
289258
ComponentProvider<?> componentProvider =
290-
getComponentProvider("otlp_grpc", LogRecordExporter.class);
259+
componentProviderExtension.getComponentProvider("otlp_grpc", LogRecordExporter.class);
291260
verify(componentProvider).create(configCaptor.capture(), any());
292261
DeclarativeConfigProperties configProperties = configCaptor.getValue();
293262
assertThat(configProperties.getString("endpoint")).isEqualTo("http://example:4317");
@@ -331,7 +300,7 @@ void create_OtlpFile() {
331300
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
332301
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
333302
ComponentProvider<?> componentProvider =
334-
getComponentProvider("otlp_file/development", LogRecordExporter.class);
303+
componentProviderExtension.getComponentProvider("otlp_file/development", LogRecordExporter.class);
335304
verify(componentProvider).create(configCaptor.capture(), any());
336305
}
337306

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/MetricExporterFactoryTest.java

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,11 @@ class MetricExporterFactoryTest {
6969

7070
@RegisterExtension CleanupExtension cleanup = new CleanupExtension();
7171

72-
private final SpiHelper spiHelper =
73-
spy(SpiHelper.create(SpanExporterFactoryTest.class.getClassLoader()));
74-
private final DeclarativeConfigContext context = new DeclarativeConfigContext(spiHelper);
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-
loadedComponentProviders =
86-
result.stream().map(Mockito::spy).collect(Collectors.toList());
87-
return loadedComponentProviders;
88-
});
89-
}
72+
@RegisterExtension
73+
ComponentProviderExtension componentProviderExtension = new ComponentProviderExtension();
9074

91-
private ComponentProvider<?> getComponentProvider(String name, Class<?> type) {
92-
return loadedComponentProviders.stream()
93-
.filter(
94-
componentProvider ->
95-
componentProvider.getName().equals(name)
96-
&& componentProvider.getType().equals(type))
97-
.findFirst()
98-
.orElseThrow(IllegalStateException::new);
99-
}
75+
private final DeclarativeConfigContext context =
76+
componentProviderExtension.getContext();
10077

10178
@Test
10279
void create_OtlpHttpDefaults() {
@@ -117,7 +94,7 @@ void create_OtlpHttpDefaults() {
11794
ArgumentCaptor<DeclarativeConfigProperties> configCaptor =
11895
ArgumentCaptor.forClass(DeclarativeConfigProperties.class);
11996
ComponentProvider<?> componentProvider =
120-
getComponentProvider("otlp_http", MetricExporter.class);
97+
componentProviderExtension.getComponentProvider("otlp_http", MetricExporter.class);
12198
verify(componentProvider).create(configCaptor.capture(), any());
12299
DeclarativeConfigProperties configProperties = configCaptor.getValue();
123100
assertThat(configProperties.getString("protocol")).isNull();

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SpanExporterFactoryTest.java

Lines changed: 13 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
import static org.assertj.core.api.Assertions.assertThat;
1010
import static org.assertj.core.api.Assertions.assertThatThrownBy;
1111
import static org.mockito.ArgumentMatchers.any;
12-
import static org.mockito.Mockito.spy;
1312
import static org.mockito.Mockito.verify;
14-
import static org.mockito.Mockito.when;
1513

1614
import com.google.common.collect.ImmutableMap;
1715
import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension;
@@ -23,7 +21,6 @@
2321
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
2422
import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter;
2523
import io.opentelemetry.internal.testing.CleanupExtension;
26-
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
2724
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
2825
import io.opentelemetry.sdk.extension.incubator.fileconfig.component.SpanExporterComponentProvider;
2926
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.AuthenticatorModel;
@@ -44,14 +41,11 @@
4441
import java.util.Arrays;
4542
import java.util.Collections;
4643
import java.util.List;
47-
import java.util.stream.Collectors;
48-
import org.junit.jupiter.api.BeforeEach;
4944
import org.junit.jupiter.api.Test;
5045
import org.junit.jupiter.api.extension.ExtendWith;
5146
import org.junit.jupiter.api.extension.RegisterExtension;
5247
import org.junit.jupiter.api.io.TempDir;
5348
import org.mockito.ArgumentCaptor;
54-
import org.mockito.Mockito;
5549
import org.mockito.junit.jupiter.MockitoExtension;
5650
import org.mockito.junit.jupiter.MockitoSettings;
5751
import 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

Comments
 (0)