b9d8056d5c
Reviewed-by: kevinw, stuefe
120 lines
5.1 KiB
Java
120 lines
5.1 KiB
Java
/*
|
|
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
|
|
* Copyright (c) 2024, Red Hat Inc.
|
|
* 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.
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
/*
|
|
* @test
|
|
* @bug 8332124
|
|
* @summary Test to verify jcmd accepts the "-help", "--help" and "-h" suboptions as a command argument
|
|
* @library /test/lib
|
|
* @modules java.base/jdk.internal.misc
|
|
* java.management
|
|
* @run main/othervm TestJcmdSubcommandHelp
|
|
*
|
|
*/
|
|
|
|
import jdk.test.lib.process.OutputAnalyzer;
|
|
|
|
|
|
public class TestJcmdSubcommandHelp {
|
|
|
|
private static final String HELP_ONE_DASH = "-help";
|
|
private static final String HELP_TWO_DASH = "--help";
|
|
private static final String SINGLE_H = "-h";
|
|
private static final String CMD = "VM.metaspace";
|
|
private static final String ILLEGAL = "IllegalArgumentException: Unknown argument";
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
|
|
// Sanity check with empty input
|
|
OutputAnalyzer output = JcmdBase.jcmd();
|
|
output.shouldContain("The following commands are available:");
|
|
|
|
// Sanity check with existing usage for "help <cmd>"
|
|
output = JcmdBase.jcmd("help", CMD);
|
|
String expectedOutput = output.getOutput();
|
|
output.shouldNotContain("Unknown diagnostic command");
|
|
|
|
testExpectedUsage(HELP_ONE_DASH, expectedOutput);
|
|
testExpectedUsage(HELP_TWO_DASH, expectedOutput);
|
|
testExpectedUsage(SINGLE_H, expectedOutput);
|
|
|
|
testIgnoreAdditionalArgs(HELP_ONE_DASH, expectedOutput);
|
|
testIgnoreAdditionalArgs(HELP_TWO_DASH, expectedOutput);
|
|
testIgnoreAdditionalArgs(SINGLE_H, expectedOutput);
|
|
|
|
testIgnoreTrailingSpaces(HELP_ONE_DASH, expectedOutput);
|
|
testIgnoreTrailingSpaces(HELP_TWO_DASH, expectedOutput);
|
|
testIgnoreTrailingSpaces(SINGLE_H, expectedOutput);
|
|
|
|
testSimilarCommand(HELP_ONE_DASH + "less", ILLEGAL);
|
|
testSimilarCommand(HELP_TWO_DASH + "me", ILLEGAL);
|
|
testSimilarCommand(SINGLE_H + "ello", ILLEGAL);
|
|
}
|
|
|
|
private static void testExpectedUsage(String helpOption, String expectedOutput) throws Exception {
|
|
verifyOutput(new String[] {CMD, helpOption}, expectedOutput,
|
|
"Expected jcmd to accept '%s' suboption as a command argument and issue the same help output.".formatted(helpOption));
|
|
}
|
|
|
|
private static void testIgnoreAdditionalArgs(String helpOption, String expectedOutput) throws Exception {
|
|
verifyOutput(new String[] {CMD, helpOption, "basic"}, expectedOutput,
|
|
"Expected jcmd to accept '%s' suboption with additional arguments after help.".formatted(helpOption));
|
|
}
|
|
|
|
private static void testIgnoreTrailingSpaces(String helpOption, String expectedOutput) throws Exception {
|
|
verifyOutput(new String[] {CMD, "%s ".formatted(helpOption)}, expectedOutput,
|
|
"Expected jcmd to accept '%s' suboption with trailing spaces".formatted(helpOption));
|
|
}
|
|
|
|
private static void testSimilarCommand(String helpOption, String expectedOutput) throws Exception {
|
|
verifyOutputContains(new String[] {CMD, helpOption}, expectedOutput,
|
|
"Expected jcmd to NOT accept '%s' suboption with trailing content".formatted(helpOption));
|
|
}
|
|
|
|
private static void verifyOutputContains(String[] args, String expectedOutput, String errorMessage) throws Exception {
|
|
OutputAnalyzer output = JcmdBase.jcmd(args);
|
|
String issuedOutput = output.getOutput();
|
|
if (!issuedOutput.contains(expectedOutput)) {
|
|
printDifferingOutputs(expectedOutput, issuedOutput);
|
|
throw new Exception(errorMessage);
|
|
}
|
|
}
|
|
|
|
private static void verifyOutput(String[] args, String expectedOutput, String errorMessage) throws Exception {
|
|
OutputAnalyzer output = JcmdBase.jcmd(args);
|
|
String issuedOutput = output.getOutput();
|
|
if (!expectedOutput.equals(issuedOutput)) {
|
|
printDifferingOutputs(expectedOutput, issuedOutput);
|
|
throw new Exception(errorMessage);
|
|
}
|
|
}
|
|
|
|
private static void printDifferingOutputs(String expectedOutput, String issuedOutput) {
|
|
System.out.println("Expected output: ");
|
|
System.out.println(expectedOutput);
|
|
System.out.println("Issued output: ");
|
|
System.out.println(issuedOutput);
|
|
}
|
|
}
|