1 /*
2  * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 
25 /**
26  * @test
27  * @summary Make sure CDS and JFR work together.
28  * @requires vm.hasJFR & vm.cds
29  * @library /test/lib /test/hotspot/jtreg/runtime/appcds /test/hotspot/jtreg/runtime/appcds/test-classes test-classes
30  * @modules jdk.jfr
31  * @build Hello GetFlightRecorder
32  * @run driver ClassFileInstaller -jar CDSandJFR.jar Hello GetFlightRecorder GetFlightRecorder$TestEvent GetFlightRecorder$SimpleEvent
33  * @run main CDSandJFR
34  */
35 
36 import jdk.test.lib.BuildHelper;
37 import jdk.test.lib.process.OutputAnalyzer;
38 
39 public class CDSandJFR {
40     static String[] classes = {
41         "jdk/jfr/Event",
42         "jdk/jfr/events/FileReadEvent",
43         "jdk/jfr/events/FileWriteEvent",
44         "jdk/jfr/events/SocketReadEvent",
45         "jdk/jfr/events/SocketWriteEvent",
46         "jdk/jfr/events/ExceptionThrownEvent",
47         "jdk/jfr/events/ExceptionStatisticsEvent",
48         "jdk/jfr/events/ErrorThrownEvent",
49         "jdk/jfr/events/ActiveSettingEvent",
50         "jdk/jfr/events/ActiveRecordingEvent",
51         "Hello",
52         "GetFlightRecorder",
53         "GetFlightRecorder$TestEvent",
54     };
55 
main(String[] args)56     public static void main(String[] args) throws Exception {
57         test(classes);
58     }
59 
test(String[] classes)60     static void test(String[] classes) throws Exception {
61         String appJar = ClassFileInstaller.getJarPath("CDSandJFR.jar");
62         OutputAnalyzer output;
63         output = TestCommon.testDump(appJar, TestCommon.list(classes));
64         TestCommon.checkDump(output, "Skipping JFR event class jdk/jfr/");
65 
66         output = TestCommon.exec(appJar,
67                                  "-XX:StartFlightRecording=dumponexit=true",
68                                  "Hello");
69         TestCommon.checkExec(output, "Hello World");
70 
71         TestCommon.checkExec(TestCommon.exec(appJar,
72                                              "-XX:FlightRecorderOptions=retransform=true",
73                                              "GetFlightRecorder"));
74         TestCommon.checkExec(TestCommon.exec(appJar,
75                                              "-XX:FlightRecorderOptions=retransform=false",
76                                              "GetFlightRecorder"));
77 
78         // Test dumping with flight recorder enabled.
79         output = TestCommon.testDump(appJar, TestCommon.list(classes),
80                                      "-XX:StartFlightRecording=dumponexit=true");
81         TestCommon.checkDump(output, "warning: JFR will be disabled during CDS dumping");
82     }
83 }
84