1 /* 2 * Copyright (c) 2005, 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 26 * @bug 6238815 27 * @summary test the new interface Addressable 28 * @author Shanliang JIANG 29 * 30 * @run clean AddressableTest 31 * @run build AddressableTest 32 * @run main AddressableTest 33 */ 34 35 import java.util.*; 36 import java.net.MalformedURLException; 37 import java.io.IOException; 38 39 import javax.management.*; 40 import javax.management.remote.*; 41 import javax.management.remote.rmi.*; 42 43 public class AddressableTest { 44 private static final String[] protocols = {"rmi", "iiop"}; 45 private static final String[] prefixes = {"stub", "ior"}; 46 47 private static final MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 48 isProtocolSupported(String protocol)49 private static boolean isProtocolSupported(String protocol) { 50 if (protocol.equals("rmi")) 51 return true; 52 if (protocol.equals("iiop")) { 53 try { 54 Class.forName("javax.management.remote.rmi._RMIConnectionImpl_Tie"); 55 return true; 56 } catch (ClassNotFoundException x) { } 57 } 58 return false; 59 } 60 main(String[] args)61 public static void main(String[] args) throws Exception { 62 System.out.println(">>> test the new interface Addressable."); 63 boolean ok = true; 64 65 for (int i = 0; i < protocols.length; i++) { 66 String protocol = protocols[i]; 67 if (isProtocolSupported(protocol)) { 68 try { 69 test(protocol, prefixes[i]); 70 System.out.println(">>> Test successed for "+protocols[i]); 71 } catch (Exception e) { 72 System.out.println(">>> Test failed for "+protocols[i]); 73 e.printStackTrace(System.out); 74 ok = false; 75 } 76 } else { 77 System.out.format(">>> Test skipped for %s, protocol not supported%n", 78 protocol); 79 } 80 } 81 82 if (ok) { 83 System.out.println(">>> All Test passed."); 84 } else { 85 System.out.println(">>> Some TESTs FAILED"); 86 throw new RuntimeException("See log for details"); 87 } 88 } 89 test(String proto, String prefix)90 public static void test(String proto, String prefix) throws Exception { 91 JMXServiceURL url = new JMXServiceURL("service:jmx:" + proto + "://"); 92 JMXConnectorServer server = 93 JMXConnectorServerFactory.newJMXConnectorServer(url, null, mbs); 94 95 server.start(); 96 97 JMXServiceURL serverAddr1 = server.getAddress(); 98 System.out.println(">>> Created a server with address "+serverAddr1); 99 100 JMXConnector client1 = JMXConnectorFactory.connect(serverAddr1); 101 JMXServiceURL clientAddr1 = ((JMXAddressable)client1).getAddress(); 102 103 System.out.println(">>> Created a client with address "+clientAddr1); 104 105 if (!serverAddr1.equals(clientAddr1)) { 106 throw new RuntimeException("The "+proto+" client does not return correct address."); 107 } 108 109 int i = clientAddr1.toString().indexOf(prefix); 110 111 JMXServiceURL clientAddr2 = 112 new JMXServiceURL("service:jmx:"+proto+":///"+clientAddr1.toString().substring(i)); 113 114 JMXConnector client2 = JMXConnectorFactory.connect(clientAddr2); 115 116 System.out.println(">>> Created a client with address "+clientAddr2); 117 118 if (!clientAddr2.equals(((JMXAddressable)client2).getAddress())) { 119 throw new RuntimeException("The "+proto+" client does not return correct address."); 120 } 121 122 System.out.println(">>> The new client's host is "+clientAddr2.getHost() 123 +", port is "+clientAddr2.getPort()); 124 125 client1.close(); 126 client2.close(); 127 server.stop(); 128 } 129 } 130