diff options
author | kvn <none@none> | 2014-02-19 20:10:55 -0800 |
---|---|---|
committer | kvn <none@none> | 2014-02-19 20:10:55 -0800 |
commit | 771100e54ca69005e3ac1a964ba6a3086600bd07 (patch) | |
tree | da2f131b9d41155851b00bf18c3e3481afea7f17 /test/tools | |
parent | 3cd2fa5418fcf8ba6f02baa5d723372ced9ed012 (diff) | |
parent | 9b3b9ae53b50713f87e338fa45e471848a8a11c2 (diff) | |
download | jdk8u_jdk-771100e54ca69005e3ac1a964ba6a3086600bd07.tar.gz |
Merge
Diffstat (limited to 'test/tools')
-rw-r--r-- | test/tools/jar/UpdateManifest.java | 4 | ||||
-rw-r--r-- | test/tools/launcher/ChangeDataModel.java | 70 | ||||
-rw-r--r-- | test/tools/launcher/VersionCheck.java | 4 | ||||
-rw-r--r-- | test/tools/pack200/PackTestZip64.java | 152 |
4 files changed, 213 insertions, 17 deletions
diff --git a/test/tools/jar/UpdateManifest.java b/test/tools/jar/UpdateManifest.java index 64897183b5..7a69d96ae5 100644 --- a/test/tools/jar/UpdateManifest.java +++ b/test/tools/jar/UpdateManifest.java @@ -39,6 +39,8 @@ public class UpdateManifest { static PrintStream err = System.err; static boolean debug = true; + static final Logger JAR_LOGGER = Logger.getLogger("java.util.jar"); + public static void realMain(String[] args) throws Throwable { if (args.length == 0) { debug = false; @@ -47,7 +49,7 @@ public class UpdateManifest { out = new PrintStream(new FileOutputStream(tmp)); err = out; // Attributes.read() can log a message we don't care to see. - Logger.getLogger("java.util.jar").setLevel(Level.OFF); + JAR_LOGGER.setLevel(Level.OFF); } try { testManifestExistence(); } catch (Throwable t) { unexpected(t); } diff --git a/test/tools/launcher/ChangeDataModel.java b/test/tools/launcher/ChangeDataModel.java index 86909eb2ef..31ee6f8cfe 100644 --- a/test/tools/launcher/ChangeDataModel.java +++ b/test/tools/launcher/ChangeDataModel.java @@ -23,41 +23,43 @@ /** * @test - * @bug 4894330 4810347 6277269 + * @bug 4894330 4810347 6277269 8029388 * @compile -XDignore.symbol.file ChangeDataModel.java * @run main ChangeDataModel * @summary Verify -d32 and -d64 options are accepted(rejected) on all platforms * @author Joseph D. Darcy, ksrini */ import java.io.File; +import java.util.ArrayList; +import java.util.List; public class ChangeDataModel extends TestHelper { private static final File TestJar = new File("test" + JAR_FILE_EXT); + private static final String OptionName = "Args"; + private static final File TestOptionJar = new File(OptionName + JAR_FILE_EXT); private static final String OPT_PREFIX = "ARCH_OPT:"; - public static void main(String... args) throws Exception { + static void createTestJar() throws Exception { String[] code = { " public static void main(String argv[]) {", " System.out.println(\"" + OPT_PREFIX + "-d\" + System.getProperty(\"sun.arch.data.model\", \"none\"));", - " }", - }; + " }",}; createJar(TestJar, code); + } + public static void main(String... args) throws Exception { + createTestJar(); + createOptionsJar(); - // verify if data model flag for default data model is accepted + // verify if data model flag for default data model is accepted, also + // verify if the complimentary data model is rejected. if (is32Bit) { checkAcceptance(javaCmd, "-d32"); - } else if (is64Bit) { - checkAcceptance(javaCmd, "-d64"); - } else { - throw new Error("unsupported data model"); - } - - // Negative tests: ensure that non-dual mode systems reject the - // complementary (other) data model - if (is32Bit) { checkRejection(javaCmd, "-d64"); + checkOption(javaCmd, "-d64"); } else if (is64Bit) { + checkAcceptance(javaCmd, "-d64"); checkRejection(javaCmd, "-d32"); + checkOption(javaCmd, "-d32"); } else { throw new Error("unsupported data model"); } @@ -81,4 +83,44 @@ public class ChangeDataModel extends TestHelper { throw new RuntimeException(message); } } + + static void checkOption(String cmd, String dmodel) throws Exception { + TestResult tr = doExec(cmd, "-jar", TestOptionJar.getAbsolutePath(), dmodel); + verifyOption(tr, dmodel); + + tr = doExec(cmd, "-cp", ".", OptionName, dmodel); + verifyOption(tr, dmodel); + } + + static void verifyOption(TestResult tr, String dmodel) { + if (!tr.contains(OPT_PREFIX + dmodel)) { + System.out.println(tr); + String message = "app argument: " + dmodel + " not found."; + throw new RuntimeException(message); + } + if (!tr.isOK()) { + System.out.println(tr); + String message = "app argument: " + dmodel + " interpreted ?"; + throw new RuntimeException(message); + } + } + + static void createOptionsJar() throws Exception { + List<String> code = new ArrayList<>(); + code.add("public class Args {"); + code.add(" public static void main(String argv[]) {"); + code.add(" for (String x : argv)"); + code.add(" System.out.println(\"" + OPT_PREFIX + "\" + x);"); + code.add(" }"); + code.add("}"); + File optionsJava = new File(OptionName + JAVA_FILE_EXT); + createFile(optionsJava, code); + File optionsClass = new File(OptionName + CLASS_FILE_EXT); + + compile(optionsJava.getName()); + createJar("cvfe", + TestOptionJar.getName(), + OptionName, + optionsClass.getName()); + } } diff --git a/test/tools/launcher/VersionCheck.java b/test/tools/launcher/VersionCheck.java index f43c210a9b..a31ba57a4a 100644 --- a/test/tools/launcher/VersionCheck.java +++ b/test/tools/launcher/VersionCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, 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 @@ -23,7 +23,7 @@ /** * @test - * @bug 6545058 6611182 + * @bug 6545058 6611182 8016209 * @summary validate and test -version, -fullversion, and internal, as well as * sanity checks if a tool can be launched. * @compile VersionCheck.java diff --git a/test/tools/pack200/PackTestZip64.java b/test/tools/pack200/PackTestZip64.java new file mode 100644 index 0000000000..edfeb5a92d --- /dev/null +++ b/test/tools/pack200/PackTestZip64.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2014, 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. + */ +import java.io.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; +import java.util.zip.ZipEntry; +/* + * @test + * @bug 8029646 + * @summary tests that native unpacker produces the same result as Java one + * @compile -XDignore.symbol.file Utils.java PackTestZip64.java + * @run main PackTestZip64 + * @author kizune + */ + +public class PackTestZip64 { + public static void main(String... args) throws Exception { + testPacking(); + Utils.cleanup(); + } + + // 1KB buffer is enough to copy jar content + private static final byte[] BUFFER = new byte[1024]; + + static void testPacking() throws IOException { + // make a copy of the test specimen to local directory + File testFile = new File("tools_java.jar"); + // Add a large number of small files to the golden jar + generateLargeJar(testFile, Utils.locateJar("golden.jar")); + + List<String> cmdsList = new ArrayList<>(); + + // Repack file to get the Java-based result + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add("--repack"); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + // Pack file with pack200 and unpack in with unpack200 + File packedFile = new File("tools.pack.gz"); + cmdsList.add(Utils.getPack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(testFile.getName()); + Utils.runExec(cmdsList); + cmdsList.clear(); + + File unpackedFile = new File("tools_native.jar"); + cmdsList.add(Utils.getUnpack200Cmd()); + cmdsList.add(packedFile.getName()); + cmdsList.add(unpackedFile.getName()); + Utils.runExec(cmdsList); + + // Compare files binary + compareTwoFiles(testFile, unpackedFile); + + // Cleaning up generated files + testFile.delete(); + packedFile.delete(); + unpackedFile.delete(); + } + + static void compareTwoFiles(File src, File dst) throws IOException { + if (!src.exists()) { + throw new IOException("File " + src.getName() + " does not exist!"); + } + + if(!dst.exists()) { + throw new IOException("File " + dst.getName() + " does not exist!"); + } + + BufferedInputStream srcis, dstis; + srcis = new BufferedInputStream(new FileInputStream(src)); + dstis = new BufferedInputStream(new FileInputStream(dst)); + + int s = 0, d, pos = 0; + while (s != -1) { // Checking of just one result for EOF is enough + s = srcis.read(); + d = dstis.read(); + + if (s != d) { + throw new IOException("Files are differ starting at position: " + + Integer.toHexString(pos)); + } + + pos++; + } + + srcis.close(); + dstis.close(); + } + + static void generateLargeJar(File result, File source) throws IOException { + if (result.exists()) { + result.delete(); + } + + try (JarOutputStream copyTo = new JarOutputStream(new FileOutputStream(result)); + JarFile srcJar = new JarFile(source)) { + + for (JarEntry je : Collections.list(srcJar.entries())) { + copyTo.putNextEntry(je); + if (!je.isDirectory()) { + copyStream(srcJar.getInputStream(je), copyTo); + } + copyTo.closeEntry(); + } + + int many = Short.MAX_VALUE * 2 + 2; + + for (int i = 0 ; i < many ; i++) { + JarEntry e = new JarEntry("F-" + i + ".txt"); + copyTo.putNextEntry(e); + } + copyTo.flush(); + copyTo.close(); + } + } + + static void copyStream(InputStream in, OutputStream out) throws IOException { + int bytesRead; + while ((bytesRead = in.read(BUFFER))!= -1) { + out.write(BUFFER, 0, bytesRead); + } + } +} |