Skip to content

Commit c3590d0

Browse files
committed
bring back xray
1 parent 595a02f commit c3590d0

File tree

6 files changed

+192
-218
lines changed

6 files changed

+192
-218
lines changed

sdk-extensions/incubator/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ dependencies {
4040
testImplementation(project(":exporters:zipkin"))
4141
testImplementation(project(":sdk-extensions:jaeger-remote-sampler"))
4242
testImplementation(project(":extensions:trace-propagators"))
43-
// testImplementation("io.opentelemetry.contrib:opentelemetry-aws-xray-propagator")
43+
testImplementation("io.opentelemetry.contrib:opentelemetry-aws-xray-propagator")
4444
testImplementation("com.linecorp.armeria:armeria-junit5")
4545

4646
testImplementation("com.google.guava:guava-testlib")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.sdk.extension.incubator.fileconfig;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.common.ComponentLoader;
10+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.concurrent.ConcurrentHashMap;
15+
16+
class CapturingComponentLoader implements ComponentLoader {
17+
18+
private final ComponentLoader delegate;
19+
private final Map<String, DeclarativeConfigProperties> capturedConfigs =
20+
new ConcurrentHashMap<>();
21+
22+
CapturingComponentLoader() {
23+
this.delegate = ComponentLoader.forClassLoader(getClass().getClassLoader());
24+
}
25+
26+
DeclarativeConfigProperties getCapturedConfig(String name) {
27+
return capturedConfigs.get(name);
28+
}
29+
30+
@Override
31+
public <T> Iterable<T> load(Class<T> spiClass) {
32+
// For ComponentProvider, we need to wrap them to capture config
33+
if (spiClass == ComponentProvider.class) {
34+
return createWrappedComponentProviders();
35+
}
36+
return delegate.load(spiClass);
37+
}
38+
39+
@SuppressWarnings("unchecked")
40+
private <T> Iterable<T> createWrappedComponentProviders() {
41+
List<T> wrappedProviders = new ArrayList<>();
42+
for (ComponentProvider provider : delegate.load(ComponentProvider.class)) {
43+
ComponentProvider wrapped = new CapturingComponentProvider(provider);
44+
wrappedProviders.add((T) wrapped);
45+
}
46+
return wrappedProviders;
47+
}
48+
49+
private class CapturingComponentProvider implements ComponentProvider {
50+
private final ComponentProvider delegate;
51+
52+
CapturingComponentProvider(ComponentProvider delegate) {
53+
this.delegate = delegate;
54+
}
55+
56+
@Override
57+
public Class<?> getType() {
58+
return delegate.getType();
59+
}
60+
61+
@Override
62+
public String getName() {
63+
return delegate.getName();
64+
}
65+
66+
@Override
67+
public Object create(DeclarativeConfigProperties config) {
68+
capturedConfigs.put(getName(), config);
69+
return delegate.create(config);
70+
}
71+
}
72+
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ void parseAndCreate_Examples(@TempDir Path tempDir)
7575
new String(Files.readAllBytes(example.toPath()), StandardCharsets.UTF_8);
7676
String rewrittenExampleContent =
7777
exampleContent
78-
.replaceAll(",xray", "")
7978
.replaceAll(
8079
"certificate_file: .*\n",
8180
"certificate_file: "

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

Lines changed: 37 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
import static io.opentelemetry.sdk.extension.incubator.fileconfig.FileConfigTestUtil.createTempFileWithContent;
99
import static org.assertj.core.api.Assertions.assertThat;
1010
import 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

1512
import com.google.common.collect.ImmutableMap;
1613
import com.linecorp.armeria.testing.junit5.server.SelfSignedCertificateExtension;
@@ -21,7 +18,6 @@
2118
import io.opentelemetry.exporter.otlp.logs.OtlpGrpcLogRecordExporter;
2219
import io.opentelemetry.internal.testing.CleanupExtension;
2320
import io.opentelemetry.sdk.autoconfigure.internal.SpiHelper;
24-
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
2521
import io.opentelemetry.sdk.extension.incubator.fileconfig.component.LogRecordExporterComponentProvider;
2622
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.ExperimentalOtlpFileExporterModel;
2723
import io.opentelemetry.sdk.extension.incubator.fileconfig.internal.model.LogRecordExporterModel;
@@ -36,22 +32,12 @@
3632
import java.time.Duration;
3733
import java.util.ArrayList;
3834
import java.util.Arrays;
39-
import java.util.Collections;
4035
import java.util.List;
41-
import java.util.stream.Collectors;
4236
import org.junit.jupiter.api.BeforeEach;
4337
import org.junit.jupiter.api.Test;
44-
import org.junit.jupiter.api.extension.ExtendWith;
4538
import org.junit.jupiter.api.extension.RegisterExtension;
4639
import 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+
5541
class 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

Comments
 (0)