test/serviceability/ParserTest.java

Thu, 06 Dec 2012 12:04:17 -0800

author
katleman
date
Thu, 06 Dec 2012 12:04:17 -0800
changeset 4309
10587a580c51
parent 3905
5a1f452f8f90
child 4637
1b0dc9f87e75
permissions
-rw-r--r--

Added tag jdk8-b67 for changeset 25bdce771bb3

nloodin@3681 1 /*
nloodin@3681 2 * @test ParserTest
nloodin@3681 3 * @summary verify that whitebox functions can be linked and executed
nloodin@3681 4 * @run compile -J-XX:+UnlockDiagnosticVMOptions -J-XX:+WhiteBoxAPI ParserTest.java
nloodin@3681 5 * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ParserTest
nloodin@3681 6 */
nloodin@3681 7
nloodin@3681 8 import java.math.BigInteger;
nloodin@3681 9
nloodin@3681 10 import sun.hotspot.parser.DiagnosticCommand;
nloodin@3681 11 import sun.hotspot.parser.DiagnosticCommand.DiagnosticArgumentType;
nloodin@3681 12 import sun.hotspot.WhiteBox;
nloodin@3681 13
nloodin@3681 14 public class ParserTest {
nloodin@3681 15 WhiteBox wb;
nloodin@3681 16
nloodin@3681 17 public ParserTest() throws Exception {
nloodin@3681 18 wb = WhiteBox.getWhiteBox();
nloodin@3681 19
nloodin@3681 20 testNanoTime();
nloodin@3681 21 testJLong();
nloodin@3681 22 testBool();
sla@3905 23 testQuotes();
nloodin@3681 24 testMemorySize();
nloodin@3681 25 }
nloodin@3681 26
nloodin@3681 27 public static void main(String... args) throws Exception {
nloodin@3681 28 new ParserTest();
nloodin@3681 29 }
nloodin@3681 30
nloodin@3681 31 public void testNanoTime() throws Exception {
nloodin@3681 32 String name = "name";
nloodin@3681 33 DiagnosticCommand arg = new DiagnosticCommand(name,
nloodin@3681 34 "desc", DiagnosticArgumentType.NANOTIME,
nloodin@3681 35 false, "0");
nloodin@3681 36 DiagnosticCommand[] args = {arg};
nloodin@3681 37
nloodin@3681 38 BigInteger bi = new BigInteger("7");
nloodin@3681 39 //These should work
nloodin@3681 40 parse(name, bi.toString(), name + "=7ns", args);
nloodin@3681 41
nloodin@3681 42 bi = bi.multiply(BigInteger.valueOf(1000));
nloodin@3681 43 parse(name, bi.toString(), name + "=7us", args);
nloodin@3681 44
nloodin@3681 45 bi = bi.multiply(BigInteger.valueOf(1000));
nloodin@3681 46 parse(name, bi.toString(), name + "=7ms", args);
nloodin@3681 47
nloodin@3681 48 bi = bi.multiply(BigInteger.valueOf(1000));
nloodin@3681 49 parse(name, bi.toString(), name + "=7s", args);
nloodin@3681 50
nloodin@3681 51 bi = bi.multiply(BigInteger.valueOf(60));
nloodin@3681 52 parse(name, bi.toString() , name + "=7m", args);
nloodin@3681 53
nloodin@3681 54 bi = bi.multiply(BigInteger.valueOf(60));
nloodin@3681 55 parse(name, bi.toString() , name + "=7h", args);
nloodin@3681 56
nloodin@3681 57 bi = bi.multiply(BigInteger.valueOf(24));
nloodin@3681 58 parse(name, bi.toString() , name + "=7d", args);
nloodin@3681 59
nloodin@3681 60 parse(name, "0", name + "=0", args);
nloodin@3681 61
nloodin@3681 62 shouldFail(name + "=7xs", args);
nloodin@3681 63 shouldFail(name + "=7mms", args);
nloodin@3681 64 shouldFail(name + "=7f", args);
nloodin@3681 65 //Currently, only value 0 is allowed without unit
nloodin@3681 66 shouldFail(name + "=7", args);
nloodin@3681 67 }
nloodin@3681 68
nloodin@3681 69 public void testJLong() throws Exception {
nloodin@3681 70 String name = "name";
nloodin@3681 71 DiagnosticCommand arg = new DiagnosticCommand(name,
nloodin@3681 72 "desc", DiagnosticArgumentType.JLONG,
nloodin@3681 73 false, "0");
nloodin@3681 74 DiagnosticCommand[] args = {arg};
nloodin@3681 75
nloodin@3681 76 wb.parseCommandLine(name + "=10", args);
nloodin@3681 77 parse(name, "10", name + "=10", args);
nloodin@3681 78 parse(name, "-5", name + "=-5", args);
nloodin@3681 79
nloodin@3681 80 //shouldFail(name + "=12m", args); <-- should fail, doesn't
nloodin@3681 81 }
nloodin@3681 82
nloodin@3681 83 public void testBool() throws Exception {
nloodin@3681 84 String name = "name";
nloodin@3681 85 DiagnosticCommand arg = new DiagnosticCommand(name,
nloodin@3681 86 "desc", DiagnosticArgumentType.BOOLEAN,
nloodin@3681 87 false, "false");
nloodin@3681 88 DiagnosticCommand[] args = {arg};
nloodin@3681 89
nloodin@3681 90 parse(name, "true", name + "=true", args);
nloodin@3681 91 parse(name, "false", name + "=false", args);
nloodin@3681 92 parse(name, "true", name, args);
nloodin@3681 93
nloodin@3681 94 //Empty commandline to parse, tests default value
nloodin@3681 95 //of the parameter "name"
nloodin@3681 96 parse(name, "false", "", args);
nloodin@3681 97 }
nloodin@3681 98
sla@3905 99 public void testQuotes() throws Exception {
sla@3905 100 String name = "name";
sla@3905 101 DiagnosticCommand arg1 = new DiagnosticCommand(name,
sla@3905 102 "desc", DiagnosticArgumentType.STRING,
sla@3905 103 false, null);
sla@3905 104 DiagnosticCommand arg2 = new DiagnosticCommand("arg",
sla@3905 105 "desc", DiagnosticArgumentType.STRING,
sla@3905 106 false, null);
sla@3905 107 DiagnosticCommand[] args = {arg1, arg2};
sla@3905 108
sla@3905 109 // try with a quoted value
sla@3905 110 parse(name, "Recording 1", name + "=\"Recording 1\"", args);
sla@3905 111 // try with a quoted argument
sla@3905 112 parse(name, "myrec", "\"" + name + "\"" + "=myrec", args);
sla@3905 113 // try with both a quoted value and a quoted argument
sla@3905 114 parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\"", args);
sla@3905 115
sla@3905 116 // now the same thing but with other arguments after
sla@3905 117
sla@3905 118 // try with a quoted value
sla@3905 119 parse(name, "Recording 1", name + "=\"Recording 1\",arg=value", args);
sla@3905 120 // try with a quoted argument
sla@3905 121 parse(name, "myrec", "\"" + name + "\"" + "=myrec,arg=value", args);
sla@3905 122 // try with both a quoted value and a quoted argument
sla@3905 123 parse(name, "Recording 1", "\"" + name + "\"" + "=\"Recording 1\",arg=value", args);
sla@3905 124 }
sla@3905 125
nloodin@3681 126 public void testMemorySize() throws Exception {
nloodin@3681 127 String name = "name";
nloodin@3681 128 String defaultValue = "1024";
nloodin@3681 129 DiagnosticCommand arg = new DiagnosticCommand(name,
nloodin@3681 130 "desc", DiagnosticArgumentType.MEMORYSIZE,
nloodin@3681 131 false, defaultValue);
nloodin@3681 132 DiagnosticCommand[] args = {arg};
nloodin@3681 133
nloodin@3681 134 BigInteger bi = new BigInteger("7");
nloodin@3681 135 parse(name, bi.toString(), name + "=7b", args);
nloodin@3681 136
nloodin@3681 137 bi = bi.multiply(BigInteger.valueOf(1024));
nloodin@3681 138 parse(name, bi.toString(), name + "=7k", args);
nloodin@3681 139
nloodin@3681 140 bi = bi.multiply(BigInteger.valueOf(1024));
nloodin@3681 141 parse(name, bi.toString(), name + "=7m", args);
nloodin@3681 142
nloodin@3681 143 bi = bi.multiply(BigInteger.valueOf(1024));
nloodin@3681 144 parse(name, bi.toString(), name + "=7g", args);
nloodin@3681 145 parse(name, defaultValue, "", args);
nloodin@3681 146
nloodin@3681 147 //shouldFail(name + "=7gg", args); <---- should fail, doesn't
nloodin@3681 148 //shouldFail(name + "=7t", args); <----- should fail, doesn't
nloodin@3681 149 }
nloodin@3681 150
nloodin@3681 151 public void parse(String searchName, String expectedValue,
nloodin@3681 152 String cmdLine, DiagnosticCommand[] argumentTypes) throws Exception {
nloodin@3681 153 //parseCommandLine will return an object array that looks like
nloodin@3681 154 //{<name of parsed object>, <of parsed object> ... }
nloodin@3681 155 Object[] res = wb.parseCommandLine(cmdLine, argumentTypes);
nloodin@3681 156 for (int i = 0; i < res.length-1; i+=2) {
nloodin@3681 157 String parsedName = (String) res[i];
nloodin@3681 158 if (searchName.equals(parsedName)) {
nloodin@3681 159 String parsedValue = (String) res[i+1];
nloodin@3681 160 if (expectedValue.equals(parsedValue)) {
nloodin@3681 161 return;
nloodin@3681 162 } else {
nloodin@3681 163 throw new Exception("Parsing of cmdline '" + cmdLine + "' failed!\n"
nloodin@3681 164 + searchName + " parsed as " + parsedValue
nloodin@3681 165 + "! Expected: " + expectedValue);
nloodin@3681 166 }
nloodin@3681 167 }
nloodin@3681 168 }
nloodin@3681 169 throw new Exception(searchName + " not found as a parsed Argument!");
nloodin@3681 170 }
nloodin@3681 171
nloodin@3681 172 private void shouldFail(String argument, DiagnosticCommand[] argumentTypes) throws Exception {
nloodin@3681 173 try {
nloodin@3681 174 wb.parseCommandLine(argument, argumentTypes);
nloodin@3681 175 throw new Exception("Parser accepted argument: " + argument);
nloodin@3681 176 } catch (IllegalArgumentException e) {
nloodin@3681 177 //expected
nloodin@3681 178 }
nloodin@3681 179 }
nloodin@3681 180 }

mercurial