1 /*
 2  * Copyright (c) 2016, 2019, 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 package gc;
25 
26 /* @test TestVerifySubSet.java
27  * @key gc
28  * @bug 8072725
29  * @summary Test VerifySubSet option
30  * @library /test/lib
31  * @modules java.base/jdk.internal.misc
32  * @run main gc.TestVerifySubSet
33  */
34 
35 import jdk.test.lib.process.ProcessTools;
36 import jdk.test.lib.process.OutputAnalyzer;
37 import java.util.ArrayList;
38 import java.util.Collections;
39 import jdk.test.lib.Utils;
40 
41 class TestVerifySubSetRunSystemGC {
42     public static void main(String args[]) throws Exception {
43         System.gc();
44     }
45 }
46 
47 public class TestVerifySubSet {
48 
49     private static OutputAnalyzer runTest(String subset) throws Exception {
50         ArrayList<String> vmOpts = new ArrayList();
51 
52         Collections.addAll(vmOpts, Utils.getFilteredTestJavaOpts("-Xlog.*"));
53         Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
54                                                  "-XX:+VerifyBeforeGC",
55                                                  "-XX:+VerifyAfterGC",
56                                                  "-Xlog:gc+verify=debug",
57                                                  "-XX:VerifySubSet="+subset,
58                                                  TestVerifySubSetRunSystemGC.class.getName()});
59         ProcessBuilder pb =
60             ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
61         OutputAnalyzer output = new OutputAnalyzer(pb.start());
62 
63         System.out.println("Output:\n" + output.getOutput());
64         return output;
65     }
66 
67     public static void main(String args[]) throws Exception {
68 
69         OutputAnalyzer output;
70 
71         output = runTest("heap, threads, codecache, metaspace");
72         output.shouldContain("Heap");
73         output.shouldContain("Threads");
74         output.shouldContain("CodeCache");
75         output.shouldContain("MetaspaceUtils");
76         output.shouldNotContain("SymbolTable");
77         output.shouldNotContain("StringTable");
78         output.shouldNotContain("SystemDictionary");
79         output.shouldNotContain("CodeCache Oops");
80         output.shouldHaveExitValue(0);
81 
82         output = runTest("hello, threads, codecache, metaspace");
83         output.shouldContain("memory sub-system is unknown, please correct it");
84         output.shouldNotContain("Threads");
85         output.shouldNotContain("CodeCache");
86         output.shouldNotContain("MetaspaceUtils");
87         output.shouldHaveExitValue(1);
88     }
89 }