Skip to content

Commit 3161309

Browse files
committed
convert spring boot smoke test to java
1 parent fed0015 commit 3161309

File tree

11 files changed

+238
-153
lines changed

11 files changed

+238
-153
lines changed

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

Lines changed: 6 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(
@@ -104,6 +104,10 @@ private String waitForContent(String path) throws InterruptedException {
104104
TimeUnit.MILLISECONDS.sleep(500);
105105
}
106106

107+
if ("true".equals(System.getenv("debug"))) {
108+
System.out.println(content);
109+
}
110+
107111
return content;
108112
}
109113

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55

66
package io.opentelemetry.smoketest;
77

8+
import java.util.function.Consumer;
9+
import org.testcontainers.containers.output.OutputFrame;
10+
811
@FunctionalInterface
912
public interface TargetRunner {
10-
void runInTarget() throws Exception;
13+
void runInTarget(Consumer<OutputFrame> startTarget) throws Exception;
1114
}

smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SpringBootSmokeTest.groovy

Lines changed: 0 additions & 116 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,6 @@ protected TargetWaitStrategy getWaitStrategy() {
2828
@DisplayName("verifies that debug logging is working by checking for a debug log on startup")
2929
@Test
3030
void verifyLogging() throws Exception {
31-
withTarget(8, () -> {});
31+
runTarget(8, output -> {});
3232
}
3333
}

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

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,29 @@
77

88
import static java.util.Collections.emptyList;
99
import static java.util.Collections.emptyMap;
10+
import static java.util.stream.Collectors.toSet;
1011

12+
import io.opentelemetry.instrumentation.testing.junit.MetricsAssert;
1113
import io.opentelemetry.sdk.logs.data.LogRecordData;
12-
import io.opentelemetry.sdk.metrics.data.MetricData;
14+
import io.opentelemetry.sdk.testing.assertj.MetricAssert;
1315
import io.opentelemetry.sdk.trace.data.SpanData;
1416
import io.opentelemetry.smoketest.windows.WindowsTestContainerManager;
1517
import io.opentelemetry.testing.internal.armeria.client.WebClient;
1618
import java.util.Collection;
1719
import java.util.List;
1820
import java.util.Map;
21+
import java.util.Set;
1922
import java.util.function.Consumer;
23+
import java.util.regex.Pattern;
24+
import java.util.stream.Stream;
2025
import org.junit.jupiter.api.BeforeEach;
2126
import org.testcontainers.containers.output.OutputFrame;
27+
import org.testcontainers.containers.output.ToStringConsumer;
2228

2329
public abstract class JavaSmokeTest {
30+
private static final Pattern TRACE_ID_PATTERN =
31+
Pattern.compile(".*trace_id=(?<traceId>[a-zA-Z0-9]+).*");
32+
2433
protected static final TestContainerManager containerManager = createContainerManager();
2534
private JavaTelemetryRetriever telemetryRetriever;
2635

@@ -65,16 +74,16 @@ void setUp() {
6574
telemetryRetriever = new JavaTelemetryRetriever(containerManager.getBackendMappedPort());
6675
}
6776

68-
public void withTarget(int jdk, TargetRunner runner) throws Exception {
69-
startTarget(jdk);
77+
public void runTarget(int jdk, TargetRunner runner) throws Exception {
78+
Consumer<OutputFrame> startTarget = startTarget(jdk);
7079
try {
71-
runner.runInTarget();
80+
runner.runInTarget(startTarget);
7281
} finally {
7382
stopTarget();
7483
}
7584
}
7685

77-
public Consumer<OutputFrame> startTarget(int jdk) {
86+
private Consumer<OutputFrame> startTarget(int jdk) {
7887
return startTarget(String.valueOf(jdk), null, false);
7988
}
8089

@@ -110,7 +119,7 @@ public void cleanup() {
110119
telemetryRetriever.clearTelemetry();
111120
}
112121

113-
public void stopTarget() {
122+
private void stopTarget() {
114123
containerManager.stopTarget();
115124
cleanup();
116125
}
@@ -119,14 +128,36 @@ protected List<SpanData> waitForTraces() {
119128
return telemetryRetriever.waitForTraces();
120129
}
121130

122-
protected Collection<MetricData> waitForMetrics() {
123-
return telemetryRetriever.waitForMetrics();
131+
@SafeVarargs
132+
@SuppressWarnings("varargs")
133+
protected final void waitAndAssertMetrics(
134+
String instrumentationName, Consumer<MetricAssert>... assertions) {
135+
MetricsAssert.waitAndAssertMetrics(
136+
() -> telemetryRetriever.waitForMetrics(), instrumentationName, assertions);
124137
}
125138

126139
protected Collection<LogRecordData> waitForLogs() {
127140
return telemetryRetriever.waitForLogs();
128141
}
129142

143+
protected static boolean isVersionLogged(Consumer<OutputFrame> output, String version) {
144+
return logLines(output)
145+
.anyMatch(l -> l.contains("opentelemetry-javaagent - version: " + version));
146+
}
147+
148+
private static Stream<String> logLines(Consumer<OutputFrame> output) {
149+
return ((ToStringConsumer) output).toUtf8String().lines();
150+
}
151+
152+
protected static Set<String> getLoggedTraceIds(Consumer<OutputFrame> output) {
153+
return logLines(output).flatMap(l -> findTraceId(l)).collect(toSet());
154+
}
155+
156+
private static Stream<String> findTraceId(String log) {
157+
var m = TRACE_ID_PATTERN.matcher(log);
158+
return m.matches() ? Stream.of(m.group("traceId")) : Stream.empty();
159+
}
160+
130161
private static TestContainerManager createContainerManager() {
131162
return TestContainerManager.useWindowsContainers()
132163
? new WindowsTestContainerManager()

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ protected TargetWaitStrategy getWaitStrategy() {
3232
@ParameterizedTest
3333
@ValueSource(ints = {8, 11, 17})
3434
void shouldExportLogs(int jdk) throws Exception {
35-
withTarget(
35+
runTarget(
3636
jdk,
37-
() -> {
37+
output -> {
3838
client().get("/greeting").aggregate().join();
3939
Collection<LogRecordData> logs = waitForLogs();
4040

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ protected boolean getSetServiceName() {
3838
@ParameterizedTest
3939
@ValueSource(ints = {17, 21, 23}) // Quarkus 3.7+ requires Java 17+
4040
void quarkusSmokeTest(int jdk) throws Exception {
41-
withTarget(
41+
runTarget(
4242
jdk,
43-
() -> {
43+
output -> {
4444
String currentAgentVersion;
4545
try (JarFile agentJar = new JarFile(agentPath)) {
4646
currentAgentVersion =

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ protected Map<String, String> getExtraEnv() {
3131
@ParameterizedTest
3232
@ValueSource(ints = {8, 11, 17, 21, 23})
3333
void securityManagerSmokeTest(int jdk) throws Exception {
34-
withTarget(
34+
runTarget(
3535
jdk,
36-
() ->
36+
output ->
3737
assertThat(waitForTraces())
3838
.hasTracesSatisfyingExactly(
3939
trace -> trace.hasSpansSatisfyingExactly(span -> span.hasName("test"))));

0 commit comments

Comments
 (0)