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 helloJar = JarBuilder.build("hello", "Hello");
60 System.out.println("0. Dump with ZGC");
61 OutputAnalyzer out = TestCommon
62 .dump(helloJar,
63 new String[] {"Hello"},
64 "-XX:+UseZGC",
65 zGenerational,
66 "-Xlog:cds");
67 out.shouldContain("Dumping shared data to file:");
68 out.shouldHaveExitValue(0);
69
70 System.out.println("1. Run with same args of dump");
71 out = TestCommon
72 .exec(helloJar,
73 "-XX:+UseZGC",
74 zGenerational,
75 "-Xlog:cds",
76 "Hello");
77 out.shouldContain(HELLO);
78 out.shouldHaveExitValue(0);
79
80 System.out.println("2. Run with +UseCompressedOops +UseCompressedClassPointers");
81 out = TestCommon
82 .exec(helloJar,
83 "-XX:-UseZGC",
84 "-XX:+UseCompressedOops", // in case turned off by vmoptions
85 "-XX:+UseCompressedClassPointers", // by jtreg
86 "-Xlog:cds",
87 "Hello");
88 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
89 out.shouldContain(ERR_MSG);
90 out.shouldHaveExitValue(1);
91
92 System.out.println("3. Run with -UseCompressedOops -UseCompressedClassPointers");
93 out = TestCommon
94 .exec(helloJar,
95 "-XX:+UseSerialGC",
96 "-XX:-UseCompressedOops",
97 "-XX:-UseCompressedClassPointers",
98 "-Xlog:cds",
99 "Hello");
100 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
101 out.shouldContain(ERR_MSG);
102 out.shouldHaveExitValue(1);
103
104 System.out.println("4. Run with -UseCompressedOops +UseCompressedClassPointers");
105 out = TestCommon
106 .exec(helloJar,
107 "-XX:+UseSerialGC",
108 "-XX:-UseCompressedOops",
109 "-XX:+UseCompressedClassPointers",
110 "-Xlog:cds",
111 "Hello");
112 out.shouldContain(HELLO);
113 out.shouldHaveExitValue(0);
114
115 System.out.println("5. Run with +UseCompressedOops -UseCompressedClassPointers");
116 out = TestCommon
117 .exec(helloJar,
118 "-XX:+UseSerialGC",
119 "-XX:+UseCompressedOops",
120 "-XX:-UseCompressedClassPointers",
121 "-Xlog:cds",
122 "Hello");
123 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
124 out.shouldContain(ERR_MSG);
125 out.shouldHaveExitValue(1);
126
127 System.out.println("6. Run with +UseCompressedOops +UseCompressedClassPointers");
128 out = TestCommon
129 .exec(helloJar,
130 "-XX:+UseSerialGC",
131 "-XX:+UseCompressedOops",
132 "-XX:+UseCompressedClassPointers",
133 "-Xlog:cds",
134 "Hello");
135 out.shouldContain(UNABLE_TO_USE_ARCHIVE);
136 out.shouldContain(ERR_MSG);
137 out.shouldHaveExitValue(1);
138
139 System.out.println("7. Dump with -UseCompressedOops -UseCompressedClassPointers");
140 out = TestCommon
141 .dump(helloJar,
142 new String[] {"Hello"},
143 "-XX:+UseSerialGC",
144 "-XX:-UseCompressedOops",
145 "-XX:+UseCompressedClassPointers",
146 "-Xlog:cds");
147 out.shouldContain("Dumping shared data to file:");
148 out.shouldHaveExitValue(0);
149
150 System.out.println("8. Run with ZGC");
151 out = TestCommon
152 .exec(helloJar,
153 "-XX:+UseZGC",
154 zGenerational,
155 "-Xlog:cds",
156 "Hello");
157 out.shouldContain(HELLO);
158 out.shouldHaveExitValue(0);
159 }
160 }