7187882: TEST_BUG: java/rmi/activation/checkusage/CheckUsage.java fails intermittently
Summary: Tighten up JavaVM test library API, and adjust tests to match.
Reviewed-by: mchung, dmocek
--- a/jdk/test/ProblemList.txt Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/ProblemList.txt Mon Jan 07 18:09:07 2013 -0800
@@ -1,6 +1,6 @@
###########################################################################
#
-# Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2009, 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
@@ -238,9 +238,6 @@
# 7146541
java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java linux-all
-# 7187882
-java/rmi/activation/checkusage/CheckUsage.java generic-all
-
# 7190106
java/rmi/reliability/benchmark/runRmiBench.sh generic-all
--- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -168,7 +168,7 @@
registering = null;
// Need to make sure that rmid goes away by itself
- Process rmidProcess = rmid.getVM();
+ JavaVM rmidProcess = rmid;
if (rmidProcess != null) {
try {
Runnable waitThread =
@@ -205,9 +205,9 @@
* class that waits for rmid to exit
*/
private static class ShutdownDetectThread implements Runnable {
- private Process rmidProcess = null;
+ private JavaVM rmidProcess = null;
- ShutdownDetectThread(Process rmidProcess) {
+ ShutdownDetectThread(JavaVM rmidProcess) {
this.rmidProcess = rmidProcess;
}
public void run() {
--- a/jdk/test/java/rmi/activation/checkusage/CheckUsage.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/activation/checkusage/CheckUsage.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -23,6 +23,7 @@
/* @test
* @bug 4259564
+ * @summary RMID's usage message is incomplete and inconsistent with other tools
*
* @library ../../testlibrary
* @build TestLibrary JavaVM
@@ -37,23 +38,16 @@
*/
public class CheckUsage {
public static void main(String[] args) {
-
- System.err.println("\nregression test for 4259564\n");
-
- JavaVM rmidVM = null;
-
try {
- // make sure the registry exits with a proper usage statement
ByteArrayOutputStream berr = new ByteArrayOutputStream();
- // run a VM to start the registry
- rmidVM = new JavaVM("sun.rmi.server.Activation", "", "foo",
- System.out, berr);
+ // create rmid with incorrect command line args
+ JavaVM rmidVM = new JavaVM("sun.rmi.server.Activation", "", "foo",
+ System.out, berr);
System.err.println("starting rmid");
- rmidVM.start();
- // wait for registry exit
- int rmidVMExitStatus = rmidVM.getVM().waitFor();
+ // run the subprocess and wait for it to exit
+ int rmidVMExitStatus = rmidVM.execute();
System.err.println("rmid exited with status: " +
rmidVMExitStatus);
@@ -66,12 +60,8 @@
} else {
System.err.println("test passed");
}
-
} catch (Exception e) {
TestLibrary.bomb(e);
- } finally {
- rmidVM.destroy();
- rmidVM = null;
}
}
}
--- a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -76,8 +76,7 @@
}
System.err.println("starting " + utilityToStart);
- vm.start();
- vm.getVM().waitFor();
+ vm.execute();
} catch (Exception e) {
TestLibrary.bomb(e);
--- a/jdk/test/java/rmi/registry/checkusage/CheckUsage.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/registry/checkusage/CheckUsage.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -35,34 +35,21 @@
/**
* Make sure that the rmiregistry prints out a correct usage statement
- * when run with an incorrect command line; test written to conform to
- * new tighter bug fix/regression test guidelines.
+ * when run with an incorrect command line.
*/
public class CheckUsage {
public static void main(String[] args) {
- System.err.println("\nregression test for 4151966\n");
-
- JavaVM registryVM = null;
-
try {
- // make sure the registry exits with a proper usage statement
ByteArrayOutputStream berr = new ByteArrayOutputStream();
// run a VM to start the registry
- registryVM = new JavaVM("sun.rmi.registry.RegistryImpl",
- "", "foo",
- System.out, berr);
+ JavaVM registryVM = new JavaVM("sun.rmi.registry.RegistryImpl",
+ "", "foo",
+ System.out, berr);
System.err.println("starting registry");
- registryVM.start();
-
- // wait for registry exit
System.err.println(" registry exited with status: " +
- registryVM.getVM().waitFor());
- try {
- Thread.sleep(7000);
- } catch (InterruptedException ie) {
- }
+ registryVM.execute());
String usage = new String(berr.toByteArray());
@@ -75,9 +62,6 @@
}
} catch (Exception e) {
TestLibrary.bomb(e);
- } finally {
- registryVM.destroy();
- registryVM = null;
}
}
}
--- a/jdk/test/java/rmi/registry/reexport/Reexport.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/registry/reexport/Reexport.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 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
@@ -122,8 +122,7 @@
try {
JavaVM jvm = new JavaVM("RegistryRunner", "", Integer.toString(p));
jvm.start();
- Reexport.subreg = jvm.getVM();
-
+ Reexport.subreg = jvm;
} catch (IOException e) {
// one of these is summarily dropped, can't remember which one
System.out.println ("Test setup failed - cannot run rmiregistry");
@@ -135,7 +134,8 @@
} catch (Exception whatever) {
}
}
- private static Process subreg = null;
+
+ private static JavaVM subreg = null;
public static void killRegistry(int port) {
if (Reexport.subreg != null) {
--- a/jdk/test/java/rmi/testlibrary/JavaVM.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/testlibrary/JavaVM.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -41,6 +41,8 @@
private OutputStream outputStream = System.out;
private OutputStream errorStream = System.err;
private String policyFileName = null;
+ private StreamPipe outPipe;
+ private StreamPipe errPipe;
private static void mesg(Object mesg) {
System.err.println("JAVAVM: " + mesg.toString());
@@ -145,13 +147,12 @@
}
mesg("command = " + Arrays.asList(javaCommand).toString());
- System.err.println("");
vm = Runtime.getRuntime().exec(javaCommand);
/* output from the execed process may optionally be captured. */
- StreamPipe.plugTogether(vm.getInputStream(), this.outputStream);
- StreamPipe.plugTogether(vm.getErrorStream(), this.errorStream);
+ outPipe = StreamPipe.plugTogether(vm.getInputStream(), this.outputStream);
+ errPipe = StreamPipe.plugTogether(vm.getErrorStream(), this.errorStream);
}
public void destroy() {
@@ -161,7 +162,25 @@
vm = null;
}
- protected Process getVM() {
- return vm;
+ /**
+ * Waits for the subprocess to exit, joins the pipe threads to ensure that
+ * all output is collected, and returns its exit status.
+ */
+ public int waitFor() throws InterruptedException {
+ if (vm == null)
+ throw new IllegalStateException("can't wait for JavaVM that hasn't started");
+
+ int status = vm.waitFor();
+ outPipe.join();
+ errPipe.join();
+ return status;
+ }
+
+ /**
+ * Starts the subprocess, waits for it to exit, and returns its exit status.
+ */
+ public int execute() throws IOException, InterruptedException {
+ start();
+ return waitFor();
}
}
--- a/jdk/test/java/rmi/testlibrary/RMID.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/testlibrary/RMID.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -202,8 +202,6 @@
public void start(long waitTime) throws IOException {
- if (getVM() != null) return;
-
// if rmid is already running, then the test will fail with
// a well recognized exception (port already in use...).
--- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -114,6 +114,7 @@
equal = "=";
}
+ // create a client to tell checkFQDN what its rmi name is.
JavaVM jvm = new JavaVM("CheckFQDNClient",
propOption + property +
equal +
@@ -125,10 +126,7 @@
propertyBeingTested=property;
propertyBeingTestedValue=propertyValue;
- // create a client to tell checkFQDN what its rmi name is. */
- jvm.start();
-
- if (jvm.getVM().waitFor() != 0 ) {
+ if (jvm.execute() != 0) {
TestLibrary.bomb("Test failed, error in client.");
}
--- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -102,9 +102,8 @@
" -Drmi.registry.port=" +
registryPort,
"");
- jvm.start();
- if (jvm.getVM().waitFor() == 1 ) {
+ if (jvm.execute() != 0) {
TestLibrary.bomb("Client process failed");
}
}
--- a/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 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
@@ -48,8 +48,7 @@
ByteArrayOutputStream err = new ByteArrayOutputStream();
JavaVM vm = new JavaVM(StartRegistry.class.getName(),
"-Dsun.rmi.transport.logLevel=v", "", out, err);
- vm.start();
- vm.getVM().waitFor();
+ vm.execute();
String errString = err.toString();
--- a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 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
@@ -65,8 +65,7 @@
JavaVM vm = new JavaVM(DoRMIStuff.class.getName(),
"-Djava.util.logging.config.file=" + loggingPropertiesFile,
"", out, err);
- vm.start();
- vm.getVM().waitFor();
+ vm.execute();
/*
* Verify that the subprocess had no System.out or System.err
--- a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Mon Jan 07 13:19:03 2013 -0800
+++ b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java Mon Jan 07 18:09:07 2013 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -104,7 +104,7 @@
JavaVM jvm =
new JavaVM("sun.rmi.registry.RegistryImpl", "", Integer.toString(p));
jvm.start();
- DeadCachedConnection.subreg = jvm.getVM();
+ DeadCachedConnection.subreg = jvm;
} catch (IOException e) {
// one of these is summarily dropped, can't remember which one
@@ -117,7 +117,7 @@
} catch (Exception whatever) {
}
}
- private static Process subreg = null;
+ private static JavaVM subreg = null;
public static void killRegistry() {
if (DeadCachedConnection.subreg != null) {