Skip to content

Commit 2712ed5

Browse files
committed
smoke test extension
1 parent 1b2ae93 commit 2712ed5

File tree

7 files changed

+128
-15
lines changed

7 files changed

+128
-15
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.opentelemetry.smoketest;
2+
3+
import java.util.function.Consumer;
4+
import org.junit.jupiter.api.TestInstance;
5+
6+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
7+
public abstract class AbstractSmokeTest {
8+
public abstract void configureTelemetryRetriever(Consumer<JavaTelemetryRetriever> action);
9+
}

smoke-tests/src/main/java/io/opentelemetry/smoketest/JavaTelemetryRetriever.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ public List<SpanData> waitForTraces() {
4444
convert(requests, ExportTraceServiceRequest::getResourceSpansList));
4545
}
4646

47-
public Collection<MetricData> waitForMetrics() {
47+
public List<MetricData> waitForMetrics() {
4848
Collection<ExportMetricsServiceRequest> requests =
4949
waitForTelemetry("get-metrics", ExportMetricsServiceRequest::newBuilder);
5050
return TelemetryConverter.getMetricsData(
5151
convert(requests, ExportMetricsServiceRequest::getResourceMetricsList));
5252
}
5353

54-
public Collection<LogRecordData> waitForLogs() {
54+
public List<LogRecordData> waitForLogs() {
5555
Collection<ExportLogsServiceRequest> requests =
5656
waitForTelemetry("get-logs", ExportLogsServiceRequest::newBuilder);
5757
return TelemetryConverter.getLogRecordData(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.opentelemetry.smoketest;
2+
3+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
4+
import org.junit.jupiter.api.extension.ExtensionContext;
5+
6+
public class SmokeTestInstrumentationExtension extends InstrumentationExtension {
7+
private SmokeTestInstrumentationExtension() {
8+
super(SmokeTestRunner.instance());
9+
}
10+
11+
public static SmokeTestInstrumentationExtension create() {
12+
return new SmokeTestInstrumentationExtension();
13+
}
14+
15+
@Override
16+
public void beforeEach(ExtensionContext extensionContext) {
17+
Object testInstance = extensionContext.getRequiredTestInstance();
18+
19+
if (!(testInstance instanceof AbstractSmokeTest)) {
20+
throw new AssertionError(
21+
"SmokeTestInstrumentationExtension can only be applied to a subclass of "
22+
+ "AbstractSmokeTest");
23+
}
24+
25+
SmokeTestRunner smokeTestRunner = (SmokeTestRunner) getTestRunner();
26+
((AbstractSmokeTest) testInstance).configureTelemetryRetriever(
27+
smokeTestRunner::setTelemetryRetriever);
28+
29+
super.beforeEach(extensionContext);
30+
}
31+
}
32+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package io.opentelemetry.smoketest;
2+
3+
import io.opentelemetry.api.OpenTelemetry;
4+
import io.opentelemetry.instrumentation.testing.InstrumentationTestRunner;
5+
import io.opentelemetry.sdk.logs.data.LogRecordData;
6+
import io.opentelemetry.sdk.metrics.data.MetricData;
7+
import io.opentelemetry.sdk.trace.data.SpanData;
8+
import java.util.List;
9+
10+
public class SmokeTestRunner extends InstrumentationTestRunner {
11+
12+
private static final SmokeTestRunner INSTANCE = new SmokeTestRunner();
13+
14+
private JavaTelemetryRetriever telemetryRetriever;
15+
16+
public static SmokeTestRunner instance() {
17+
return INSTANCE;
18+
}
19+
20+
private SmokeTestRunner() {
21+
super(OpenTelemetry.noop());
22+
}
23+
24+
void setTelemetryRetriever(JavaTelemetryRetriever telemetryRetriever) {
25+
this.telemetryRetriever = telemetryRetriever;
26+
}
27+
28+
@Override
29+
public void beforeTestClass() {
30+
}
31+
32+
@Override
33+
public void afterTestClass() {
34+
}
35+
36+
@Override
37+
public void clearAllExportedData() {
38+
telemetryRetriever.clearTelemetry();
39+
}
40+
41+
@Override
42+
public OpenTelemetry getOpenTelemetry() {
43+
throw new UnsupportedOperationException();
44+
}
45+
46+
@Override
47+
public List<SpanData> getExportedSpans() {
48+
return telemetryRetriever.waitForTraces();
49+
}
50+
51+
@Override
52+
public List<MetricData> getExportedMetrics() {
53+
return telemetryRetriever.waitForMetrics();
54+
}
55+
56+
@Override
57+
public List<LogRecordData> getExportedLogRecords() {
58+
return telemetryRetriever.waitForLogs();
59+
}
60+
61+
@Override
62+
public boolean forceFlushCalled() {
63+
throw new UnsupportedOperationException();
64+
}
65+
}

smoke-tests/src/test/java/io/opentelemetry/smoketest/JavaSmokeTest.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
import java.util.List;
1818
import java.util.Map;
1919
import java.util.function.Consumer;
20-
import org.junit.jupiter.api.BeforeEach;
20+
import org.junit.jupiter.api.BeforeAll;
2121
import org.testcontainers.containers.output.OutputFrame;
2222

23-
public abstract class JavaSmokeTest {
23+
public abstract class JavaSmokeTest extends AbstractSmokeTest {
2424
protected static final TestContainerManager containerManager = createContainerManager();
2525
private JavaTelemetryRetriever telemetryRetriever;
2626

@@ -59,7 +59,7 @@ protected List<Integer> getExtraPorts() {
5959
return emptyList();
6060
}
6161

62-
@BeforeEach
62+
@BeforeAll
6363
void setUp() {
6464
containerManager.startEnvironmentOnce();
6565
telemetryRetriever = new JavaTelemetryRetriever(containerManager.getBackendMappedPort());
@@ -132,4 +132,9 @@ private static TestContainerManager createContainerManager() {
132132
? new WindowsTestContainerManager()
133133
: new LinuxTestContainerManager();
134134
}
135+
136+
@Override
137+
public void configureTelemetryRetriever(Consumer<JavaTelemetryRetriever> action) {
138+
action.accept(telemetryRetriever);
139+
}
135140
}

smoke-tests/src/test/java/io/opentelemetry/smoketest/SecurityManagerSmokeTest.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55

66
package io.opentelemetry.smoketest;
77

8-
import static io.opentelemetry.sdk.testing.assertj.TracesAssert.assertThat;
9-
8+
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
9+
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1010
import java.util.Collections;
1111
import java.util.Map;
1212
import org.junit.jupiter.api.condition.DisabledIf;
13+
import org.junit.jupiter.api.extension.RegisterExtension;
1314
import org.junit.jupiter.params.ParameterizedTest;
1415
import org.junit.jupiter.params.provider.ValueSource;
1516

1617
@DisabledIf("io.opentelemetry.smoketest.TestContainerManager#useWindowsContainers")
1718
class SecurityManagerSmokeTest extends JavaSmokeTest {
19+
@RegisterExtension static final InstrumentationExtension testing = SmokeTestInstrumentationExtension.create();
20+
@RegisterExtension static final AutoCleanupExtension autoCleanup = AutoCleanupExtension.create();
21+
1822
@Override
1923
protected String getTargetImage(String jdk) {
2024
return "ghcr.io/open-telemetry/opentelemetry-java-instrumentation/smoke-test-security-manager:jdk"
@@ -30,12 +34,10 @@ protected Map<String, String> getExtraEnv() {
3034

3135
@ParameterizedTest
3236
@ValueSource(ints = {8, 11, 17, 21, 23})
33-
void securityManagerSmokeTest(int jdk) throws Exception {
34-
withTarget(
35-
jdk,
36-
() ->
37-
assertThat(waitForTraces())
38-
.hasTracesSatisfyingExactly(
39-
trace -> trace.hasSpansSatisfyingExactly(span -> span.hasName("test"))));
37+
void securityManagerSmokeTest(int jdk) {
38+
startTarget(jdk);
39+
autoCleanup.deferCleanup(this::stopTarget);
40+
41+
testing.waitAndAssertTraces(trace -> trace.hasSpansSatisfyingExactly(span -> span.hasName("test")));
4042
}
4143
}

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/TelemetryDataUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static void assertScopeVersion(List<List<SpanData>> traces) {
9393
for (List<SpanData> trace : traces) {
9494
for (SpanData span : trace) {
9595
InstrumentationScopeInfo scopeInfo = span.getInstrumentationScopeInfo();
96-
if (!scopeInfo.getName().equals("test")) {
96+
if (!scopeInfo.getName().startsWith("test")) {
9797
assertThat(scopeInfo.getVersion())
9898
.as(
9999
"Instrumentation version of module %s was empty; make sure that the "

0 commit comments

Comments
 (0)