jdk/test/tools/launcher/VersionCheck.java
changeset 2 90ce3da70b43
child 5506 202f599c92aa
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/VersionCheck.java	Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2007 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/**
+ * @test
+ * @bug 6545058 6611182
+ * @summary validate and test -version, -fullversion, and internal
+ * @compile VersionCheck.java
+ * @run main VersionCheck
+ */
+
+import java.lang.*;
+import java.io.File;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+public class VersionCheck {
+
+    private static String javaBin;
+
+    // A known set of programs we know for sure will behave correctly.
+    private static String[] programs = new String[]{
+        "appletviewer",
+        "extcheck",
+        "idlj",
+        "jar",
+        "jarsigner",
+        "javac",
+        "javadoc",
+        "javah",
+        "javap",
+        "jconsole",
+        "jdb",
+        "jhat",
+        "jinfo",
+        "jmap",
+        "jps",
+        "jstack",
+        "jstat",
+        "jstatd",
+        "keytool",
+        "native2ascii",
+        "orbd",
+        "pack200",
+        "policytool",
+        "rmic",
+        "rmid",
+        "rmiregistry",
+        "schemagen",
+        "serialver",
+        "servertool",
+        "tnameserv",
+        "wsgen",
+        "wsimport",
+        "xjc"
+    };
+
+    // expected reference strings
+    static String refVersion;
+    static String refFullVersion;
+
+    private static List<String> getProcessStreamAsList(boolean javaDebug,
+                                                       String... argv) {
+        List<String> out = new ArrayList<String>();
+        List<String> javaCmds = new ArrayList<String>();
+
+        String prog = javaBin + File.separator + argv[0];
+        if (System.getProperty("os.name").startsWith("Windows")) {
+            prog = prog.concat(".exe");
+        }
+        javaCmds.add(prog);
+        for (int i = 1; i < argv.length; i++) {
+            javaCmds.add(argv[i]);
+        }
+
+        ProcessBuilder pb = new ProcessBuilder(javaCmds);
+        Map<String, String> env = pb.environment();
+        if (javaDebug) {
+            env.put("_JAVA_LAUNCHER_DEBUG", "true");
+        }
+        try {
+            Process p = pb.start();
+            BufferedReader r = (javaDebug) ?
+                new BufferedReader(new InputStreamReader(p.getInputStream())) :
+                new BufferedReader(new InputStreamReader(p.getErrorStream())) ;
+
+            String s = r.readLine();
+            while (s != null) {
+                out.add(s.trim());
+                s = r.readLine();
+            }
+            p.waitFor();
+            p.destroy();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            throw new RuntimeException(ex.getMessage());
+        }
+        return out;
+    }
+
+    static String getVersion(String... argv) {
+        List<String> alist = getProcessStreamAsList(false, argv);
+        if (alist.size() == 0) {
+            throw new AssertionError("unexpected process returned null");
+        }
+        StringBuilder out = new StringBuilder();
+        // remove the HotSpot line
+        for (String x : alist) {
+            if (!x.contains("HotSpot")) {
+                out = out.append(x + "\n");
+            }
+        }
+        return out.toString();
+    }
+
+    static boolean compareVersionStrings() {
+        int failcount = 0;
+        for (String x : programs) {
+            String testStr;
+
+            testStr = getVersion(x, "-J-version");
+            if (refVersion.compareTo(testStr) != 0) {
+                failcount++;
+                System.out.println("Error: " + x +
+                                   " fails -J-version comparison");
+                System.out.println("Expected:");
+                System.out.print(refVersion);
+                System.out.println("Actual:");
+                System.out.print(testStr);
+            }
+
+            testStr = getVersion(x, "-J-fullversion");
+            if (refFullVersion.compareTo(testStr) != 0) {
+                failcount++;
+                System.out.println("Error: " + x +
+                                   " fails -J-fullversion comparison");
+                System.out.println("Expected:");
+                System.out.print(refFullVersion);
+                System.out.println("Actual:");
+                System.out.print(testStr);
+            }
+        }
+        System.out.println("Version Test: " + failcount);
+        return failcount == 0;
+    }
+
+    static boolean compareInternalStrings() {
+        int failcount = 0;
+        String bStr = refVersion.substring(refVersion.lastIndexOf("build") +
+                                           "build".length() + 1,
+                                           refVersion.lastIndexOf(")"));
+
+        String[] vStr = bStr.split("\\.|-|_");
+        String jdkMajor = vStr[0];
+        String jdkMinor = vStr[1];
+        String jdkMicro = vStr[2];
+        String jdkBuild = vStr[vStr.length - 1];
+
+        String expectedDotVersion = "dotversion:" + jdkMajor + "." + jdkMinor;
+        String expectedFullVersion = "fullversion:" + bStr;
+
+        List<String> alist = getProcessStreamAsList(true, "java", "-version");
+
+        if (!alist.contains(expectedDotVersion)) {
+            System.out.println("Error: could not find " + expectedDotVersion);
+            failcount++;
+        }
+
+        if (!alist.contains(expectedFullVersion)) {
+            System.out.println("Error: could not find " + expectedFullVersion);
+            failcount++;
+        }
+        System.out.println("Internal Strings Test: " + failcount);
+        return failcount == 0;
+    }
+
+    // Initialize
+    static void init() {
+        String javaHome = System.getProperty("java.home");
+        if (javaHome.endsWith("jre")) {
+            javaHome = new File(javaHome).getParent();
+        }
+        javaBin = javaHome + File.separator + "bin";
+        refVersion = getVersion("java", "-version");
+        refFullVersion = getVersion("java", "-fullversion");
+    }
+
+    public static void main(String[] args) {
+        init();
+        if (compareVersionStrings() && compareInternalStrings()) {
+            System.out.println("All Version string comparisons: PASS");
+        } else {
+            throw new AssertionError("Some tests failed");
+        }
+    }
+}