From e72d357292838670970d6b5ee6bb60f6442485c2 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Mon, 18 Nov 2013 15:25:15 +0100 Subject: [PATCH] 8027163: sun/management/jmxremote/bootstrap/CustomLauncherTest.java should be updated for jdk8 removal of solaris-32bit support Reviewed-by: sla --- .../jdk/testlibrary/ProcessTools.java | 16 +++++++++++ .../bootstrap/CustomLauncherTest.java | 26 ++++++++++++++++-- .../bootstrap/LocalManagementTest.java | 14 +++++----- .../bootstrap/solaris-amd64/launcher | Bin 0 -> 12056 bytes .../jmxremote/bootstrap/solaris-i586/launcher | Bin 8176 -> 0 bytes .../bootstrap/solaris-sparc/launcher | Bin 9708 -> 0 bytes .../bootstrap/solaris-sparcv9/launcher | Bin 0 -> 11656 bytes 7 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 jdk/test/sun/management/jmxremote/bootstrap/solaris-amd64/launcher delete mode 100644 jdk/test/sun/management/jmxremote/bootstrap/solaris-i586/launcher delete mode 100644 jdk/test/sun/management/jmxremote/bootstrap/solaris-sparc/launcher create mode 100644 jdk/test/sun/management/jmxremote/bootstrap/solaris-sparcv9/launcher diff --git a/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java b/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java index 6ed9f30d711..9f96baaefbe 100644 --- a/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java +++ b/jdk/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java @@ -32,6 +32,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.Phaser; @@ -131,6 +132,10 @@ public final class ProcessTools { phs.awaitAdvanceInterruptibly(0, timeout, unit); } } catch (TimeoutException | InterruptedException e) { + System.err.println("Failed to start a process (thread dump follows)"); + for(Map.Entry s : Thread.getAllStackTraces().entrySet()) { + printStack(s.getKey(), s.getValue()); + } stdoutTask.cancel(true); stderrTask.cancel(true); throw e; @@ -250,4 +255,15 @@ public final class ProcessTools { return new ProcessBuilder(args.toArray(new String[args.size()])); } + private static void printStack(Thread t, StackTraceElement[] stack) { + System.out.println("\t" + t + + " stack: (length = " + stack.length + ")"); + if (t != null) { + for (StackTraceElement stack1 : stack) { + System.out.println("\t" + stack1); + } + System.out.println(); + } + } + } diff --git a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java index 3d2036da72f..99701aebb61 100644 --- a/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java +++ b/jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.java @@ -25,7 +25,11 @@ import java.io.File; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; +import java.nio.file.LinkOption; import java.nio.file.Path; +import java.nio.file.attribute.PosixFilePermission; +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -36,7 +40,7 @@ import jdk.testlibrary.ProcessTools; * @bug 6434402 8004926 * @library /lib/testlibrary * @build TestManager TestApplication CustomLauncherTest - * @run main CustomLauncherTest + * @run main/othervm CustomLauncherTest * @author Jaroslav Bachorik */ public class CustomLauncherTest { @@ -67,6 +71,9 @@ public class CustomLauncherTest { ARCH = "amd64"; break; } + case "sparc": + ARCH = "sparcv9"; + break; default: { ARCH = osarch; } @@ -101,7 +108,10 @@ public class CustomLauncherTest { File.separator + "launcher"; final FileSystem FS = FileSystems.getDefault(); - final boolean hasLauncher = Files.isExecutable(FS.getPath(LAUNCHER)); + Path launcherPath = FS.getPath(LAUNCHER); + + final boolean hasLauncher = Files.isRegularFile(launcherPath, LinkOption.NOFOLLOW_LINKS)&& + Files.isReadable(launcherPath); if (!hasLauncher) { System.out.println("Launcher [" + LAUNCHER + "] does not exist. Skipping the test."); return; @@ -114,7 +124,17 @@ public class CustomLauncherTest { Process serverPrc = null, clientPrc = null; + final Set launcherOrigPerms = + Files.getPosixFilePermissions(launcherPath, LinkOption.NOFOLLOW_LINKS); try { + // It is impossible to store an executable file in the source control + // We need to set the executable flag here + if (!Files.isExecutable(launcherPath)) { + Set perms = new HashSet<>(launcherOrigPerms); + perms.add(PosixFilePermission.OWNER_EXECUTE); + Files.setPosixFilePermissions(launcherPath, perms); + } + System.out.println("Starting custom launcher:"); System.out.println("========================="); System.out.println(" launcher : " + LAUNCHER); @@ -177,6 +197,8 @@ public class CustomLauncherTest { throw new Error("Test failed"); } } finally { + // Let's restore the original launcher permissions + Files.setPosixFilePermissions(launcherPath, launcherOrigPerms); if (clientPrc != null) { clientPrc.destroy(); clientPrc.waitFor(); diff --git a/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java b/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java index dc3b5de7340..a929855a8c5 100644 --- a/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java +++ b/jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.java @@ -42,7 +42,7 @@ import java.util.concurrent.atomic.AtomicReference; * TestManager will attempt a connection to the address obtained from * both agent properties and jvmstat buffer. * @build TestManager TestApplication - * @run main/timeout=300 LocalManagementTest + * @run main/othervm/timeout=300 LocalManagementTest */ import jdk.testlibrary.ProcessTools; @@ -77,14 +77,14 @@ public class LocalManagementTest { } private static boolean test1() throws Exception { - return doTest("-Dcom.sun.management.jmxremote"); + return doTest("1", "-Dcom.sun.management.jmxremote"); } private static boolean test2() throws Exception { Path agentPath = findAgent(); if (agentPath != null) { String agent = agentPath.toString(); - return doTest("-javaagent:" + agent); + return doTest("2", "-javaagent:" + agent); } else { return false; } @@ -94,7 +94,7 @@ public class LocalManagementTest { * no args (blank) - manager should attach and start agent */ private static boolean test3() throws Exception { - return doTest(null); + return doTest("3", null); } /** @@ -136,7 +136,7 @@ public class LocalManagementTest { * use DNS-only name service */ private static boolean test5() throws Exception { - return doTest("-Dsun.net.spi.namservice.provider.1=\"dns,sun\""); + return doTest("5", "-Dsun.net.spi.namservice.provider.1=\"dns,sun\""); } private static Path findAgent() { @@ -160,7 +160,7 @@ public class LocalManagementTest { return Files.isRegularFile(path) && Files.isReadable(path); } - private static boolean doTest(String arg) throws Exception { + private static boolean doTest(String testId, String arg) throws Exception { List args = new ArrayList<>(); args.add("-cp"); args.add(TEST_CLASSES); @@ -179,7 +179,7 @@ public class LocalManagementTest { final AtomicReference pid = new AtomicReference<>(); serverPrc = ProcessTools.startProcess( - "TestApplication", + "TestApplication(" + testId + ")", server, (String line) -> { if (line.startsWith("port:")) { diff --git a/jdk/test/sun/management/jmxremote/bootstrap/solaris-amd64/launcher b/jdk/test/sun/management/jmxremote/bootstrap/solaris-amd64/launcher new file mode 100644 index 0000000000000000000000000000000000000000..ac766def9e6f529610684844d3e55f8880bcd9db GIT binary patch literal 12056 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 h>z^qIz@q;(e%$}B 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 B5zqht literal 0 HcmV?d00001