Skip to content

Commit 7103fa4

Browse files
committed
convert groovy smoke tests to java
1 parent cf968e2 commit 7103fa4

File tree

4 files changed

+79
-37
lines changed

4 files changed

+79
-37
lines changed

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

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,21 @@
1010
import io.opentelemetry.sdk.metrics.data.MetricData;
1111
import io.opentelemetry.sdk.trace.data.SpanData;
1212
import io.opentelemetry.testing.internal.armeria.client.WebClient;
13-
import java.nio.charset.StandardCharsets;
13+
import io.opentelemetry.testing.internal.jackson.core.JsonProcessingException;
14+
import io.opentelemetry.testing.internal.jackson.databind.ObjectMapper;
15+
import io.opentelemetry.testing.internal.proto.collector.trace.v1.ExportTraceServiceRequest;
16+
import io.opentelemetry.testing.internal.protobuf.GeneratedMessage;
17+
import io.opentelemetry.testing.internal.protobuf.InvalidProtocolBufferException;
18+
import io.opentelemetry.testing.internal.protobuf.util.JsonFormat;
1419
import java.util.Collection;
1520
import java.util.Collections;
1621
import java.util.List;
1722
import java.util.concurrent.TimeUnit;
23+
import java.util.function.Supplier;
24+
import java.util.stream.Collectors;
1825

1926
public class JavaTelemetryRetriever {
27+
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
2028
private final WebClient client;
2129

2230
public JavaTelemetryRetriever(int backendPort) {
@@ -28,49 +36,76 @@ public void clearTelemetry() {
2836
}
2937

3038
public List<SpanData> waitForTraces() {
31-
try {
32-
return TelemetryConverter.getSpanData(
33-
Collections.singletonList(waitForContent("get-traces")));
34-
} catch (InterruptedException e) {
35-
throw new RuntimeException(e);
36-
}
39+
Collection<ExportTraceServiceRequest> requests =
40+
waitForTelemetry("get-traces", () -> ExportTraceServiceRequest.newBuilder());
41+
return TelemetryConverter.getSpanData(
42+
requests.stream()
43+
.flatMap(r -> r.getResourceSpansList().stream())
44+
.collect(Collectors.toList()));
3745
}
3846

3947
public Collection<MetricData> waitForMetrics() {
40-
try {
41-
return TelemetryConverter.getMetricsData(
42-
Collections.singletonList(waitForContent("get-metrics")));
43-
} catch (InterruptedException e) {
44-
throw new RuntimeException(e);
45-
}
48+
// try {
49+
// return TelemetryConverter.getMetricsData(singletonList(waitForContent("get-metrics")));
50+
// } catch (InterruptedException e) {
51+
// throw new RuntimeException(e);
52+
// }
53+
// todo
54+
return Collections.emptyList();
4655
}
4756

4857
public Collection<LogRecordData> waitForLogs() {
58+
// try {
59+
// return TelemetryConverter.getLogRecordData(singletonList(waitForContent("get-logs")));
60+
// } catch (InterruptedException e) {
61+
// throw new RuntimeException(e);
62+
// }
63+
// todo
64+
return Collections.emptyList();
65+
}
66+
67+
@SuppressWarnings({"unchecked", "rawtypes"})
68+
private <T extends GeneratedMessage, B extends GeneratedMessage.Builder>
69+
Collection<T> waitForTelemetry(String path, Supplier<B> builderConstructor) {
4970
try {
50-
return TelemetryConverter.getLogRecordData(
51-
Collections.singletonList(waitForContent("get-logs")));
52-
} catch (InterruptedException e) {
71+
return OBJECT_MAPPER
72+
.readTree(waitForContent(path))
73+
.valueStream()
74+
.map(
75+
it -> {
76+
B builder = builderConstructor.get();
77+
// TODO: Register parser into object mapper to avoid de -> re -> deserialize.
78+
try {
79+
JsonFormat.parser().merge(OBJECT_MAPPER.writeValueAsString(it), builder);
80+
return (T) builder.build();
81+
} catch (InvalidProtocolBufferException | JsonProcessingException e) {
82+
throw new RuntimeException(e);
83+
}
84+
})
85+
.collect(Collectors.toList());
86+
} catch (InterruptedException
87+
| io.opentelemetry.testing.internal.jackson.core.JsonProcessingException e) {
5388
throw new RuntimeException(e);
5489
}
5590
}
5691

57-
private byte[] waitForContent(String path) throws InterruptedException {
92+
private String waitForContent(String path) throws InterruptedException {
5893
long previousSize = 0;
5994
long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(30);
60-
byte[] content = "[]".getBytes(StandardCharsets.UTF_8);
95+
String content = "[]";
6196
while (System.currentTimeMillis() < deadline) {
62-
content = client.get(path).aggregate().join().content().array();
63-
if (content.length > 2 && content.length == previousSize) {
97+
content = client.get(path).aggregate().join().contentUtf8();
98+
if (content.length() > 2 && content.length() == previousSize) {
6499
break;
65100
}
66101

67-
previousSize = content.length;
102+
previousSize = content.length();
68103
System.out.println("Current content size " + previousSize);
69104
TimeUnit.MILLISECONDS.sleep(500);
70105
}
71106

72107
// todo remove debug
73-
System.out.println(new String(content, StandardCharsets.UTF_8));
108+
// System.out.println(new String(content, StandardCharsets.UTF_8));
74109

75110
return content;
76111
}

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/internal/TelemetryConverter.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@
4646
import io.opentelemetry.sdk.trace.data.StatusData;
4747
import io.opentelemetry.testing.internal.proto.collector.logs.v1.ExportLogsServiceRequest;
4848
import io.opentelemetry.testing.internal.proto.collector.metrics.v1.ExportMetricsServiceRequest;
49-
import io.opentelemetry.testing.internal.proto.collector.trace.v1.ExportTraceServiceRequest;
5049
import io.opentelemetry.testing.internal.proto.common.v1.AnyValue;
5150
import io.opentelemetry.testing.internal.proto.common.v1.ArrayValue;
5251
import io.opentelemetry.testing.internal.proto.common.v1.InstrumentationScope;
@@ -94,19 +93,7 @@ public class TelemetryConverter {
9493
private static final boolean hasExtendedAttributes =
9594
classAvailable("io.opentelemetry.api.incubator.common.ExtendedAttributes");
9695

97-
public static List<SpanData> getSpanData(List<byte[]> exportRequests) {
98-
List<ResourceSpans> allResourceSpans =
99-
exportRequests.stream()
100-
.map(
101-
serialized -> {
102-
try {
103-
return ExportTraceServiceRequest.parseFrom(serialized);
104-
} catch (InvalidProtocolBufferException e) {
105-
throw new AssertionError(e);
106-
}
107-
})
108-
.flatMap(request -> request.getResourceSpansList().stream())
109-
.collect(toList());
96+
public static List<SpanData> getSpanData(Collection<ResourceSpans> allResourceSpans) {
11097
List<SpanData> spans = new ArrayList<>();
11198
for (ResourceSpans resourceSpans : allResourceSpans) {
11299
Resource resource = resourceSpans.getResource();

testing-common/src/main/java/io/opentelemetry/javaagent/testing/common/AgentTestingExporterAccess.java

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

66
package io.opentelemetry.javaagent.testing.common;
77

8+
import static java.util.stream.Collectors.toList;
9+
810
import io.opentelemetry.instrumentation.testing.internal.TelemetryConverter;
911
import io.opentelemetry.sdk.logs.data.LogRecordData;
1012
import io.opentelemetry.sdk.metrics.data.MetricData;
1113
import io.opentelemetry.sdk.trace.data.SpanData;
14+
import io.opentelemetry.testing.internal.proto.collector.trace.v1.ExportTraceServiceRequest;
15+
import io.opentelemetry.testing.internal.proto.trace.v1.ResourceSpans;
16+
import io.opentelemetry.testing.internal.protobuf.InvalidProtocolBufferException;
1217
import java.lang.invoke.MethodHandle;
1318
import java.lang.invoke.MethodHandles;
1419
import java.lang.invoke.MethodType;
@@ -75,7 +80,21 @@ public static boolean forceFlushCalled() {
7580
@SuppressWarnings("unchecked")
7681
public static List<SpanData> getExportedSpans() {
7782
try {
78-
return TelemetryConverter.getSpanData((List<byte[]>) getSpanExportRequests.invokeExact());
83+
List<byte[]> bytes = (List<byte[]>) getSpanExportRequests.invokeExact();
84+
List<ResourceSpans> allResourceSpans =
85+
bytes.stream()
86+
.map(
87+
serialized -> {
88+
try {
89+
return ExportTraceServiceRequest.parseFrom(serialized);
90+
} catch (InvalidProtocolBufferException e) {
91+
throw new AssertionError(e);
92+
}
93+
})
94+
.flatMap(request -> request.getResourceSpansList().stream())
95+
.collect(toList());
96+
97+
return TelemetryConverter.getSpanData(allResourceSpans);
7998
} catch (Throwable t) {
8099
throw new AssertionError("Could not invoke getSpanExportRequests", t);
81100
}

testing/proto-shaded-for-testing/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55

66
dependencies {
77
implementation("io.opentelemetry.proto:opentelemetry-proto")
8+
implementation("com.google.protobuf:protobuf-java-util:4.32.1")
89
}
910

1011
tasks {

0 commit comments

Comments
 (0)