85 if (java) { 86 String[] oldArgs = args; 87 String[] testJavaOpts = Utils.getTestJavaOpts(); 88 if (testJavaOpts.length > 0) { 89 args = new String[args.length + testJavaOpts.length]; 90 // bin/java goes before options 91 args[0] = oldArgs[0]; 92 // then external java options 93 System.arraycopy(testJavaOpts, 0, args, 1, testJavaOpts.length); 94 // and then options and args from a test 95 System.arraycopy(oldArgs, 1, args, 1 + testJavaOpts.length, oldArgs.length - 1); 96 } 97 } 98 String command = Arrays.toString(args); 99 System.out.println("exec " + command); 100 101 ProcessBuilder pb = new ProcessBuilder(args); 102 // adding jvm.so to library path 103 if (launcher) { 104 Path dir = Paths.get(Utils.TEST_JDK); 105 String name; 106 if (Platform.isWindows()) { 107 dir = dir.resolve("bin") 108 .resolve(variant()) 109 .toAbsolutePath(); 110 name = "PATH"; 111 } else { 112 dir = dir.resolve("lib") 113 .resolve(variant()) 114 .toAbsolutePath(); 115 name = Platform.isOSX() ? "DYLD_LIBRARY_PATH" : "LD_LIBRARY_PATH"; 116 } 117 118 System.out.println(" with " + name + " = " + 119 pb.environment() 120 .merge(name, dir.toString(), (x, y) -> y + File.pathSeparator + x)); 121 System.out.println(" with CLASSPATH = " + 122 pb.environment() 123 .put("CLASSPATH", Utils.TEST_CLASS_PATH)); 124 } 125 Process p = pb.start(); 126 // inheritIO does not work as expected for @run driver 127 new Thread(() -> copy(p.getInputStream(), System.out)).start(); 128 new Thread(() -> copy(p.getErrorStream(), System.out)).start(); 129 int exitCode = p.waitFor(); 130 131 if (exitCode != 0 && (!java || exitCode != 95)) { 132 throw new AssertionError(command + " exit code is " + exitCode); 133 } 134 } 135 136 private static String variant() { 137 if (Platform.isServer()) { 138 return "server"; 139 } else if (Platform.isClient()) { 140 return "client"; | 85 if (java) { 86 String[] oldArgs = args; 87 String[] testJavaOpts = Utils.getTestJavaOpts(); 88 if (testJavaOpts.length > 0) { 89 args = new String[args.length + testJavaOpts.length]; 90 // bin/java goes before options 91 args[0] = oldArgs[0]; 92 // then external java options 93 System.arraycopy(testJavaOpts, 0, args, 1, testJavaOpts.length); 94 // and then options and args from a test 95 System.arraycopy(oldArgs, 1, args, 1 + testJavaOpts.length, oldArgs.length - 1); 96 } 97 } 98 String command = Arrays.toString(args); 99 System.out.println("exec " + command); 100 101 ProcessBuilder pb = new ProcessBuilder(args); 102 // adding jvm.so to library path 103 if (launcher) { 104 Path dir = Paths.get(Utils.TEST_JDK); 105 String value; 106 String name; 107 if (Platform.isWindows()) { 108 value = dir.resolve("bin") 109 .resolve(variant()) 110 .toAbsolutePath() 111 .toString(); 112 value += File.pathSeparator; 113 value += dir.resolve("bin") 114 .toAbsolutePath() 115 .toString(); 116 name = "PATH"; 117 } else { 118 value = dir.resolve("lib") 119 .resolve(variant()) 120 .toAbsolutePath() 121 .toString(); 122 name = Platform.isOSX() ? "DYLD_LIBRARY_PATH" : "LD_LIBRARY_PATH"; 123 } 124 125 System.out.println(" with " + name + " = " + 126 pb.environment() 127 .merge(name, value, (x, y) -> y + File.pathSeparator + x)); 128 System.out.println(" with CLASSPATH = " + 129 pb.environment() 130 .put("CLASSPATH", Utils.TEST_CLASS_PATH)); 131 } 132 Process p = pb.start(); 133 // inheritIO does not work as expected for @run driver 134 new Thread(() -> copy(p.getInputStream(), System.out)).start(); 135 new Thread(() -> copy(p.getErrorStream(), System.out)).start(); 136 int exitCode = p.waitFor(); 137 138 if (exitCode != 0 && (!java || exitCode != 95)) { 139 throw new AssertionError(command + " exit code is " + exitCode); 140 } 141 } 142 143 private static String variant() { 144 if (Platform.isServer()) { 145 return "server"; 146 } else if (Platform.isClient()) { 147 return "client"; |