3789983e89
Reviewed-by: darcy, ihse
186 lines
7.2 KiB
Java
186 lines
7.2 KiB
Java
/*
|
|
* Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/*
|
|
* @test CommandLineTests.sh
|
|
* @bug 6521334 6965836 6965836
|
|
* @ignore 8059906
|
|
* @compile -XDignore.symbol.file CommandLineTests.java Pack200Test.java
|
|
* @run main/timeout=1200 CommandLineTests
|
|
* @summary An ad hoc test to verify the behavior of pack200/unpack200 CLIs,
|
|
* and a simulation of pack/unpacking in the install repo.
|
|
* @author ksrini
|
|
*/
|
|
|
|
import java.io.File;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.PrintStream;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
/*
|
|
* We try a potpouri of things ie. we have pack.conf to setup some
|
|
* options as well as a couple of command line options. We also test
|
|
* the packing and unpacking mechanism using the Java APIs. This also
|
|
* simulates pack200 the install workspace, noting that this is a simulation
|
|
* and can only test jars that are guaranteed to be available, also the
|
|
* configuration may not be in sync with the installer workspace.
|
|
*/
|
|
|
|
public class CommandLineTests {
|
|
private static final File CWD = new File(".");
|
|
private static final File EXP_SDK = new File(CWD, "exp-sdk-image");
|
|
private static final File EXP_SDK_LIB_DIR = new File(EXP_SDK, "lib");
|
|
private static final File EXP_SDK_BIN_DIR = new File(EXP_SDK, "bin");
|
|
private static final File EXP_JRE_DIR = new File(EXP_SDK, "jre");
|
|
private static final File EXP_JRE_LIB_DIR = new File(EXP_JRE_DIR, "lib");
|
|
private static final File RtJar = new File(EXP_JRE_LIB_DIR, "rt.jar");
|
|
private static final File CharsetsJar = new File(EXP_JRE_LIB_DIR, "charsets.jar");
|
|
private static final File JsseJar = new File(EXP_JRE_LIB_DIR, "jsse.jar");
|
|
private static final File ToolsJar = new File(EXP_SDK_LIB_DIR, "tools.jar");
|
|
private static final File javaCmd;
|
|
private static final File javacCmd;
|
|
private static final File ConfigFile = new File("pack.conf");
|
|
private static final List<File> jarList;
|
|
|
|
static {
|
|
javaCmd = Utils.IsWindows
|
|
? new File(EXP_SDK_BIN_DIR, "java.exe")
|
|
: new File(EXP_SDK_BIN_DIR, "java");
|
|
|
|
javacCmd = Utils.IsWindows
|
|
? new File(EXP_SDK_BIN_DIR, "javac.exe")
|
|
: new File(EXP_SDK_BIN_DIR, "javac");
|
|
|
|
jarList = new ArrayList<File>();
|
|
jarList.add(RtJar);
|
|
jarList.add(CharsetsJar);
|
|
jarList.add(JsseJar);
|
|
jarList.add(ToolsJar);
|
|
}
|
|
|
|
// init test area with a copy of the sdk
|
|
static void init() throws IOException {
|
|
Utils.recursiveCopy(Utils.JavaSDK, EXP_SDK);
|
|
creatConfigFile();
|
|
}
|
|
// cleanup the test area
|
|
static void cleanup() throws IOException {
|
|
Utils.recursiveDelete(EXP_SDK);
|
|
Utils.cleanup();
|
|
}
|
|
|
|
// Hopefully, this should be kept in sync with what the installer does.
|
|
static void creatConfigFile() throws IOException {
|
|
FileOutputStream fos = null;
|
|
PrintStream ps = null;
|
|
try {
|
|
fos = new FileOutputStream(ConfigFile);
|
|
ps = new PrintStream(fos);
|
|
ps.println("com.sun.java.util.jar.pack.debug.verbose=0");
|
|
ps.println("pack.modification.time=keep");
|
|
ps.println("pack.keep.class.order=true");
|
|
ps.println("pack.deflate.hint=false");
|
|
// Fail the build, if new or unknown attributes are introduced.
|
|
ps.println("pack.unknown.attribute=error");
|
|
ps.println("pack.segment.limit=-1");
|
|
// BugId: 6328502, These files will be passed-through as-is.
|
|
ps.println("pack.pass.file.0=java/lang/Error.class");
|
|
ps.println("pack.pass.file.1=java/lang/LinkageError.class");
|
|
ps.println("pack.pass.file.2=java/lang/Object.class");
|
|
ps.println("pack.pass.file.3=java/lang/Throwable.class");
|
|
ps.println("pack.pass.file.4=java/lang/VerifyError.class");
|
|
} finally {
|
|
Utils.close(ps);
|
|
Utils.close(fos);
|
|
}
|
|
}
|
|
|
|
static void runPack200(boolean jre) throws IOException {
|
|
List<String> cmdsList = new ArrayList<String>();
|
|
for (File f : jarList) {
|
|
if (jre && f.getName().equals("tools.jar")) {
|
|
continue; // need not worry about tools.jar for JRE
|
|
}
|
|
// make a backup copy for re-use
|
|
File bakFile = new File(f.getName() + ".bak");
|
|
if (!bakFile.exists()) { // backup
|
|
Utils.copyFile(f, bakFile);
|
|
} else { // restore
|
|
Utils.copyFile(bakFile, f);
|
|
}
|
|
cmdsList.clear();
|
|
cmdsList.add(Utils.getPack200Cmd());
|
|
cmdsList.add("-J-esa");
|
|
cmdsList.add("-J-ea");
|
|
cmdsList.add(Utils.Is64Bit ? "-J-Xmx1g" : "-J-Xmx512m");
|
|
cmdsList.add("--repack");
|
|
cmdsList.add("--config-file=" + ConfigFile.getAbsolutePath());
|
|
if (jre) {
|
|
cmdsList.add("--strip-debug");
|
|
}
|
|
// NOTE: commented until 6965836 is fixed
|
|
// cmdsList.add("--code-attribute=StackMapTable=strip");
|
|
cmdsList.add(f.getAbsolutePath());
|
|
Utils.runExec(cmdsList);
|
|
}
|
|
}
|
|
|
|
static void testJRE() throws IOException {
|
|
runPack200(true);
|
|
// the speciment JRE
|
|
List<String> cmdsList = new ArrayList<String>();
|
|
cmdsList.add(javaCmd.getAbsolutePath());
|
|
cmdsList.add("-verify");
|
|
cmdsList.add("-version");
|
|
Utils.runExec(cmdsList);
|
|
}
|
|
|
|
static void testJDK() throws IOException {
|
|
runPack200(false);
|
|
// test the specimen JDK
|
|
List<String> cmdsList = new ArrayList<String>();
|
|
cmdsList.add(javaCmd.getAbsolutePath());
|
|
cmdsList.add("-verify");
|
|
cmdsList.add("-version");
|
|
Utils.runExec(cmdsList);
|
|
|
|
// invoke javac to test the tools.jar
|
|
cmdsList.clear();
|
|
cmdsList.add(javacCmd.getAbsolutePath());
|
|
cmdsList.add("-J-verify");
|
|
cmdsList.add("-help");
|
|
Utils.runExec(cmdsList);
|
|
}
|
|
public static void main(String... args) {
|
|
try {
|
|
init();
|
|
testJRE();
|
|
testJDK();
|
|
cleanup(); // cleanup only if we pass successfully
|
|
} catch (IOException ioe) {
|
|
throw new RuntimeException(ioe);
|
|
}
|
|
}
|
|
}
|