11package jvmbootstraptest ;
22
3+ import static datadog .trace .api .ConfigDefaults .DEFAULT_TRACE_AGENT_PORT ;
4+
35import datadog .trace .agent .test .IntegrationTestUtils ;
46import java .io .File ;
57import java .io .FilePermission ;
911import java .nio .file .Path ;
1012import java .nio .file .attribute .PosixFilePermission ;
1113import java .nio .file .attribute .PosixFilePermissions ;
14+ import java .util .ArrayList ;
1215import java .util .Arrays ;
1316import java .util .Collections ;
1417import java .util .HashMap ;
1518import java .util .List ;
1619import java .util .Map ;
1720import java .util .Set ;
21+ import java .util .concurrent .TimeUnit ;
1822
1923/**
2024 * Basic sanity check that InitializationTelemetry is functioning
2125 *
2226 * <p>Checks edge cases where InitializationTelemetry is blocked by SecurityManagers
2327 */
2428public class InitializationTelemetryCheck {
25- public static void main (String [] args ) throws InterruptedException {
29+ public static void main (String [] args ) throws Exception {
2630 // Emulates the real application performing work in main().
27- // That should give enough time to send initial telemetry from daemon thread.
28- if (args .length > 0 && "sleep" .equals (args [0 ])) {
29- Thread .sleep (5000 );
31+ // Start sub-process to generate one trace.
32+ try {
33+ ProcessBuilder builder = new ProcessBuilder ("echo" );
34+ Process process = builder .start ();
35+ process .waitFor (5 , TimeUnit .SECONDS );
36+ } catch (SecurityException se ) {
37+ // Ignore security exceptions, as it can be part of strict security manager test.
3038 }
39+
40+ // That should give enough time to send initial telemetry and traces.
41+ Thread .sleep (2000 );
3142 }
3243
3344 /** Blocks the loading of the agent bootstrap */
@@ -79,20 +90,11 @@ protected boolean checkFileExecutePermission(FilePermission perm, Object ctx, St
7990
8091 public static final Result runTestJvm (Class <? extends TestSecurityManager > securityManagerClass )
8192 throws Exception {
82- return runTestJvm (securityManagerClass , false , null );
83- }
84-
85- public static final Result runTestJvm (
86- Class <? extends TestSecurityManager > securityManagerClass , boolean printStreams )
87- throws Exception {
88- return runTestJvm (securityManagerClass , printStreams , null );
93+ return runTestJvm (securityManagerClass , DEFAULT_TRACE_AGENT_PORT );
8994 }
9095
9196 public static final Result runTestJvm (
92- Class <? extends TestSecurityManager > securityManagerClass ,
93- boolean printStreams ,
94- String mainArgs )
95- throws Exception {
97+ Class <? extends TestSecurityManager > securityManagerClass , int port ) throws Exception {
9698
9799 File jarFile =
98100 IntegrationTestUtils .createJarFileWithClasses (requiredClasses (securityManagerClass ));
@@ -101,6 +103,12 @@ public static final Result runTestJvm(
101103 createTempFile ("forwarder" , "sh" , PosixFilePermissions .fromString ("rwxr--r--" ));
102104 File outputFile = new File (forwarderFile .getAbsoluteFile () + ".out" );
103105
106+ List <String > jvmArgs = new ArrayList <>();
107+ jvmArgs .add ("-Ddd.trace.agent.port=" + port );
108+ if (securityManagerClass != null ) {
109+ jvmArgs .add ("-Djava.security.manager=" + securityManagerClass .getName ());
110+ }
111+
104112 write (
105113 forwarderFile ,
106114 "#!/usr/bin/env bash\n " ,
@@ -110,11 +118,11 @@ public static final Result runTestJvm(
110118 int exitCode =
111119 IntegrationTestUtils .runOnSeparateJvm (
112120 InitializationTelemetryCheck .class .getName (),
113- InitializationTelemetryCheck . jvmArgs ( securityManagerClass ) ,
114- InitializationTelemetryCheck . mainArgs ( mainArgs ),
121+ jvmArgs ,
122+ Collections . emptyList ( ),
115123 InitializationTelemetryCheck .envVars (forwarderFile ),
116124 jarFile ,
117- printStreams );
125+ true );
118126
119127 return new Result (exitCode , read (outputFile ));
120128 } finally {
@@ -170,23 +178,6 @@ public static final Class<?>[] requiredClasses(
170178 }
171179 }
172180
173- public static final List <String > jvmArgs (
174- Class <? extends TestSecurityManager > securityManagerClass ) {
175- if (securityManagerClass == null ) {
176- return Collections .emptyList ();
177- } else {
178- return Collections .singletonList ("-Djava.security.manager=" + securityManagerClass .getName ());
179- }
180- }
181-
182- public static final List <String > mainArgs (String args ) {
183- if (args == null ) {
184- return Collections .emptyList ();
185- } else {
186- return Arrays .asList (args .split ("," ));
187- }
188- }
189-
190181 public static final Map <String , String > envVars (File forwarderFile ) {
191182 Map <String , String > envVars = new HashMap <>();
192183 envVars .put ("DD_TELEMETRY_FORWARDER_PATH" , forwarderFile .getAbsolutePath ());
0 commit comments