Skip to content

Commit d25ee3c

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

File tree

6 files changed

+159
-209
lines changed

6 files changed

+159
-209
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,69 @@
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+
/**
17+
* A ComponentLoader that delegates to the default loader but captures the configuration
18+
* passed to component providers for verification in tests.
19+
*/
20+
class CapturingComponentLoader implements ComponentLoader {
21+
private final ComponentLoader delegate;
22+
private final Map<String, DeclarativeConfigProperties> capturedConfigs = new ConcurrentHashMap<>();
23+
24+
CapturingComponentLoader(Class<?> testClass) {
25+
this.delegate = ComponentLoader.forClassLoader(testClass.getClassLoader());
26+
}
27+
28+
@Override
29+
public <T> Iterable<T> load(Class<T> spiClass) {
30+
// For ComponentProvider, we need to wrap them to capture config
31+
if (spiClass == ComponentProvider.class) {
32+
return createWrappedComponentProviders();
33+
}
34+
return delegate.load(spiClass);
35+
}
36+
37+
@SuppressWarnings("unchecked")
38+
private <T> Iterable<T> createWrappedComponentProviders() {
39+
List<T> wrappedProviders = new ArrayList<>();
40+
for (ComponentProvider provider : delegate.load(ComponentProvider.class)) {
41+
ComponentProvider wrapped = new ComponentProvider() {
42+
@Override
43+
public Class<?> getType() {
44+
return provider.getType();
45+
}
46+
47+
@Override
48+
public String getName() {
49+
return provider.getName();
50+
}
51+
52+
@Override
53+
public Object create(DeclarativeConfigProperties config) {
54+
// Capture the config for verification
55+
String key = ComponentProvider.class.getSimpleName() + ":" + getName();
56+
capturedConfigs.put(key, config);
57+
return provider.create(config);
58+
}
59+
};
60+
wrappedProviders.add((T) wrapped);
61+
}
62+
return wrappedProviders;
63+
}
64+
65+
DeclarativeConfigProperties getCapturedConfig(Class<?> spiClass, String name) {
66+
String key = spiClass.getSimpleName() + ":" + name;
67+
return capturedConfigs.get(key);
68+
}
69+
}

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: 27 additions & 71 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;
@@ -36,22 +33,12 @@
3633
import java.time.Duration;
3734
import java.util.ArrayList;
3835
import java.util.Arrays;
39-
import java.util.Collections;
4036
import java.util.List;
41-
import java.util.stream.Collectors;
4237
import org.junit.jupiter.api.BeforeEach;
4338
import org.junit.jupiter.api.Test;
44-
import org.junit.jupiter.api.extension.ExtendWith;
4539
import org.junit.jupiter.api.extension.RegisterExtension;
4640
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)
41+
5542
class LogRecordExporterFactoryTest {
5643

5744
@RegisterExtension
@@ -62,33 +49,15 @@ class LogRecordExporterFactoryTest {
6249

6350
@RegisterExtension CleanupExtension cleanup = new CleanupExtension();
6451

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();
52+
private CapturingComponentLoader capturingComponentLoader;
53+
private SpiHelper spiHelper;
54+
private DeclarativeConfigContext context;
6955

7056
@BeforeEach
71-
@SuppressWarnings("unchecked")
7257
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);
58+
capturingComponentLoader = new CapturingComponentLoader(LogRecordExporterFactoryTest.class);
59+
spiHelper = SpiHelper.create(capturingComponentLoader);
60+
context = new DeclarativeConfigContext(spiHelper);
9261
}
9362

9463
@Test
@@ -106,14 +75,10 @@ void create_OtlpHttpDefaults() {
10675

10776
assertThat(exporter.toString()).isEqualTo(expectedExporter.toString());
10877

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();
78+
// Verify the configuration passed to the component provider
79+
DeclarativeConfigProperties configProperties =
80+
capturingComponentLoader.getCapturedConfig(ComponentProvider.class, "otlp_http");
81+
assertThat(configProperties).isNotNull();
11782
assertThat(configProperties.getString("protocol")).isNull();
11883
assertThat(configProperties.getString("endpoint")).isNull();
11984
assertThat(configProperties.getStructured("headers")).isNull();
@@ -174,12 +139,10 @@ void create_OtlpHttpConfigured(@TempDir Path tempDir)
174139

175140
assertThat(exporter.toString()).isEqualTo(expectedExporter.toString());
176141

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();
142+
// Verify the configuration passed to the component provider
143+
DeclarativeConfigProperties configProperties =
144+
capturingComponentLoader.getCapturedConfig(ComponentProvider.class, "otlp_http");
145+
assertThat(configProperties).isNotNull();
183146
assertThat(configProperties.getString("endpoint")).isEqualTo("http://example:4318/v1/logs");
184147
List<DeclarativeConfigProperties> headers = configProperties.getStructuredList("headers");
185148
assertThat(headers)
@@ -216,14 +179,10 @@ void create_OtlpGrpcDefaults() {
216179

217180
assertThat(exporter.toString()).isEqualTo(expectedExporter.toString());
218181

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();
182+
// Verify the configuration passed to the component provider
183+
DeclarativeConfigProperties configProperties =
184+
capturingComponentLoader.getCapturedConfig(ComponentProvider.class, "otlp_grpc");
185+
assertThat(configProperties).isNotNull();
227186
assertThat(configProperties.getString("endpoint")).isNull();
228187
assertThat(configProperties.getStructured("headers")).isNull();
229188
assertThat(configProperties.getString("compression")).isNull();
@@ -283,12 +242,10 @@ void create_OtlpGrpcConfigured(@TempDir Path tempDir)
283242

284243
assertThat(exporter.toString()).isEqualTo(expectedExporter.toString());
285244

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();
245+
// Verify the configuration passed to the component provider
246+
DeclarativeConfigProperties configProperties =
247+
capturingComponentLoader.getCapturedConfig(ComponentProvider.class, "otlp_grpc");
248+
assertThat(configProperties).isNotNull();
292249
assertThat(configProperties.getString("endpoint")).isEqualTo("http://example:4317");
293250
List<DeclarativeConfigProperties> headers = configProperties.getStructuredList("headers");
294251
assertThat(headers)
@@ -327,11 +284,10 @@ void create_OtlpFile() {
327284

328285
assertThat(exporter.toString()).isEqualTo(expectedExporter.toString());
329286

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());
287+
// Verify the configuration passed to the component provider
288+
DeclarativeConfigProperties configProperties =
289+
capturingComponentLoader.getCapturedConfig(ComponentProvider.class, "otlp_file/development");
290+
assertThat(configProperties).isNotNull();
335291
}
336292

337293
@Test

0 commit comments

Comments
 (0)