Skip to content

Commit 896dd6b

Browse files
fix(smoke-tests): Replace JAVA_TOOL_OPTIONS by jvm.options openliberty configuration file (#8031)
JAVA_TOOL_OPTIONS is limited to 1024 characters and it starts reaching the limit.
1 parent 508c314 commit 896dd6b

File tree

4 files changed

+176
-70
lines changed

4 files changed

+176
-70
lines changed

dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import okhttp3.Request
77
import spock.lang.Requires
88
import spock.lang.Shared
99

10-
import java.util.stream.Collectors
10+
import java.nio.file.FileSystems
11+
import java.nio.file.Files
12+
import java.nio.file.Path
13+
import java.nio.file.Paths
1114

1215
// This test currently fails on IBM JVMs
1316
@Requires({ !Platform.isJ9() })
@@ -21,33 +24,59 @@ class SpringBootOpenLibertySmokeTest extends AbstractServerSmokeTest {
2124

2225
@Override
2326
ProcessBuilder createProcessBuilder() {
24-
List<String> command = new ArrayList<>()
25-
command.add(javaPath())
26-
27-
command.addAll((String[]) ["-jar", openLibertyShadowJar, "--server.port=${httpPort}"])
28-
29-
List<String> envParams = new ArrayList<>()
30-
envParams.addAll(defaultJavaProperties)
31-
envParams.addAll(
32-
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter",
27+
// Make a copy of the OpenLiberty runnable JAR before injecting JVM configuration
28+
def applicationJar = copyApplicationJar().toAbsolutePath().toString()
29+
30+
List<String> command = [
31+
javaPath(),
32+
"-jar",
33+
applicationJar,
34+
"--server.port=${httpPort}" as String
35+
]
36+
37+
List<String> jvmOptions = new ArrayList<>()
38+
jvmOptions.addAll(defaultJavaProperties)
39+
jvmOptions.addAll(
40+
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter" as String,
3341
"-Ddd.jmxfetch.enabled=false",
3442
"-Ddd.appsec.enabled=true",
3543
"-Ddatadog.slf4j.simpleLogger.defaultLogLevel=debug",
3644
"-Dorg.slf4j.simpleLogger.defaultLogLevel=debug",
37-
"-Ddd.iast.enabled=true", "-Ddd.iast.request-sampling=100",
45+
"-Ddd.iast.enabled=true",
46+
"-Ddd.iast.request-sampling=100",
3847
"-Ddd.integration.spring-boot.enabled=true"
3948
)
40-
41-
42-
String javaToolOptions = envParams.stream().collect(Collectors.joining(" "))
43-
49+
injectOpenLibertyJvmOptions(applicationJar, jvmOptions)
4450

4551
ProcessBuilder processBuilder = new ProcessBuilder(command)
46-
processBuilder.environment().put("JAVA_TOOL_OPTIONS", javaToolOptions)
52+
processBuilder.environment().put('WLP_JAR_EXTRACT_ROOT', 'application')
4753
processBuilder.directory(new File(buildDirectory))
4854
return processBuilder
4955
}
5056

57+
Path copyApplicationJar() {
58+
def applicationJar = Paths.get(openLibertyShadowJar)
59+
def randomId = System.nanoTime()
60+
def uniqueName = applicationJar.fileName.toString()
61+
uniqueName = uniqueName.substring(0, uniqueName.length() - 4) + "-${randomId}.jar"
62+
def specificationJar = applicationJar.parent.parent.resolve(uniqueName)
63+
Files.copy(applicationJar, specificationJar)
64+
return specificationJar
65+
}
66+
67+
void injectOpenLibertyJvmOptions(String applicationJar, List<String> options) {
68+
def appUri = URI.create("jar:file:$applicationJar")
69+
try (def fs = FileSystems.newFileSystem(appUri, [:])) {
70+
def jvmOptionFile = fs.getPath( 'wlp', 'usr', 'servers', 'defaultServer', 'jvm.options')
71+
try (def writer = Files.newBufferedWriter(jvmOptionFile)) {
72+
options.each {
73+
writer.write(it)
74+
writer.newLine()
75+
}
76+
}
77+
}
78+
}
79+
5180
@Override
5281
File createTemporaryFile() {
5382
return new File("${buildDirectory}/tmp/springboot-openliberty.out")

dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,79 @@
11
package datadog.smoketest
22

3-
43
import datadog.trace.api.Platform
54
import datadog.trace.test.agent.decoder.DecodedSpan
65
import okhttp3.Request
76
import spock.lang.Requires
87
import spock.lang.Shared
98
import spock.util.concurrent.PollingConditions
109

10+
import java.nio.file.FileSystems
11+
import java.nio.file.Files
12+
import java.nio.file.Path
13+
import java.nio.file.Paths
1114
import java.util.function.Function
12-
import java.util.stream.Collectors
1315

1416
// This test currently fails on IBM JVMs
1517
@Requires({ !Platform.isJ9() })
1618
class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTest {
1719

18-
@Shared
19-
int totalInvocations = 100
20-
2120
@Shared
2221
String openLibertyShadowJar = System.getProperty("datadog.smoketest.openliberty.jar.path")
2322

2423
@Override
2524
ProcessBuilder createProcessBuilder() {
26-
List<String> command = new ArrayList<>()
27-
command.add(javaPath())
28-
29-
command.addAll((String[]) ["-jar", openLibertyShadowJar, "--server.port=${httpPort}"])
30-
31-
List<String> envParams = new ArrayList<>()
32-
envParams.addAll(defaultJavaProperties)
33-
envParams.addAll(
34-
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter",
25+
// Make a copy of the OpenLiberty runnable JAR before injecting JVM configuration
26+
def applicationJar = copyApplicationJar().toAbsolutePath().toString()
27+
28+
List<String> command = [
29+
javaPath(),
30+
"-jar",
31+
applicationJar,
32+
"--server.port=${httpPort}" as String
33+
]
34+
35+
List<String> jvmOptions = new ArrayList<>()
36+
jvmOptions.addAll(defaultJavaProperties)
37+
jvmOptions.addAll(
38+
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter" as String,
3539
"-Ddd.jmxfetch.enabled=false",
3640
"-Ddd.appsec.enabled=true",
3741
"-Ddatadog.slf4j.simpleLogger.defaultLogLevel=debug",
3842
"-Dorg.slf4j.simpleLogger.defaultLogLevel=debug",
39-
"-Ddd.iast.enabled=true", "-Ddd.iast.request-sampling=100"
43+
"-Ddd.iast.enabled=true",
44+
"-Ddd.iast.request-sampling=100"
4045
)
41-
42-
43-
String javaToolOptions = envParams.stream().collect(Collectors.joining(" "))
44-
46+
injectOpenLibertyJvmOptions(applicationJar, jvmOptions)
4547

4648
ProcessBuilder processBuilder = new ProcessBuilder(command)
47-
processBuilder.environment().put("JAVA_TOOL_OPTIONS", javaToolOptions)
49+
processBuilder.environment().put('WLP_JAR_EXTRACT_ROOT', 'application')
4850
processBuilder.directory(new File(buildDirectory))
4951
return processBuilder
5052
}
5153

54+
Path copyApplicationJar() {
55+
def applicationJar = Paths.get(openLibertyShadowJar)
56+
def randomId = System.nanoTime()
57+
def uniqueName = applicationJar.fileName.toString()
58+
uniqueName = uniqueName.substring(0, uniqueName.length() - 4) + "-${randomId}.jar"
59+
def specificationJar = applicationJar.parent.parent.resolve(uniqueName)
60+
Files.copy(applicationJar, specificationJar)
61+
return specificationJar
62+
}
63+
64+
void injectOpenLibertyJvmOptions(String applicationJar, List<String> options) {
65+
def appUri = URI.create("jar:file:$applicationJar")
66+
try (def fs = FileSystems.newFileSystem(appUri, [:])) {
67+
def jvmOptionFile = fs.getPath( 'wlp', 'usr', 'servers', 'defaultServer', 'jvm.options')
68+
try (def writer = Files.newBufferedWriter(jvmOptionFile)) {
69+
options.each {
70+
writer.write(it)
71+
writer.newLine()
72+
}
73+
}
74+
}
75+
}
76+
5277
@Override
5378
File createTemporaryFile() {
5479
return new File("${buildDirectory}/tmp/springboot-openliberty.out")

dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy

Lines changed: 43 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import okhttp3.Request
77
import spock.lang.Requires
88
import spock.lang.Shared
99

10-
import java.util.stream.Collectors
10+
import java.nio.file.FileSystems
11+
import java.nio.file.Files
12+
import java.nio.file.Path
13+
import java.nio.file.Paths
1114

1215
// This test currently fails on IBM JVMs
1316
@Requires({ !Platform.isJ9() })
@@ -21,15 +24,20 @@ class SpringBootOpenLibertySmokeTest extends AbstractServerSmokeTest {
2124

2225
@Override
2326
ProcessBuilder createProcessBuilder() {
24-
List<String> command = new ArrayList<>()
25-
command.add(javaPath())
26-
27-
command.addAll((String[]) ["-jar", openLibertyShadowJar, "--server.port=${httpPort}"])
28-
29-
List<String> envParams = new ArrayList<>()
30-
envParams.addAll(defaultJavaProperties)
31-
envParams.addAll([
32-
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()}:includeService,DDAgentWriter",
27+
// Make a copy of the OpenLiberty runnable JAR before injecting JVM configuration
28+
def applicationJar = copyApplicationJar().toAbsolutePath().toString()
29+
30+
List<String> command = [
31+
javaPath(),
32+
"-jar",
33+
applicationJar,
34+
"--server.port=${httpPort}" as String
35+
]
36+
37+
List<String> jvmOptions = new ArrayList<>()
38+
jvmOptions.addAll(defaultJavaProperties)
39+
jvmOptions.addAll([
40+
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()}:includeService,DDAgentWriter" as String,
3341
"-Ddd.jmxfetch.enabled=false",
3442
"-Ddd.appsec.enabled=true",
3543
"-Ddatadog.slf4j.simpleLogger.defaultLogLevel=debug",
@@ -38,18 +46,37 @@ class SpringBootOpenLibertySmokeTest extends AbstractServerSmokeTest {
3846
"-Ddd.iast.request-sampling=100",
3947
"-Ddd.integration.spring-boot.enabled=true"
4048
])
41-
42-
43-
String javaToolOptions = envParams.stream().collect(Collectors.joining(" "))
44-
49+
injectOpenLibertyJvmOptions(applicationJar, jvmOptions)
4550

4651
ProcessBuilder processBuilder = new ProcessBuilder(command)
47-
System.err.println(javaToolOptions)
48-
processBuilder.environment().put("JAVA_TOOL_OPTIONS", javaToolOptions)
52+
processBuilder.environment().put('WLP_JAR_EXTRACT_ROOT', 'application')
4953
processBuilder.directory(new File(buildDirectory))
5054
return processBuilder
5155
}
5256

57+
Path copyApplicationJar() {
58+
def applicationJar = Paths.get(openLibertyShadowJar)
59+
def randomId = System.nanoTime()
60+
def uniqueName = applicationJar.fileName.toString()
61+
uniqueName = uniqueName.substring(0, uniqueName.length() - 4) + "-${randomId}.jar"
62+
def specificationJar = applicationJar.parent.parent.resolve(uniqueName)
63+
Files.copy(applicationJar, specificationJar)
64+
return specificationJar
65+
}
66+
67+
void injectOpenLibertyJvmOptions(String applicationJar, List<String> options) {
68+
def appUri = URI.create("jar:file:$applicationJar")
69+
try (def fs = FileSystems.newFileSystem(appUri, [:])) {
70+
def jvmOptionFile = fs.getPath( 'wlp', 'usr', 'servers', 'defaultServer', 'jvm.options')
71+
try (def writer = Files.newBufferedWriter(jvmOptionFile)) {
72+
options.each {
73+
writer.write(it)
74+
writer.newLine()
75+
}
76+
}
77+
}
78+
}
79+
5380
@Override
5481
def inferServiceName() {
5582
false // will use spring properties

dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,47 +8,72 @@ import spock.lang.Requires
88
import spock.lang.Shared
99
import spock.util.concurrent.PollingConditions
1010

11+
import java.nio.file.FileSystems
12+
import java.nio.file.Files
13+
import java.nio.file.Path
14+
import java.nio.file.Paths
1115
import java.util.function.Function
12-
import java.util.stream.Collectors
1316

1417
// This test currently fails on IBM JVMs
1518
@Requires({ !Platform.isJ9() })
1619
class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTest {
1720

18-
@Shared
19-
int totalInvocations = 100
20-
2121
@Shared
2222
String openLibertyShadowJar = System.getProperty("datadog.smoketest.openliberty.jar.path")
2323

2424
@Override
2525
ProcessBuilder createProcessBuilder() {
26-
List<String> command = new ArrayList<>()
27-
command.add(javaPath())
28-
29-
command.addAll((String[]) ["-jar", openLibertyShadowJar, "--server.port=${httpPort}"])
30-
31-
List<String> envParams = new ArrayList<>()
32-
envParams.addAll(defaultJavaProperties)
33-
envParams.addAll(
34-
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter",
26+
// Make a copy of the OpenLiberty runnable JAR before injecting JVM configuration
27+
def applicationJar = copyApplicationJar().toAbsolutePath().toString()
28+
29+
List<String> command = [
30+
javaPath(),
31+
"-jar",
32+
applicationJar,
33+
"--server.port=${httpPort}" as String
34+
]
35+
36+
List<String> jvmOptions = new ArrayList<>()
37+
jvmOptions.addAll(defaultJavaProperties)
38+
jvmOptions.addAll(
39+
"-Ddd.writer.type=MultiWriter:TraceStructureWriter:${output.getAbsolutePath()},DDAgentWriter" as String,
3540
"-Ddd.jmxfetch.enabled=false",
3641
"-Ddd.appsec.enabled=true",
3742
"-Ddatadog.slf4j.simpleLogger.defaultLogLevel=debug",
3843
"-Dorg.slf4j.simpleLogger.defaultLogLevel=debug",
3944
"-Ddd.iast.enabled=true", "-Ddd.iast.request-sampling=100"
4045
)
41-
42-
43-
String javaToolOptions = envParams.stream().collect(Collectors.joining(" "))
44-
46+
injectOpenLibertyJvmOptions(applicationJar, jvmOptions)
4547

4648
ProcessBuilder processBuilder = new ProcessBuilder(command)
47-
processBuilder.environment().put("JAVA_TOOL_OPTIONS", javaToolOptions)
49+
processBuilder.environment().put('WLP_JAR_EXTRACT_ROOT', 'application')
4850
processBuilder.directory(new File(buildDirectory))
4951
return processBuilder
5052
}
5153

54+
Path copyApplicationJar() {
55+
def applicationJar = Paths.get(openLibertyShadowJar)
56+
def randomId = System.nanoTime()
57+
def uniqueName = applicationJar.fileName.toString()
58+
uniqueName = uniqueName.substring(0, uniqueName.length() - 4) + "-${randomId}.jar"
59+
def specificationJar = applicationJar.parent.parent.resolve(uniqueName)
60+
Files.copy(applicationJar, specificationJar)
61+
return specificationJar
62+
}
63+
64+
void injectOpenLibertyJvmOptions(String applicationJar, List<String> options) {
65+
def appUri = URI.create("jar:file:$applicationJar")
66+
try (def fs = FileSystems.newFileSystem(appUri, [:])) {
67+
def jvmOptionFile = fs.getPath( 'wlp', 'usr', 'servers', 'defaultServer', 'jvm.options')
68+
try (def writer = Files.newBufferedWriter(jvmOptionFile)) {
69+
options.each {
70+
writer.write(it)
71+
writer.newLine()
72+
}
73+
}
74+
}
75+
}
76+
5277
@Override
5378
File createTemporaryFile() {
5479
return new File("${buildDirectory}/tmp/springboot-openliberty.out")

0 commit comments

Comments
 (0)