Wed, 09 Mar 2011 16:47:39 +0000
7025988: Test test/tools/javac/file/zip/T6836682.java takes too long to complete
Summary: added @ignore tag to temporarily disable the test
Reviewed-by: jjg
ksrini@923 | 1 | /* |
ksrini@923 | 2 | * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
ksrini@923 | 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
ksrini@923 | 4 | * |
ksrini@923 | 5 | * This code is free software; you can redistribute it and/or modify it |
ksrini@923 | 6 | * under the terms of the GNU General Public License version 2 only, as |
ksrini@923 | 7 | * published by the Free Software Foundation. |
ksrini@923 | 8 | * |
ksrini@923 | 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
ksrini@923 | 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
ksrini@923 | 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
ksrini@923 | 12 | * version 2 for more details (a copy is included in the LICENSE file that |
ksrini@923 | 13 | * accompanied this code). |
ksrini@923 | 14 | * |
ksrini@923 | 15 | * You should have received a copy of the GNU General Public License version |
ksrini@923 | 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
ksrini@923 | 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
ksrini@923 | 18 | * |
ksrini@923 | 19 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
ksrini@923 | 20 | * or visit www.oracle.com if you need additional information or have any |
ksrini@923 | 21 | * questions. |
ksrini@923 | 22 | */ |
ksrini@923 | 23 | |
ksrini@923 | 24 | /* |
ksrini@923 | 25 | * @test |
mcimadamore@924 | 26 | * @ignore |
mcimadamore@924 | 27 | * @bug 6836682 7025988 |
ksrini@923 | 28 | * @summary JavacFileManager handles zip64 archives (64K+ entries and large file support) |
ksrini@923 | 29 | * @compile -XDignore.symbol.file T6836682.java Utils.java |
ksrini@923 | 30 | * @run main T6836682 |
ksrini@923 | 31 | */ |
ksrini@923 | 32 | import java.io.BufferedOutputStream; |
ksrini@923 | 33 | import java.io.File; |
ksrini@923 | 34 | import java.io.FileInputStream; |
ksrini@923 | 35 | import java.io.FileOutputStream; |
ksrini@923 | 36 | import java.io.IOException; |
ksrini@923 | 37 | import java.nio.file.Files; |
ksrini@923 | 38 | import java.nio.file.Path; |
ksrini@923 | 39 | import java.util.jar.JarOutputStream; |
ksrini@923 | 40 | import java.util.zip.ZipEntry; |
ksrini@923 | 41 | |
ksrini@923 | 42 | public class T6836682 { |
ksrini@923 | 43 | |
ksrini@923 | 44 | private static final long GIGA = 1024 * 1024 * 1024; |
ksrini@923 | 45 | |
ksrini@923 | 46 | static void createLargeFile(File outFile, long minlength) throws IOException { |
ksrini@923 | 47 | FileOutputStream fos = null; |
ksrini@923 | 48 | BufferedOutputStream bos = null; |
ksrini@923 | 49 | byte[] buffer = new byte[Short.MAX_VALUE * 2]; |
ksrini@923 | 50 | try { |
ksrini@923 | 51 | fos = new FileOutputStream(outFile); |
ksrini@923 | 52 | bos = new BufferedOutputStream(fos); |
ksrini@923 | 53 | long count = minlength / ( Short.MAX_VALUE * 2) + 1; |
ksrini@923 | 54 | for (long i = 0 ; i < count ; i++) { |
ksrini@923 | 55 | bos.write(buffer); |
ksrini@923 | 56 | } |
ksrini@923 | 57 | } finally { |
ksrini@923 | 58 | Utils.close(bos); |
ksrini@923 | 59 | Utils.close(fos); |
ksrini@923 | 60 | } |
ksrini@923 | 61 | if (outFile.length() < minlength) { |
ksrini@923 | 62 | throw new RuntimeException("could not create large file " + outFile.getAbsolutePath()); |
ksrini@923 | 63 | } |
ksrini@923 | 64 | } |
ksrini@923 | 65 | |
ksrini@923 | 66 | static void createJarWithLargeFile(File jarFile, File javaFile, |
ksrini@923 | 67 | long minlength) throws IOException { |
ksrini@923 | 68 | Utils.createClassFile(javaFile, null, true); |
ksrini@923 | 69 | File largeFile = new File("large.data"); |
ksrini@923 | 70 | createLargeFile(largeFile, minlength); |
ksrini@923 | 71 | String[] jarArgs = { |
ksrini@923 | 72 | "0cvf", |
ksrini@923 | 73 | jarFile.getAbsolutePath(), |
ksrini@923 | 74 | largeFile.getName(), |
ksrini@923 | 75 | Utils.getClassFileName(javaFile) |
ksrini@923 | 76 | }; |
ksrini@923 | 77 | Utils.jarTool.run(jarArgs); |
ksrini@923 | 78 | // deleted to prevent accidental linkage |
ksrini@923 | 79 | new File(Utils.getClassFileName(javaFile)).delete(); |
ksrini@923 | 80 | } |
ksrini@923 | 81 | |
ksrini@923 | 82 | static void createLargeJar(File jarFile, File javaFile) throws IOException { |
ksrini@923 | 83 | File classFile = new File(Utils.getClassFileName(javaFile)); |
ksrini@923 | 84 | Utils.createClassFile(javaFile, null, true); |
ksrini@923 | 85 | JarOutputStream jos = null; |
ksrini@923 | 86 | FileInputStream fis = null; |
ksrini@923 | 87 | try { |
ksrini@923 | 88 | jos = new JarOutputStream(new FileOutputStream(jarFile)); |
ksrini@923 | 89 | |
ksrini@923 | 90 | for (int i = 0; i < Short.MAX_VALUE * 2 + 10; i++) { |
ksrini@923 | 91 | jos.putNextEntry(new ZipEntry("X" + i + ".txt")); |
ksrini@923 | 92 | } |
ksrini@923 | 93 | jos.putNextEntry(new ZipEntry(classFile.getName())); |
ksrini@923 | 94 | fis = new FileInputStream(classFile); |
ksrini@923 | 95 | Utils.copyStream(fis, jos); |
ksrini@923 | 96 | } finally { |
ksrini@923 | 97 | Utils.close(jos); |
ksrini@923 | 98 | Utils.close(fis); |
ksrini@923 | 99 | } |
ksrini@923 | 100 | // deleted to prevent accidental linkage |
ksrini@923 | 101 | new File(Utils.getClassFileName(javaFile)).delete(); |
ksrini@923 | 102 | } |
ksrini@923 | 103 | |
ksrini@923 | 104 | // a jar with entries exceeding 64k + a class file for the existential test |
ksrini@923 | 105 | public static void testLargeJar(String... args) throws IOException { |
ksrini@923 | 106 | File largeJar = new File("large.jar"); |
ksrini@923 | 107 | File javaFile = new File("Foo.java"); |
ksrini@923 | 108 | createLargeJar(largeJar, javaFile); |
ksrini@923 | 109 | |
ksrini@923 | 110 | File testFile = new File("Bar.java"); |
ksrini@923 | 111 | try { |
ksrini@923 | 112 | Utils.createJavaFile(testFile, javaFile); |
ksrini@923 | 113 | if (!Utils.compile("-doe", "-verbose", "-cp", |
ksrini@923 | 114 | largeJar.getAbsolutePath(), testFile.getAbsolutePath())) { |
ksrini@923 | 115 | throw new IOException("test failed"); |
ksrini@923 | 116 | } |
ksrini@923 | 117 | } finally { |
ksrini@923 | 118 | Utils.deleteFile(largeJar); |
ksrini@923 | 119 | } |
ksrini@923 | 120 | } |
ksrini@923 | 121 | |
ksrini@923 | 122 | // a jar with an enormous file + a class file for the existential test |
ksrini@923 | 123 | public static void testHugeJar(String... args) throws IOException { |
ksrini@923 | 124 | final File largeJar = new File("huge.jar"); |
ksrini@923 | 125 | final File javaFile = new File("Foo.java"); |
ksrini@923 | 126 | |
ksrini@923 | 127 | final Path path = largeJar.getAbsoluteFile().getParentFile().toPath(); |
ksrini@923 | 128 | final long available = Files.getFileStore(path).getUsableSpace(); |
ksrini@923 | 129 | final long MAX_VALUE = 0xFFFF_FFFFL; |
ksrini@923 | 130 | |
ksrini@923 | 131 | final long absolute = MAX_VALUE + 1L; |
ksrini@923 | 132 | final long required = (long)(absolute * 1.1); // pad for sundries |
ksrini@923 | 133 | System.out.println("\tavailable: " + available / GIGA + " GB"); |
ksrini@923 | 134 | System.out.println("\required: " + required / GIGA + " GB"); |
ksrini@923 | 135 | |
ksrini@923 | 136 | if (available > required) { |
ksrini@923 | 137 | createJarWithLargeFile(largeJar, javaFile, absolute); |
ksrini@923 | 138 | File testFile = new File("Bar.java"); |
ksrini@923 | 139 | Utils.createJavaFile(testFile, javaFile); |
ksrini@923 | 140 | try { |
ksrini@923 | 141 | if (!Utils.compile("-doe", "-verbose", "-cp", |
ksrini@923 | 142 | largeJar.getAbsolutePath(), testFile.getAbsolutePath())) { |
ksrini@923 | 143 | throw new IOException("test failed"); |
ksrini@923 | 144 | } |
ksrini@923 | 145 | } finally { |
ksrini@923 | 146 | Utils.deleteFile(largeJar); |
ksrini@923 | 147 | } |
ksrini@923 | 148 | } else { |
ksrini@923 | 149 | System.out.println("Warning: test passes vacuously, requirements exceeds available space"); |
ksrini@923 | 150 | } |
ksrini@923 | 151 | } |
ksrini@923 | 152 | |
ksrini@923 | 153 | public static void main(String... args) throws IOException { |
ksrini@923 | 154 | testLargeJar(); |
ksrini@923 | 155 | testHugeJar(); |
ksrini@923 | 156 | } |
ksrini@923 | 157 | } |