Skip to content

Commit 84e637f

Browse files
committed
convert groovy smoke tests to java
1 parent 9943972 commit 84e637f

File tree

4 files changed

+116
-146
lines changed

4 files changed

+116
-146
lines changed

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import static java.util.Collections.emptyList;
99
import static java.util.Collections.emptyMap;
1010

11-
import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest;
12-
import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest;
11+
import io.opentelemetry.sdk.logs.data.LogRecordData;
12+
import io.opentelemetry.sdk.metrics.data.MetricData;
1313
import io.opentelemetry.sdk.trace.data.SpanData;
1414
import io.opentelemetry.smoketest.windows.WindowsTestContainerManager;
1515
import io.opentelemetry.testing.internal.armeria.client.WebClient;
@@ -109,11 +109,11 @@ protected List<SpanData> waitForTraces() {
109109
return telemetryRetriever.waitForTraces();
110110
}
111111

112-
protected Collection<ExportMetricsServiceRequest> waitForMetrics() {
112+
protected Collection<MetricData> waitForMetrics() {
113113
return telemetryRetriever.waitForMetrics();
114114
}
115115

116-
protected Collection<ExportLogsServiceRequest> waitForLogs() {
116+
protected Collection<LogRecordData> waitForLogs() {
117117
return telemetryRetriever.waitForLogs();
118118
}
119119

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

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,18 @@
55

66
package io.opentelemetry.smoketest;
77

8-
import com.fasterxml.jackson.core.JsonProcessingException;
9-
import com.fasterxml.jackson.databind.ObjectMapper;
10-
import io.opentelemetry.testing.internal.protobuf.GeneratedMessage;
11-
import io.opentelemetry.testing.internal.protobuf.InvalidProtocolBufferException;
12-
import com.google.protobuf.util.JsonFormat;
138
import io.opentelemetry.javaagent.testing.common.AgentTestingExporterAccess;
14-
import io.opentelemetry.testing.internal.proto.collector.logs.v1.ExportLogsServiceRequest;
15-
import io.opentelemetry.testing.internal.proto.collector.metrics.v1.ExportMetricsServiceRequest;
9+
import io.opentelemetry.sdk.logs.data.LogRecordData;
10+
import io.opentelemetry.sdk.metrics.data.MetricData;
1611
import io.opentelemetry.sdk.trace.data.SpanData;
1712
import io.opentelemetry.testing.internal.armeria.client.WebClient;
18-
import io.opentelemetry.testing.internal.proto.collector.trace.v1.ExportTraceServiceRequest;
13+
import java.nio.charset.StandardCharsets;
1914
import java.util.Collection;
15+
import java.util.Collections;
2016
import java.util.List;
2117
import java.util.concurrent.TimeUnit;
22-
import java.util.function.Supplier;
23-
import java.util.stream.Collectors;
2418

2519
public class JavaTelemetryRetriever {
26-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
2720
private final WebClient client;
2821

2922
public JavaTelemetryRetriever(int backendPort) {
@@ -35,58 +28,37 @@ public void clearTelemetry() {
3528
}
3629

3730
public List<SpanData> waitForTraces() {
38-
Collection<ExportTraceServiceRequest> collection =
39-
waitForTelemetry("get-traces", () -> {
40-
ExportTraceServiceRequest.Builder builder = ExportTraceServiceRequest.newBuilder();
41-
return builder;
42-
});
43-
return AgentTestingExporterAccess.getSpanData(
44-
collection.stream().flatMap(req -> req.getResourceSpansList().stream()));
45-
}
46-
47-
public Collection<ExportMetricsServiceRequest> waitForMetrics() {
48-
return waitForTelemetry("get-metrics", () -> ExportMetricsServiceRequest.newBuilder());
31+
try {
32+
return AgentTestingExporterAccess.getSpanData(
33+
Collections.singletonList(waitForContent("get-traces")));
34+
} catch (InterruptedException e) {
35+
throw new RuntimeException(e);
36+
}
4937
}
5038

51-
public Collection<ExportLogsServiceRequest> waitForLogs() {
52-
return waitForTelemetry("get-logs", () -> ExportLogsServiceRequest.newBuilder());
39+
public Collection<MetricData> waitForMetrics() {
40+
// return waitForTelemetry("get-metrics", () -> ExportMetricsServiceRequest.newBuilder());
41+
// todo
42+
return Collections.emptyList();
5343
}
5444

55-
@SuppressWarnings({"unchecked", "rawtypes"})
56-
private <T extends GeneratedMessage, B extends GeneratedMessage.Builder>
57-
Collection<T> waitForTelemetry(String path, Supplier<B> builderConstructor) {
58-
try {
59-
return OBJECT_MAPPER
60-
.readTree(waitForContent(path))
61-
.valueStream()
62-
.map(
63-
it -> {
64-
B builder = builderConstructor.get();
65-
// TODO: Register parser into object mapper to avoid de -> re -> deserialize.
66-
try {
67-
JsonFormat.parser().merge(OBJECT_MAPPER.writeValueAsString(it), builder);
68-
return (T) builder.build();
69-
} catch (InvalidProtocolBufferException | JsonProcessingException e) {
70-
throw new RuntimeException(e);
71-
}
72-
})
73-
.collect(Collectors.toList());
74-
} catch (JsonProcessingException | InterruptedException e) {
75-
throw new RuntimeException(e);
76-
}
45+
public Collection<LogRecordData> waitForLogs() {
46+
// return waitForTelemetry("get-logs", () -> ExportLogsServiceRequest.newBuilder());
47+
// todo
48+
return Collections.emptyList();
7749
}
7850

79-
private String waitForContent(String path) throws InterruptedException {
51+
private byte[] waitForContent(String path) throws InterruptedException {
8052
long previousSize = 0;
8153
long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(30);
82-
String content = "[]";
54+
byte[] content = "[]".getBytes(StandardCharsets.UTF_8);
8355
while (System.currentTimeMillis() < deadline) {
84-
content = client.get(path).aggregate().join().contentUtf8();
85-
if (content.length() > 2 && content.length() == previousSize) {
56+
content = client.get(path).aggregate().join().content().array();
57+
if (content.length > 2 && content.length == previousSize) {
8658
break;
8759
}
8860

89-
previousSize = content.length();
61+
previousSize = content.length;
9062
System.out.println("Current content size " + previousSize);
9163
TimeUnit.MILLISECONDS.sleep(500);
9264
}

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99

1010
import java.util.Collections;
1111
import java.util.Map;
12-
import org.junit.jupiter.api.Test;
1312
import org.junit.jupiter.api.condition.DisabledIf;
13+
import org.junit.jupiter.params.ParameterizedTest;
14+
import org.junit.jupiter.params.provider.ValueSource;
1415

1516
@DisabledIf("io.opentelemetry.smoketest.TestContainerManager#useWindowsContainers")
1617
public class SecurityManagerSmokeTest extends JavaSmokeTest {
@@ -27,7 +28,8 @@ protected Map<String, String> getExtraEnv() {
2728
"OTEL_JAVAAGENT_EXPERIMENTAL_SECURITY_MANAGER_SUPPORT_ENABLED", "true");
2829
}
2930

30-
@Test
31+
@ParameterizedTest
32+
@ValueSource(ints = {8, 11, 17, 21, 23})
3133
public void security_manager_smoke_test_on_JDK__jdk(int jdk) {
3234
startTarget(jdk);
3335

@@ -36,8 +38,5 @@ public void security_manager_smoke_test_on_JDK__jdk(int jdk) {
3638
trace -> trace.hasSpansSatisfyingExactly(span -> span.hasName("test")));
3739

3840
stopTarget();
39-
40-
// where: DefaultGroovyMethods.leftShift(jdk, new ArrayList<Integer>(Arrays.asList(8, 11, 17,
41-
// 21, 23)));
4241
}
4342
}

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

Lines changed: 85 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
import io.opentelemetry.testing.internal.proto.metrics.v1.Sum;
7070
import io.opentelemetry.testing.internal.proto.metrics.v1.SummaryDataPoint;
7171
import io.opentelemetry.testing.internal.proto.resource.v1.Resource;
72-
import io.opentelemetry.testing.internal.proto.trace.v1.ResourceSpans;
7372
import io.opentelemetry.testing.internal.proto.trace.v1.ScopeSpans;
7473
import io.opentelemetry.testing.internal.proto.trace.v1.Span;
7574
import io.opentelemetry.testing.internal.proto.trace.v1.Status;
@@ -83,7 +82,6 @@
8382
import java.util.concurrent.TimeUnit;
8483
import java.util.regex.Pattern;
8584
import java.util.stream.Collectors;
86-
import java.util.stream.Stream;
8785

8886
public final class AgentTestingExporterAccess {
8987
private static final char TRACESTATE_KEY_VALUE_DELIMITER = '=';
@@ -172,93 +170,94 @@ public static List<SpanData> getExportedSpans() {
172170
throw new AssertionError("Could not invoke getSpanExportRequests", t);
173171
}
174172

175-
return getSpanData(
176-
exportRequests.stream()
177-
.map(
178-
serialized -> {
179-
try {
180-
return ExportTraceServiceRequest.parseFrom(serialized);
181-
} catch (InvalidProtocolBufferException e) {
182-
throw new AssertionError(e);
183-
}
184-
})
185-
.flatMap(request -> request.getResourceSpansList().stream()));
173+
return getSpanData(exportRequests);
186174
}
187175

188-
public static List<SpanData> getSpanData(Stream<ResourceSpans> allResourceSpans) {
176+
public static List<SpanData> getSpanData(List<byte[]> exportRequests) {
189177
List<SpanData> spans = new ArrayList<>();
190-
allResourceSpans.forEach(
191-
resourceSpans -> {
192-
Resource resource = resourceSpans.getResource();
193-
for (ScopeSpans ilSpans : resourceSpans.getScopeSpansList()) {
194-
InstrumentationScope instrumentationScope = ilSpans.getScope();
195-
for (Span span : ilSpans.getSpansList()) {
196-
String traceId = bytesToHex(span.getTraceId().toByteArray());
197-
spans.add(
198-
TestSpanData.builder()
199-
.setSpanContext(
200-
SpanContext.create(
201-
traceId,
202-
bytesToHex(span.getSpanId().toByteArray()),
203-
TraceFlags.getDefault(),
204-
extractTraceState(span.getTraceState())))
205-
// TODO is it ok to use default trace flags and default trace state here?
206-
.setParentSpanContext(
207-
SpanContext.create(
208-
traceId,
209-
bytesToHex(span.getParentSpanId().toByteArray()),
210-
TraceFlags.getDefault(),
211-
TraceState.getDefault()))
212-
.setResource(
213-
io.opentelemetry.sdk.resources.Resource.create(
214-
fromProto(resource.getAttributesList())))
215-
.setInstrumentationScopeInfo(
216-
InstrumentationScopeInfo.builder(instrumentationScope.getName())
217-
// emptyToNull since they are the same at protobuf layer,
218-
// and allows for simpler verification of InstrumentationScope
219-
.setVersion(emptyToNull(instrumentationScope.getVersion()))
220-
.build())
221-
.setName(span.getName())
222-
.setStartEpochNanos(span.getStartTimeUnixNano())
223-
.setEndEpochNanos(span.getEndTimeUnixNano())
224-
.setAttributes(fromProto(span.getAttributesList()))
225-
.setEvents(
226-
span.getEventsList().stream()
227-
.map(
228-
event ->
229-
EventData.create(
230-
event.getTimeUnixNano(),
231-
event.getName(),
232-
fromProto(event.getAttributesList()),
233-
event.getDroppedAttributesCount()
234-
+ event.getAttributesCount()))
235-
.collect(toList()))
236-
.setStatus(fromProto(span.getStatus()))
237-
.setKind(fromProto(span.getKind()))
238-
.setLinks(
239-
span.getLinksList().stream()
240-
.map(
241-
link ->
242-
LinkData.create(
243-
SpanContext.create(
244-
bytesToHex(link.getTraceId().toByteArray()),
245-
bytesToHex(link.getSpanId().toByteArray()),
246-
TraceFlags.getDefault(),
247-
extractTraceState(link.getTraceState())),
248-
fromProto(link.getAttributesList()),
249-
link.getDroppedAttributesCount()
250-
+ link.getAttributesCount()))
251-
.collect(toList()))
252-
// OTLP doesn't have hasRemoteParent
253-
.setHasEnded(true)
254-
.setTotalRecordedEvents(span.getEventsCount() + span.getDroppedEventsCount())
255-
.setTotalRecordedLinks(span.getLinksCount() + span.getDroppedLinksCount())
256-
.setTotalAttributeCount(
257-
span.getAttributesCount() + span.getDroppedAttributesCount())
258-
.build());
259-
}
260-
}
261-
});
178+
exportRequests.stream()
179+
.map(
180+
serialized -> {
181+
try {
182+
return ExportTraceServiceRequest.parseFrom(serialized);
183+
} catch (InvalidProtocolBufferException e) {
184+
throw new AssertionError(e);
185+
}
186+
})
187+
.flatMap(request -> request.getResourceSpansList().stream())
188+
.forEach(
189+
resourceSpans -> {
190+
Resource resource = resourceSpans.getResource();
191+
for (ScopeSpans ilSpans : resourceSpans.getScopeSpansList()) {
192+
InstrumentationScope instrumentationScope = ilSpans.getScope();
193+
for (Span span : ilSpans.getSpansList()) {
194+
String traceId = bytesToHex(span.getTraceId().toByteArray());
195+
spans.add(
196+
TestSpanData.builder()
197+
.setSpanContext(
198+
SpanContext.create(
199+
traceId,
200+
bytesToHex(span.getSpanId().toByteArray()),
201+
TraceFlags.getDefault(),
202+
extractTraceState(span.getTraceState())))
203+
// TODO is it ok to use default trace flags and default trace state here?
204+
.setParentSpanContext(
205+
SpanContext.create(
206+
traceId,
207+
bytesToHex(span.getParentSpanId().toByteArray()),
208+
TraceFlags.getDefault(),
209+
TraceState.getDefault()))
210+
.setResource(
211+
io.opentelemetry.sdk.resources.Resource.create(
212+
fromProto(resource.getAttributesList())))
213+
.setInstrumentationScopeInfo(
214+
InstrumentationScopeInfo.builder(instrumentationScope.getName())
215+
// emptyToNull since they are the same at protobuf layer,
216+
// and allows for simpler verification of InstrumentationScope
217+
.setVersion(emptyToNull(instrumentationScope.getVersion()))
218+
.build())
219+
.setName(span.getName())
220+
.setStartEpochNanos(span.getStartTimeUnixNano())
221+
.setEndEpochNanos(span.getEndTimeUnixNano())
222+
.setAttributes(fromProto(span.getAttributesList()))
223+
.setEvents(
224+
span.getEventsList().stream()
225+
.map(
226+
event ->
227+
EventData.create(
228+
event.getTimeUnixNano(),
229+
event.getName(),
230+
fromProto(event.getAttributesList()),
231+
event.getDroppedAttributesCount()
232+
+ event.getAttributesCount()))
233+
.collect(toList()))
234+
.setStatus(fromProto(span.getStatus()))
235+
.setKind(fromProto(span.getKind()))
236+
.setLinks(
237+
span.getLinksList().stream()
238+
.map(
239+
link ->
240+
LinkData.create(
241+
SpanContext.create(
242+
bytesToHex(link.getTraceId().toByteArray()),
243+
bytesToHex(link.getSpanId().toByteArray()),
244+
TraceFlags.getDefault(),
245+
extractTraceState(link.getTraceState())),
246+
fromProto(link.getAttributesList()),
247+
link.getDroppedAttributesCount()
248+
+ link.getAttributesCount()))
249+
.collect(toList()))
250+
// OTLP doesn't have hasRemoteParent
251+
.setHasEnded(true)
252+
.setTotalRecordedEvents(
253+
span.getEventsCount() + span.getDroppedEventsCount())
254+
.setTotalRecordedLinks(span.getLinksCount() + span.getDroppedLinksCount())
255+
.setTotalAttributeCount(
256+
span.getAttributesCount() + span.getDroppedAttributesCount())
257+
.build());
258+
}
259+
}
260+
});
262261
return spans;
263262
}
264263

0 commit comments

Comments
 (0)