Pack200Props.java revision 10967:e336cbd8b15e
1/*
2 * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
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 *
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.
22 */
23
24/*
25 * @test
26 * @bug 6575373 6969063
27 * @summary verify default properties of the packer/unpacker and segment limit
28 * @compile -XDignore.symbol.file Utils.java Pack200Props.java
29 * @run main Pack200Props
30 * @author ksrini
31 */
32
33import java.io.File;
34import java.io.IOException;
35import java.util.ArrayList;
36import java.util.HashMap;
37import java.util.List;
38import java.util.Map;
39import java.util.jar.Pack200;
40import java.util.jar.Pack200.Packer;
41
42/*
43 * Run this against a large jar file, by default the packer should generate only
44 * one segment, parse the output of the packer to verify if this is indeed true.
45 */
46
47public class Pack200Props {
48
49    public static void main(String... args) throws IOException {
50        verifyDefaults();
51        File out = new File("test" + Utils.PACK_FILE_EXT);
52        out.delete();
53        verifySegmentLimit(out);
54        Utils.cleanup();
55    }
56
57    static void verifySegmentLimit(File outFile) throws IOException {
58        File sdkHome = Utils.JavaSDK;
59        File testJar = Utils.createRtJar();
60
61        System.out.println("using pack200: " + Utils.getPack200Cmd());
62
63        List<String> cmdsList = new ArrayList<>();
64        cmdsList.add(Utils.getPack200Cmd());
65        cmdsList.add("--effort=1");
66        cmdsList.add("--verbose");
67        cmdsList.add("--no-gzip");
68        cmdsList.add(outFile.getName());
69        cmdsList.add(testJar.getAbsolutePath());
70        List<String> outList = Utils.runExec(cmdsList);
71
72        int count = 0;
73        for (String line : outList) {
74            System.out.println(line);
75            if (line.matches(".*Transmitted.*files of.*input bytes in a segment of.*bytes")) {
76                count++;
77            }
78        }
79        if (count == 0) {
80            throw new RuntimeException("no segments or no output ????");
81        } else if (count > 1) {
82            throw new RuntimeException("multiple segments detected, expected 1");
83        }
84    }
85
86    private static void verifyDefaults() {
87        Map<String, String> expectedDefaults = new HashMap<>();
88        Packer p = Pack200.newPacker();
89        expectedDefaults.put("com.sun.java.util.jar.pack.default.timezone",
90                p.FALSE);
91        expectedDefaults.put("com.sun.java.util.jar.pack.disable.native",
92                p.FALSE);
93        expectedDefaults.put("com.sun.java.util.jar.pack.verbose", "0");
94        expectedDefaults.put(p.CLASS_ATTRIBUTE_PFX + "CompilationID", "RUH");
95        expectedDefaults.put(p.CLASS_ATTRIBUTE_PFX + "SourceID", "RUH");
96        expectedDefaults.put(p.CODE_ATTRIBUTE_PFX + "CharacterRangeTable",
97                "NH[PHPOHIIH]");
98        expectedDefaults.put(p.CODE_ATTRIBUTE_PFX + "CoverageTable",
99                "NH[PHHII]");
100        expectedDefaults.put(p.DEFLATE_HINT, p.KEEP);
101        expectedDefaults.put(p.EFFORT, "5");
102        expectedDefaults.put(p.KEEP_FILE_ORDER, p.TRUE);
103        expectedDefaults.put(p.MODIFICATION_TIME, p.KEEP);
104        expectedDefaults.put(p.SEGMENT_LIMIT, "-1");
105        expectedDefaults.put(p.UNKNOWN_ATTRIBUTE, p.PASS);
106
107        Map<String, String> props = p.properties();
108        int errors = 0;
109        for (String key : expectedDefaults.keySet()) {
110            String def = expectedDefaults.get(key);
111            String x = props.get(key);
112            if (x == null) {
113                System.out.println("Error: key not found:" + key);
114                errors++;
115            } else {
116                if (!def.equals(x)) {
117                    System.out.println("Error: key " + key
118                            + "\n  value expected: " + def
119                            + "\n  value obtained: " + x);
120                    errors++;
121                }
122            }
123        }
124        if (errors > 0) {
125            throw new RuntimeException(errors +
126                    " error(s) encountered in default properties verification");
127        }
128    }
129}
130
131