|
1 | 1 | package jvmbootstraptest; |
2 | 2 |
|
3 | | -import datadog.trace.agent.test.IntegrationTestUtils; |
4 | 3 | import java.io.File; |
5 | 4 | import java.io.FilePermission; |
| 5 | +import java.io.IOException; |
| 6 | +import java.nio.charset.StandardCharsets; |
| 7 | +import java.nio.file.Files; |
| 8 | +import java.nio.file.Path; |
| 9 | +import java.nio.file.attribute.PosixFilePermission; |
| 10 | +import java.nio.file.attribute.PosixFilePermissions; |
| 11 | +import java.util.Arrays; |
6 | 12 | import java.util.HashMap; |
7 | 13 | import java.util.Map; |
| 14 | +import java.util.Set; |
| 15 | + |
| 16 | +import datadog.trace.agent.test.IntegrationTestUtils; |
8 | 17 |
|
9 | 18 | /** |
10 | 19 | * Basic sanity check that InitializationTelemetry is functioning |
@@ -69,22 +78,56 @@ public static final Result runTestJvm(Class<? extends TestSecurityManager> secur |
69 | 78 | public static final Result runTestJvm( |
70 | 79 | Class<? extends TestSecurityManager> securityManagerClass, boolean printStreams) |
71 | 80 | throws Exception { |
72 | | - File jarFile = |
| 81 | + |
| 82 | + File jarFile = |
73 | 83 | IntegrationTestUtils.createJarFileWithClasses(requiredClasses(securityManagerClass)); |
| 84 | + |
| 85 | + File forwarderFile = createTempFile("forwarder", "sh", PosixFilePermissions.fromString("rwxr--r--")); |
| 86 | + File outputFile = new File(forwarderFile.getAbsoluteFile() + ".out"); |
| 87 | + |
| 88 | + write(forwarderFile, |
| 89 | + "#!/usr/bin/env bash\n", |
| 90 | + "echo \"$1 $(cat -)\" >> " + outputFile.getAbsolutePath() + "\n"); |
| 91 | + |
74 | 92 | try { |
75 | 93 | int exitCode = IntegrationTestUtils.runOnSeparateJvm( |
76 | 94 | InitializationTelemetryCheck.class.getName(), |
77 | 95 | InitializationTelemetryCheck.jvmArgs(securityManagerClass), |
78 | 96 | InitializationTelemetryCheck.mainArgs(), |
79 | | - InitializationTelemetryCheck.envVars(), |
| 97 | + InitializationTelemetryCheck.envVars(forwarderFile), |
80 | 98 | jarFile, |
81 | 99 | printStreams); |
82 | 100 |
|
83 | | - return new Result(exitCode); |
| 101 | + return new Result(exitCode, read(outputFile)); |
84 | 102 | } finally { |
85 | | - jarFile.delete(); |
| 103 | + delete(jarFile, forwarderFile, outputFile); |
86 | 104 | } |
87 | 105 | } |
| 106 | + |
| 107 | + static final File createTempFile(String baseName, String extension, Set<PosixFilePermission> perms) throws IOException { |
| 108 | + Path path = Files.createTempFile(baseName + "-integration-telemetry-check", "." + extension, PosixFilePermissions.asFileAttribute(perms)); |
| 109 | + File file = path.toFile(); |
| 110 | + file.deleteOnExit(); |
| 111 | + return file; |
| 112 | + } |
| 113 | + |
| 114 | + static final void write(File file, String... lines) throws IOException { |
| 115 | + Files.write(file.toPath(), Arrays.asList(lines)); |
| 116 | + } |
| 117 | + |
| 118 | + static final String read(File file) throws IOException { |
| 119 | + try { |
| 120 | + return new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8); |
| 121 | + } catch ( IOException e ) { |
| 122 | + return null; |
| 123 | + } |
| 124 | + } |
| 125 | + |
| 126 | + static final void delete(File... tempFiles) { |
| 127 | + for ( File file: tempFiles ) { |
| 128 | + file.delete(); |
| 129 | + } |
| 130 | + } |
88 | 131 |
|
89 | 132 | public static final Class<?>[] requiredClasses( |
90 | 133 | Class<? extends TestSecurityManager> securityManagerClass) { |
@@ -116,17 +159,19 @@ public static final String[] mainArgs() { |
116 | 159 | return new String[] {}; |
117 | 160 | } |
118 | 161 |
|
119 | | - public static final Map<String, String> envVars() { |
| 162 | + public static final Map<String, String> envVars(File forwarderFile) { |
120 | 163 | Map<String, String> envVars = new HashMap<>(); |
121 | | - envVars.put("DD_TELEMETRY_FORWARDER_PATH", "/dummy/path"); |
| 164 | + envVars.put("DD_TELEMETRY_FORWARDER_PATH", forwarderFile.getAbsolutePath()); |
122 | 165 | return envVars; |
123 | 166 | } |
124 | 167 |
|
125 | 168 | public static final class Result { |
126 | 169 | public final int exitCode; |
| 170 | + public final String telemetryJson; |
127 | 171 |
|
128 | | - public Result(int exitCode) { |
| 172 | + public Result(int exitCode, String telemetryJson) { |
129 | 173 | this.exitCode = exitCode; |
| 174 | + this.telemetryJson = telemetryJson; |
130 | 175 | } |
131 | 176 | } |
132 | 177 | } |
0 commit comments