author | amlu |
Wed, 21 Sep 2016 08:55:47 +0800 | |
changeset 41104 | 165401a41a97 |
parent 40792 | cfcc66f92aec |
permissions | -rw-r--r-- |
2 | 1 |
/* |
34893
71fe40b51c50
8146587: Mark tools/pack200/Pack200Test.java as intermittently failing
amlu
parents:
28255
diff
changeset
|
2 |
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved. |
2 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
7 |
* published by the Free Software Foundation. |
|
8 |
* |
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
13 |
* accompanied this code). |
|
14 |
* |
|
15 |
* You should have received a copy of the GNU General Public License version |
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
18 |
* |
|
5506 | 19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
20 |
* or visit www.oracle.com if you need additional information or have any |
|
21 |
* questions. |
|
2 | 22 |
*/ |
23 |
||
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
24 |
/* |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
25 |
* @test |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
26 |
* @bug 6521334 6712743 8007902 8151901 |
41104
165401a41a97
8166248: tools/pack200/Pack200Test.java fails on Win32: Could not reserve enough space
amlu
parents:
40792
diff
changeset
|
27 |
* @requires (sun.arch.data.model == "64" & os.maxMemory >= 4g) |
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
28 |
* @summary test general packer/unpacker functionality |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
29 |
* using native and java unpackers |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
30 |
* @compile -XDignore.symbol.file Utils.java Pack200Test.java |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
31 |
* @run main/othervm/timeout=1200 -Xmx1280m -Xshare:off Pack200Test |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
32 |
*/ |
2 | 33 |
|
34 |
import java.util.*; |
|
35 |
import java.io.*; |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
36 |
import java.lang.management.ManagementFactory; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
37 |
import java.lang.management.MemoryMXBean; |
2 | 38 |
import java.util.jar.*; |
39 |
||
40 |
/** |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
41 |
* Tests the packing/unpacking via the APIs. |
2 | 42 |
*/ |
43 |
public class Pack200Test { |
|
44 |
||
5799
e0089b2436a4
6575373: Error verifying signatures of pack200 files in some cases
ksrini
parents:
5506
diff
changeset
|
45 |
private static ArrayList <File> jarList = new ArrayList<File>(); |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
46 |
static final MemoryMXBean mmxbean = ManagementFactory.getMemoryMXBean(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
47 |
static final long m0 = getUsedMemory(); |
12047
320a714614e9
7113349: Initial changeset for Macosx port to jdk
michaelm
parents:
9734
diff
changeset
|
48 |
static final int LEAK_TOLERANCE = 21000; // OS and GC related variations. |
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
49 |
// enable leak checks only if required, GC charecteristics vary on |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
50 |
// platforms and this may not yield consistent results |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
51 |
static final boolean LEAK_CHECK = Boolean.getBoolean("Pack200Test.enableLeakCheck"); |
2 | 52 |
|
53 |
/** Creates a new instance of Pack200Test */ |
|
54 |
private Pack200Test() {} |
|
55 |
||
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
56 |
static long getUsedMemory() { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
57 |
mmxbean.gc(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
58 |
mmxbean.gc(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
59 |
mmxbean.gc(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
60 |
return mmxbean.getHeapMemoryUsage().getUsed()/1024; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
61 |
} |
2 | 62 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
63 |
private static void leakCheck() throws Exception { |
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
64 |
if (!LEAK_CHECK) |
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
65 |
return; |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
66 |
long diff = getUsedMemory() - m0; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
67 |
System.out.println(" Info: memory diff = " + diff + "K"); |
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
68 |
if (diff > LEAK_TOLERANCE) { |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
69 |
throw new Exception("memory leak detected " + diff); |
2 | 70 |
} |
71 |
} |
|
72 |
||
18594
b6a3c9f71ac8
8017463: [TEST_BUG] 2 tests from tools/pack200/ remain about 1 GB of data in work directory after execution
ksrini
parents:
15652
diff
changeset
|
73 |
private static void doPackUnpack() throws IOException { |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
74 |
for (File in : jarList) { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
75 |
JarOutputStream javaUnpackerStream = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
76 |
JarOutputStream nativeUnpackerStream = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
77 |
JarFile jarFile = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
78 |
try { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
79 |
jarFile = new JarFile(in); |
2 | 80 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
81 |
// Write out to a jtreg scratch area |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
82 |
File packFile = new File(in.getName() + Utils.PACK_FILE_EXT); |
2 | 83 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
84 |
System.out.println("Packing [" + in.toString() + "]"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
85 |
// Call the packer |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
86 |
Utils.pack(jarFile, packFile); |
36111
00ec08e93b0c
8149154: tools/pack200/Pack200Test.java failed with NullPointerException
amlu
parents:
34893
diff
changeset
|
87 |
System.out.println("Done Packing [" + in.toString() + "]"); |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
88 |
jarFile.close(); |
36111
00ec08e93b0c
8149154: tools/pack200/Pack200Test.java failed with NullPointerException
amlu
parents:
34893
diff
changeset
|
89 |
System.out.println("Start leak check"); |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
90 |
leakCheck(); |
2 | 91 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
92 |
System.out.println(" Unpacking using java unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
93 |
File javaUnpackedJar = new File("java-" + in.getName()); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
94 |
// Write out to current directory, jtreg will setup a scratch area |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
95 |
javaUnpackerStream = new JarOutputStream( |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
96 |
new FileOutputStream(javaUnpackedJar)); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
97 |
Utils.unpackj(packFile, javaUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
98 |
javaUnpackerStream.close(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
99 |
System.out.println(" Testing...java unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
100 |
leakCheck(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
101 |
// Ok we have unpacked the file, lets test it. |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
102 |
Utils.doCompareVerify(in.getAbsoluteFile(), javaUnpackedJar); |
2 | 103 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
104 |
System.out.println(" Unpacking using native unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
105 |
// Write out to current directory |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
106 |
File nativeUnpackedJar = new File("native-" + in.getName()); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
107 |
nativeUnpackerStream = new JarOutputStream( |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
108 |
new FileOutputStream(nativeUnpackedJar)); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
109 |
Utils.unpackn(packFile, nativeUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
110 |
nativeUnpackerStream.close(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
111 |
System.out.println(" Testing...native unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
112 |
leakCheck(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
113 |
// the unpackers (native and java) should produce identical bits |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
114 |
// so we use use bit wise compare, the verification compare is |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
115 |
// very expensive wrt. time. |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
116 |
Utils.doCompareBitWise(javaUnpackedJar, nativeUnpackedJar); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
117 |
System.out.println("Done."); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
118 |
} catch (Exception e) { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
119 |
throw new RuntimeException(e); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
120 |
} finally { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
121 |
Utils.close(nativeUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
122 |
Utils.close(javaUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
123 |
Utils.close((Closeable) jarFile); |
2 | 124 |
} |
125 |
} |
|
18594
b6a3c9f71ac8
8017463: [TEST_BUG] 2 tests from tools/pack200/ remain about 1 GB of data in work directory after execution
ksrini
parents:
15652
diff
changeset
|
126 |
Utils.cleanup(); // cleanup artifacts, if successful run |
2 | 127 |
} |
128 |
||
129 |
/** |
|
130 |
* @param args the command line arguments |
|
131 |
*/ |
|
40792
cfcc66f92aec
8151901: test/tools/pack200/Pack200Test fails on verifying native unpacked JAR
ksrini
parents:
36111
diff
changeset
|
132 |
public static void main(String[] args) throws Exception { |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
133 |
// select the jars carefully, adding more jars will increase the |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
134 |
// testing time, especially for jprt. |
27565 | 135 |
jarList.add(Utils.createRtJar()); |
28255
ddb0157601ed
8067889: 4 pack200 tests fail on mac since jdk became modular
ksrini
parents:
27940
diff
changeset
|
136 |
jarList.add(Utils.getGoldenJar()); |
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
137 |
System.out.println(jarList); |
2 | 138 |
doPackUnpack(); |
139 |
} |
|
140 |
} |