From f660de4e1e636b728346f59b54139b60eec73cc5 Mon Sep 17 00:00:00 2001 From: Stuart Marks Date: Mon, 7 Jan 2013 18:09:07 -0800 Subject: [PATCH] 7187882: TEST_BUG: java/rmi/activation/checkusage/CheckUsage.java fails intermittently Tighten up JavaVM test library API, and adjust tests to match. Reviewed-by: mchung, dmocek --- jdk/test/ProblemList.txt | 5 +-- .../ShutdownGracefully.java | 8 ++--- .../rmi/activation/checkusage/CheckUsage.java | 24 +++++--------- .../AltSecurityManager.java | 5 ++- .../rmi/registry/checkusage/CheckUsage.java | 28 ++++------------- .../java/rmi/registry/reexport/Reexport.java | 8 ++--- jdk/test/java/rmi/testlibrary/JavaVM.java | 31 +++++++++++++++---- jdk/test/java/rmi/testlibrary/RMID.java | 4 +-- .../rmi/transport/checkFQDN/CheckFQDN.java | 8 ++--- .../checkLeaseInfoLeak/CheckLeaseLeak.java | 5 ++- .../rmi/runtime/Log/4504153/Test4504153.java | 5 ++- .../runtime/Log/6409194/NoConsoleOutput.java | 5 ++- .../transport/tcp/DeadCachedConnection.java | 6 ++-- 13 files changed, 62 insertions(+), 80 deletions(-) diff --git a/jdk/test/ProblemList.txt b/jdk/test/ProblemList.txt index d2387317b5d..3aa7cfff170 100644 --- a/jdk/test/ProblemList.txt +++ b/jdk/test/ProblemList.txt @@ -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 @@ java/nio/channels/AsynchronousChannelGroup/Unbounded.java windows-amd64 # 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 diff --git a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java index 64233bfd6f1..b6ede1d316a 100644 --- a/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java +++ b/jdk/test/java/rmi/activation/Activatable/shutdownGracefully/ShutdownGracefully.java @@ -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 @@ public class ShutdownGracefully 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 @@ public class ShutdownGracefully * 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() { diff --git a/jdk/test/java/rmi/activation/checkusage/CheckUsage.java b/jdk/test/java/rmi/activation/checkusage/CheckUsage.java index 2b514e1f370..c114928d201 100644 --- a/jdk/test/java/rmi/activation/checkusage/CheckUsage.java +++ b/jdk/test/java/rmi/activation/checkusage/CheckUsage.java @@ -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 @@ import java.io.ByteArrayOutputStream; */ 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 @@ public class CheckUsage { } else { System.err.println("test passed"); } - } catch (Exception e) { TestLibrary.bomb(e); - } finally { - rmidVM.destroy(); - rmidVM = null; } } } diff --git a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java index 08d030ec876..351042965de 100644 --- a/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java +++ b/jdk/test/java/rmi/registry/altSecurityManager/AltSecurityManager.java @@ -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 @@ public class AltSecurityManager implements Runnable { } System.err.println("starting " + utilityToStart); - vm.start(); - vm.getVM().waitFor(); + vm.execute(); } catch (Exception e) { TestLibrary.bomb(e); diff --git a/jdk/test/java/rmi/registry/checkusage/CheckUsage.java b/jdk/test/java/rmi/registry/checkusage/CheckUsage.java index 19dac5b600a..88d9a900cdd 100644 --- a/jdk/test/java/rmi/registry/checkusage/CheckUsage.java +++ b/jdk/test/java/rmi/registry/checkusage/CheckUsage.java @@ -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 @@ import java.io.ByteArrayOutputStream; /** * 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 @@ public class CheckUsage { } } catch (Exception e) { TestLibrary.bomb(e); - } finally { - registryVM.destroy(); - registryVM = null; } } } diff --git a/jdk/test/java/rmi/registry/reexport/Reexport.java b/jdk/test/java/rmi/registry/reexport/Reexport.java index c209f7c55b8..3841178533e 100644 --- a/jdk/test/java/rmi/registry/reexport/Reexport.java +++ b/jdk/test/java/rmi/registry/reexport/Reexport.java @@ -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 @@ public class Reexport { 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 @@ public class Reexport { } catch (Exception whatever) { } } - private static Process subreg = null; + + private static JavaVM subreg = null; public static void killRegistry(int port) { if (Reexport.subreg != null) { diff --git a/jdk/test/java/rmi/testlibrary/JavaVM.java b/jdk/test/java/rmi/testlibrary/JavaVM.java index 6ccae911a86..c363f8e4420 100644 --- a/jdk/test/java/rmi/testlibrary/JavaVM.java +++ b/jdk/test/java/rmi/testlibrary/JavaVM.java @@ -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 @@ public class JavaVM { 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 @@ public class JavaVM { } 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 @@ public class JavaVM { 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(); } } diff --git a/jdk/test/java/rmi/testlibrary/RMID.java b/jdk/test/java/rmi/testlibrary/RMID.java index e963c45c976..8b0f3e26bd4 100644 --- a/jdk/test/java/rmi/testlibrary/RMID.java +++ b/jdk/test/java/rmi/testlibrary/RMID.java @@ -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 class RMID extends JavaVM { 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...). diff --git a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java index 9660f532c39..deceb2795f9 100644 --- a/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java +++ b/jdk/test/java/rmi/transport/checkFQDN/CheckFQDN.java @@ -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 @@ public class CheckFQDN extends UnicastRemoteObject equal = "="; } + // create a client to tell checkFQDN what its rmi name is. JavaVM jvm = new JavaVM("CheckFQDNClient", propOption + property + equal + @@ -125,10 +126,7 @@ public class CheckFQDN extends UnicastRemoteObject 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."); } diff --git a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java index 52fd7df9295..b32a8a51b0a 100644 --- a/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java +++ b/jdk/test/java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java @@ -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 @@ public class CheckLeaseLeak extends UnicastRemoteObject implements LeaseLeak { " -Drmi.registry.port=" + registryPort, ""); - jvm.start(); - if (jvm.getVM().waitFor() == 1 ) { + if (jvm.execute() != 0) { TestLibrary.bomb("Client process failed"); } } diff --git a/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java b/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java index 090718083d7..946e9a9c0ac 100644 --- a/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java +++ b/jdk/test/sun/rmi/runtime/Log/4504153/Test4504153.java @@ -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 @@ public class Test4504153 { 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(); diff --git a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java index a4104f2d268..70505fab6f2 100644 --- a/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java +++ b/jdk/test/sun/rmi/runtime/Log/6409194/NoConsoleOutput.java @@ -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 @@ public class NoConsoleOutput { 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 diff --git a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java index 7bcd5a71024..ebc92f61ef1 100644 --- a/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java +++ b/jdk/test/sun/rmi/transport/tcp/DeadCachedConnection.java @@ -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 @@ public class DeadCachedConnection { 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 @@ public class DeadCachedConnection { } catch (Exception whatever) { } } - private static Process subreg = null; + private static JavaVM subreg = null; public static void killRegistry() { if (DeadCachedConnection.subreg != null) {