diff --git a/smoke-tests/build.gradle.kts b/smoke-tests/build.gradle.kts index dbbb0e4882bf..893a7a0f4190 100644 --- a/smoke-tests/build.gradle.kts +++ b/smoke-tests/build.gradle.kts @@ -17,8 +17,8 @@ otelJava { val dockerJavaVersion = "3.6.0" dependencies { - testCompileOnly("com.google.auto.value:auto-value-annotations") - testAnnotationProcessor("com.google.auto.value:auto-value") + compileOnly("com.google.auto.value:auto-value-annotations") + annotationProcessor("com.google.auto.value:auto-value") api("org.spockframework:spock-core") api(project(":testing-common")) @@ -34,12 +34,13 @@ dependencies { implementation("io.grpc:grpc-protobuf") implementation("io.grpc:grpc-stub") - testImplementation("com.github.docker-java:docker-java-core:$dockerJavaVersion") - testImplementation("com.github.docker-java:docker-java-transport-httpclient5:$dockerJavaVersion") + implementation("com.github.docker-java:docker-java-core:$dockerJavaVersion") + implementation("com.github.docker-java:docker-java-transport-httpclient5:$dockerJavaVersion") // make IntelliJ see shaded Armeria and protobuf + compileOnly(project(":testing:armeria-shaded-for-testing", configuration = "shadow")) testCompileOnly(project(":testing:armeria-shaded-for-testing", configuration = "shadow")) - testCompileOnly(project(":testing:proto-shaded-for-testing", configuration = "shadow")) + compileOnly(project(":testing:proto-shaded-for-testing", configuration = "shadow")) } tasks { diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/AbstractTestContainerManager.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/AppServer.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/AppServer.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/AppServer.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/AppServer.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/JavaTelemetryRetriever.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/JavaTelemetryRetriever.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/JavaTelemetryRetriever.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/JavaTelemetryRetriever.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java diff --git a/smoke-tests/src/main/java/io/opentelemetry/smoketest/MetricsInspector.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/MetricsInspector.java new file mode 100644 index 000000000000..77c2dde0ae45 --- /dev/null +++ b/smoke-tests/src/main/java/io/opentelemetry/smoketest/MetricsInspector.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.smoketest; + +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import java.util.Collection; + +public class MetricsInspector { + final Collection requests; + + public MetricsInspector(Collection requests) { + this.requests = requests; + } + + public boolean hasMetricsNamed(String metricName) { + return requests.stream() + .flatMap(it -> it.getResourceMetricsList().stream()) + .flatMap(it -> it.getScopeMetricsList().stream()) + .flatMap(it -> it.getMetricsList().stream()) + .anyMatch(it -> metricName.equals(it.getName())); + } +} diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/ResourceMapping.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/ResourceMapping.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/ResourceMapping.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/ResourceMapping.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/TargetRunner.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TargetRunner.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/TargetRunner.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/TargetRunner.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/TargetWaitStrategy.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TargetWaitStrategy.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/TargetWaitStrategy.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/TargetWaitStrategy.java diff --git a/smoke-tests/src/main/java/io/opentelemetry/smoketest/TelemetryRetriever.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TelemetryRetriever.java new file mode 100644 index 000000000000..b737d27c5b04 --- /dev/null +++ b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TelemetryRetriever.java @@ -0,0 +1,88 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.smoketest; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.protobuf.GeneratedMessage; +import com.google.protobuf.util.JsonFormat; +import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; +import io.opentelemetry.testing.internal.armeria.client.WebClient; +import java.util.Collection; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; + +public class TelemetryRetriever { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + final WebClient client; + + TelemetryRetriever(int backendPort) { + client = WebClient.of("http://localhost:" + backendPort); + } + + void clearTelemetry() { + client.get("/clear").aggregate().join(); + } + + Collection waitForTraces() { + return waitForTelemetry("get-traces", ExportTraceServiceRequest::newBuilder); + } + + Collection waitForMetrics() { + return waitForTelemetry("get-metrics", ExportMetricsServiceRequest::newBuilder); + } + + Collection waitForLogs() { + return waitForTelemetry("get-logs", ExportLogsServiceRequest::newBuilder); + } + + @SuppressWarnings({"unchecked", "InterruptedExceptionSwallowed"}) + private > + Collection waitForTelemetry(String path, Supplier builderConstructor) { + try { + String content = waitForContent(path); + + return StreamSupport.stream(OBJECT_MAPPER.readTree(content).spliterator(), false) + .map( + jsonNode -> { + B builder = builderConstructor.get(); + // TODO: Register parser into object mapper to avoid de -> re -> deserialize. + try { + String json = OBJECT_MAPPER.writeValueAsString(jsonNode); + JsonFormat.parser().merge(json, builder); + } catch (Exception e) { + throw new IllegalStateException(e); + } + return (T) builder.build(); + }) + .collect(Collectors.toList()); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } + + @SuppressWarnings("SystemOut") + private String waitForContent(String path) throws InterruptedException { + long previousSize = 0; + long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(30); + String content = "[]"; + while (System.currentTimeMillis() < deadline) { + content = client.get(path).aggregate().join().contentUtf8(); + if (content.length() > 2 && content.length() == previousSize) { + break; + } + previousSize = content.length(); + System.out.println("Current content size $previousSize"); + TimeUnit.MILLISECONDS.sleep(500); + } + + return content; + } +} diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/TestContainerManager.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TestContainerManager.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/TestContainerManager.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/TestContainerManager.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/TestImage.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TestImage.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/TestImage.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/TestImage.java diff --git a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TraceInspector.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TraceInspector.java similarity index 98% rename from smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TraceInspector.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/TraceInspector.java index fe420558def2..065079a6e557 100644 --- a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TraceInspector.java +++ b/smoke-tests/src/main/java/io/opentelemetry/smoketest/TraceInspector.java @@ -52,7 +52,7 @@ public long countFilteredResourceAttributes(String attributeName, Object attribu } public long countFilteredAttributes(String attributeName, Object attributeValue) { - final Object value; + Object value; if (attributeValue instanceof GString) { value = attributeValue.toString(); } else { @@ -67,7 +67,7 @@ public long countFilteredAttributes(String attributeName, Object attributeValue) } public long countFilteredArrayAttributes(String attributeName, Object attributeValue) { - final Object value; + Object value; if (attributeValue instanceof GString) { value = attributeValue.toString(); } else { diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/ContainerLogFrameConsumer.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/ContainerLogFrameConsumer.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/ContainerLogFrameConsumer.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/ContainerLogFrameConsumer.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/ContainerLogHandler.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/ContainerLogHandler.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/ContainerLogHandler.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/ContainerLogHandler.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/Slf4jDockerLogLineListener.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/Slf4jDockerLogLineListener.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/Slf4jDockerLogLineListener.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/Slf4jDockerLogLineListener.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java diff --git a/smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/package-info.java b/smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/package-info.java similarity index 100% rename from smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/package-info.java rename to smoke-tests/src/main/java/io/opentelemetry/smoketest/windows/package-info.java diff --git a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/MetricsInspector.groovy b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/MetricsInspector.groovy deleted file mode 100644 index 02f05ef71be7..000000000000 --- a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/MetricsInspector.groovy +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.smoketest - -import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest - -class MetricsInspector { - final Collection requests - - MetricsInspector(Collection requests) { - this.requests = requests - } - - boolean hasMetricsNamed(String metricName) { - requests.stream() - .flatMap({ it.resourceMetricsList.stream() }) - .flatMap({ it.scopeMetricsList.stream() }) - .flatMap({ it.metricsList.stream() }) - .anyMatch({ it.name == metricName }) - } -} diff --git a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TelemetryRetriever.groovy b/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TelemetryRetriever.groovy deleted file mode 100644 index d8eb9cbf174b..000000000000 --- a/smoke-tests/src/test/groovy/io/opentelemetry/smoketest/TelemetryRetriever.groovy +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.smoketest - -import com.fasterxml.jackson.databind.ObjectMapper -import com.google.protobuf.GeneratedMessage -import com.google.protobuf.util.JsonFormat -import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest -import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest -import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest -import io.opentelemetry.testing.internal.armeria.client.WebClient - -import java.util.concurrent.TimeUnit -import java.util.function.Supplier - -class TelemetryRetriever { - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper() - - - final WebClient client - - TelemetryRetriever(int backendPort) { - client = WebClient.of("http://localhost:${backendPort}") - } - - void clearTelemetry() { - client.get("/clear").aggregate().join() - } - - Collection waitForTraces() { - return waitForTelemetry("get-traces", { ExportTraceServiceRequest.newBuilder() }) - } - - Collection waitForMetrics() { - return waitForTelemetry("get-metrics", { ExportMetricsServiceRequest.newBuilder() }) - } - - Collection waitForLogs() { - return waitForTelemetry("get-logs", { ExportLogsServiceRequest.newBuilder() }) - } - - private Collection waitForTelemetry(String path, Supplier builderConstructor) { - def content = waitForContent(path) - - return OBJECT_MAPPER.readTree(content).collect { - def builder = builderConstructor.get() - // TODO: Register parser into object mapper to avoid de -> re -> deserialize. - JsonFormat.parser().merge(OBJECT_MAPPER.writeValueAsString(it), builder) - return (T) builder.build() - } - } - - private String waitForContent(String path) { - long previousSize = 0 - long deadline = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(30) - String content = "[]" - while (System.currentTimeMillis() < deadline) { - content = client.get(path).aggregate().join().contentUtf8() - if (content.length() > 2 && content.length() == previousSize) { - break - } - previousSize = content.length() - println "Current content size $previousSize" - TimeUnit.MILLISECONDS.sleep(500) - } - - return content - } -}