diff --git a/test/jdk/java/lang/ClassLoader/Assert.java b/test/jdk/java/lang/ClassLoader/Assert.java index d894fef5ef9..d7dc27c7f53 100644 --- a/test/jdk/java/lang/ClassLoader/Assert.java +++ b/test/jdk/java/lang/ClassLoader/Assert.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2023, 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 @@ -24,6 +24,8 @@ /* * @test * @bug 4290640 4785473 + * @requires vm.flagless + * @library /test/lib * @build package1.Class1 package2.Class2 package1.package3.Class3 Assert * @run main/othervm Assert * @summary Test the assertion facility @@ -31,12 +33,17 @@ * @key randomness */ +import jdk.test.lib.process.OutputAnalyzer; import package1.*; import package2.*; import package1.package3.*; -import java.io.*; + +import java.util.ArrayList; +import java.util.List; import java.util.Random; +import static jdk.test.lib.process.ProcessTools.*; + public class Assert { private static Class1 testClass1; @@ -56,7 +63,7 @@ public class Assert { * off at class load time. Once the class is loaded its assertion status * does not change. */ - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Throwable { // Switch values: 0=don't touch, 1=off, 2 = on int[] switches = new int[7]; @@ -77,28 +84,17 @@ public class Assert { } // Spawn new VM and load classes - String command = System.getProperty("java.home") + - File.separator + "bin" + File.separator + "java Assert"; - - StringBuffer commandString = new StringBuffer(command); + List commands = new ArrayList<>(); + commands.add("Assert"); for(int j=0; j<7; j++) - commandString.append(" "+switches[j]); - - Process p = null; - p = Runtime.getRuntime().exec(commandString.toString()); - + commands.add(Integer.toString(switches[j])); + OutputAnalyzer outputAnalyzer = executeCommand(createLimitedTestJavaProcessBuilder(commands)); if (debug) { // See output of test VMs - BufferedReader blah = new BufferedReader( - new InputStreamReader(p.getInputStream())); - String outString = blah.readLine(); - while (outString != null) { - System.out.println("from BufferedReader:"+outString); - outString = blah.readLine(); - } + outputAnalyzer.asLines() + .stream() + .forEach(s -> System.out.println(s)); } - - p.waitFor(); - int result = p.exitValue(); + int result = outputAnalyzer.getExitValue(); if (debug) { // See which switch configs failed if (result == 0) { for(int k=6; k>=0; k--) diff --git a/test/jdk/java/lang/ClassLoader/GetSystemPackage.java b/test/jdk/java/lang/ClassLoader/GetSystemPackage.java index 2af81f3c416..0b3653f2f98 100644 --- a/test/jdk/java/lang/ClassLoader/GetSystemPackage.java +++ b/test/jdk/java/lang/ClassLoader/GetSystemPackage.java @@ -24,6 +24,7 @@ /* * @test * @bug 8060130 + * @requires vm.flagless * @library /test/lib * @build package2.Class2 GetSystemPackage * @summary Test if getSystemPackage() return consistent values for cases @@ -41,6 +42,8 @@ import java.util.jar.Attributes; import java.util.jar.JarEntry; import java.util.jar.JarOutputStream; import java.util.jar.Manifest; + +import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; public class GetSystemPackage { @@ -118,8 +121,9 @@ public class GetSystemPackage { private static void runSubProcess(String messageOnError, String ... args) throws Exception { - ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(args); - int res = pb.directory(tmpFolder).inheritIO().start().waitFor(); + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(args) + .directory(tmpFolder); + int res = ProcessTools.executeProcess(pb).getExitValue(); if (res != 0) { throw new RuntimeException(messageOnError); } diff --git a/test/jdk/java/lang/ClassLoader/getResource/GetResource.java b/test/jdk/java/lang/ClassLoader/getResource/GetResource.java index 8c97657853d..2a1b76e7d4f 100644 --- a/test/jdk/java/lang/ClassLoader/getResource/GetResource.java +++ b/test/jdk/java/lang/ClassLoader/getResource/GetResource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -40,11 +40,9 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.test.lib.JDKToolFinder; import static jdk.test.lib.process.ProcessTools.*; import org.testng.annotations.BeforeTest; @@ -144,26 +142,14 @@ public class GetResource { private void runTest(Path dir, List options, String expected) throws Throwable { - String javapath = JDKToolFinder.getJDKTool("java"); - List cmdLine = new ArrayList<>(); - cmdLine.add(javapath); options.forEach(cmdLine::add); cmdLine.add("GetResource"); cmdLine.add(expected); - - System.out.println("Command line: " + cmdLine); - ProcessBuilder pb = - new ProcessBuilder(cmdLine.stream().toArray(String[]::new)); - - // change working directory - pb.directory(dir.toFile()); - - // remove CLASSPATH environment variable - Map env = pb.environment(); - String value = env.remove("CLASSPATH"); - + ProcessBuilder pb = createTestJavaProcessBuilder(cmdLine); + pb.directory(dir.toFile()); // change working directory + pb.environment().remove("CLASSPATH"); // remove CLASSPATH environment variable executeCommand(pb).shouldHaveExitValue(0); } diff --git a/test/jdk/java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnloadTest.java b/test/jdk/java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnloadTest.java index 1cbde7b943f..c358fa64214 100644 --- a/test/jdk/java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnloadTest.java +++ b/test/jdk/java/lang/ClassLoader/loadLibraryUnload/LoadLibraryUnloadTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2021, BELLSOFT. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -38,31 +38,15 @@ */ import jdk.test.lib.Asserts; -import jdk.test.lib.JDKToolFinder; import jdk.test.lib.process.OutputAnalyzer; -import java.lang.ProcessBuilder; -import java.lang.Process; -import java.io.File; -import java.util.*; +import static jdk.test.lib.process.ProcessTools.*; public class LoadLibraryUnloadTest { private static String testClassPath = System.getProperty("test.classes"); private static String testLibraryPath = System.getProperty("test.nativepath"); - private static Process runJavaCommand(String... command) throws Throwable { - String java = JDKToolFinder.getJDKTool("java"); - List commands = new ArrayList<>(); - Collections.addAll(commands, java); - Collections.addAll(commands, command); - System.out.println("COMMAND: " + String.join(" ", commands)); - return new ProcessBuilder(commands.toArray(new String[0])) - .redirectErrorStream(true) - .directory(new File(testClassPath)) - .start(); - } - private final static long countLines(OutputAnalyzer output, String string) { return output.asLines() .stream() @@ -78,12 +62,10 @@ public class LoadLibraryUnloadTest { public static void main(String[] args) throws Throwable { - Process process = runJavaCommand( + OutputAnalyzer outputAnalyzer = executeCommand(createTestJavaProcessBuilder( "-Dtest.classes=" + testClassPath, "-Djava.library.path=" + testLibraryPath, - "LoadLibraryUnload"); - - OutputAnalyzer outputAnalyzer = new OutputAnalyzer(process); + "LoadLibraryUnload")); dump(outputAnalyzer); Asserts.assertTrue( diff --git a/test/jdk/java/lang/invoke/condy/CondyNestedResolutionTest.java b/test/jdk/java/lang/invoke/condy/CondyNestedResolutionTest.java index 914e90650da..f7a36a344b1 100644 --- a/test/jdk/java/lang/invoke/condy/CondyNestedResolutionTest.java +++ b/test/jdk/java/lang/invoke/condy/CondyNestedResolutionTest.java @@ -44,7 +44,7 @@ import jdk.test.lib.compiler.InMemoryJavaCompiler; */ public class CondyNestedResolutionTest { public static void main(String args[]) throws Throwable { - ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder("CondyNestedResolution"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder("CondyNestedResolution"); OutputAnalyzer oa = new OutputAnalyzer(pb.start()); oa.shouldContain("StackOverflowError"); oa.shouldContain("bsm1arg"); diff --git a/test/jdk/java/lang/invoke/findSpecial/FindSpecialTest.java b/test/jdk/java/lang/invoke/findSpecial/FindSpecialTest.java index 129951b79d0..9b6622a7e9c 100644 --- a/test/jdk/java/lang/invoke/findSpecial/FindSpecialTest.java +++ b/test/jdk/java/lang/invoke/findSpecial/FindSpecialTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -37,13 +37,11 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import jdk.test.lib.JDKToolFinder; -import jdk.test.lib.process.ProcessTools; +import static jdk.test.lib.process.ProcessTools.*; import org.testng.annotations.Test; public class FindSpecialTest { - static final String JAVA_LAUNCHER = JDKToolFinder.getJDKTool("java"); static final String TEST_CLASSES = System.getProperty("test.classes", "."); static final String TEST_CLASS_PATH = System.getProperty("test.class.path"); static final String TEST_MAIN_CLASS = "test.FindSpecial"; @@ -59,8 +57,9 @@ public class FindSpecialTest { throw new Error(m1 + " not exist"); } String classpath = m1.toString() + File.pathSeparator + TEST_CLASS_PATH; - ProcessTools.executeCommand(JAVA_LAUNCHER, "-cp", classpath, TEST_MAIN_CLASS) - .shouldHaveExitValue(0); + executeCommand(createTestJavaProcessBuilder("-cp", classpath, + TEST_MAIN_CLASS)) + .shouldHaveExitValue(0); } /* @@ -72,10 +71,9 @@ public class FindSpecialTest { if (Files.notExists(modules)) { throw new Error(modules + " not exist"); } - ProcessTools.executeCommand(JAVA_LAUNCHER, - "-cp", TEST_CLASS_PATH, - "-p", modules.toString(), - "-m", TEST_MODULE + "/" + TEST_MAIN_CLASS) - .shouldHaveExitValue(0); + executeCommand(createTestJavaProcessBuilder("-cp", TEST_CLASS_PATH, + "-p", modules.toString(), + "-m", TEST_MODULE + "/" + TEST_MAIN_CLASS)) + .shouldHaveExitValue(0); } } diff --git a/test/jdk/java/lang/invoke/lambda/LUtils.java b/test/jdk/java/lang/invoke/lambda/LUtils.java deleted file mode 100644 index cc052e43e90..00000000000 --- a/test/jdk/java/lang/invoke/lambda/LUtils.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 2012, 2013, 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. - */ - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/* - * support infrastructure to invoke a java class from the command line - */ -class LUtils { - static final com.sun.tools.javac.Main javac = - new com.sun.tools.javac.Main(); - static final File cwd = new File(".").getAbsoluteFile(); - static final String JAVAHOME = System.getProperty("java.home"); - static final boolean isWindows = - System.getProperty("os.name", "unknown").startsWith("Windows"); - static final File JAVA_BIN_FILE = new File(JAVAHOME, "bin"); - static final File JAVA_CMD = new File(JAVA_BIN_FILE, - isWindows ? "java.exe" : "java"); - static final File JAR_BIN_FILE = new File(JAVAHOME, "bin"); - static final File JAR_CMD = new File(JAR_BIN_FILE, - isWindows ? "jar.exe" : "jar"); - - protected LUtils() { - } - - public static void compile(String... args) { - if (javac.compile(args) != 0) { - throw new RuntimeException("compilation fails"); - } - } - - static void createFile(File outFile, List content) { - try { - Files.write(outFile.getAbsoluteFile().toPath(), content, - Charset.defaultCharset()); - } catch (IOException ex) { - throw new RuntimeException(ex); - } - } - - static File getClassFile(File javaFile) { - return javaFile.getName().endsWith(".java") - ? new File(javaFile.getName().replace(".java", ".class")) - : null; - } - - static String getSimpleName(File inFile) { - String fname = inFile.getName(); - return fname.substring(0, fname.indexOf(".")); - } - - static TestResult doExec(String... cmds) { - return doExec(null, null, cmds); - } - - /* - * A method which executes a java cmd and returns the results in a container - */ - static TestResult doExec(Map envToSet, - java.util.Set envToRemove, String... cmds) { - String cmdStr = ""; - for (String x : cmds) { - cmdStr = cmdStr.concat(x + " "); - } - ProcessBuilder pb = new ProcessBuilder(cmds); - Map env = pb.environment(); - if (envToRemove != null) { - for (String key : envToRemove) { - env.remove(key); - } - } - if (envToSet != null) { - env.putAll(envToSet); - } - BufferedReader rdr = null; - try { - List outputList = new ArrayList<>(); - pb.redirectErrorStream(true); - Process p = pb.start(); - rdr = new BufferedReader(new InputStreamReader(p.getInputStream())); - String in = rdr.readLine(); - while (in != null) { - outputList.add(in); - in = rdr.readLine(); - } - p.waitFor(); - p.destroy(); - - return new TestResult(cmdStr, p.exitValue(), outputList, - env, new Throwable("current stack of the test")); - } catch (Exception ex) { - ex.printStackTrace(); - throw new RuntimeException(ex.getMessage()); - } - } - - static class TestResult { - String cmd; - int exitValue; - List testOutput; - Map env; - Throwable t; - - public TestResult(String str, int rv, List oList, - Map env, Throwable t) { - cmd = str; - exitValue = rv; - testOutput = oList; - this.env = env; - this.t = t; - } - - void assertZero(String message) { - if (exitValue != 0) { - System.err.println(this); - throw new RuntimeException(message); - } - } - - @Override - public String toString() { - StringWriter sw = new StringWriter(); - PrintWriter status = new PrintWriter(sw); - status.println("Cmd: " + cmd); - status.println("Return code: " + exitValue); - status.println("Environment variable:"); - for (String x : env.keySet()) { - status.println("\t" + x + "=" + env.get(x)); - } - status.println("Output:"); - for (String x : testOutput) { - status.println("\t" + x); - } - status.println("Exception:"); - status.println(t.getMessage()); - t.printStackTrace(status); - - return sw.getBuffer().toString(); - } - } -} diff --git a/test/jdk/java/lang/invoke/lambda/LambdaAccessControlDoPrivilegedTest.java b/test/jdk/java/lang/invoke/lambda/LambdaAccessControlDoPrivilegedTest.java index 37be43d0426..fc6fd91e5ac 100644 --- a/test/jdk/java/lang/invoke/lambda/LambdaAccessControlDoPrivilegedTest.java +++ b/test/jdk/java/lang/invoke/lambda/LambdaAccessControlDoPrivilegedTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, 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 @@ -24,19 +24,28 @@ /* * @test * @bug 8003881 - * @summary tests DoPrivileged action (implemented as lambda expressions) by - * inserting them into the BootClassPath. + * @library /test/lib/ * @modules jdk.compiler * jdk.zipfs - * @compile -XDignore.symbol.file LambdaAccessControlDoPrivilegedTest.java LUtils.java + * @compile LambdaAccessControlDoPrivilegedTest.java * @run main/othervm -Djava.security.manager=allow LambdaAccessControlDoPrivilegedTest + * @summary tests DoPrivileged action (implemented as lambda expressions) by + * inserting them into the BootClassPath. */ -import java.io.File; +import jdk.test.lib.process.OutputAnalyzer; + +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.spi.ToolProvider; -public class LambdaAccessControlDoPrivilegedTest extends LUtils { - public static void main(String... args) { +import static jdk.test.lib.process.ProcessTools.*; + +public class LambdaAccessControlDoPrivilegedTest { + public static void main(String... args) throws Exception { final List scratch = new ArrayList(); scratch.clear(); scratch.add("import java.security.*;"); @@ -47,9 +56,9 @@ public class LambdaAccessControlDoPrivilegedTest extends LUtils { scratch.add("});"); scratch.add("}"); scratch.add("}"); - File doprivJava = new File("DoPriv.java"); - File doprivClass = getClassFile(doprivJava); - createFile(doprivJava, scratch); + Path doprivJava = Path.of("DoPriv.java"); + Path doprivClass = Path.of("DoPriv.class"); + Files.write(doprivJava, scratch, Charset.defaultCharset()); scratch.clear(); scratch.add("public class Bar {"); @@ -59,30 +68,40 @@ public class LambdaAccessControlDoPrivilegedTest extends LUtils { scratch.add("}"); scratch.add("}"); - File barJava = new File("Bar.java"); - File barClass = getClassFile(barJava); - createFile(barJava, scratch); + Path barJava = Path.of("Bar.java"); + Path barClass = Path.of("Bar.class"); + Files.write(barJava, scratch, Charset.defaultCharset()); - String[] javacArgs = {barJava.getName(), doprivJava.getName()}; - compile(javacArgs); - File jarFile = new File("foo.jar"); - String[] jargs = {"cvf", jarFile.getName(), doprivClass.getName()}; - TestResult tr = doExec(JAR_CMD.getAbsolutePath(), - "cvf", jarFile.getName(), - doprivClass.getName()); - if (tr.exitValue != 0){ - throw new RuntimeException(tr.toString()); + compile(barJava.toString(), doprivJava.toString()); + + jar("cvf", "foo.jar", doprivClass.toString()); + Files.delete(doprivJava); + Files.delete(doprivClass); + + ProcessBuilder pb = createTestJavaProcessBuilder( + "-Xbootclasspath/a:foo.jar", + "-cp", ".", + "-Djava.security.manager=allow", + "Bar"); + executeProcess(pb).shouldHaveExitValue(0); + + Files.delete(barJava); + Files.delete(barClass); + Files.delete(Path.of("foo.jar")); + } + + static final ToolProvider JAR_TOOL = ToolProvider.findFirst("jar").orElseThrow(); + static final ToolProvider JAVAC = ToolProvider.findFirst("javac").orElseThrow(); + static void compile(String... args) throws IOException { + if (JAVAC.run(System.out, System.err, args) != 0) { + throw new RuntimeException("compilation fails"); + } + } + + static void jar(String... args) { + int rc = JAR_TOOL.run(System.out, System.err, args); + if (rc != 0){ + throw new RuntimeException("fail to create JAR file"); } - doprivJava.delete(); - doprivClass.delete(); - tr = doExec(JAVA_CMD.getAbsolutePath(), - "-Xbootclasspath/a:foo.jar", - "-cp", ".", - "-Djava.security.manager=allow", - "Bar"); - tr.assertZero("testDoPrivileged fails"); - barJava.delete(); - barClass.delete(); - jarFile.delete(); } } diff --git a/test/jdk/java/lang/invoke/lambda/LambdaAccessControlTest.java b/test/jdk/java/lang/invoke/lambda/LambdaAccessControlTest.java index 2ae76b91111..2588d30be23 100644 --- a/test/jdk/java/lang/invoke/lambda/LambdaAccessControlTest.java +++ b/test/jdk/java/lang/invoke/lambda/LambdaAccessControlTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, 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 @@ -24,14 +24,12 @@ /* * @test * @bug 8003881 - * @summary tests Lambda expression with a security manager at top level * @modules jdk.compiler - * @compile -XDignore.symbol.file LambdaAccessControlTest.java LUtils.java - * * @run main/othervm -Djava.security.manager=allow LambdaAccessControlTest + * @summary tests Lambda expression with a security manager at top level */ -public class LambdaAccessControlTest extends LUtils { +public class LambdaAccessControlTest { public static void main(String... args) { System.setSecurityManager(new SecurityManager()); JJ iii = (new CC())::impl; diff --git a/test/jdk/java/lang/invoke/lambda/LambdaAsm.java b/test/jdk/java/lang/invoke/lambda/LambdaAsm.java index 647f906cba8..f0d79988783 100644 --- a/test/jdk/java/lang/invoke/lambda/LambdaAsm.java +++ b/test/jdk/java/lang/invoke/lambda/LambdaAsm.java @@ -24,13 +24,14 @@ /* * @test * @bug 8027232 - * @summary ensures that j.l.i.InvokerByteCodeGenerator and ASM visitMethodInsn - * generate bytecodes with correct constant pool references + * @library /test/lib/ * @modules java.base/jdk.internal.org.objectweb.asm * jdk.jdeps/com.sun.tools.classfile * jdk.zipfs - * @compile -XDignore.symbol.file LambdaAsm.java LUtils.java + * @compile LambdaAsm.java * @run main/othervm LambdaAsm + * @summary ensures that j.l.i.InvokerByteCodeGenerator and ASM visitMethodInsn + * generate bytecodes with correct constant pool references */ import com.sun.tools.classfile.Attribute; import com.sun.tools.classfile.ClassFile; @@ -40,34 +41,36 @@ import com.sun.tools.classfile.ConstantPool.CPInfo; import com.sun.tools.classfile.Instruction; import com.sun.tools.classfile.Method; import java.io.ByteArrayInputStream; -import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; import java.util.ArrayList; import java.nio.file.DirectoryStream; import java.nio.file.Path; import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.OutputAnalyzer; import static java.nio.file.Files.*; import static jdk.internal.org.objectweb.asm.Opcodes.*; +import static jdk.test.lib.process.ProcessTools.*; public class LambdaAsm { static final Path DUMP_LAMBDA_PROXY_CLASS_FILES = Path.of("DUMP_LAMBDA_PROXY_CLASS_FILES"); + static final Path SRC = Path.of("src"); + static final Path CLASSES = Path.of("classes"); - static final File TestFile = new File("A.java"); - - static void init() { + static void init() throws Exception { emitCode(); - LUtils.compile(TestFile.getName()); - LUtils.TestResult tr = LUtils.doExec(LUtils.JAVA_CMD.getAbsolutePath(), + CompilerUtils.compile(SRC, CLASSES); + OutputAnalyzer outputAnalyzer = executeProcess(createTestJavaProcessBuilder( "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles=true", - "-cp", ".", "A"); - if (tr.exitValue != 0) { - System.out.println("Error: " + tr.toString()); - throw new RuntimeException("could not create proxy classes"); - } + "-cp", CLASSES.toString(), "A")); + outputAnalyzer.shouldHaveExitValue(0); } - static void emitCode() { + static void emitCode() throws IOException { ArrayList scratch = new ArrayList<>(); scratch.add("import java.util.function.*;"); scratch.add("class A {"); @@ -89,7 +92,10 @@ public class LambdaAsm { scratch.add(" I.d();"); scratch.add(" }"); scratch.add("}"); - LUtils.createFile(TestFile, scratch); + + Path testFile = SRC.resolve("A.java"); + Files.createDirectories(SRC); + Files.write(testFile, scratch, Charset.defaultCharset()); } static void checkMethod(String cname, String mname, ConstantPool cp, diff --git a/test/jdk/java/lang/invoke/lambda/LambdaStackTrace.java b/test/jdk/java/lang/invoke/lambda/LambdaStackTrace.java index f27b56b72b3..6ae63e4b7d9 100644 --- a/test/jdk/java/lang/invoke/lambda/LambdaStackTrace.java +++ b/test/jdk/java/lang/invoke/lambda/LambdaStackTrace.java @@ -24,20 +24,23 @@ /* * @test * @bug 8025636 - * @summary Synthetic frames should be hidden in exceptions + * @library /test/lib/ * @modules java.base/jdk.internal.org.objectweb.asm * jdk.compiler - * @compile -XDignore.symbol.file LUtils.java LambdaStackTrace.java + * @compile LambdaStackTrace.java * @run main LambdaStackTrace + * @summary Synthetic frames should be hidden in exceptions */ import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.test.lib.compiler.CompilerUtils; -import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import static jdk.internal.org.objectweb.asm.Opcodes.ACC_ABSTRACT; @@ -47,7 +50,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.V1_7; public class LambdaStackTrace { - static File classes = new File(System.getProperty("test.classes")); + static Path CLASSES = Path.of(System.getProperty("test.classes", ".")); public static void main(String[] args) throws Exception { testBasic(); @@ -121,12 +124,8 @@ public class LambdaStackTrace { // We can't let javac compile these interfaces because in > 1.8 it will insert // bridge methods into the interfaces - we want code that looks like <= 1.7, // so we generate it. - try (FileOutputStream fw = new FileOutputStream(new File(classes, "Maker.class"))) { - fw.write(generateMaker()); - } - try (FileOutputStream fw = new FileOutputStream(new File(classes, "StringMaker.class"))) { - fw.write(generateStringMaker()); - } + Files.write(CLASSES.resolve("Maker.class"), generateMaker()); + Files.write(CLASSES.resolve("StringMaker.class"), generateStringMaker()); } private static byte[] generateMaker() { @@ -154,7 +153,7 @@ public class LambdaStackTrace { } - static void emitCode(File f) { + static void emitCode(Path file) throws IOException { ArrayList scratch = new ArrayList<>(); scratch.add("public class Caller {"); scratch.add(" public static void callStringMaker() {"); @@ -166,13 +165,17 @@ public class LambdaStackTrace { scratch.add(" ((Maker) sm).make();"); // <-- This will call the bridge method scratch.add(" }"); scratch.add("}"); - LUtils.createFile(f, scratch); + + Files.write(file, scratch, Charset.defaultCharset()); } - static void compileCaller() { - File caller = new File(classes, "Caller.java"); + static void compileCaller() throws IOException { + Path src = Path.of("src"); + Files.createDirectories(src); + + Path caller = src.resolve("Caller.java"); emitCode(caller); - LUtils.compile("-cp", classes.getAbsolutePath(), "-d", classes.getAbsolutePath(), caller.getAbsolutePath()); + CompilerUtils.compile(src, CLASSES, "-cp", CLASSES.toAbsolutePath().toString()); } private static void verifyFrames(StackTraceElement[] stack, String... patterns) throws Exception { diff --git a/test/jdk/java/lang/invoke/lambda/LogGeneratedClassesTest.java b/test/jdk/java/lang/invoke/lambda/LogGeneratedClassesTest.java index 26ed7b0058e..91ea4b932ca 100644 --- a/test/jdk/java/lang/invoke/lambda/LogGeneratedClassesTest.java +++ b/test/jdk/java/lang/invoke/lambda/LogGeneratedClassesTest.java @@ -24,14 +24,16 @@ /* * @test * @bug 8023524 8304846 - * @summary tests logging generated classes for lambda + * @requires vm.flagless + * @library /test/lib/ * @library /java/nio/file * @modules jdk.compiler * jdk.zipfs * @run testng LogGeneratedClassesTest + * @summary tests logging generated classes for lambda */ -import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; @@ -40,18 +42,21 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.attribute.PosixFileAttributeView; +import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.OutputAnalyzer; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import org.testng.SkipException; import static java.nio.file.attribute.PosixFilePermissions.*; +import static jdk.test.lib.process.ProcessTools.*; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; -public class LogGeneratedClassesTest extends LUtils { +public class LogGeneratedClassesTest { static final Path DUMP_LAMBDA_PROXY_CLASS_FILES = Path.of("DUMP_LAMBDA_PROXY_CLASS_FILES"); + static final Path CLASSES = Path.of("classes").toAbsolutePath(); String longFQCN; @BeforeClass @@ -74,9 +79,8 @@ public class LogGeneratedClassesTest extends LUtils { scratch.add(" }"); scratch.add("}"); - File test = new File("TestLambda.java"); - createFile(test, scratch); - compile("-d", ".", test.getName()); + Path testLambda = Path.of("TestLambda.java"); + Files.write(testLambda, scratch, Charset.defaultCharset()); scratch.remove(0); scratch.remove(0); @@ -91,9 +95,10 @@ public class LogGeneratedClassesTest extends LUtils { sb.append(";"); sb.insert(0, "package "); scratch.add(0, sb.toString()); - test = new File("LongPackageName.java"); - createFile(test, scratch); - compile("-d", ".", test.getName()); + Path lpnTest = Path.of("LongPackageName.java"); + Files.write(lpnTest, scratch, Charset.defaultCharset()); + + CompilerUtils.compile(Path.of("."), CLASSES); } @AfterClass @@ -107,49 +112,49 @@ public class LogGeneratedClassesTest extends LUtils { } @Test - public void testNotLogging() { - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", ".", + public void testNotLogging() throws Exception { + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), "-Djava.security.manager=allow", "com.example.TestLambda"); - tr.assertZero("Should still return 0"); + executeProcess(pb).shouldHaveExitValue(0); } @Test - public void testLogging() throws IOException { + public void testLogging() throws Exception { Path testDir = Path.of("dump"); Path dumpDir = testDir.resolve(DUMP_LAMBDA_PROXY_CLASS_FILES); Files.createDirectory(testDir); - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", "..", - "-Duser.dir=" + testDir.toAbsolutePath(), + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), "-Djava.security.manager=allow", "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", - "com.example.TestLambda"); + "com.example.TestLambda").directory(testDir.toFile()); + executeProcess(pb).shouldHaveExitValue(0); + // 2 our own class files. We don't care about the others assertEquals(Files.find( dumpDir, 99, (p, a) -> p.startsWith(dumpDir.resolve("com/example")) && a.isRegularFile()).count(), - 2, "Two lambda captured"); - tr.assertZero("Should still return 0"); + 2, "Two lambda captured"); } @Test - public void testDumpDirNotExist() throws IOException { + public void testDumpDirNotExist() throws Exception { Path testDir = Path.of("NotExist"); Path dumpDir = testDir.resolve(DUMP_LAMBDA_PROXY_CLASS_FILES); Files.createDirectory(testDir); TestUtil.removeAll(dumpDir); - assertFalse(Files.exists(dumpDir)); - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", "..", - "-Duser.dir=" + testDir.toAbsolutePath(), - "-Djava.security.manager=allow", - "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", - "com.example.TestLambda"); + + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), + "-Djava.security.manager=allow", + "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", + "com.example.TestLambda").directory(testDir.toFile()); + executeProcess(pb).shouldHaveExitValue(0); // The dump directory will be created if not exist assertEquals(Files.find( @@ -157,28 +162,24 @@ public class LogGeneratedClassesTest extends LUtils { 99, (p, a) -> p.startsWith(dumpDir.resolve("com/example")) && a.isRegularFile()).count(), - 2, "Two lambda captured"); - tr.assertZero("Should still return 0"); + 2, "Two lambda captured"); } @Test - public void testDumpDirIsFile() throws IOException { + public void testDumpDirIsFile() throws Exception { Path testDir = Path.of("notDir"); Path dumpFile = testDir.resolve(DUMP_LAMBDA_PROXY_CLASS_FILES); Files.createDirectory(testDir); Files.createFile(dumpFile); assertTrue(Files.isRegularFile(dumpFile)); - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", "..", - "-Duser.dir=" + testDir.toAbsolutePath(), - "-Djava.security.manager=allow", - "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", - "com.example.TestLambda"); - assertEquals(tr.testOutput.stream() - .filter(s -> s.contains("DUMP_LAMBDA_PROXY_CLASS_FILES is not a directory")) - .count(), - 1, "only show error once"); - assertTrue(tr.exitValue != 0); + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), + "-Djava.security.manager=allow", + "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", + "com.example.TestLambda").directory(testDir.toFile()); + executeProcess(pb) + .shouldContain("DUMP_LAMBDA_PROXY_CLASS_FILES is not a directory") + .shouldNotHaveExitValue(0); } private static boolean isWriteableDirectory(Path p) { @@ -205,7 +206,7 @@ public class LogGeneratedClassesTest extends LUtils { } @Test - public void testDumpDirNotWritable() throws IOException { + public void testDumpDirNotWritable() throws Exception { if (!Files.getFileStore(Paths.get(".")) .supportsFileAttributeView(PosixFileAttributeView.class)) { // No easy way to setup readonly directory without POSIX @@ -230,35 +231,33 @@ public class LogGeneratedClassesTest extends LUtils { return; } - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", "..", - "-Duser.dir=" + testDir.toAbsolutePath(), + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), "-Djava.security.manager=allow", "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", - "com.example.TestLambda"); - assertEquals(tr.testOutput.stream() - .filter(s -> s.contains("DUMP_LAMBDA_PROXY_CLASS_FILES is not writable")) - .count(), - 1, "only show error once"); - assertTrue(tr.exitValue != 0); + "com.example.TestLambda").directory(testDir.toFile()); + executeProcess(pb) + .shouldContain("DUMP_LAMBDA_PROXY_CLASS_FILES is not writable") + .shouldNotHaveExitValue(0); } finally { TestUtil.removeAll(testDir); } } @Test - public void testLoggingException() throws IOException { + public void testLoggingException() throws Exception { Path testDir = Path.of("dumpLong"); Path dumpDir = testDir.resolve(DUMP_LAMBDA_PROXY_CLASS_FILES); Files.createDirectories(dumpDir.resolve("com/example/nonsense")); Files.createFile(dumpDir.resolve("com/example/nonsense/nonsense")); - TestResult tr = doExec(JAVA_CMD.getAbsolutePath(), - "-cp", "..", - "-Duser.dir=" + testDir.toAbsolutePath(), + ProcessBuilder pb = createLimitedTestJavaProcessBuilder( + "-cp", CLASSES.toString(), "-Djava.security.manager=allow", "-Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles", - longFQCN); - assertEquals(tr.testOutput.stream() + longFQCN).directory(testDir.toFile()); + OutputAnalyzer outputAnalyzer = executeProcess(pb); + outputAnalyzer.shouldHaveExitValue(0); + assertEquals(outputAnalyzer.asLines().stream() .filter(s -> s.startsWith("WARNING: Exception")) .count(), 2, "show error each capture"); @@ -279,6 +278,5 @@ public class LogGeneratedClassesTest extends LUtils { assertEquals(Files.walk(dumpDir) .filter(filter) .count(), 5, "Two lambda captured failed to log"); - tr.assertZero("Should still return 0"); } } diff --git a/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java b/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java index a6d17f90632..749133bb581 100644 --- a/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java +++ b/test/jdk/java/lang/reflect/exeCallerAccessTest/CallerAccessTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -31,37 +31,15 @@ // Test disabled on AIX since we cannot invoke the JVM on the primordial thread. -import java.io.File; -import java.util.Map; import jdk.test.lib.Platform; -import jdk.test.lib.process.OutputAnalyzer; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.Paths; +import jdk.test.lib.process.ProcessTools; public class CallerAccessTest { - public static void main(String[] args) throws IOException { - Path launcher = Paths.get(System.getProperty("test.nativepath"), "CallerAccessTest"); - ProcessBuilder pb = new ProcessBuilder(launcher.toString()); - Map env = pb.environment(); - - String libDir = Platform.libDir().toString(); - String vmDir = Platform.jvmLibDir().toString(); - - // set up shared library path - String sharedLibraryPathEnvName = Platform.sharedLibraryPathVariableName(); - env.compute(sharedLibraryPathEnvName, - (k, v) -> (v == null) ? libDir : v + File.pathSeparator + libDir); - env.compute(sharedLibraryPathEnvName, - (k, v) -> (v == null) ? vmDir : v + File.pathSeparator + vmDir); - - System.out.println("Launching: " + launcher + " shared library path: " + - env.get(sharedLibraryPathEnvName)); - new OutputAnalyzer(pb.start()) - .outputTo(System.out) - .errorTo(System.err) - .shouldHaveExitValue(0); + public static void main(String[] args) throws Exception { + ProcessBuilder pb = ProcessTools.createNativeTestProcessBuilder("CallerAccessTest"); + System.out.println("Launching: " + pb.command() + " shared library path: " + + pb.environment().get(Platform.sharedLibraryPathVariableName())); + ProcessTools.executeProcess(pb).shouldHaveExitValue(0); } } diff --git a/test/jdk/jdk/internal/loader/URLClassPath/LargeClasspathWithPkgPrefix.java b/test/jdk/jdk/internal/loader/URLClassPath/LargeClasspathWithPkgPrefix.java index 17def65a6ba..0e532497a46 100644 --- a/test/jdk/jdk/internal/loader/URLClassPath/LargeClasspathWithPkgPrefix.java +++ b/test/jdk/jdk/internal/loader/URLClassPath/LargeClasspathWithPkgPrefix.java @@ -25,7 +25,6 @@ import java.io.File; import java.nio.file.Files; import java.nio.file.Path; -import jdk.test.lib.JDKToolFinder; import jdk.test.lib.compiler.CompilerUtils; import jdk.test.lib.process.OutputAnalyzer; import jdk.test.lib.process.ProcessTools; @@ -34,12 +33,12 @@ import jdk.test.lib.util.JarBuilder; /* * @test * @bug 8308184 - * @summary Verify that an application can be launched when the classpath contains large number of - * jars and the java.protocol.handler.pkgs system property is set * @library /test/lib/ * @build jdk.test.lib.util.JarBuilder jdk.test.lib.compiler.CompilerUtils * jdk.test.lib.process.ProcessTools * @run driver LargeClasspathWithPkgPrefix + * @summary Verify that an application can be launched when the classpath contains large number of + * jars and the java.protocol.handler.pkgs system property is set */ public class LargeClasspathWithPkgPrefix { @@ -126,8 +125,7 @@ public class LargeClasspathWithPkgPrefix { // java -Djava.protocol.handler.pkgs=foo.bar.some.nonexistent.pkg -cp Foo private static void launchApplication(String classPath) throws Exception { - String java = JDKToolFinder.getJDKTool("java"); - ProcessBuilder pb = new ProcessBuilder(java, + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( "-Djava.protocol.handler.pkgs=foo.bar.some.nonexistent.pkg", "-cp", classPath, "Foo"); diff --git a/test/jdk/jdk/internal/misc/VM/RuntimeArguments.java b/test/jdk/jdk/internal/misc/VM/RuntimeArguments.java index c48de900ec3..dbcb30255a8 100644 --- a/test/jdk/jdk/internal/misc/VM/RuntimeArguments.java +++ b/test/jdk/jdk/internal/misc/VM/RuntimeArguments.java @@ -23,11 +23,12 @@ /** * @test - * @summary Basic test of VM::getRuntimeArguments + * @requires vm.flagless * @library /test/lib * @modules java.base/jdk.internal.misc * jdk.zipfs * @run testng RuntimeArguments + * @summary Basic test of VM::getRuntimeArguments */ import java.io.IOException; @@ -46,7 +47,6 @@ import org.testng.annotations.Test; import static org.testng.Assert.*; public class RuntimeArguments { - static final String TEST_CLASSES = System.getProperty("test.classes"); static final List VM_OPTIONS = getInitialOptions(); /* @@ -112,11 +112,9 @@ public class RuntimeArguments { @Test(dataProvider = "options") public void test(List args, List expected) throws Exception { - // launch a test program - // $ java -classpath RuntimeArguments - Stream options = Stream.concat(args.stream(), - Stream.of("-classpath", TEST_CLASSES, "RuntimeArguments")); - + // launch a test program with classpath set by ProcessTools::createLimitedTestJavaProcessBuilder + // $ java RuntimeArguments + Stream options = Stream.concat(args.stream(), Stream.of("RuntimeArguments")); ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( // The runtime image may be created with jlink --add-options // The initial VM options will be included in the result diff --git a/test/jdk/jdk/modules/incubator/DefaultImage.java b/test/jdk/jdk/modules/incubator/DefaultImage.java index 25ff746529b..63bc46b26ad 100644 --- a/test/jdk/jdk/modules/incubator/DefaultImage.java +++ b/test/jdk/jdk/modules/incubator/DefaultImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -24,11 +24,12 @@ /* * @test * @bug 8170859 - * @summary Ensure no incubator modules are resolved by default in the image + * @requires vm.flagless * @library /test/lib * @modules jdk.compiler * @build jdk.test.lib.compiler.CompilerUtils * @run testng DefaultImage + * @summary Ensure no incubator modules are resolved by default in the image */ import java.io.ByteArrayOutputStream; @@ -43,6 +44,7 @@ import java.util.function.Consumer; import java.util.stream.Stream; import jdk.test.lib.compiler.CompilerUtils; +import jdk.test.lib.process.ProcessTools; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; @@ -108,10 +110,8 @@ public class DefaultImage { static ToolResult java(String... opts) throws Throwable { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); - String[] options = Stream.concat(Stream.of(getJava()), Stream.of(opts)) - .toArray(String[]::new); - ProcessBuilder pb = new ProcessBuilder(options); + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(opts); int exitValue = executeCommand(pb).outputTo(ps) .errorTo(ps) .getExitValue(); @@ -155,15 +155,6 @@ public class DefaultImage { } } - static String getJava() { - Path image = Paths.get(JAVA_HOME); - boolean isWindows = System.getProperty("os.name").startsWith("Windows"); - Path java = image.resolve("bin").resolve(isWindows ? "java.exe" : "java"); - if (Files.notExists(java)) - throw new RuntimeException(java + " not found"); - return java.toAbsolutePath().toString(); - } - static boolean isExplodedBuild() { Path modulesPath = Paths.get(JAVA_HOME).resolve("lib").resolve("modules"); return Files.notExists(modulesPath); diff --git a/test/jdk/jdk/modules/incubator/ImageModules.java b/test/jdk/jdk/modules/incubator/ImageModules.java index b69c4022f13..b48a969669e 100644 --- a/test/jdk/jdk/modules/incubator/ImageModules.java +++ b/test/jdk/jdk/modules/incubator/ImageModules.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -24,7 +24,7 @@ /* * @test * @bug 8170859 - * @summary Basic test for incubator modules in jmods and images + * @requires vm.flagless * @library /test/lib * @key intermittent * @modules jdk.compiler jdk.jartool jdk.jlink @@ -32,6 +32,7 @@ * jdk.test.lib.util.FileUtils * jdk.test.lib.compiler.CompilerUtils * @run testng/othervm ImageModules + * @summary Basic test for incubator modules in jmods and images */ import java.io.ByteArrayOutputStream;