Add prometheus smoke test
ADD
smoke-tests/src/test/groovy/io/opentelemetry/smoketest/PrometheusSmokeTest.groovy
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+package io.opentelemetry.smoketest
+
+import io.opentelemetry.testing.internal.armeria.client.WebClient
+import java.time.Duration
+import spock.lang.IgnoreIf
+
+import static io.opentelemetry.smoketest.TestContainerManager.useWindowsContainers
+
+@IgnoreIf({ useWindowsContainers() })
+class PrometheusSmokeTest extends SmokeTest {
+ private static final int PROMETHEUS_PORT = 9090
+
+ protected String getTargetImage(String jdk) {
+ "ghcr.io/open-telemetry/opentelemetry-java-instrumentation/smoke-test-spring-boot:jdk$jdk-20211213.1570880324"
+ }
+
+ @Override
+ protected Map<String, String> getExtraEnv() {
+ return Map.of("OTEL_METRICS_EXPORTER", "prometheus", "OTEL_EXPORTER_PROMETHEUS_PORT", PROMETHEUS_PORT.toString())
+ }
+
+ @Override
+ protected TargetWaitStrategy getWaitStrategy() {
+ return new TargetWaitStrategy.Log(Duration.ofMinutes(1), ".*Started SpringbootApplication in.*")
+ }
+
+ protected List<ResourceMapping> getExtraPorts() {
+ return [PROMETHEUS_PORT]
+ }
+
+ def "Should export metrics"(int jdk) {
+ setup:
+ startTarget(jdk)
+
+ when:
+ client().get("/greeting").aggregate().join()
+
+ then:
+ def prometheusClient = WebClient.of("h1c://localhost:${containerManager.getTargetMappedPort(9090)}")
+ def prometheusData = prometheusClient.get("/").aggregate().join().contentUtf8()
+
+ prometheusData.contains("runtime_jvm_memory_pool")
+
+ cleanup:
+ stopTarget()
+
+ where:
+ jdk << [8, 11, 17]
+ }
+
+}
\ No newline at end of file

MODIFY
smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SmokeTest.groovy
smoke-tests/src/test/groovy/io/opentelemetry/smoketest/SmokeTest.groovy
@@ -58,6 +58,14 @@ abstract class SmokeTest extends Specification {
return []
}
+ /**
+ * Subclasses can override this method to provide additional ports that should be exposed from the
+ * target container
+ */
+ protected List<ResourceMapping> getExtraPorts() {
+ return []
+ }
+
def setupSpec() {
containerManager.startEnvironmentOnce()
telemetryRetriever = new TelemetryRetriever(containerManager.getBackendMappedPort())
@@ -69,7 +77,7 @@ abstract class SmokeTest extends Specification {
def startTarget(String jdk, String serverVersion, boolean windows) {
def targetImage = getTargetImage(jdk, serverVersion, windows)
- return containerManager.startTarget(targetImage, agentPath, jvmArgsEnvVarName, extraEnv, extraResources, getWaitStrategy(), getCommand())
+ return containerManager.startTarget(targetImage, agentPath, jvmArgsEnvVarName, extraEnv, extraResources, extraPorts, getWaitStrategy(), getCommand())
}
protected abstract String getTargetImage(String jdk)

MODIFY
smoke-tests/src/test/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java
smoke-tests/src/test/java/io/opentelemetry/smoketest/LinuxTestContainerManager.java
package io.opentelemetry.smoketest;
import java.time.Duration;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@@ -69,14 +70,20 @@ public class LinuxTestContainerManager extends AbstractTestContainerManager {
String jvmArgsEnvVarName,
Map<String, String> extraEnv,
List<ResourceMapping> extraResources,
+ List<Integer> extraPorts,
TargetWaitStrategy waitStrategy,
String[] command) {
Consumer<OutputFrame> output = new ToStringConsumer();
+ List<Integer> ports = new ArrayList<>();
+ ports.add(TARGET_PORT);
+ if (extraPorts != null) {
+ ports.addAll(extraPorts);
+ }
target =
new GenericContainer<>(DockerImageName.parse(targetImageName))
.withStartupTimeout(Duration.ofMinutes(5))
- .withExposedPorts(TARGET_PORT)
+ .withExposedPorts(ports.toArray(new Integer[0]))
.withNetwork(network)
.withLogConsumer(output)
.withLogConsumer(new Slf4jLogConsumer(appLogger))

MODIFY
smoke-tests/src/test/java/io/opentelemetry/smoketest/TestContainerManager.java
smoke-tests/src/test/java/io/opentelemetry/smoketest/TestContainerManager.java
@@ -24,6 +24,7 @@ public interface TestContainerManager {
String jvmArgsEnvVarName,
Map<String, String> extraEnv,
List<ResourceMapping> extraResources,
+ List<Integer> extraPorts,
TargetWaitStrategy waitStrategy,
String[] command);

MODIFY
smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java
smoke-tests/src/test/java/io/opentelemetry/smoketest/windows/WindowsTestContainerManager.java
@@ -76,8 +76,6 @@ public class WindowsTestContainerManager extends AbstractTestContainerManager {
.exec()
.getId();
- String backendSuffix = "-windows-20210611.927888723";
-
String backendImageName =
"ghcr.io/open-telemetry/opentelemetry-java-instrumentation/smoke-test-fake-backend-windows:20210918.1248928123";
if (!imageExists(backendImageName)) {
@@ -134,8 +132,13 @@ public class WindowsTestContainerManager extends AbstractTestContainerManager {
String jvmArgsEnvVarName,
Map<String, String> extraEnv,
List<ResourceMapping> extraResources,
+ List<Integer> extraPorts,
TargetWaitStrategy waitStrategy,
String[] cmd) {
+ if (extraPorts != null && !extraPorts.isEmpty()) {
+ throw new UnsupportedOperationException("extra ports not supported");
+ }
+
stopTarget();
if (!imageExists(targetImageName)) {

Add prometheus smoke test (#5417)