Skip to content

Commit

Permalink
Add prometheus smoke test (#5417)
Browse files Browse the repository at this point in the history
  • Loading branch information
laurit authored Feb 22, 2022
1 parent 23ec767 commit 245ac1f
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* 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]
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
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;
Expand Down Expand Up @@ -69,14 +70,20 @@ public Consumer<OutputFrame> startTarget(
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))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Consumer<OutputFrame> startTarget(
String jvmArgsEnvVarName,
Map<String, String> extraEnv,
List<ResourceMapping> extraResources,
List<Integer> extraPorts,
TargetWaitStrategy waitStrategy,
String[] command);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,6 @@ protected void startEnvironment() {
.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)) {
Expand Down Expand Up @@ -134,8 +132,13 @@ public Consumer<OutputFrame> startTarget(
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)) {
Expand Down

0 comments on commit 245ac1f

Please sign in to comment.