diff --git a/smoke-tests/matrix/build.gradle b/smoke-tests/matrix/build.gradle index 2534ad067..0b10c1b2b 100644 --- a/smoke-tests/matrix/build.gradle +++ b/smoke-tests/matrix/build.gradle @@ -41,6 +41,12 @@ def targets = [ "9.0.40" : ["8", "11"], "10.0.0" : ["8", "11"] ], + "tomee": [ + [version: ["7.0.0"], vm: ["hotspot"], jdk: ["8"]], + [version: ["8.0.6"], vm: ["hotspot"], jdk: ["8", "11"]], + [version: ["7.0.0"], vm: ["openj9"], jdk: ["8"], dockerfile: "tomee-custom"], + [version: ["8.0.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "tomee-custom"] + ], "payara" : [ "5.2020.6" : ["8"], "5.2020.6-jdk11": ["11"] diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/AppServerTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/AppServerTest.groovy index 76522d70e..1528c7d3f 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/AppServerTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/AppServerTest.groovy @@ -5,11 +5,12 @@ package org.hypertrace.agent.smoketest +import okhttp3.MediaType +import okhttp3.RequestBody + import static org.junit.Assume.assumeTrue import io.opentelemetry.proto.trace.v1.Span -import java.util.jar.Attributes -import java.util.jar.JarFile import okhttp3.Request import org.junit.runner.RunWith import spock.lang.Shared @@ -56,8 +57,6 @@ abstract class AppServerTest extends SmokeTest { String url = "http://localhost:${target.getMappedPort(8080)}/app/greeting" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -65,8 +64,6 @@ abstract class AppServerTest extends SmokeTest { Set traceIds = traces.traceIds String responseBody = response.body().string() - println traces.getSpanStream().forEach({ span -> "************** " + span.toString() + " *******************************" }); - then: "There is one trace" traceIds.size() == 1 @@ -93,12 +90,64 @@ abstract class AppServerTest extends SmokeTest { [appServer, jdk] << getTestParams() } + @Unroll + def "#appServer request response capture test smoke test on JDK #jdk"(String appServer, String jdk) { + assumeTrue(testSmoke()) + + String url = "http://localhost:${target.getMappedPort(8080)}/app/echo" + MediaType JSON = MediaType.parse("application/json; charset=utf-8") + String requestData = "{\"greeting\" : \"Hello\",\"name\" : \"John\"}" + RequestBody requestBody = RequestBody.create(requestData, JSON); + def request = new Request.Builder().url(url).post(requestBody).build(); + + when: + def response = CLIENT.newCall(request).execute() + TraceInspector traces = new TraceInspector(waitForTraces()) + Set traceIds = traces.traceIds + String headerValue = new String(Base64.getDecoder().decode(response.header("Header-Dump"))); + + then: "There is one trace" + traceIds.size() == 1 + + and: "trace id is present in the HTTP headers as reported by the called endpoint" + headerValue.contains(traceIds.find()) + + and: "Server spans in the distributed trace" + traces.countSpansByKind(Span.SpanKind.SPAN_KIND_SERVER) == 2 + + and: "Expected span names" + traces.countSpansByName(getSpanName('/app/echo')) == 1 + traces.countSpansByName(getSpanName('/app/headers')) == 1 + + and: "The span for the initial web request" + traces.countFilteredAttributes("http.url", url) == 1 + + and: "Client and server spans for the remote call" + traces.countFilteredAttributes("http.url", "http://localhost:8080/app/headers") == 2 + + and: "response body attribute should be present" + traces.countFilteredAttributes("http.response.body") == 1 + + and: "request body attribute should be present" + traces.countFilteredAttributes("http.request.body") == 1 + + and: "Request body should be same as sent content" + traces.getFilteredAttributeValue("http.request.body") == requestData + + and: "Response body should be same as sent content" + traces.getFilteredAttributeValue("http.response.body") == requestData + + cleanup: + response?.close() + + where: + [appServer, jdk] << getTestParams() + } + @Unroll def "#appServer test static file found on JDK #jdk"(String appServer, String jdk) { String url = "http://localhost:${target.getMappedPort(8080)}/app/hello.txt" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -132,8 +181,6 @@ abstract class AppServerTest extends SmokeTest { def "#appServer test static file not found on JDK #jdk"(String appServer, String jdk) { String url = "http://localhost:${target.getMappedPort(8080)}/app/file-that-does-not-exist" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -168,8 +215,6 @@ abstract class AppServerTest extends SmokeTest { String url = "http://localhost:${target.getMappedPort(8080)}/app/WEB-INF/web.xml" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -204,8 +249,6 @@ abstract class AppServerTest extends SmokeTest { String url = "http://localhost:${target.getMappedPort(8080)}/app/exception" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -241,8 +284,6 @@ abstract class AppServerTest extends SmokeTest { def "#appServer test request outside deployed application JDK #jdk"(String appServer, String jdk) { String url = "http://localhost:${target.getMappedPort(8080)}/this-is-definitely-not-there-but-there-should-be-a-trace-nevertheless" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() @@ -277,8 +318,6 @@ abstract class AppServerTest extends SmokeTest { String url = "http://localhost:${target.getMappedPort(8080)}/app/asyncgreeting" def request = new Request.Builder().url(url).get().build() - //def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name - //.IMPLEMENTATION_VERSION) when: def response = CLIENT.newCall(request).execute() diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/GlassFishSmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/GlassFishSmokeTest.groovy index 659b4589a..4d014d4d8 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/GlassFishSmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/GlassFishSmokeTest.groovy @@ -1,4 +1,45 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + package org.hypertrace.agent.smoketest -class GlassfishSmokeTest { +import spock.lang.Ignore + +import java.time.Duration +import org.testcontainers.containers.wait.strategy.Wait +import org.testcontainers.containers.wait.strategy.WaitStrategy + +@Ignore +@AppServer(version = "5.2020.6", jdk = "8") +@AppServer(version = "5.2020.6-jdk11", jdk = "11") +class GlassFishSmokeTest extends AppServerTest { + + protected String getTargetImage(String jdk, String serverVersion) { + "hypertrace/java-agent-test-containers:payara-${serverVersion}-jdk$jdk-20210224.596496007" + } + + @Override + protected Map getExtraEnv() { + return ["HZ_PHONE_HOME_ENABLED": "false"] + } + + @Override + protected WaitStrategy getWaitStrategy() { + return Wait + .forLogMessage(".*app was successfully deployed.*", 1) + .withStartupTimeout(Duration.ofMinutes(3)) + } + + @Override + protected String getSpanName(String path) { + return path + } + + @Override + boolean testRequestWebInfWebXml() { + false + } + } diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/JettySmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/JettySmokeTest.groovy index e2ea5062c..1815bf442 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/JettySmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/JettySmokeTest.groovy @@ -12,7 +12,7 @@ package org.hypertrace.agent.smoketest class JettySmokeTest extends AppServerTest { protected String getTargetImage(String jdk, String serverVersion) { - "ghcr.io/open-telemetry/java-test-containers:jetty-${serverVersion}-jdk$jdk-20201215.422527843" + "hypertrace/java-agent-test-containers:jetty-${serverVersion}-jdk$jdk-20210224.596496007" } def getJettySpanName() { diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/LibertySmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/LibertySmokeTest.groovy index fc248315b..86516eb89 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/LibertySmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/LibertySmokeTest.groovy @@ -16,7 +16,7 @@ import org.testcontainers.containers.wait.strategy.WaitStrategy class LibertySmokeTest extends AppServerTest { protected String getTargetImage(String jdk, String serverVersion) { - "ghcr.io/open-telemetry/java-test-containers:liberty-${serverVersion}-jdk$jdk-20201215.422527843" + "hypertrace/java-agent-test-containers:liberty-${serverVersion}-jdk$jdk-20210224.596496007" } @Override diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy index e53b16d4a..d5b0568f4 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy @@ -99,8 +99,6 @@ abstract class SmokeTest extends Specification { .withNetwork(network) .withLogConsumer(output) .withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("smoke.tests.target"))) - //.withCopyFileToContainer(MountableFile.forHostPath("/Users/samarth/Downloads/hypertrace-agent-all.jar"""), -//"""/opentelemetry-javaagent-all.jar") .withCopyFileToContainer(MountableFile.forHostPath(agentPath), "/hypertrace-agent-all.jar") .withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/hypertrace-agent-all.jar -Dorg.hypertrace.agent.slf4j.simpleLogger.log.muzzleMatcher=true") .withEnv("OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "1") diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomcatSmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomcatSmokeTest.groovy index fa310b586..c75b838eb 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomcatSmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomcatSmokeTest.groovy @@ -13,7 +13,7 @@ package org.hypertrace.agent.smoketest class TomcatSmokeTest extends AppServerTest { protected String getTargetImage(String jdk, String serverVersion) { - "ghcr.io/open-telemetry/java-test-containers:tomcat-${serverVersion}-jdk$jdk-20201215.422527843" + "hypertrace/java-agent-test-containers:tomcat-${serverVersion}-jdk$jdk-20210224.596496007" } @Override diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomeeSmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomeeSmokeTest.groovy index ce5719a27..4359c22cb 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomeeSmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomeeSmokeTest.groovy @@ -5,17 +5,20 @@ package org.hypertrace.agent.smoketest +import spock.lang.Ignore + import java.time.Duration import org.testcontainers.containers.wait.strategy.Wait import org.testcontainers.containers.wait.strategy.WaitStrategy +@Ignore @AppServer(version = "7.0.0", jdk = "8") @AppServer(version = "8.0.6", jdk = "8") @AppServer(version = "8.0.6", jdk = "11") class TomeeSmokeTest extends AppServerTest { protected String getTargetImage(String jdk, String serverVersion) { - "ghcr.io/open-telemetry/java-test-containers:tomee-${serverVersion}-jdk$jdk-20210202.531569197" + "hypertrace/java-agent-test-containers:tomee-${serverVersion}-jdk$jdk-20210224.596496007" } @Override diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TraceInspector.java b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TraceInspector.java index e876dc20d..1e5a4bb38 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TraceInspector.java +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TraceInspector.java @@ -69,6 +69,22 @@ public long countFilteredAttributes(String attributeName, Object attributeValue) .count(); } + public long countFilteredAttributes(String attributeName) { + return getSpanStream() + .flatMap(s -> s.getAttributesList().stream()) + .filter(a -> a.getKey().equals(attributeName)) + .map(a -> a.getValue().getStringValue()) + .count(); + } + + public String getFilteredAttributeValue(String attributeName) { + return getSpanStream() + .flatMap(s -> s.getAttributesList().stream()) + .filter(a -> a.getKey().equals(attributeName)) + .map(a -> a.getValue().getStringValue()) + .collect(Collectors.joining(",")); + } + public long countFilteredEventAttributes(String attributeName, Object attributeValue) { return getSpanStream() .flatMap(s -> s.getEventsList().stream()) diff --git a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/WildflySmokeTest.groovy b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/WildflySmokeTest.groovy index 8e576d5d0..8dc11d767 100644 --- a/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/WildflySmokeTest.groovy +++ b/smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/WildflySmokeTest.groovy @@ -15,7 +15,7 @@ import spock.lang.Unroll class WildflySmokeTest extends AppServerTest { protected String getTargetImage(String jdk, String serverVersion) { - "ghcr.io/open-telemetry/java-test-containers:wildfly-${serverVersion}-jdk$jdk-20201215.422527843" + "hypertrace/java-agent-test-containers:wildfly-${serverVersion}-jdk$jdk-20210224.596496007" } @Override