< prev index next >

test/testlibrary/com/oracle/java/testlibrary/cli/CommandLineOptionTest.java

Print this page


   1 /*
   2  * Copyright (c) 2014, 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  */


 244         } catch (RuntimeException e) {
 245             String errorMessage = String.format(
 246                     "JVM should start with option '%s' without errors.",
 247                     optionName);
 248             throw new AssertionError(errorMessage, e);
 249         }
 250         try {
 251         outputAnalyzer.shouldMatch(String.format(
 252                 CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT,
 253                 optionName, expectedValue));
 254         } catch (RuntimeException e) {
 255             String errorMessage =  String.format(
 256                     "Option '%s' is expected to have '%s' value%n%s",
 257                     optionName, expectedValue,
 258                     optionErrorString);
 259             throw new AssertionError(errorMessage, e);
 260         }
 261     }
 262 
 263     /**



































































 264      * Verifies that value of specified JVM when type of newly started VM
 265      * is the same as the type of current.
 266      * This method filter out option with {@code optionName}
 267      * name from test java options.
 268      * Only mode flag will be passed to VM in addition to
 269      * {@code additionalVMOpts}
 270      *
 271      * @param optionName name of tested option.
 272      * @param expectedValue expected value of tested option.
 273      * @param optionErrorString message to show if option has another value
 274      * @param additionalVMOpts additional options that should be
 275      *                         passed to JVM.
 276      * @throws Throwable if verification fails or some other issues occur.
 277      */
 278     public static void verifyOptionValueForSameVM(String optionName,
 279             String expectedValue, String optionErrorString,
 280             String... additionalVMOpts) throws Throwable {
 281         List<String> finalOptions = new ArrayList<>();
 282         finalOptions.add(CommandLineOptionTest.getVMTypeOption());
 283         Collections.addAll(finalOptions, additionalVMOpts);


 292      * to it's {@code value}.
 293      *
 294      * @param name the name of option to be prepared
 295      * @param value the value of option
 296      * @return prepared command line flag
 297      */
 298     public static String prepareBooleanFlag(String name, boolean value) {
 299         return String.format("-XX:%c%s", (value ? '+' : '-'), name);
 300     }
 301 
 302     /**
 303      * Prepares numeric command line flag with name {@code name} by setting
 304      * it's value to {@code value}.
 305      *
 306      * @param name the name of option to be prepared
 307      * @param value the value of option
 308      * @return prepared command line flag
 309      */
 310     public static String prepareNumericFlag(String name, Number value) {
 311         return String.format("-XX:%s=%s", name, value.toString());


















 312     }
 313 
 314     /**
 315      * Returns message that should occur in VM output if option
 316      * {@code optionName} if unrecognized.
 317      *
 318      * @param optionName the name of option for which message should be returned
 319      * @return message saying that option {@code optionName} is unrecognized
 320      */
 321     public static String getUnrecognizedOptionErrorMessage(String optionName) {
 322         return String.format(
 323                 CommandLineOptionTest.UNRECOGNIZED_OPTION_ERROR_FORMAT,
 324                 optionName);
 325     }
 326 
 327     /**
 328      * Returns message that should occur in VM output if option
 329      * {@code optionName} is experimental and
 330      * -XX:+UnlockExperimentalVMOptions was not passed to VM.
 331      *


   1 /*
   2  * Copyright (c) 2014, 2015, 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  */


 244         } catch (RuntimeException e) {
 245             String errorMessage = String.format(
 246                     "JVM should start with option '%s' without errors.",
 247                     optionName);
 248             throw new AssertionError(errorMessage, e);
 249         }
 250         try {
 251         outputAnalyzer.shouldMatch(String.format(
 252                 CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT,
 253                 optionName, expectedValue));
 254         } catch (RuntimeException e) {
 255             String errorMessage =  String.format(
 256                     "Option '%s' is expected to have '%s' value%n%s",
 257                     optionName, expectedValue,
 258                     optionErrorString);
 259             throw new AssertionError(errorMessage, e);
 260         }
 261     }
 262 
 263     /**
 264      * Start VM with given options and values.
 265      * Generates command line option flags from 
 266      * {@code optionNames} and {@code optionValues}.
 267      * 
 268      * @param optionNames names of options to pass in
 269      * @param optionValues  values of options 
 270      * @param additionalVMOpts additional options that should be
 271      *                         passed to JVM.
 272      * @return output from vm process
 273      */
 274     public static OutputAnalyzer startVMWithOptions(String[] optionNames,
 275             String[] optionValues,
 276             String... additionalVMOpts) throws Throwable {
 277         List<String> vmOpts = new ArrayList<>();
 278         if (optionNames == null || optionValues == null || optionNames.length != optionValues.length) {
 279             throw new IllegalArgumentException("optionNames and/or optionValues");
 280         }
 281         
 282         for (int i = 0; i < optionNames.length; i++) {
 283           vmOpts.add(prepareFlag(optionNames[i], optionValues[i]));
 284         }
 285         Collections.addAll(vmOpts, additionalVMOpts);
 286         Collections.addAll(vmOpts, "-version");
 287 
 288         ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder(
 289                 vmOpts.toArray(new String[vmOpts.size()]));
 290 
 291         return new OutputAnalyzer(processBuilder.start());
 292     }
 293     
 294     /**
 295      * Verifies from the output that values of specified JVM options were the same as
 296      * expected values.
 297      *
 298      * @param outputAnalyzer search output for expect options and values.
 299      * @param optionNames names of tested options.
 300      * @param expectedValues expected values of tested options.
 301      * @throws Throwable if verification fails or some other issues occur.
 302      */
 303     public static void verifyOptionValuesFromOutput(OutputAnalyzer outputAnalyzer,
 304             String[] optionNames,
 305             String[] expectedValues) throws Throwable {
 306         outputAnalyzer.shouldHaveExitValue(0);
 307         for (int i = 0; i < optionNames.length; i++) {
 308           outputAnalyzer.shouldMatch(String.format(
 309                 CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT,
 310                 optionNames[i], expectedValues[i]));
 311         }
 312     }
 313     
 314    /**
 315      * Verifies that value of specified JVM options are the same as
 316      * expected values.
 317      * Generates command line option flags from 
 318      * {@code optionNames} and {@code expectedValues}.
 319      * 
 320      * @param optionNames names of tested options.
 321      * @param expectedValues expected values of tested options.
 322      * @throws Throwable if verification fails or some other issues occur.
 323      */
 324     public static void verifyOptionValues(String[] optionNames,
 325             String[] expectedValues) throws Throwable {
 326        OutputAnalyzer outputAnalyzer = startVMWithOptions(optionNames, expectedValues, "-XX:+PrintFlagsFinal");
 327        verifyOptionValuesFromOutput(outputAnalyzer, optionNames, expectedValues);
 328     }
 329     
 330     /**
 331      * Verifies that value of specified JVM when type of newly started VM
 332      * is the same as the type of current.
 333      * This method filter out option with {@code optionName}
 334      * name from test java options.
 335      * Only mode flag will be passed to VM in addition to
 336      * {@code additionalVMOpts}
 337      *
 338      * @param optionName name of tested option.
 339      * @param expectedValue expected value of tested option.
 340      * @param optionErrorString message to show if option has another value
 341      * @param additionalVMOpts additional options that should be
 342      *                         passed to JVM.
 343      * @throws Throwable if verification fails or some other issues occur.
 344      */
 345     public static void verifyOptionValueForSameVM(String optionName,
 346             String expectedValue, String optionErrorString,
 347             String... additionalVMOpts) throws Throwable {
 348         List<String> finalOptions = new ArrayList<>();
 349         finalOptions.add(CommandLineOptionTest.getVMTypeOption());
 350         Collections.addAll(finalOptions, additionalVMOpts);


 359      * to it's {@code value}.
 360      *
 361      * @param name the name of option to be prepared
 362      * @param value the value of option
 363      * @return prepared command line flag
 364      */
 365     public static String prepareBooleanFlag(String name, boolean value) {
 366         return String.format("-XX:%c%s", (value ? '+' : '-'), name);
 367     }
 368 
 369     /**
 370      * Prepares numeric command line flag with name {@code name} by setting
 371      * it's value to {@code value}.
 372      *
 373      * @param name the name of option to be prepared
 374      * @param value the value of option
 375      * @return prepared command line flag
 376      */
 377     public static String prepareNumericFlag(String name, Number value) {
 378         return String.format("-XX:%s=%s", name, value.toString());
 379     }
 380     
 381     /**
 382      * Prepares generic command line flag with name {@code name} by setting
 383      * it's value to {@code value}.
 384      *
 385      * @param name the name of option to be prepared
 386      * @param value the value of option ("+" or "-" can be used instead of "true" or "false")
 387      * @return prepared command line flag
 388      */
 389     public static String prepareFlag(String name, String value) {
 390         if (value.equals("+") || value.equalsIgnoreCase("true")) {
 391           return "-XX:+" + name;
 392       } else if (value.equals("-") || value.equalsIgnoreCase("false")) {
 393         return "-XX:-" + name;
 394       } else {
 395         return "-XX:" + name + "=" + value;
 396       }
 397     }
 398 
 399     /**
 400      * Returns message that should occur in VM output if option
 401      * {@code optionName} if unrecognized.
 402      *
 403      * @param optionName the name of option for which message should be returned
 404      * @return message saying that option {@code optionName} is unrecognized
 405      */
 406     public static String getUnrecognizedOptionErrorMessage(String optionName) {
 407         return String.format(
 408                 CommandLineOptionTest.UNRECOGNIZED_OPTION_ERROR_FORMAT,
 409                 optionName);
 410     }
 411 
 412     /**
 413      * Returns message that should occur in VM output if option
 414      * {@code optionName} is experimental and
 415      * -XX:+UnlockExperimentalVMOptions was not passed to VM.
 416      *


< prev index next >