75 for (int j = 0; j < attempts -1; j++) {
76 try {
77 runSubtest(i);
78 return;
79 } catch (Exception e) {
80 System.out.println("Failed: " + e.getMessage());
81 System.out.println();
82 System.out.println("Retry " + i + 1);
83 } catch (OutOfMemoryError | StackOverflowError e) {
84 System.out.println("Error");
85 // Can happen when parsing corrupt file. Abort test.
86 return;
87 }
88 }
89 runSubtest(i);
90 }
91 }
92
93 private static void runSubtest(int subTestIndex) throws Exception {
94 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
95 "-Xlog:jfr=debug",
96 "-XX:-CreateCoredumpOnCrash",
97 "--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
98 "-XX:StartFlightRecording=filename=./dumped.jfr,dumponexit=true,settings=default",
99 "jdk.jfr.event.runtime.TestShutdownEvent$TestMain",
100 String.valueOf(subTestIndex));
101 OutputAnalyzer output = ProcessTools.executeProcess(pb);
102 System.out.println(output.getOutput());
103 int exitCode = output.getExitValue();
104 System.out.println("Exit code: " + exitCode);
105
106 String recordingName = output.firstMatch("emergency jfr file: (.*.jfr)", 1);
107 if (recordingName == null) {
108 recordingName = "./dumped.jfr";
109 }
110
111 List<RecordedEvent> events = RecordingFile.readAllEvents(Paths.get(recordingName));
112 List<RecordedEvent> filteredEvents = events.stream()
113 .filter(e -> e.getEventType().getName().equals(EventNames.Shutdown))
114 .sorted(Comparator.comparing(RecordedEvent::getStartTime))
115 .collect(Collectors.toList());
116
117 Asserts.assertEquals(filteredEvents.size(), 1);
118 RecordedEvent event = filteredEvents.get(0);
119 subTests[subTestIndex].verifyEvents(event, exitCode);
120 }
121
122 @SuppressWarnings("unused")
123 private static class TestMain {
124 public static void main(String[] args) throws Exception {
125 ShutdownEventSubTest subTest = subTests[Integer.parseInt(args[0])];
126 System.out.println("Running subtest " + args[0] + " (" + subTest.getClass().getName() + ")");
|
75 for (int j = 0; j < attempts -1; j++) {
76 try {
77 runSubtest(i);
78 return;
79 } catch (Exception e) {
80 System.out.println("Failed: " + e.getMessage());
81 System.out.println();
82 System.out.println("Retry " + i + 1);
83 } catch (OutOfMemoryError | StackOverflowError e) {
84 System.out.println("Error");
85 // Can happen when parsing corrupt file. Abort test.
86 return;
87 }
88 }
89 runSubtest(i);
90 }
91 }
92
93 private static void runSubtest(int subTestIndex) throws Exception {
94 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(true,
95 "-XX:-CreateCoredumpOnCrash",
96 "--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
97 "-XX:StartFlightRecording=filename=./dumped.jfr,dumponexit=true,settings=default",
98 "jdk.jfr.event.runtime.TestShutdownEvent$TestMain",
99 String.valueOf(subTestIndex));
100 OutputAnalyzer output = ProcessTools.executeProcess(pb);
101 System.out.println(output.getOutput());
102 int exitCode = output.getExitValue();
103 System.out.println("Exit code: " + exitCode);
104
105 String recordingName = output.firstMatch("JFR recording file will be written. Location: (.*.jfr)", 1);
106 if (recordingName == null) {
107 recordingName = "./dumped.jfr";
108 }
109
110 List<RecordedEvent> events = RecordingFile.readAllEvents(Paths.get(recordingName));
111 List<RecordedEvent> filteredEvents = events.stream()
112 .filter(e -> e.getEventType().getName().equals(EventNames.Shutdown))
113 .sorted(Comparator.comparing(RecordedEvent::getStartTime))
114 .collect(Collectors.toList());
115
116 Asserts.assertEquals(filteredEvents.size(), 1);
117 RecordedEvent event = filteredEvents.get(0);
118 subTests[subTestIndex].verifyEvents(event, exitCode);
119 }
120
121 @SuppressWarnings("unused")
122 private static class TestMain {
123 public static void main(String[] args) throws Exception {
124 ShutdownEventSubTest subTest = subTests[Integer.parseInt(args[0])];
125 System.out.println("Running subtest " + args[0] + " (" + subTest.getClass().getName() + ")");
|