1 /* 2 * Copyright (c) 2010, 2016, 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 33 import java.io.File; 34 import java.util.ArrayList; 35 import java.util.HashMap; 36 import java.util.List; 37 import java.util.Map; 38 import java.util.jar.Pack200; 39 import java.util.jar.Pack200.Packer; 40 import java.util.logging.Logger; 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 47 public class Pack200Props { 48 49 final static Logger log = Logger.getLogger("Pack200Props"); 50 51 public static void main(String... args) throws Exception { 52 verifyDefaults(); 53 File out = new File("test" + Utils.PACK_FILE_EXT); 54 out.delete(); 55 verifySegmentLimit(out); 56 log.info("cleanup"); 57 Utils.cleanup(); 58 } 59 60 static void verifySegmentLimit(File outFile) throws Exception { 61 log.info("creating jar"); 62 File testJar = Utils.createRtJar(); 63 64 log.info("using pack200: " + Utils.getPack200Cmd()); 65 List<String> cmdsList = new ArrayList<>(); 66 cmdsList.add(Utils.getPack200Cmd()); 67 cmdsList.add("-J-Xshare:off"); 68 cmdsList.add("-J-Xmx1280m"); 69 cmdsList.add("--effort=1"); 70 cmdsList.add("--verbose"); 71 cmdsList.add("--no-gzip"); 72 cmdsList.add(outFile.getName()); 73 cmdsList.add(testJar.getAbsolutePath()); 74 List<String> outList = Utils.runExec(cmdsList); 75 76 log.info("verifying"); 77 int count = 0; 78 for (String line : outList) { 79 System.out.println(line); 80 if (line.matches(".*Transmitted.*files of.*input bytes in a segment of.*bytes")) { 81 count++; 82 } 83 } 84 log.info("fini"); 85 if (count == 0) { 86 throw new RuntimeException("no segments or no output ????"); 87 } else if (count > 1) { 88 throw new RuntimeException("multiple segments detected, expected 1"); 89 } 90 } 91 92 private static void verifyDefaults() { 93 log.info("start"); 94 Map<String, String> expectedDefaults = new HashMap<>(); 95 Packer p = Pack200.newPacker(); 96 expectedDefaults.put("com.sun.java.util.jar.pack.disable.native", 97 p.FALSE); 98 expectedDefaults.put("com.sun.java.util.jar.pack.verbose", "0"); 99 expectedDefaults.put(p.CLASS_ATTRIBUTE_PFX + "CompilationID", "RUH"); 100 expectedDefaults.put(p.CLASS_ATTRIBUTE_PFX + "SourceID", "RUH"); 101 expectedDefaults.put(p.CODE_ATTRIBUTE_PFX + "CharacterRangeTable", 102 "NH[PHPOHIIH]"); 103 expectedDefaults.put(p.CODE_ATTRIBUTE_PFX + "CoverageTable", 104 "NH[PHHII]"); 105 expectedDefaults.put(p.DEFLATE_HINT, p.KEEP); 106 expectedDefaults.put(p.EFFORT, "5"); 107 expectedDefaults.put(p.KEEP_FILE_ORDER, p.TRUE); 108 expectedDefaults.put(p.MODIFICATION_TIME, p.KEEP); 109 expectedDefaults.put(p.SEGMENT_LIMIT, "-1"); 110 expectedDefaults.put(p.UNKNOWN_ATTRIBUTE, p.PASS); 111 112 Map<String, String> props = p.properties(); 113 int errors = 0; 114 for (String key : expectedDefaults.keySet()) { 115 String def = expectedDefaults.get(key); 116 String x = props.get(key); 117 if (x == null) { 118 System.out.println("Error: key not found:" + key); 119 errors++; 120 } else { 121 if (!def.equals(x)) { 122 System.out.println("Error: key " + key 123 + "\n value expected: " + def 124 + "\n value obtained: " + x); 125 errors++; 126 } 127 } 128 } 129 log.info("fini"); 130 if (errors > 0) { 131 throw new RuntimeException(errors + 132 " error(s) encountered in default properties verification"); 133 } 134 } 135 } 136