blob: fe635b4fca5ed98169c8e1043c8d31b5f4636953 [file] [log] [blame]
/*
* Copyright (c) 2016, 2018, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package jdk.jfr.startupargs;
import jdk.test.lib.Asserts;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
/**
* @test
* @key jfr
* @requires vm.hasJFR
*
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.management
* jdk.jfr
*
* @run main jdk.jfr.startupargs.TestBadOptionValues
*/
public class TestBadOptionValues {
private static final String START_FLIGHT_RECORDING = "-XX:StartFlightRecording=";
private static final String FLIGHT_RECORDER_OPTIONS = "-XX:FlightRecorderOptions=";
private static void test(String prepend, String expectedOutput, String... options) throws Exception {
ProcessBuilder pb;
OutputAnalyzer output;
Asserts.assertGreaterThan(options.length, 0);
for (String option : options) {
pb = ProcessTools.createJavaProcessBuilder(prepend + option, "-version");
output = new OutputAnalyzer(pb.start());
output.shouldContain(expectedOutput);
}
}
private static void testBoolean(String prepend, String... options) throws Exception {
String[] splitOption;
Asserts.assertGreaterThan(options.length, 0);
for (String option : options) {
splitOption = option.split("=", 2);
test(prepend, String.format("Boolean parsing error in command argument '%s'. Could not parse: %s.", splitOption[0], splitOption[1]), option);
}
}
private static void testJlong(String prepend, String... options) throws Exception {
String[] splitOption;
Asserts.assertGreaterThan(options.length, 0);
for (String option : options) {
splitOption = option.split("=", 2);
test(prepend, String.format("Integer parsing error in command argument '%s'. Could not parse: %s.",
splitOption[0], splitOption.length > 1 ? splitOption[1]: ""), option);
}
}
public static void main(String[] args) throws Exception {
// Nanotime options
test(START_FLIGHT_RECORDING, "Integer parsing error nanotime value: syntax error",
"delay=ms",
"duration=",
"maxage=q");
test(START_FLIGHT_RECORDING, "Integer parsing error nanotime value: syntax error, value is null",
"duration");
test(START_FLIGHT_RECORDING, "Integer parsing error nanotime value: illegal unit",
"delay=1000mq",
"duration=2000mss",
"maxage=-1000");
test(START_FLIGHT_RECORDING, "Integer parsing error nanotime value: unit required",
"delay=3037",
"maxage=1");
// Memory size options
test(START_FLIGHT_RECORDING, "Parsing error memory size value: negative values not allowed",
"maxsize=-1",
"maxsize=-10k");
test(FLIGHT_RECORDER_OPTIONS, "Parsing error memory size value: negative values not allowed",
"threadbuffersize=-1M",
"memorysize=-1g",
"globalbuffersize=-0",
"maxchunksize=-");
test(START_FLIGHT_RECORDING, "Parsing error memory size value: syntax error, value is null",
"maxsize");
test(FLIGHT_RECORDER_OPTIONS, "Parsing error memory size value: syntax error, value is null",
"threadbuffersize",
"memorysize",
"globalbuffersize",
"maxchunksize");
test(START_FLIGHT_RECORDING, "Parsing error memory size value: invalid value",
"maxsize=");
test(FLIGHT_RECORDER_OPTIONS, "Parsing error memory size value: invalid value",
"threadbuffersize=a",
"globalbuffersize=G",
"maxchunksize=M10");
// Jlong options
testJlong(FLIGHT_RECORDER_OPTIONS,
"stackdepth=q",
"stackdepth=",
"numglobalbuffers=10m",
"numglobalbuffers",
"numglobalbuffers=0x15");
// Boolean options
testBoolean(START_FLIGHT_RECORDING,
"disk=on",
"dumponexit=truee");
testBoolean(FLIGHT_RECORDER_OPTIONS,
"samplethreads=falseq",
"retransform=0");
// Not existing options
test(START_FLIGHT_RECORDING, "Unknown argument 'dumponexitt' in diagnostic command.",
"dumponexitt=true");
test(FLIGHT_RECORDER_OPTIONS, "Unknown argument 'notexistoption' in diagnostic command.",
"notexistoption");
}
}