1 /* 2 * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test CloseUnconnectedTest.java 1.1 03/08/28 26 * @bug 1234567 27 * @summary Open, connect then close multi-connectors. 28 * @author Shanliang JIANG 29 * @modules java.management 30 * @run clean MultiOpenCloseTest 31 * @run build MultiOpenCloseTest 32 * @run main MultiOpenCloseTest 33 */ 34 35 /* 36 * Test that we can create a connection, call connect() on it, 37 * then close it without anything surprising happening. 38 */ 39 40 import java.net.MalformedURLException; 41 import java.io.IOException; 42 43 import javax.management.*; 44 import javax.management.remote.*; 45 46 public class MultiOpenCloseTest { 47 private static final String[] protocols = {"rmi", "iiop", "jmxmp"}; 48 private static final MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 49 50 public static void main(String[] args) { 51 System.out.println("Open, connect then close multi-connectors."); 52 53 boolean ok = true; 54 for (int i = 0; i < protocols.length; i++) { 55 try { 56 if (!test(protocols[i])) { 57 System.out.println("Test failed for " + protocols[i]); 58 ok = false; 59 } else { 60 System.out.println("Test successed for " + protocols[i]); 61 } 62 } catch (Exception e) { 63 System.out.println("Test failed for " + protocols[i]); 64 e.printStackTrace(System.out); 65 ok = false; 66 } 67 } 68 69 if (ok) { 70 System.out.println("Test passed"); 71 return; 72 } else { 73 System.out.println("TEST FAILED"); 74 System.exit(1); 75 } 76 } 77 78 private static boolean test(String proto) 79 throws Exception { 80 System.out.println("Test for protocol " + proto); 81 JMXServiceURL u = new JMXServiceURL(proto, null, 0); 82 JMXConnectorServer s; 83 try { 84 s = JMXConnectorServerFactory.newJMXConnectorServer(u, null, mbs); 85 } catch (MalformedURLException e) { 86 System.out.println("Skipping unsupported URL " + u); 87 return true; 88 } 89 s.start(); 90 JMXServiceURL a = s.getAddress(); 91 92 final int MAX_ITERS = 10; 93 System.out.println("Looping for " + MAX_ITERS + "iterations..."); 94 95 for (int i=0; i<MAX_ITERS; i++) { 96 JMXConnector c = JMXConnectorFactory.newJMXConnector(a, null); 97 c.connect(null); 98 c.close(); 99 } 100 101 JMXConnector[] cs = new JMXConnector[MAX_ITERS]; 102 for (int i=0; i<MAX_ITERS; i++) { 103 cs[i] = JMXConnectorFactory.newJMXConnector(a, null); 104 cs[i].connect(null); 105 } 106 107 for (int i=0; i<MAX_ITERS; i++) { 108 cs[i].close(); 109 } 110 111 try { 112 Thread.sleep(100); 113 } catch (Exception ee) { 114 // should not 115 } 116 117 // check state 118 for (int i=0; i<MAX_ITERS; i++) { 119 try { 120 cs[i].getMBeanServerConnection(null); 121 // no exception 122 System.out.println("Did not get an IOException as expected, failed to close a client."); 123 return false; 124 } catch (IOException ioe) { 125 // as expected 126 } 127 } 128 129 s.stop(); 130 return true; 131 } 132 }