author | ksrini |
Thu, 14 Oct 2010 09:36:05 -0700 | |
changeset 6891 | f8a528363fa5 |
parent 6314 | 8ab691ddb904 |
child 9734 | b33a24d77590 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
5799
e0089b2436a4
6575373: Error verifying signatures of pack200 files in some cases
ksrini
parents:
5506
diff
changeset
|
2 |
* Copyright (c) 2007, 2010 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 |
||
24 |
||
25 |
import java.util.*; |
|
26 |
import java.io.*; |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
27 |
import java.lang.management.ManagementFactory; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
28 |
import java.lang.management.MemoryMXBean; |
2 | 29 |
import java.util.jar.*; |
30 |
||
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
31 |
/* |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
32 |
* @test |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
33 |
* @bug 6521334 6712743 |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
34 |
* @summary check for memory leaks, test general packer/unpacker functionality\ |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
35 |
* using native and java unpackers |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
36 |
* @compile -XDignore.symbol.file Utils.java Pack200Test.java |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
37 |
* @run main/othervm/timeout=1200 -Xmx512m Pack200Test |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
38 |
* @author ksrini |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
39 |
*/ |
2 | 40 |
|
41 |
/** |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
42 |
* Tests the packing/unpacking via the APIs. |
2 | 43 |
*/ |
44 |
public class Pack200Test { |
|
45 |
||
5799
e0089b2436a4
6575373: Error verifying signatures of pack200 files in some cases
ksrini
parents:
5506
diff
changeset
|
46 |
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
|
47 |
static final MemoryMXBean mmxbean = ManagementFactory.getMemoryMXBean(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
48 |
static final long m0 = getUsedMemory(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
49 |
static final int LEAK_TOLERANCE = 20000; // OS and GC related variations. |
2 | 50 |
|
51 |
/** Creates a new instance of Pack200Test */ |
|
52 |
private Pack200Test() {} |
|
53 |
||
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
54 |
static long getUsedMemory() { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
55 |
mmxbean.gc(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
56 |
mmxbean.gc(); |
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 |
return mmxbean.getHeapMemoryUsage().getUsed()/1024; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
59 |
} |
2 | 60 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
61 |
private static void leakCheck() throws Exception { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
62 |
long diff = getUsedMemory() - m0; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
63 |
System.out.println(" Info: memory diff = " + diff + "K"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
64 |
if ( diff > LEAK_TOLERANCE) { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
65 |
throw new Exception("memory leak detected " + diff); |
2 | 66 |
} |
67 |
} |
|
68 |
||
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
69 |
private static void doPackUnpack() { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
70 |
for (File in : jarList) { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
71 |
JarOutputStream javaUnpackerStream = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
72 |
JarOutputStream nativeUnpackerStream = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
73 |
JarFile jarFile = null; |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
74 |
try { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
75 |
jarFile = new JarFile(in); |
2 | 76 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
77 |
// Write out to a jtreg scratch area |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
78 |
File packFile = new File(in.getName() + Utils.PACK_FILE_EXT); |
2 | 79 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
80 |
System.out.println("Packing [" + in.toString() + "]"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
81 |
// Call the packer |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
82 |
Utils.pack(jarFile, packFile); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
83 |
jarFile.close(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
84 |
leakCheck(); |
2 | 85 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
86 |
System.out.println(" Unpacking using java unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
87 |
File javaUnpackedJar = new File("java-" + in.getName()); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
88 |
// 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
|
89 |
javaUnpackerStream = new JarOutputStream( |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
90 |
new FileOutputStream(javaUnpackedJar)); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
91 |
Utils.unpackj(packFile, javaUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
92 |
javaUnpackerStream.close(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
93 |
System.out.println(" Testing...java unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
94 |
leakCheck(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
95 |
// 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
|
96 |
Utils.doCompareVerify(in.getAbsoluteFile(), javaUnpackedJar); |
2 | 97 |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
98 |
System.out.println(" Unpacking using native unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
99 |
// Write out to current directory |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
100 |
File nativeUnpackedJar = new File("native-" + in.getName()); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
101 |
nativeUnpackerStream = new JarOutputStream( |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
102 |
new FileOutputStream(nativeUnpackedJar)); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
103 |
Utils.unpackn(packFile, nativeUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
104 |
nativeUnpackerStream.close(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
105 |
System.out.println(" Testing...native unpacker"); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
106 |
leakCheck(); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
107 |
// 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
|
108 |
// 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
|
109 |
// very expensive wrt. time. |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
110 |
Utils.doCompareBitWise(javaUnpackedJar, nativeUnpackedJar); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
111 |
System.out.println("Done."); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
112 |
} catch (Exception e) { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
113 |
throw new RuntimeException(e); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
114 |
} finally { |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
115 |
Utils.close(nativeUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
116 |
Utils.close(javaUnpackerStream); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
117 |
Utils.close((Closeable) jarFile); |
2 | 118 |
} |
119 |
} |
|
120 |
} |
|
121 |
||
122 |
/** |
|
123 |
* @param args the command line arguments |
|
124 |
*/ |
|
125 |
public static void main(String[] args) { |
|
6314
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
126 |
// 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
|
127 |
// testing time, especially for jprt. |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
128 |
jarList.add(Utils.locateJar("tools.jar")); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
129 |
jarList.add(Utils.locateJar("rt.jar")); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
130 |
jarList.add(Utils.locateJar("golden.jar")); |
8ab691ddb904
6966737: (pack200) the pack200 regression tests need to be more robust.
ksrini
parents:
5799
diff
changeset
|
131 |
System.out.println(jarList); |
2 | 132 |
doPackUnpack(); |
133 |
} |
|
134 |
} |