8212807: tools/jar/multiRelease/Basic.java times out
Reviewed-by: bchristi
This commit is contained in:
parent
769993939e
commit
cb6e66a5ee
test
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2016, 2019, 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
|
||||
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
# @bug 8186087 8196748
|
||||
# @bug 8186087 8196748 8212807
|
||||
* @library /test/lib
|
||||
* @modules java.base/jdk.internal.misc
|
||||
* jdk.compiler
|
||||
@ -39,17 +39,20 @@
|
||||
* @run testng Basic
|
||||
*/
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import jdk.test.lib.util.FileUtils;
|
||||
import org.testng.annotations.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.*;
|
||||
import java.util.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
public class Basic extends MRTestBase {
|
||||
|
||||
@Test
|
||||
@ -60,7 +63,7 @@ public class Basic extends MRTestBase {
|
||||
compile("test01"); //use same data as test01
|
||||
|
||||
Path classes = Paths.get("classes");
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
checkMultiRelease(jarfile, false);
|
||||
@ -87,7 +90,7 @@ public class Basic extends MRTestBase {
|
||||
compile("test01");
|
||||
|
||||
Path classes = Paths.get("classes");
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".",
|
||||
"--release", "10", "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
@ -124,7 +127,7 @@ public class Basic extends MRTestBase {
|
||||
|
||||
// valid
|
||||
for (String release : List.of("10000", "09", "00010", "10")) {
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", release, "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS)
|
||||
.shouldBeEmptyIgnoreVMWarnings();
|
||||
@ -132,7 +135,7 @@ public class Basic extends MRTestBase {
|
||||
// invalid
|
||||
for (String release : List.of("9.0", "8", "v9",
|
||||
"9v", "0", "-10")) {
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", release, "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
.shouldContain("release " + release + " not valid");
|
||||
@ -149,12 +152,12 @@ public class Basic extends MRTestBase {
|
||||
compile("test01"); //use same data as test01
|
||||
|
||||
Path classes = Paths.get("classes");
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
checkMultiRelease(jarfile, false);
|
||||
|
||||
jar("uf", jarfile,
|
||||
jarTool("uf", jarfile,
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -185,7 +188,7 @@ public class Basic extends MRTestBase {
|
||||
compile("test01"); //use same data as test01
|
||||
|
||||
Path classes = Paths.get("classes");
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -206,7 +209,7 @@ public class Basic extends MRTestBase {
|
||||
|
||||
// write the v9 version/Version.class entry in base and the v10
|
||||
// version/Version.class entry in versions/9 section
|
||||
jar("uf", jarfile, "-C", classes.resolve("v9").toString(), "version",
|
||||
jarTool("uf", jarfile, "-C", classes.resolve("v9").toString(), "version",
|
||||
"--release", "9", "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -246,7 +249,7 @@ public class Basic extends MRTestBase {
|
||||
Path source = Paths.get(src, "data", "test04", "v9", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Version.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
.shouldContain("different api from earlier");
|
||||
@ -268,7 +271,7 @@ public class Basic extends MRTestBase {
|
||||
Path source = Paths.get(src, "data", "test05", "v9", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Extra.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
.shouldContain("contains a new public class");
|
||||
@ -290,7 +293,7 @@ public class Basic extends MRTestBase {
|
||||
Path source = Paths.get(src, "data", "test06", "v9", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Extra.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -312,7 +315,7 @@ public class Basic extends MRTestBase {
|
||||
Path source = Paths.get(src, "data", "test01", "base", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Version.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS)
|
||||
.shouldContain("contains a class that")
|
||||
@ -332,11 +335,11 @@ public class Basic extends MRTestBase {
|
||||
|
||||
Path classes = Paths.get("classes");
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS)
|
||||
.shouldBeEmptyIgnoreVMWarnings();
|
||||
jar("uf", jarfile,
|
||||
jarTool("uf", jarfile,
|
||||
"--release", "10", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS)
|
||||
.shouldContain("contains a class that")
|
||||
@ -359,7 +362,7 @@ public class Basic extends MRTestBase {
|
||||
|
||||
Files.copy(base.resolve("Main.class"), base.resolve("Foo.class"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
.shouldContain("names do not match");
|
||||
@ -385,7 +388,7 @@ public class Basic extends MRTestBase {
|
||||
source = Paths.get(src, "data", "test10", "v9", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Nested.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -413,7 +416,7 @@ public class Basic extends MRTestBase {
|
||||
source = Paths.get(src, "data", "test10", "v9", "version");
|
||||
javac(classes.resolve("v9"), source.resolve("Nested.java"));
|
||||
|
||||
List<String> output = jar("cf", jarfile,
|
||||
List<String> output = jarTool("cf", jarfile,
|
||||
"-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
@ -466,7 +469,7 @@ public class Basic extends MRTestBase {
|
||||
// remove the top level class, thus isolating the nested class
|
||||
Files.delete(classes.resolve("v9").resolve("version").resolve("Nested.class"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "9", "-C", classes.resolve("v9").toString(), ".")
|
||||
.shouldNotHaveExitValue(SUCCESS)
|
||||
.shouldContain("an isolated nested class");
|
||||
@ -492,7 +495,7 @@ public class Basic extends MRTestBase {
|
||||
source = Paths.get(src, "data", "test13", "v10", "version");
|
||||
javac(classes.resolve("v10"), source.resolve("Nested.java"));
|
||||
|
||||
jar("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
jarTool("cf", jarfile, "-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "10", "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
|
||||
@ -512,7 +515,7 @@ public class Basic extends MRTestBase {
|
||||
// create
|
||||
Files.write(manifest, "Class-Path: MyUtils.jar\n".getBytes());
|
||||
|
||||
jar("cfm", jarfile, manifest.toString(),
|
||||
jarTool("cfm", jarfile, manifest.toString(),
|
||||
"-C", classes.resolve("base").toString(), ".",
|
||||
"--release", "10", "-C", classes.resolve("v10").toString(), ".")
|
||||
.shouldHaveExitValue(SUCCESS)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2017, 2019, 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
|
||||
@ -35,6 +35,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
import java.util.spi.ToolProvider;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
@ -47,6 +48,16 @@ public class MRTestBase {
|
||||
protected final String src = System.getProperty("test.src", ".");
|
||||
protected final String usr = System.getProperty("user.dir", ".");
|
||||
|
||||
private static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar")
|
||||
.orElseThrow(()
|
||||
-> new RuntimeException("jar tool not found")
|
||||
);
|
||||
|
||||
private static final ToolProvider JAVAC_TOOL = ToolProvider.findFirst("javac")
|
||||
.orElseThrow(()
|
||||
-> new RuntimeException("javac tool not found")
|
||||
);
|
||||
|
||||
protected void compile(String test) throws Throwable {
|
||||
Path classes = Paths.get(usr, "classes", "base");
|
||||
Files.createDirectories(classes);
|
||||
@ -91,10 +102,8 @@ public class MRTestBase {
|
||||
}
|
||||
|
||||
void javac(Path dest, Path... sourceFiles) throws Throwable {
|
||||
String javac = JDKToolFinder.getJDKTool("javac");
|
||||
|
||||
List<String> commands = new ArrayList<>();
|
||||
commands.add(javac);
|
||||
String opts = System.getProperty("test.compiler.opts");
|
||||
if (!opts.isEmpty()) {
|
||||
commands.addAll(Arrays.asList(opts.split(" +")));
|
||||
@ -106,8 +115,14 @@ public class MRTestBase {
|
||||
.map(Object::toString)
|
||||
.forEach(x -> commands.add(x));
|
||||
|
||||
ProcessTools.executeCommand(new ProcessBuilder(commands))
|
||||
.shouldHaveExitValue(SUCCESS);
|
||||
StringWriter sw = new StringWriter();
|
||||
try (PrintWriter pw = new PrintWriter(sw)) {
|
||||
int rc = JAVAC_TOOL.run(pw, pw, commands.toArray(new String[0]));
|
||||
if(rc != 0) {
|
||||
throw new RuntimeException(sw.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
OutputAnalyzer jarWithStdin(File stdinSource,
|
||||
@ -127,4 +142,23 @@ public class MRTestBase {
|
||||
OutputAnalyzer jar(String... args) throws Throwable {
|
||||
return jarWithStdin(null, args);
|
||||
}
|
||||
|
||||
OutputAnalyzer jarTool(String... args) {
|
||||
List<String> commands = new ArrayList<>();
|
||||
commands.addAll(Utils.getForwardVmOptions());
|
||||
Stream.of(args).forEach(x -> commands.add(x));
|
||||
return run(JAR_TOOL, args);
|
||||
}
|
||||
|
||||
OutputAnalyzer run(ToolProvider tp, String[] commands) {
|
||||
int rc = 0;
|
||||
StringWriter sw = new StringWriter();
|
||||
StringWriter esw = new StringWriter();
|
||||
|
||||
try (PrintWriter pw = new PrintWriter(sw);
|
||||
PrintWriter epw = new PrintWriter(esw)) {
|
||||
rc = tp.run(pw, epw, commands);
|
||||
}
|
||||
return new OutputAnalyzer(sw.toString(), esw.toString(), rc);
|
||||
}
|
||||
}
|
@ -77,6 +77,18 @@ public final class OutputAnalyzer {
|
||||
buffer = OutputBuffer.of(stdout, stderr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an OutputAnalyzer, a utility class for verifying output
|
||||
*
|
||||
* @param stdout stdout buffer to analyze
|
||||
* @param stderr stderr buffer to analyze
|
||||
* @param stderr exitValue result to analyze
|
||||
*/
|
||||
public OutputAnalyzer(String stdout, String stderr, int exitValue)
|
||||
{
|
||||
buffer = OutputBuffer.of(stdout, stderr, exitValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that the stdout contents of output buffer is empty
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user