test/tools/javac/file/zip/T6836682.java

Wed, 09 Mar 2011 16:47:39 +0000

author
mcimadamore
date
Wed, 09 Mar 2011 16:47:39 +0000
changeset 924
4fd20d5b7295
parent 923
6970d9fb8e02
child 936
f2f04935ef3f
permissions
-rw-r--r--

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 }

mercurial