8210409: Refactor java.util.TimeZone:i18n shell tests to plain java tests
authormli
Tue, 06 Nov 2018 15:23:52 +0800
changeset 52423 00db205006c9
parent 52422 481e3b24a58c
child 52424 e3d79743f57d
8210409: Refactor java.util.TimeZone:i18n shell tests to plain java tests Reviewed-by: naoto Contributed-by: ying.z.zhou@oracle.com
test/jdk/java/util/TimeZone/Bug8066652.sh
test/jdk/java/util/TimeZone/Bug8066652Run.java
test/jdk/java/util/TimeZone/OldIDMappingTest.java
test/jdk/java/util/TimeZone/OldIDMappingTest.sh
test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheck.sh
test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java
--- a/test/jdk/java/util/TimeZone/Bug8066652.sh	Mon Nov 05 22:22:49 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-#!/bin/sh
-
-# Copyright (c) 2016, Oracle and/or its affiliates. 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 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 8066652
-# @requires os.family == "mac"
-# @summary tests thread safe native function localtime_r is accessed by multiple threads at same time and
-# zone id should not be  “GMT+00:00” if default timezone is “GMT” and user specifies a fake timezone.
-# @build Bug8066652
-# @run shell/timeout=600 Bug8066652.sh
-
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTSRC=${TESTSRC}"
-if [ "${TESTJAVA}" = "" ]
-then
-  echo "TESTJAVA not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTJAVA=${TESTJAVA}"
-if [ "${TESTCLASSES}" = "" ]
-then
-  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-echo "TESTCLASSES=${TESTCLASSES}"
-echo "CLASSPATH=${CLASSPATH}"
-
-
-# set system TimeZone to GMT using environment variable TZ
-export TZ="GMT"
-
-# Setting invalid TimeZone using VM option
-${TESTJAVA}/bin/java -Duser.timezone=Foo/Bar  ${TESTVMOPTS} -cp ${TESTCLASSES}  Bug8066652
-
-status=$?
-if [ $status -eq 0 ]
-then
-  echo "Success, Test Passed";
-else
-  echo "Test Failed";
-fi
-
-exit $status
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/TimeZone/Bug8066652Run.java	Tue Nov 06 15:23:52 2018 +0800
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. 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 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 8066652
+ * @requires os.family == "mac"
+ * @summary tests thread safe native function localtime_r is accessed by multiple
+ *          threads at same time and zone id should not be  "GMT+00:00"
+ *          if default timezone is "GMT" and user specifies a fake timezone.
+ * @library /test/lib
+ * @build Bug8066652
+ * @run main Bug8066652Run
+ */
+
+import java.util.Map;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.Utils;
+import jdk.test.lib.process.ProcessTools;
+
+public class Bug8066652Run {
+    private static String cp = Utils.TEST_CLASSES;
+    private static ProcessBuilder pb = new ProcessBuilder();
+
+    public static void main(String[] args) throws Throwable {
+        //set system TimeZone to GMT using environment variable TZ
+        Map<String, String> env = pb.environment();
+        env.put("TZ", "GMT");
+        System.out.println("Current TimeZone:" + pb.environment().get("TZ"));
+        JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java");
+        //Setting invalid TimeZone using VM option
+        launcher.addToolArg("-Duser.timezone=Foo/Bar")
+                .addToolArg("-cp")
+                .addToolArg(cp)
+                .addToolArg("Bug8066652");
+
+        pb.command(launcher.getCommand());
+        int exitCode = ProcessTools.executeCommand(pb)
+                .getExitValue();
+        if (exitCode != 0) {
+            throw new RuntimeException("Unexpected exit code: " + exitCode);
+        }
+    }
+}
+
--- a/test/jdk/java/util/TimeZone/OldIDMappingTest.java	Mon Nov 05 22:22:49 2018 -0800
+++ b/test/jdk/java/util/TimeZone/OldIDMappingTest.java	Tue Nov 06 15:23:52 2018 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, Oracle and/or its affiliates. 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
@@ -22,11 +22,31 @@
  */
 
 /*
- * See OldMappingTest.sh
+ * @test
+ * @bug 6466476
+ * @summary Compatibility test for the old JDK ID mapping and Olson IDs
+ * @comment Expecting the new (Olson compatible) mapping (default)
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=null OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping="" OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=no OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=No OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=NO OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=false OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=False OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=FALSE OldIDMappingTest -new
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=Hello OldIDMappingTest -new
+ * @comment Expecting the old mapping
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=true OldIDMappingTest -old
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=True OldIDMappingTest -old
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=TRUE OldIDMappingTest -old
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=yes OldIDMappingTest -old
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=Yes OldIDMappingTest -old
+ * @run main/othervm -Dsun.timezone.ids.oldmapping=YES OldIDMappingTest -old
  */
 
-import java.lang.reflect.*;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TimeZone;
 
 public class OldIDMappingTest {
     private static final String MAPPING_PROPERTY_NAME = "sun.timezone.ids.oldmapping";
@@ -62,8 +82,9 @@
                 TimeZone tz = TimeZone.getTimeZone(oldmap.get(id));
                 if (useOldMapping) {
                     if (!tzAlias.hasSameRules(tz)) {
-                        throw new RuntimeException("OLDMAP: " + MAPPING_PROPERTY_NAME + "=" + prop + ": "
-                                                   + id + " isn't an alias of " + oldmap.get(id));
+                        throw new RuntimeException("OLDMAP: " + MAPPING_PROPERTY_NAME
+                                + "=" + prop + ": " + id
+                                + " isn't an alias of " + oldmap.get(id));
                     }
                     if (count == 0) {
                         System.out.println("    " + id + " => " + oldmap.get(id));
@@ -79,13 +100,15 @@
                         continue;
                     }
                     if (tzAlias.hasSameRules(tz)) {
-                        throw new RuntimeException("NEWMAP: " + MAPPING_PROPERTY_NAME + "=" + prop + ": "
-                                                   + id + " is an alias of " + oldmap.get(id));
+                        throw new RuntimeException("NEWMAP: " + MAPPING_PROPERTY_NAME
+                                + "=" + prop + ": " + id
+                                + " is an alias of " + oldmap.get(id));
                     }
                     tz = TimeZone.getTimeZone(newmap.get(id));
                     if (!tzAlias.hasSameRules(tz)) {
-                        throw new RuntimeException("NEWMAP: " + MAPPING_PROPERTY_NAME + "=" + prop + ": "
-                                                   + id + " isn't an alias of " + newmap.get(id));
+                        throw new RuntimeException("NEWMAP: " + MAPPING_PROPERTY_NAME
+                                + "=" + prop + ": " + id
+                                + " isn't an alias of " + newmap.get(id));
                     }
                     if (count == 0) {
                         System.out.println("    " + id + " => " + newmap.get(id));
--- a/test/jdk/java/util/TimeZone/OldIDMappingTest.sh	Mon Nov 05 22:22:49 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-# Copyright (c) 2003, 2013, Oracle and/or its affiliates. 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 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 6466476
-# @summary Compatibility test for the old JDK ID mapping and Olson IDs
-# @build OldIDMappingTest
-# @run shell OldIDMappingTest.sh
-
-: ${TESTJAVA:=${JAVA_HOME}}
-: ${TESTCLASSES:="`pwd`"}
-
-JAVA="${TESTJAVA}/bin/java"
-
-STATUS=0
-
-# Expecting the new (Olson compatible) mapping (default)
-for I in "" " " no No NO false False FALSE Hello
-do
-    if [ x"$I" != x ]; then
-	D="-Dsun.timezone.ids.oldmapping=${I}"
-    fi
-    if ! ${JAVA} ${D} ${TESTVMOPTS} -cp ${TESTCLASSES} OldIDMappingTest -new; then
-	STATUS=1
-    fi
-done
-
-# Expecting the old mapping
-for I in true True TRUE yes Yes YES
-do
-    if [ "x$I" != x ]; then
-	D="-Dsun.timezone.ids.oldmapping=${I}"
-    fi
-    if ! ${JAVA} ${D} ${TESTVMOPTS} -cp ${TESTCLASSES} OldIDMappingTest -old; then
-	STATUS=1
-    fi
-done
-
-exit ${STATUS}
--- a/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheck.sh	Mon Nov 05 22:22:49 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-# Testcase for PR381 Stackoverflow error with security manager, signed jars
-# and -Djava.security.debug set.
-#
-# Copyright (c) 2009, Red Hat Inc.
-#
-# This code is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-# 
-# 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 for more details.
-# 
-# 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.
-#
-# @test
-# @bug 6584033
-# @summary Stackoverflow error with security manager, signed jars and debug.
-# @build TimeZoneDatePermissionCheck
-# @run shell TimeZoneDatePermissionCheck.sh
-
-# Set default if not run under jtreg from test dir itself
-if [ "${TESTCLASSES}" = "" ] ; then
-  TESTCLASSES="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
-  TESTJAVA=/usr
-fi
-if [ "${COMPILEJAVA}" = "" ]; then
-  COMPILEJAVA="${TESTJAVA}"
-fi
-
-# create a test keystore and dummy cert. Note that we use the COMPILEJAVA
-# as this test is a TimeZone test, it doesn't test keytool
-rm -f ${TESTCLASSES}/timezonedatetest.store
-${COMPILEJAVA}/bin/keytool ${TESTTOOLVMOPTS} -genkeypair -alias testcert \
-  -keystore ${TESTCLASSES}/timezonedatetest.store \
-  -storepass testpass -validity 360 \
-  -keyalg rsa \
-  -dname "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL" \
-  -keypass testpass
-
-# create a jar file to sign with the test class in it.
-rm -f ${TESTCLASSES}/timezonedatetest.jar
-${COMPILEJAVA}/bin/jar ${TESTTOOLVMOPTS} cf \
-  ${TESTCLASSES}/timezonedatetest.jar \
-  -C ${TESTCLASSES} TimeZoneDatePermissionCheck.class
-
-# sign it
-${COMPILEJAVA}/bin/jarsigner ${TESTTOOLVMOPTS} \
-  -keystore ${TESTCLASSES}/timezonedatetest.store \
-  -storepass testpass ${TESTCLASSES}/timezonedatetest.jar testcert
-
-# run it with the security manager on, plus accesscontroller debugging
-# will go into infinite recursion trying to get enough permissions for
-# printing Date of failing certificate unless fix is applied.
-${TESTJAVA}/bin/java ${TESTVMOPTS} -Djava.security.manager \
-  -Djava.security.debug=access,failure,policy \
-  -cp ${TESTCLASSES}/timezonedatetest.jar TimeZoneDatePermissionCheck
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java	Tue Nov 06 15:23:52 2018 +0800
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2009, 2018, Oracle and/or its affiliates. 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 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 6584033
+ * @summary Stackoverflow error with security manager, signed jars and debug.
+ * @library /test/lib
+ * @build TimeZoneDatePermissionCheck
+ * @run main TimeZoneDatePermissionCheckRun
+ */
+
+import java.io.File;
+import java.util.List;
+
+import jdk.test.lib.JDKToolLauncher;
+import jdk.test.lib.Utils;
+import jdk.test.lib.process.ProcessTools;
+
+public class TimeZoneDatePermissionCheckRun {
+    private static String storePath = Utils.TEST_CLASSES + File.separator
+            + "timezonedatetest.store";
+    private static String jarPath = Utils.TEST_CLASSES + File.separator
+            + "timezonedatetest.jar";
+
+    public static void main(String[] args) throws Throwable {
+        try {
+            //create a test keystore and dummy cert. Note that we use the COMPILEJAVA
+            //as this test is a TimeZone test, it doesn't test keytool
+            runJavaCmd("keytool",
+                    List.of("-genkeypair", "-alias", "testcert", "-keystore",
+                            storePath, "-storepass", "testpass", "-validity",
+                            "360", "-keyalg", "rsa", "-dname",
+                            "cn=Mark Wildebeest, ou=FreeSoft, o=Red Hat, c=NL",
+                            "-keypass", "testpass"));
+
+            //create a jar file to sign with the test class in it.
+            runJavaCmd("jar", List.of("cf", jarPath, "-C", Utils.TEST_CLASSES,
+                    "TimeZoneDatePermissionCheck.class"));
+
+            //sign it
+            runJavaCmd("jarsigner",
+                    List.of("-keystore", storePath, "-storepass", "testpass",
+                            jarPath, "testcert"));
+
+            //run it with the security manager on, plus accesscontroller debugging
+            //will go into infinite recursion trying to get enough permissions for
+            //printing Date of failing certificate unless fix is applied.
+            JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java");
+            launcher.addToolArg("-Djava.security.manager")
+                    .addToolArg("-Djava.security.debug=access,failure,policy")
+                    .addToolArg("-cp")
+                    .addToolArg(jarPath)
+                    .addToolArg("TimeZoneDatePermissionCheck");
+
+            int exitCode = ProcessTools.executeCommand(launcher.getCommand())
+                    .getExitValue();
+            if (exitCode != 0) {
+                throw new RuntimeException("Unexpected exit code: " + exitCode);
+            }
+        } finally {
+            //clean up the test files
+            File storeFile = new File(storePath);
+            if (storeFile.exists()) {
+                storeFile.delete();
+            }
+            File jarFile = new File(jarPath);
+            if (jarFile.exists()) {
+                jarFile.delete();
+            }
+        }
+    }
+
+    private static void runJavaCmd(String cmd, List<String> javaParam)
+            throws Throwable{
+        JDKToolLauncher launcher = JDKToolLauncher.create(cmd);
+        for (String para: javaParam) {
+            launcher.addToolArg(para);
+        }
+
+        System.out.println(launcher.getCommand());
+        int exitCode = ProcessTools.executeCommand(launcher.getCommand())
+                .getExitValue();
+        if (exitCode != 0) {
+            throw new RuntimeException("Unexpected exit code: " + exitCode);
+        }
+    }
+}