--- old/test/compiler/7068051/Test7068051.sh 2014-11-05 20:15:17.571444808 +0300 +++ /dev/null 2014-10-31 14:00:36.452833932 +0300 @@ -1,45 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2011, 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. -# -# -## some tests require path to find test source dir -if [ "${TESTSRC}" = "" ] -then - TESTSRC=${PWD} - echo "TESTSRC not set. Using "${TESTSRC}" as default" -fi -echo "TESTSRC=${TESTSRC}" -## Adding common setup Variables for running shell tests. -. ${TESTSRC}/../../test_env.sh - -set -x - -${COMPILEJAVA}/bin/jar xf ${COMPILEJAVA}/jre/lib/javaws.jar -${COMPILEJAVA}/bin/jar cf foo.jar * -cp ${TESTSRC}/Test7068051.java ./ -${COMPILEJAVA}/bin/jar -uf0 foo.jar Test7068051.java - -${COMPILEJAVA}/bin/javac ${TESTJAVACOPTS} -d . Test7068051.java - -${TESTJAVA}/bin/java ${TESTOPTS} -showversion -Xbatch Test7068051 foo.jar - --- old/test/compiler/7068051/Test7068051.java 2014-11-05 20:15:17.575444808 +0300 +++ new/test/compiler/7068051/Test7068051.java 2014-11-05 20:15:17.495444809 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 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 @@ -26,57 +26,116 @@ * @test * @bug 7068051 * @summary SIGSEGV in PhaseIdealLoop::build_loop_late_post on T5440 + * @library /testlibrary * - * @run shell/timeout=300 Test7068051.sh + * @run main/othervm -showversion -Xbatch Test7068051 */ -import java.io.*; -import java.nio.*; -import java.util.*; -import java.util.zip.*; +import com.oracle.java.testlibrary.JDKToolLauncher; +import com.oracle.java.testlibrary.OutputAnalyzer; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; public class Test7068051 { + private static final String SELF_NAME = Test7068051.class.getSimpleName(); + private static final String SELF_FILE_NAME = SELF_NAME + ".java"; + private static final String JAR_NAME = "foo.jar"; + private static final String TEST_PATH = System.getProperty("test.src"); + private static final Path CURRENT_DIR = Paths.get("."); + private static final Path TEST_SOURCE_PATH = Paths.get(TEST_PATH, SELF_FILE_NAME); + + public static void main (String[] args) throws IOException { + createTestJarFile(); + System.out.println("Running test..."); + + try (ZipFile zf = new ZipFile(JAR_NAME)) { + + Enumeration entries = zf.entries(); + ArrayList names = new ArrayList(); + while (entries.hasMoreElements()) { + names.add(entries.nextElement().getName()); + } - public static void main (String[] args) throws Throwable { + byte[] bytes = new byte[16]; + for (String name : names) { + ZipEntry e = zf.getEntry(name); - ZipFile zf = new ZipFile(args[0]); + if (e.isDirectory()) { + continue; + } - Enumeration entries = zf.entries(); - ArrayList names = new ArrayList(); - while (entries.hasMoreElements()) { - names.add(entries.nextElement().getName()); - } + try (final InputStream is = zf.getInputStream(e)) { + try { + while (is.read(bytes) >= 0) { + } + } catch (IOException x) { + System.out.println(".................................."); + System.out.println(" --> is :" + is); + System.out.println(" is.hash :" + is.hashCode()); + System.out.println(); + System.out.println(" e.name :" + e.getName()); + System.out.println(" e.hash :" + e.hashCode()); + System.out.println(" e.method :" + e.getMethod()); + System.out.println(" e.size :" + e.getSize()); + System.out.println(" e.csize :" + e.getCompressedSize()); + System.out.println(".................................."); - byte[] bytes = new byte[16]; - for (String name : names) { - ZipEntry e = zf.getEntry(name); + throw new AssertionError("IOException was throwing while read the archive. Test failed.", x); + } + } + } + } + System.out.println("Test passed."); + } - if (e.isDirectory()) - continue; + private static void createTestJarFile() { + ArrayList jarOptions = new ArrayList<>(); - final InputStream is = zf.getInputStream(e); + // jar cf foo.jar * + System.out.println("Creating jar file.."); + jarOptions.add("cf"); + jarOptions.add(JAR_NAME); + try { + for (int i = 0; i < 100; ++i) { + Path temp = Files.createTempFile(CURRENT_DIR, SELF_NAME, ".java"); + Files.copy(TEST_SOURCE_PATH, temp, StandardCopyOption.REPLACE_EXISTING); + jarOptions.add(temp.toString()); + } + } catch (IOException ex) { + throw new AssertionError("TESTBUG: Creating temp files failed.", ex); + } + runJar(jarOptions); - try { - while (is.read(bytes) >= 0) { - } - is.close(); + // jar -uf0 foo.jar Test7068051.java + System.out.println("Adding unpacked file..."); + jarOptions.clear(); + jarOptions.add("-uf0"); + jarOptions.add(JAR_NAME); + jarOptions.add(TEST_SOURCE_PATH.toString()); + runJar(jarOptions); + } - } catch (IOException x) { - System.out.println(".................................."); - System.out.println(" --> is :" + is); - System.out.println(" is.hash :" + is.hashCode()); - System.out.println(); - System.out.println(" e.name :" + e.getName()); - System.out.println(" e.hash :" + e.hashCode()); - System.out.println(" e.method :" + e.getMethod()); - System.out.println(" e.size :" + e.getSize()); - System.out.println(" e.csize :" + e.getCompressedSize()); - - x.printStackTrace(); - System.out.println(".................................."); - System.exit(97); - } + private static void runJar(List params) { + JDKToolLauncher jar = JDKToolLauncher.create("jar"); + for (String p : params) { + jar.addToolArg(p); + } + ProcessBuilder pb = new ProcessBuilder(jar.getCommand()); + try { + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + } catch (IOException ex) { + throw new AssertionError("TESTBUG: jar failed.", ex); } - zf.close(); } }