Skip to content

Commit a6ed684

Browse files
Request response payload capture verify by smoke test (#273)
* Add ReceiveSendGreetingServlet and publish wf for matric project * Add donation doc to readme and missing license header * remove gson dependency and customer models * undo changes in test till new docker images are published * Make byte read wo need to buffer size * New test to validate request & response payload capture by java agent * Spotless apply * Disable tomee test * Remove redundant check * delete custome docker files
1 parent f94401a commit a6ed684

10 files changed

+129
-26
lines changed

smoke-tests/matrix/build.gradle

+6
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ def targets = [
4141
"9.0.40" : ["8", "11"],
4242
"10.0.0" : ["8", "11"]
4343
],
44+
"tomee": [
45+
[version: ["7.0.0"], vm: ["hotspot"], jdk: ["8"]],
46+
[version: ["8.0.6"], vm: ["hotspot"], jdk: ["8", "11"]],
47+
[version: ["7.0.0"], vm: ["openj9"], jdk: ["8"], dockerfile: "tomee-custom"],
48+
[version: ["8.0.6"], vm: ["openj9"], jdk: ["8", "11"], dockerfile: "tomee-custom"]
49+
],
4450
"payara" : [
4551
"5.2020.6" : ["8"],
4652
"5.2020.6-jdk11": ["11"]

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/AppServerTest.groovy

+57-18
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55

66
package org.hypertrace.agent.smoketest
77

8+
import okhttp3.MediaType
9+
import okhttp3.RequestBody
10+
811
import static org.junit.Assume.assumeTrue
912

1013
import io.opentelemetry.proto.trace.v1.Span
11-
import java.util.jar.Attributes
12-
import java.util.jar.JarFile
1314
import okhttp3.Request
1415
import org.junit.runner.RunWith
1516
import spock.lang.Shared
@@ -56,17 +57,13 @@ abstract class AppServerTest extends SmokeTest {
5657

5758
String url = "http://localhost:${target.getMappedPort(8080)}/app/greeting"
5859
def request = new Request.Builder().url(url).get().build()
59-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
60-
//.IMPLEMENTATION_VERSION)
6160

6261
when:
6362
def response = CLIENT.newCall(request).execute()
6463
TraceInspector traces = new TraceInspector(waitForTraces())
6564
Set<String> traceIds = traces.traceIds
6665
String responseBody = response.body().string()
6766

68-
println traces.getSpanStream().forEach({ span -> "************** " + span.toString() + " *******************************" });
69-
7067
then: "There is one trace"
7168
traceIds.size() == 1
7269

@@ -93,12 +90,64 @@ abstract class AppServerTest extends SmokeTest {
9390
[appServer, jdk] << getTestParams()
9491
}
9592

93+
@Unroll
94+
def "#appServer request response capture test smoke test on JDK #jdk"(String appServer, String jdk) {
95+
assumeTrue(testSmoke())
96+
97+
String url = "http://localhost:${target.getMappedPort(8080)}/app/echo"
98+
MediaType JSON = MediaType.parse("application/json; charset=utf-8")
99+
String requestData = "{\"greeting\" : \"Hello\",\"name\" : \"John\"}"
100+
RequestBody requestBody = RequestBody.create(requestData, JSON);
101+
def request = new Request.Builder().url(url).post(requestBody).build();
102+
103+
when:
104+
def response = CLIENT.newCall(request).execute()
105+
TraceInspector traces = new TraceInspector(waitForTraces())
106+
Set<String> traceIds = traces.traceIds
107+
String headerValue = new String(Base64.getDecoder().decode(response.header("Header-Dump")));
108+
109+
then: "There is one trace"
110+
traceIds.size() == 1
111+
112+
and: "trace id is present in the HTTP headers as reported by the called endpoint"
113+
headerValue.contains(traceIds.find())
114+
115+
and: "Server spans in the distributed trace"
116+
traces.countSpansByKind(Span.SpanKind.SPAN_KIND_SERVER) == 2
117+
118+
and: "Expected span names"
119+
traces.countSpansByName(getSpanName('/app/echo')) == 1
120+
traces.countSpansByName(getSpanName('/app/headers')) == 1
121+
122+
and: "The span for the initial web request"
123+
traces.countFilteredAttributes("http.url", url) == 1
124+
125+
and: "Client and server spans for the remote call"
126+
traces.countFilteredAttributes("http.url", "http://localhost:8080/app/headers") == 2
127+
128+
and: "response body attribute should be present"
129+
traces.countFilteredAttributes("http.response.body") == 1
130+
131+
and: "request body attribute should be present"
132+
traces.countFilteredAttributes("http.request.body") == 1
133+
134+
and: "Request body should be same as sent content"
135+
traces.getFilteredAttributeValue("http.request.body") == requestData
136+
137+
and: "Response body should be same as sent content"
138+
traces.getFilteredAttributeValue("http.response.body") == requestData
139+
140+
cleanup:
141+
response?.close()
142+
143+
where:
144+
[appServer, jdk] << getTestParams()
145+
}
146+
96147
@Unroll
97148
def "#appServer test static file found on JDK #jdk"(String appServer, String jdk) {
98149
String url = "http://localhost:${target.getMappedPort(8080)}/app/hello.txt"
99150
def request = new Request.Builder().url(url).get().build()
100-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
101-
//.IMPLEMENTATION_VERSION)
102151

103152
when:
104153
def response = CLIENT.newCall(request).execute()
@@ -132,8 +181,6 @@ abstract class AppServerTest extends SmokeTest {
132181
def "#appServer test static file not found on JDK #jdk"(String appServer, String jdk) {
133182
String url = "http://localhost:${target.getMappedPort(8080)}/app/file-that-does-not-exist"
134183
def request = new Request.Builder().url(url).get().build()
135-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
136-
//.IMPLEMENTATION_VERSION)
137184

138185
when:
139186
def response = CLIENT.newCall(request).execute()
@@ -168,8 +215,6 @@ abstract class AppServerTest extends SmokeTest {
168215

169216
String url = "http://localhost:${target.getMappedPort(8080)}/app/WEB-INF/web.xml"
170217
def request = new Request.Builder().url(url).get().build()
171-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
172-
//.IMPLEMENTATION_VERSION)
173218

174219
when:
175220
def response = CLIENT.newCall(request).execute()
@@ -204,8 +249,6 @@ abstract class AppServerTest extends SmokeTest {
204249

205250
String url = "http://localhost:${target.getMappedPort(8080)}/app/exception"
206251
def request = new Request.Builder().url(url).get().build()
207-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
208-
//.IMPLEMENTATION_VERSION)
209252

210253
when:
211254
def response = CLIENT.newCall(request).execute()
@@ -241,8 +284,6 @@ abstract class AppServerTest extends SmokeTest {
241284
def "#appServer test request outside deployed application JDK #jdk"(String appServer, String jdk) {
242285
String url = "http://localhost:${target.getMappedPort(8080)}/this-is-definitely-not-there-but-there-should-be-a-trace-nevertheless"
243286
def request = new Request.Builder().url(url).get().build()
244-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
245-
//.IMPLEMENTATION_VERSION)
246287

247288
when:
248289
def response = CLIENT.newCall(request).execute()
@@ -277,8 +318,6 @@ abstract class AppServerTest extends SmokeTest {
277318

278319
String url = "http://localhost:${target.getMappedPort(8080)}/app/asyncgreeting"
279320
def request = new Request.Builder().url(url).get().build()
280-
//def currentAgentVersion = new JarFile(agentPath).getManifest().getMainAttributes().get(Attributes.Name
281-
//.IMPLEMENTATION_VERSION)
282321

283322
when:
284323
def response = CLIENT.newCall(request).execute()
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,45 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
16
package org.hypertrace.agent.smoketest
27

3-
class GlassfishSmokeTest {
8+
import spock.lang.Ignore
9+
10+
import java.time.Duration
11+
import org.testcontainers.containers.wait.strategy.Wait
12+
import org.testcontainers.containers.wait.strategy.WaitStrategy
13+
14+
@Ignore
15+
@AppServer(version = "5.2020.6", jdk = "8")
16+
@AppServer(version = "5.2020.6-jdk11", jdk = "11")
17+
class GlassFishSmokeTest extends AppServerTest {
18+
19+
protected String getTargetImage(String jdk, String serverVersion) {
20+
"hypertrace/java-agent-test-containers:payara-${serverVersion}-jdk$jdk-20210224.596496007"
21+
}
22+
23+
@Override
24+
protected Map<String, String> getExtraEnv() {
25+
return ["HZ_PHONE_HOME_ENABLED": "false"]
26+
}
27+
28+
@Override
29+
protected WaitStrategy getWaitStrategy() {
30+
return Wait
31+
.forLogMessage(".*app was successfully deployed.*", 1)
32+
.withStartupTimeout(Duration.ofMinutes(3))
33+
}
34+
35+
@Override
36+
protected String getSpanName(String path) {
37+
return path
38+
}
39+
40+
@Override
41+
boolean testRequestWebInfWebXml() {
42+
false
43+
}
44+
445
}

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/JettySmokeTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ package org.hypertrace.agent.smoketest
1212
class JettySmokeTest extends AppServerTest {
1313

1414
protected String getTargetImage(String jdk, String serverVersion) {
15-
"ghcr.io/open-telemetry/java-test-containers:jetty-${serverVersion}-jdk$jdk-20201215.422527843"
15+
"hypertrace/java-agent-test-containers:jetty-${serverVersion}-jdk$jdk-20210224.596496007"
1616
}
1717

1818
def getJettySpanName() {

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/LibertySmokeTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import org.testcontainers.containers.wait.strategy.WaitStrategy
1616
class LibertySmokeTest extends AppServerTest {
1717

1818
protected String getTargetImage(String jdk, String serverVersion) {
19-
"ghcr.io/open-telemetry/java-test-containers:liberty-${serverVersion}-jdk$jdk-20201215.422527843"
19+
"hypertrace/java-agent-test-containers:liberty-${serverVersion}-jdk$jdk-20210224.596496007"
2020
}
2121

2222
@Override

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/SmokeTest.groovy

-2
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ abstract class SmokeTest extends Specification {
9999
.withNetwork(network)
100100
.withLogConsumer(output)
101101
.withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("smoke.tests.target")))
102-
//.withCopyFileToContainer(MountableFile.forHostPath("/Users/samarth/Downloads/hypertrace-agent-all.jar"""),
103-
//"""/opentelemetry-javaagent-all.jar")
104102
.withCopyFileToContainer(MountableFile.forHostPath(agentPath), "/hypertrace-agent-all.jar")
105103
.withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/hypertrace-agent-all.jar -Dorg.hypertrace.agent.slf4j.simpleLogger.log.muzzleMatcher=true")
106104
.withEnv("OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "1")

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomcatSmokeTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ package org.hypertrace.agent.smoketest
1313
class TomcatSmokeTest extends AppServerTest {
1414

1515
protected String getTargetImage(String jdk, String serverVersion) {
16-
"ghcr.io/open-telemetry/java-test-containers:tomcat-${serverVersion}-jdk$jdk-20201215.422527843"
16+
"hypertrace/java-agent-test-containers:tomcat-${serverVersion}-jdk$jdk-20210224.596496007"
1717
}
1818

1919
@Override

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TomeeSmokeTest.groovy

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@
55

66
package org.hypertrace.agent.smoketest
77

8+
import spock.lang.Ignore
9+
810
import java.time.Duration
911
import org.testcontainers.containers.wait.strategy.Wait
1012
import org.testcontainers.containers.wait.strategy.WaitStrategy
1113

14+
@Ignore
1215
@AppServer(version = "7.0.0", jdk = "8")
1316
@AppServer(version = "8.0.6", jdk = "8")
1417
@AppServer(version = "8.0.6", jdk = "11")
1518
class TomeeSmokeTest extends AppServerTest {
1619

1720
protected String getTargetImage(String jdk, String serverVersion) {
18-
"ghcr.io/open-telemetry/java-test-containers:tomee-${serverVersion}-jdk$jdk-20210202.531569197"
21+
"hypertrace/java-agent-test-containers:tomee-${serverVersion}-jdk$jdk-20210224.596496007"
1922
}
2023

2124
@Override

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/TraceInspector.java

+16
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,22 @@ public long countFilteredAttributes(String attributeName, Object attributeValue)
6969
.count();
7070
}
7171

72+
public long countFilteredAttributes(String attributeName) {
73+
return getSpanStream()
74+
.flatMap(s -> s.getAttributesList().stream())
75+
.filter(a -> a.getKey().equals(attributeName))
76+
.map(a -> a.getValue().getStringValue())
77+
.count();
78+
}
79+
80+
public String getFilteredAttributeValue(String attributeName) {
81+
return getSpanStream()
82+
.flatMap(s -> s.getAttributesList().stream())
83+
.filter(a -> a.getKey().equals(attributeName))
84+
.map(a -> a.getValue().getStringValue())
85+
.collect(Collectors.joining(","));
86+
}
87+
7288
public long countFilteredEventAttributes(String attributeName, Object attributeValue) {
7389
return getSpanStream()
7490
.flatMap(s -> s.getEventsList().stream())

smoke-tests/src/test/groovy/org/hypertrace/agent/smoketest/WildflySmokeTest.groovy

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import spock.lang.Unroll
1515
class WildflySmokeTest extends AppServerTest {
1616

1717
protected String getTargetImage(String jdk, String serverVersion) {
18-
"ghcr.io/open-telemetry/java-test-containers:wildfly-${serverVersion}-jdk$jdk-20201215.422527843"
18+
"hypertrace/java-agent-test-containers:wildfly-${serverVersion}-jdk$jdk-20210224.596496007"
1919
}
2020

2121
@Override

0 commit comments

Comments
 (0)