20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /* @test
25 * @summary a jtreg wrapper for gtest tests
26 * @library /test/lib
27 * @modules java.base/jdk.internal.misc
28 * java.xml
29 * @run main/native GTestWrapper
30 */
31
32 import jdk.test.lib.Platform;
33 import jdk.test.lib.Utils;
34 import jdk.test.lib.process.ProcessTools;
35
36 import java.io.File;
37 import java.nio.file.Files;
38 import java.nio.file.Path;
39 import java.nio.file.Paths;
40 import java.util.Collections;
41 import java.util.List;
42 import java.util.Map;
43
44 public class GTestWrapper {
45 public static void main(String[] args) throws Throwable {
46 // gtestLauncher is located in <test_image>/hotspot/gtest/<vm_variant>/
47 // nativePath points either to <test_image>/hotspot/jtreg/native or to <test_image>/hotspot/gtest
48 Path nativePath = Paths.get(System.getProperty("test.nativepath"));
49 String jvmVariantDir = getJVMVariantSubDir();
50 // let's assume it's <test_image>/hotspot/gtest
51 Path path = nativePath.resolve(jvmVariantDir);
52 if (!path.toFile().exists()) {
53 // maybe it is <test_image>/hotspot/jtreg/native
54 path = nativePath.getParent()
55 .getParent()
56 .resolve("gtest")
57 .resolve(jvmVariantDir);
58 }
59 if (!path.toFile().exists()) {
60 throw new Error("TESTBUG: the library has not been found in " + nativePath + ". Did you forget to use --with-gtest to configure?");
61 }
62
63 Path execPath = path.resolve("gtestLauncher" + (Platform.isWindows() ? ".exe" : ""));
64 ProcessBuilder pb = new ProcessBuilder();
65 Map<String, String> env = pb.environment();
66
67 // The GTestWrapper was started using the normal java launcher, which
68 // may have set LD_LIBRARY_PATH or LIBPATH to point to the jdk libjvm. In
69 // that case, prepend the path with the location of the gtest library."
70
71 String pathVar = Platform.sharedLibraryPathVariableName();
72 String ldLibraryPath = System.getenv(pathVar);
73 if (ldLibraryPath != null) {
74 env.put(pathVar, path + File.pathSeparator + ldLibraryPath);
75 }
76
77 Path resultFile = Paths.get("test_result.xml");
78 pb.command(execPath.toAbsolutePath().toString(),
79 "-jdk", Utils.TEST_JDK,
80 "--gtest_output=xml:" + resultFile);
81 int exitCode = ProcessTools.executeCommand(pb).getExitValue();
82 if (exitCode != 0) {
83 List<String> failedTests = failedTests(resultFile);
84 String message = "gtest execution failed; exit code = " + exitCode + ".";
85 if (!failedTests.isEmpty()) {
86 message += " the failed tests: " + failedTests;
87 }
88 throw new AssertionError(message);
89 }
90 }
91
92 private static List<String> failedTests(Path xml) {
93 if (!Files.exists(xml)) {
94 System.err.println("WARNING: test result file (" + xml + ") hasn't been found");
95 }
96
97 try {
98 return new GTestResultParser(xml).failedTests();
99 } catch (Throwable t) {
100 System.err.println("WARNING: failed to parse result file (" + xml + ") " + t);
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /* @test
25 * @summary a jtreg wrapper for gtest tests
26 * @library /test/lib
27 * @modules java.base/jdk.internal.misc
28 * java.xml
29 * @run main/native GTestWrapper
30 */
31
32 import jdk.test.lib.Platform;
33 import jdk.test.lib.Utils;
34 import jdk.test.lib.process.ProcessTools;
35
36 import java.io.File;
37 import java.nio.file.Files;
38 import java.nio.file.Path;
39 import java.nio.file.Paths;
40 import java.util.ArrayList;
41 import java.util.Collections;
42 import java.util.List;
43 import java.util.Map;
44
45 public class GTestWrapper {
46 public static void main(String[] args) throws Throwable {
47 // gtestLauncher is located in <test_image>/hotspot/gtest/<vm_variant>/
48 // nativePath points either to <test_image>/hotspot/jtreg/native or to <test_image>/hotspot/gtest
49 Path nativePath = Paths.get(System.getProperty("test.nativepath"));
50 String jvmVariantDir = getJVMVariantSubDir();
51 // let's assume it's <test_image>/hotspot/gtest
52 Path path = nativePath.resolve(jvmVariantDir);
53 if (!path.toFile().exists()) {
54 // maybe it is <test_image>/hotspot/jtreg/native
55 path = nativePath.getParent()
56 .getParent()
57 .resolve("gtest")
58 .resolve(jvmVariantDir);
59 }
60 if (!path.toFile().exists()) {
61 throw new Error("TESTBUG: the library has not been found in " + nativePath + ". Did you forget to use --with-gtest to configure?");
62 }
63
64 Path execPath = path.resolve("gtestLauncher" + (Platform.isWindows() ? ".exe" : ""));
65 ProcessBuilder pb = new ProcessBuilder();
66 Map<String, String> env = pb.environment();
67
68 // The GTestWrapper was started using the normal java launcher, which
69 // may have set LD_LIBRARY_PATH or LIBPATH to point to the jdk libjvm. In
70 // that case, prepend the path with the location of the gtest library."
71
72 String pathVar = Platform.sharedLibraryPathVariableName();
73 String ldLibraryPath = System.getenv(pathVar);
74 if (ldLibraryPath != null) {
75 env.put(pathVar, path + File.pathSeparator + ldLibraryPath);
76 }
77
78 Path resultFile = Paths.get("test_result.xml");
79
80 ArrayList<String> command = new ArrayList<>();
81 command.add(execPath.toAbsolutePath().toString());
82 command.add("-jdk");
83 command.add(Utils.TEST_JDK);
84 command.add("--gtest_output=xml:" + resultFile);
85 for (String a : args) {
86 command.add(a);
87 }
88 pb.command(command);
89 int exitCode = ProcessTools.executeCommand(pb).getExitValue();
90 if (exitCode != 0) {
91 List<String> failedTests = failedTests(resultFile);
92 String message = "gtest execution failed; exit code = " + exitCode + ".";
93 if (!failedTests.isEmpty()) {
94 message += " the failed tests: " + failedTests;
95 }
96 throw new AssertionError(message);
97 }
98 }
99
100 private static List<String> failedTests(Path xml) {
101 if (!Files.exists(xml)) {
102 System.err.println("WARNING: test result file (" + xml + ") hasn't been found");
103 }
104
105 try {
106 return new GTestResultParser(xml).failedTests();
107 } catch (Throwable t) {
108 System.err.println("WARNING: failed to parse result file (" + xml + ") " + t);
|