J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 1 | /* |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 2 | * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 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 | * |
Kelly O'Hair | fe008ae | 2010-05-25 15:58:33 -0700 | [diff] [blame] | 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. |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 22 | */ |
| 23 | |
| 24 | /** |
| 25 | * @test |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 26 | * @bug 6545058 6611182 8016209 8139986 |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 27 | * @summary validate and test -version, -fullversion, and internal, as well as |
| 28 | * sanity checks if a tool can be launched. |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 29 | * @compile VersionCheck.java |
| 30 | * @run main VersionCheck |
| 31 | */ |
| 32 | |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 33 | import java.io.File; |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 34 | import java.io.FileFilter; |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 35 | import java.util.Map; |
| 36 | import java.util.ArrayList; |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 37 | import java.util.HashMap; |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 38 | import java.util.List; |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 39 | |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 40 | public class VersionCheck extends TestHelper { |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 41 | |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 42 | // tools that do not accept -J-option |
| 43 | static final String[] BLACKLIST_JOPTION = { |
| 44 | "controlpanel", |
Ragini Prasad | e618b15 | 2013-02-02 12:08:43 -0800 | [diff] [blame] | 45 | "jabswitch", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 46 | "java-rmi", |
| 47 | "java-rmi.cgi", |
| 48 | "java", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 49 | "javacpl", |
Kumar Srinivasan | 429f9e6 | 2015-12-03 17:44:18 -0800 | [diff] [blame] | 50 | "jaccessinspector", |
| 51 | "jaccessinspector-32", |
| 52 | "jaccesswalker", |
| 53 | "jaccesswalker-32", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 54 | "javaw", |
| 55 | "javaws", |
| 56 | "jcontrol", |
Kumar Srinivasan | 4cc3613 | 2013-06-08 09:05:49 -0700 | [diff] [blame] | 57 | "jmc", |
Alexander Zuev | 8c29695 | 2013-10-22 22:18:52 +0400 | [diff] [blame] | 58 | "jmc.ini", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 59 | "jp2launcher", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 60 | "jvisualvm", |
| 61 | "packager", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 62 | "ssvagent", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 63 | "unpack200", |
| 64 | "wsimport" |
| 65 | }; |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 66 | |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 67 | // tools that do not accept -version |
| 68 | static final String[] BLACKLIST_VERSION = { |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 69 | "appletviewer", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 70 | "controlpanel", |
Kumar Srinivasan | 429f9e6 | 2015-12-03 17:44:18 -0800 | [diff] [blame] | 71 | "jaccessinspector", |
| 72 | "jaccessinspector-32", |
| 73 | "jaccesswalker", |
| 74 | "jaccesswalker-32", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 75 | "jar", |
| 76 | "jarsigner", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 77 | "java-rmi", |
| 78 | "java-rmi.cgi", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 79 | "javadoc", |
Kumar Srinivasan | 277a0d2 | 2014-12-08 11:54:17 -0800 | [diff] [blame] | 80 | "javacpl", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 81 | "javaws", |
| 82 | "jcmd", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 83 | "jconsole", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 84 | "jcontrol", |
Chris Hegarty | 83223ad | 2013-01-03 10:00:55 +0000 | [diff] [blame] | 85 | "jdeps", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 86 | "jimage", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 87 | "jinfo", |
Alan Bateman | db4d383 | 2016-03-17 19:04:16 +0000 | [diff] [blame] | 88 | "jlink", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 89 | "jmap", |
Alan Bateman | db4d383 | 2016-03-17 19:04:16 +0000 | [diff] [blame] | 90 | "jmod", |
Kumar Srinivasan | 4cc3613 | 2013-06-08 09:05:49 -0700 | [diff] [blame] | 91 | "jmc", |
Alexander Zuev | 8c29695 | 2013-10-22 22:18:52 +0400 | [diff] [blame] | 92 | "jmc.ini", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 93 | "jps", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 94 | "jrunscript", |
Erik Joelsson | b3a313f | 2013-02-25 15:08:11 -0800 | [diff] [blame] | 95 | "jjs", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 96 | "jp2launcher", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 97 | "jsadebugd", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 98 | "jstack", |
| 99 | "jstat", |
| 100 | "jstatd", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 101 | "jvisualvm", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 102 | "keytool", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 103 | "kinit", |
| 104 | "klist", |
| 105 | "ktab", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 106 | "orbd", |
| 107 | "pack200", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 108 | "packager", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 109 | "policytool", |
| 110 | "rmic", |
| 111 | "rmid", |
| 112 | "rmiregistry", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 113 | "schemagen", // returns error code 127 |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 114 | "serialver", |
| 115 | "servertool", |
Chris Hegarty | 441905c | 2014-12-03 14:22:58 +0000 | [diff] [blame] | 116 | "ssvagent", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 117 | "tnameserv", |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 118 | "unpack200", |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 119 | "wsgen", |
| 120 | "wsimport", |
| 121 | "xjc" |
| 122 | }; |
| 123 | |
| 124 | // expected reference strings |
| 125 | static String refVersion; |
| 126 | static String refFullVersion; |
| 127 | |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 128 | static String getAllVersionLines(String... argv) { |
| 129 | return getVersion0(true, argv); |
| 130 | } |
| 131 | |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 132 | static String getVersion(String... argv) { |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 133 | return getVersion0(false, argv); |
| 134 | } |
| 135 | |
| 136 | static String getVersion0(boolean allLines, String... argv) { |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 137 | TestHelper.TestResult tr = doExec(argv); |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 138 | StringBuilder out = new StringBuilder(); |
| 139 | // remove the HotSpot line |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 140 | for (String x : tr.testOutput) { |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 141 | if (allLines || !x.matches(".*Client.*VM.*|.*Server.*VM.*")) { |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 142 | out = out.append(x + "\n"); |
| 143 | } |
| 144 | } |
| 145 | return out.toString(); |
| 146 | } |
| 147 | |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 148 | /* |
| 149 | * this tests if the tool can take a version string and returns |
| 150 | * a 0 exit code, it is not possible to validate the contents |
| 151 | * of the -version output as they are inconsistent. |
| 152 | */ |
| 153 | static boolean testToolVersion() { |
| 154 | TestResult tr = null; |
| 155 | TestHelper.testExitValue = 0; |
| 156 | for (File f : new File(JAVA_BIN).listFiles(new ToolFilter(BLACKLIST_VERSION))) { |
| 157 | String x = f.getAbsolutePath(); |
| 158 | System.out.println("Testing (-version): " + x); |
| 159 | tr = doExec(x, "-version"); |
| 160 | tr.checkPositive(); |
| 161 | } |
| 162 | return TestHelper.testExitValue == 0; |
| 163 | } |
| 164 | |
| 165 | static boolean compareJVersionStrings() { |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 166 | int failcount = 0; |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 167 | for (File f : new File(JAVA_BIN).listFiles(new ToolFilter(BLACKLIST_JOPTION))) { |
| 168 | String x = f.getAbsolutePath(); |
| 169 | System.out.println("Testing (-J-version): " + x); |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 170 | String testStr; |
| 171 | |
| 172 | testStr = getVersion(x, "-J-version"); |
| 173 | if (refVersion.compareTo(testStr) != 0) { |
| 174 | failcount++; |
| 175 | System.out.println("Error: " + x + |
| 176 | " fails -J-version comparison"); |
| 177 | System.out.println("Expected:"); |
| 178 | System.out.print(refVersion); |
| 179 | System.out.println("Actual:"); |
| 180 | System.out.print(testStr); |
| 181 | } |
| 182 | |
| 183 | testStr = getVersion(x, "-J-fullversion"); |
| 184 | if (refFullVersion.compareTo(testStr) != 0) { |
| 185 | failcount++; |
| 186 | System.out.println("Error: " + x + |
| 187 | " fails -J-fullversion comparison"); |
| 188 | System.out.println("Expected:"); |
| 189 | System.out.print(refFullVersion); |
| 190 | System.out.println("Actual:"); |
| 191 | System.out.print(testStr); |
| 192 | } |
| 193 | } |
| 194 | System.out.println("Version Test: " + failcount); |
| 195 | return failcount == 0; |
| 196 | } |
| 197 | |
| 198 | static boolean compareInternalStrings() { |
| 199 | int failcount = 0; |
Kumar Srinivasan | 92f0f3c | 2015-12-02 14:31:52 -0800 | [diff] [blame] | 200 | String bStr = refVersion.substring(refVersion.indexOf("build") + |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 201 | "build".length() + 1, |
| 202 | refVersion.lastIndexOf(")")); |
| 203 | |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 204 | String expectedFullVersion = "fullversion:" + bStr; |
| 205 | |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 206 | Map<String, String> envMap = new HashMap<>(); |
| 207 | envMap.put(TestHelper.JLDEBUG_KEY, "true"); |
| 208 | TestHelper.TestResult tr = doExec(envMap, javaCmd, "-version"); |
| 209 | List<String> alist = new ArrayList<>(); |
| 210 | alist.addAll(tr.testOutput); |
| 211 | for (String x : tr.testOutput) { |
| 212 | alist.add(x.trim()); |
| 213 | } |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 214 | |
| 215 | if (!alist.contains(expectedFullVersion)) { |
| 216 | System.out.println("Error: could not find " + expectedFullVersion); |
| 217 | failcount++; |
| 218 | } |
| 219 | System.out.println("Internal Strings Test: " + failcount); |
| 220 | return failcount == 0; |
| 221 | } |
| 222 | |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 223 | static boolean testDebugVersion() { |
| 224 | String jdkType = System.getProperty("jdk.debug", "release"); |
| 225 | String versionLines = getAllVersionLines(javaCmd, "-version"); |
| 226 | if ("release".equals(jdkType)) { |
| 227 | jdkType = ""; |
| 228 | } else { |
| 229 | jdkType = jdkType + " "; |
| 230 | } |
| 231 | String tofind = "(" + jdkType + "build"; |
| 232 | int idx = versionLines.indexOf(tofind); |
| 233 | if (idx < 0) { |
| 234 | System.out.println("Did not find first instance of " + tofind); |
| 235 | return false; |
| 236 | } |
| 237 | idx = versionLines.indexOf(tofind, idx + 1); |
| 238 | if (idx < 0) { |
| 239 | System.out.println("Did not find first instance of " + tofind); |
| 240 | return false; |
| 241 | } |
| 242 | return true; |
| 243 | } |
| 244 | |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 245 | // Initialize |
| 246 | static void init() { |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 247 | refVersion = getVersion(javaCmd, "-version"); |
| 248 | refFullVersion = getVersion(javaCmd, "-fullversion"); |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 249 | } |
| 250 | |
| 251 | public static void main(String[] args) { |
| 252 | init(); |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 253 | if (compareJVersionStrings() && |
| 254 | compareInternalStrings() && |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 255 | testToolVersion() && |
| 256 | testDebugVersion()) { |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 257 | System.out.println("All Version string comparisons: PASS"); |
| 258 | } else { |
| 259 | throw new AssertionError("Some tests failed"); |
| 260 | } |
| 261 | } |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 262 | |
| 263 | static class ToolFilter implements FileFilter { |
Alejandro Murillo | 20cb4ca | 2015-11-04 16:02:53 -0800 | [diff] [blame] | 264 | final Iterable<String> exclude; |
Steve Sides | 9d2cd27 | 2012-03-29 17:49:34 -0700 | [diff] [blame] | 265 | protected ToolFilter(String... exclude) { |
| 266 | List<String> tlist = new ArrayList<>(); |
| 267 | this.exclude = tlist; |
| 268 | for (String x : exclude) { |
| 269 | String str = x + ((isWindows) ? EXE_FILE_EXT : ""); |
| 270 | tlist.add(str.toLowerCase()); |
| 271 | } |
| 272 | } |
| 273 | @Override |
| 274 | public boolean accept(File pathname) { |
| 275 | if (!pathname.isFile() || !pathname.canExecute()) { |
| 276 | return false; |
| 277 | } |
| 278 | String name = pathname.getName().toLowerCase(); |
| 279 | if (isWindows && !name.endsWith(EXE_FILE_EXT)) { |
| 280 | return false; |
| 281 | } |
| 282 | for (String x : exclude) { |
| 283 | if (name.endsWith(x)) { |
| 284 | return false; |
| 285 | } |
| 286 | } |
| 287 | return true; |
| 288 | } |
| 289 | } |
J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame] | 290 | } |