1 /* 2 * Copyright (c) 1998, 2014, 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 /* @test 25 * @bug 4115696 26 27 * @summary synopsis: cannot use socket factories with Activatable objects 28 * @author Ann Wollrath 29 * 30 * @library ../../../../testlibrary 31 * @build TestLibrary Echo EchoImpl EchoImpl_Stub 32 * @run main/othervm/policy=security.policy/timeout=360 UseCustomSocketFactory 33 */ 34 35 import java.io.*; 36 import java.net.MalformedURLException; 37 import java.rmi.*; 38 import java.rmi.registry.*; 39 40 public class UseCustomSocketFactory { 41 static final int REGISTRY_PORT = TestLibrary.getUnusedRandomPort(); 42 43 static String[] protocol = new String[] { "", "compress", "xor" }; 44 45 public static void main(String[] args) { 46 47 System.out.println("\nRegression test for bug 4115696\n"); 48 49 TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager"); 50 51 try { 52 LocateRegistry.createRegistry(REGISTRY_PORT); 53 } catch (RemoteException e) { 54 TestLibrary.bomb("creating registry", e); 55 } 56 57 RMID rmid = null; 58 59 try { 60 rmid = RMID.createRMID(); 61 rmid.addArguments(new String[] { 62 "-C-Djava.security.policy=" + 63 TestParams.defaultGroupPolicy + 64 " -C-Djava.security.manager=java.rmi.RMISecurityManager "}); 65 rmid.start(); 66 67 Echo[] echo = spawnAndTest(rmid.getPort()); 68 reactivateAndTest(echo); 69 } catch (IOException e) { 70 TestLibrary.bomb("creating rmid", e); 71 } finally { 72 if (rmid != null) 73 rmid.destroy(); 74 } 75 } 76 77 private static Echo[] spawnAndTest(int rmidPort) { 78 79 System.err.println("\nCreate Test-->"); 80 81 Echo[] echo = new Echo[protocol.length]; 82 83 for (int i = 0; i < protocol.length; i++) { 84 JavaVM serverVM = new JavaVM("EchoImpl", 85 "-Djava.security.policy=" + 86 TestParams.defaultPolicy + 87 " -Drmi.registry.port=" + 88 REGISTRY_PORT + 89 " -Djava.rmi.activation.port=" + 90 rmidPort, 91 protocol[i]); 92 93 System.err.println("\nusing protocol: " + 94 ("".equals(protocol[i]) ? "none" : protocol[i])); 95 96 try { 97 /* spawn VM for EchoServer */ 98 serverVM.start(); 99 100 /* lookup server */ 101 echo[i] = null; 102 // 24 seconds timeout 103 long stopTime = System.currentTimeMillis() + 24000; 104 do { 105 try { 106 echo[i] = (Echo) Naming.lookup("//:" + REGISTRY_PORT + 107 "/EchoServer"); 108 break; 109 } catch (NotBoundException e) { 110 try { 111 Thread.sleep(200); 112 } catch (InterruptedException ignore) { 113 } 114 } 115 } while (System.currentTimeMillis() < stopTime); 116 117 if (echo[i] == null) 118 TestLibrary.bomb("server not bound in 120 tries", null); 119 120 /* invoke remote method and print result*/ 121 System.err.println("Bound to " + echo[i]); 122 byte[] data = ("Greetings, citizen " + 123 System.getProperty("user.name") + "!"). getBytes(); 124 byte[] result = echo[i].echoNot(data); 125 for (int j = 0; j < result.length; j++) 126 result[j] = (byte) ~result[j]; 127 System.err.println("Result: " + new String(result)); 128 echo[i].shutdown(); 129 130 } catch (Exception e) { 131 TestLibrary.bomb("test failed", e); 132 133 } finally { 134 serverVM.destroy(); 135 try { 136 Naming.unbind("//:" + REGISTRY_PORT + "/EchoServer"); 137 } catch (RemoteException | NotBoundException | MalformedURLException e) { 138 TestLibrary.bomb("unbinding EchoServer", e); 139 } 140 } 141 } 142 return echo; 143 } 144 145 146 private static void reactivateAndTest(Echo[] echo) { 147 148 System.err.println("\nReactivate Test-->"); 149 150 for (int i = 0; i < echo.length; i++) { 151 try { 152 System.err.println("\nusing protocol: " + 153 ("".equals(protocol[i]) ? "none" : protocol[i])); 154 byte[] data = ("Greetings, citizen " + 155 System.getProperty("user.name") + "!").getBytes(); 156 byte[] result = echo[i].echoNot(data); 157 for (int j = 0; j < result.length; j++) 158 result[j] = (byte) ~result[j]; 159 System.err.println("Result: " + new String(result)); 160 echo[i].shutdown(); 161 } catch (Exception e) { 162 TestLibrary.bomb("activating EchoServer for protocol " + protocol[i], e); 163 } 164 } 165 } 166 }