1 /*
2 * Copyright (c) 2020, 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 * @test id=ZSinglegen
26 * @bug 8232069
27 * @requires vm.cds
28 * @requires vm.bits == 64
29 * @requires vm.gc.ZSinglegen
30 * @requires vm.gc.Serial
31 * @requires vm.gc == null
32 * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds
33 * @compile test-classes/Hello.java
34 * @run driver TestZGCWithCDS -XX:-ZGenerational
35 */
36
37 /*
38 * @test id=ZGenerational
39 * @bug 8232069
40 * @requires vm.cds
41 * @requires vm.bits == 64
42 * @requires vm.gc.ZGenerational
43 * @requires vm.gc.Serial
44 * @requires vm.gc == null
45 * @library /test/lib /test/hotspot/jtreg/runtime/cds/appcds
46 * @compile test-classes/Hello.java
47 * @run driver TestZGCWithCDS -XX:+ZGenerational
48 */
49
50 import jdk.test.lib.Platform;
51 import jdk.test.lib.process.OutputAnalyzer;
52
53 public class TestZGCWithCDS {
54 public final static String HELLO = "Hello World";
55 public final static String UNABLE_TO_USE_ARCHIVE = "Unable to use shared archive.";
56 public final static String ERR_MSG = "The saved state of UseCompressedOops and UseCompressedClassPointers is different from runtime, CDS will be disabled.";
57 public static void main(String... args) throws Exception {
58 String zGenerational = args[0];
59 String compactHeaders = "-XX:" + (zGenerational.equals("-XX:+ZGenerational") ? "+" : "-") + "UseCompactObjectHeaders";
60 String helloJar = JarBuilder.build("hello", "Hello");
61 System.out.println("0. Dump with ZGC");
62 OutputAnalyzer out = TestCommon
63 .dump(helloJar,
64 new String[] {"Hello"},
65 "-XX:+UseZGC",
66 zGenerational,
67 "-XX:+UnlockExperimentalVMOptions",
68 compactHeaders,
69 "-Xlog:cds");
70 out.shouldContain("Dumping shared data to file:");
71 out.shouldHaveExitValue(0);
72
73 System.out.println("1. Run with same args of dump");
74 out = TestCommon
75 .exec(helloJar,
76 "-XX:+UseZGC",
77 zGenerational,
78 "-XX:+UnlockExperimentalVMOptions",
79 compactHeaders,
80 "-Xlog:cds",
81 "Hello");
82 out.shouldContain(HELLO);
83 out.shouldHaveExitValue(0);
84
85 System.out.println("2. Run with +UseCompressedOops +UseCompressedClassPointers");
86 out = TestCommon
87 .exec(helloJar,
88 "-XX:-UseZGC",
89 "-XX:+UseCompressedOops", // in case turned off by vmoptions
90 "-XX:+UseCompressedClassPointers", // by jtreg
91 "-XX:+UnlockExperimentalVMOptions",
92 compactHeaders,
93 "-Xlog:cds",
94 "Hello");
95 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
96 out.shouldContain(ERR_MSG);
97 out.shouldHaveExitValue(1);
98
99 System.out.println("3. Run with -UseCompressedOops -UseCompressedClassPointers");
100 out = TestCommon
101 .exec(helloJar,
102 "-XX:+UseSerialGC",
103 "-XX:-UseCompressedOops",
104 "-XX:-UseCompressedClassPointers",
105 "-Xlog:cds",
106 "Hello");
107 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
108 out.shouldContain(ERR_MSG);
109 out.shouldHaveExitValue(1);
110
111 System.out.println("4. Run with -UseCompressedOops +UseCompressedClassPointers");
112 out = TestCommon
113 .exec(helloJar,
114 "-XX:+UseSerialGC",
115 "-XX:-UseCompressedOops",
116 "-XX:+UseCompressedClassPointers",
117 "-XX:+UnlockExperimentalVMOptions",
118 compactHeaders,
119 "-Xlog:cds",
120 "Hello");
121 out.shouldContain(HELLO);
122 out.shouldHaveExitValue(0);
123
124 System.out.println("5. Run with +UseCompressedOops -UseCompressedClassPointers");
125 out = TestCommon
126 .exec(helloJar,
127 "-XX:+UseSerialGC",
128 "-XX:+UseCompressedOops",
129 "-XX:-UseCompressedClassPointers",
130 "-Xlog:cds",
131 "Hello");
132 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
133 out.shouldContain(ERR_MSG);
134 out.shouldHaveExitValue(1);
135
136 System.out.println("6. Run with +UseCompressedOops +UseCompressedClassPointers");
137 out = TestCommon
138 .exec(helloJar,
139 "-XX:+UseSerialGC",
140 "-XX:+UseCompressedOops",
141 "-XX:+UseCompressedClassPointers",
142 "-XX:+UnlockExperimentalVMOptions",
143 compactHeaders,
144 "-Xlog:cds",
145 "Hello");
146 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
147 out.shouldContain(ERR_MSG);
148 out.shouldHaveExitValue(1);
149
150 System.out.println("7. Dump with -UseCompressedOops -UseCompressedClassPointers");
151 out = TestCommon
152 .dump(helloJar,
153 new String[] {"Hello"},
154 "-XX:+UseSerialGC",
155 "-XX:-UseCompressedOops",
156 "-XX:+UseCompressedClassPointers",
157 "-XX:+UnlockExperimentalVMOptions",
158 compactHeaders,
159 "-Xlog:cds");
160 out.shouldContain("Dumping shared data to file:");
161 out.shouldHaveExitValue(0);
162
163 System.out.println("8. Run with ZGC");
164 out = TestCommon
165 .exec(helloJar,
166 "-XX:+UseZGC",
167 zGenerational,
168 "-XX:+UnlockExperimentalVMOptions",
169 compactHeaders,
170 "-Xlog:cds",
171 "Hello");
172 out.shouldContain(HELLO);
173 out.shouldHaveExitValue(0);
174 }
175 }