blob: 7fbcd7f30188fdf96082b6bb3d05e396740f3fd9 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998-1999 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any 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 Echo
32 * @build EchoImpl
33 * @build EchoImpl_Stub
34 * @build UseCustomSocketFactory
35 * @run main/othervm/policy=security.policy/timeout=360 UseCustomSocketFactory
36 */
37
38import java.io.*;
39import java.rmi.*;
40import java.rmi.activation.*;
41import java.rmi.server.*;
42import java.rmi.registry.*;
43
44public class UseCustomSocketFactory {
45
46 final static int REGISTRY_PORT = 2006;
47 static String[] protocol = new String[] { "", "compress", "xor" };
48
49 public static void main(String[] args) {
50
51 System.out.println("\nRegression test for bug 4115696\n");
52
53 TestLibrary.suggestSecurityManager("java.rmi.RMISecurityManager");
54
55 try {
56 LocateRegistry.createRegistry(REGISTRY_PORT);
57 } catch (Exception e) {
58 TestLibrary.bomb("creating registry", e);
59 }
60
61 RMID rmid = null;
62
63 try {
64 rmid = RMID.createRMID(true);
65 rmid.addArguments(new String[] {
66 "-C-Djava.security.policy=" +
67 TestParams.defaultGroupPolicy +
68 " -C-Djava.security.manager=java.rmi.RMISecurityManager "});
69 rmid.start();
70
71 Echo[] echo = spawnAndTest();
72 reactivateAndTest(echo);
73 } catch (IOException e) {
74 TestLibrary.bomb("creating rmid", e);
75 } finally {
76 if (rmid != null)
77 rmid.destroy();
78 }
79 }
80
81 private static Echo[] spawnAndTest() {
82
83 System.err.println("\nCreate Test-->");
84
85 Echo[] echo = new Echo[protocol.length];
86
87 for (int i = 0; i < protocol.length; i++) {
88
89 JavaVM serverVM = new JavaVM("EchoImpl",
90 "-Djava.security.policy=" +
91 TestParams.defaultPolicy,
92 protocol[i]);
93
94 System.err.println("\nusing protocol: " +
95 (protocol[i] == "" ? "none" : protocol[i]));
96
97 try {
98 /* spawn VM for EchoServer */
99 serverVM.start();
100
101 /* lookup server */
102 int tries = 12; // need enough tries for slow machine.
103 echo[i] = null;
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(2000);
112 } catch (Exception ignore) {
113 }
114 continue;
115 }
116 } while (--tries > 0);
117
118 if (echo[i] == null)
119 TestLibrary.bomb("server not bound in 12 tries", null);
120
121 /* invoke remote method and print result*/
122 System.err.println("Bound to " + echo[i]);
123 byte[] data = ("Greetings, citizen " +
124 System.getProperty("user.name") + "!"). getBytes();
125 byte[] result = echo[i].echoNot(data);
126 for (int j = 0; j < result.length; j++)
127 result[j] = (byte) ~result[j];
128 System.err.println("Result: " + new String(result));
129 echo[i].shutdown();
130
131 } catch (Exception e) {
132 TestLibrary.bomb("test failed", e);
133
134 } finally {
135 serverVM.destroy();
136 try {
137 Naming.unbind("//:" + REGISTRY_PORT + "/EchoServer");
138 } catch (Exception e) {
139 TestLibrary.bomb("unbinding EchoServer", e);
140
141 }
142 }
143 }
144 return echo;
145 }
146
147
148 private static void reactivateAndTest(Echo[] echo) {
149
150 System.err.println("\nReactivate Test-->");
151
152 for (int i = 0; i < echo.length; i++) {
153 try {
154 System.err.println("\nusing protocol: " +
155 (protocol[i] == "" ? "none" : protocol[i]));
156 byte[] data = ("Greetings, citizen " +
157 System.getProperty("user.name") + "!").getBytes();
158 byte[] result = echo[i].echoNot(data);
159 for (int j = 0; j < result.length; j++)
160 result[j] = (byte) ~result[j];
161 System.err.println("Result: " + new String(result));
162 echo[i].shutdown();
163 } catch (Exception e) {
164 TestLibrary.bomb("activating EchoServer for protocol " + protocol[i], e);
165 }
166 }
167 }
168}