8319161: GC: Make TestParallelGCThreads use createTestJavaProcessBuilder

Reviewed-by: stefank, iwalulya
This commit is contained in:
Ramkumar Sunderbabu 2025-12-09 09:17:38 +00:00 committed by Ivan Walulya
parent 3a8a6e07f2
commit 24244e4121

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -24,30 +24,86 @@
package gc.arguments;
/*
* @test TestParallelGCThreads
* @test id=DefaultValue
* @bug 8059527 8081382
* @summary Tests argument processing for ParallelGCThreads
* @summary Tests default value of ParallelGCThreads
* @library /test/lib
* @library /
* @modules java.base/jdk.internal.misc
* java.management
* @build jdk.test.whitebox.WhiteBox
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.arguments.TestParallelGCThreads
* @requires vm.gc.Z | vm.gc.Parallel | vm.gc.G1
* @run driver gc.arguments.TestParallelGCThreads DefaultValue
*/
/*
* @test id=Z
* @bug 8059527 8081382
* @summary Tests argument processing for ParallelGCThreads with ZGC
* @library /test/lib
* @library /
* @requires vm.gc.Z
* @run driver gc.arguments.TestParallelGCThreads Z
*/
/*
* @test id=Parallel
* @bug 8059527 8081382
* @summary Tests argument processing for ParallelGCThreads with Parallel GC
* @library /test/lib
* @library /
* @requires vm.gc.Parallel
* @run driver gc.arguments.TestParallelGCThreads Parallel
*/
/*
* @test id=G1
* @bug 8059527 8081382
* @summary Tests argument processing for ParallelGCThreads with G1 GC
* @library /test/lib
* @library /
* @requires vm.gc.G1
* @run driver gc.arguments.TestParallelGCThreads G1
*/
/*
* @test id=MaxValue
* @bug 8059527 8081382
* @summary Tests max value for ParallelGCThreads
* @library /test/lib
* @library /
* @requires vm.gc.Serial
* @run driver gc.arguments.TestParallelGCThreads MaxValue
*/
import java.util.ArrayList;
import java.util.List;
import jdk.test.lib.Asserts;
import jdk.test.lib.process.OutputAnalyzer;
import jtreg.SkippedException;
import jdk.test.whitebox.gc.GC;
public class TestParallelGCThreads {
public static void main(String args[]) throws Exception {
testFlags();
testDefaultValue();
if (args.length == 0) {
throw new IllegalArgumentException("Test type must be specified as argument");
}
String testType = args[0];
switch (testType) {
case "DefaultValue":
testDefaultValue();
break;
case "Z":
testFlags("-XX:+UseZGC");
break;
case "Parallel":
testFlags("-XX:+UseParallelGC");
break;
case "G1":
testFlags("-XX:+UseG1GC");
break;
case "MaxValue":
testMaxValue();
break;
default:
throw new IllegalArgumentException("Unknown test type \"" + testType + "\"");
}
}
private static final String flagName = "ParallelGCThreads";
@ -55,8 +111,8 @@ public class TestParallelGCThreads {
// uint ParallelGCThreads = 23 {product}
private static final String printFlagsFinalPattern = " *uint *" + flagName + " *:?= *(\\d+) *\\{product\\} *";
public static void testDefaultValue() throws Exception {
OutputAnalyzer output = GCArguments.executeLimitedTestJava(
private static void testDefaultValue() throws Exception {
OutputAnalyzer output = GCArguments.executeTestJava(
"-XX:+UnlockExperimentalVMOptions", "-XX:+PrintFlagsFinal", "-version");
String value = output.firstMatch(printFlagsFinalPattern, 1);
@ -64,10 +120,10 @@ public class TestParallelGCThreads {
try {
Asserts.assertNotNull(value, "Couldn't find uint flag " + flagName);
Long longValue = new Long(value);
Long longValue = Long.valueOf(value);
// Sanity check that we got a non-zero value.
Asserts.assertNotEquals(longValue, "0");
Asserts.assertNotEquals(longValue, 0L);
output.shouldHaveExitValue(0);
} catch (Exception e) {
@ -76,41 +132,28 @@ public class TestParallelGCThreads {
}
}
public static void testFlags() throws Exception {
// For each parallel collector (G1, Parallel)
List<String> supportedGC = new ArrayList<String>();
private static void testFlags(String gcFlag) throws Exception {
if (GC.G1.isSupported()) {
supportedGC.add("G1");
}
if (GC.Parallel.isSupported()) {
supportedGC.add("Parallel");
}
// Make sure the VM does not allow ParallelGCThreads set to 0
OutputAnalyzer output = GCArguments.executeTestJava(
gcFlag,
"-XX:ParallelGCThreads=0",
"-XX:+PrintFlagsFinal",
"-version");
output.shouldHaveExitValue(1);
if (supportedGC.isEmpty()) {
throw new SkippedException("Skipping test because none of G1/Parallel is supported.");
}
for (String gc : supportedGC) {
// Make sure the VM does not allow ParallelGCThreads set to 0
OutputAnalyzer output = GCArguments.executeLimitedTestJava(
"-XX:+Use" + gc + "GC",
"-XX:ParallelGCThreads=0",
// Do some basic testing to ensure the flag updates the count
for (long i = 1; i <= 3; i++) {
long count = getParallelGCThreadCount(
gcFlag,
"-XX:ParallelGCThreads=" + i,
"-XX:+PrintFlagsFinal",
"-version");
output.shouldHaveExitValue(1);
// Do some basic testing to ensure the flag updates the count
for (long i = 1; i <= 3; i++) {
long count = getParallelGCThreadCount(
"-XX:+Use" + gc + "GC",
"-XX:ParallelGCThreads=" + i,
"-XX:+PrintFlagsFinal",
"-version");
Asserts.assertEQ(count, i, "Specifying ParallelGCThreads=" + i + " for " + gc + "GC does not set the thread count properly!");
}
Asserts.assertEQ(count, i, "Specifying ParallelGCThreads=" + i + " for \"" + gcFlag + "\" does not set the thread count properly!");
}
}
private static void testMaxValue() throws Exception {
// Test the max value for ParallelGCThreads
// So setting ParallelGCThreads=2147483647 should give back 2147483647
long count = getParallelGCThreadCount(
@ -122,7 +165,7 @@ public class TestParallelGCThreads {
}
public static long getParallelGCThreadCount(String... flags) throws Exception {
OutputAnalyzer output = GCArguments.executeLimitedTestJava(flags);
OutputAnalyzer output = GCArguments.executeTestJava(flags);
output.shouldHaveExitValue(0);
String stdout = output.getStdout();
return FlagsValue.getFlagLongValue("ParallelGCThreads", stdout);