SocketFactoryTest.java revision 9330:8b1f1c2a400f
1226586Sdim/*
2226586Sdim * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
3226586Sdim * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4226586Sdim *
5226586Sdim * This code is free software; you can redistribute it and/or modify it
6226586Sdim * under the terms of the GNU General Public License version 2 only, as
7226586Sdim * published by the Free Software Foundation.
8226586Sdim *
9226586Sdim * This code is distributed in the hope that it will be useful, but WITHOUT
10226586Sdim * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11226586Sdim * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12226586Sdim * version 2 for more details (a copy is included in the LICENSE file that
13226586Sdim * accompanied this code).
14226586Sdim *
15226586Sdim * You should have received a copy of the GNU General Public License version
16226586Sdim * 2 along with this work; if not, write to the Free Software Foundation,
17226586Sdim * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18226586Sdim *
19226586Sdim * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20226586Sdim * or visit www.oracle.com if you need additional information or have any
21226586Sdim * questions.
22226586Sdim */
23226586Sdim
24226586Sdim/*
25226586Sdim * @test
26226586Sdim * @bug 4932837 6582235
27226586Sdim * @summary Test SslRMI[Client|Server]SocketFactory equals() and hashCode().
28226586Sdim *          This test does not affect VM global state, so othervm is
29226586Sdim *          not required.
30226586Sdim * @author Daniel Fuchs
31226586Sdim *
32226586Sdim * @run main SocketFactoryTest
33226586Sdim */
34226586Sdim
35226586Sdimimport java.io.PrintWriter;
36226586Sdimimport java.io.IOException;
37226586Sdimimport java.io.Serializable;
38226586Sdimimport java.io.ObjectInputStream;
39226586Sdimimport java.io.ObjectOutputStream;
40226586Sdimimport java.io.ByteArrayInputStream;
41226586Sdimimport java.io.ByteArrayOutputStream;
42226586Sdimimport java.util.Map;
43226586Sdimimport java.util.HashMap;
44226586Sdimimport javax.net.ssl.SSLContext;
45226586Sdimimport javax.rmi.ssl.SslRMIClientSocketFactory;
46226586Sdimimport javax.rmi.ssl.SslRMIServerSocketFactory;
47226586Sdim
48226586Sdimpublic class SocketFactoryTest {
49226586Sdim
50226586Sdim    public static final String[] ciphersuite =
51226586Sdim        new String[] { "SSL_RSA_WITH_NULL_MD5" };
52226586Sdim
53226586Sdim    public static final String[] protocol =
54226586Sdim        new String[] { "TLSv1" };
55226586Sdim
56226586Sdim    public static class MySslRMIClientSocketFactory
57226586Sdim        extends SslRMIClientSocketFactory {
58226586Sdim    }
59226586Sdim
60226586Sdim    public static class MySslRMIServerSocketFactory
61226586Sdim        extends SslRMIServerSocketFactory {
62226586Sdim        public MySslRMIServerSocketFactory() {
63226586Sdim            super();
64226586Sdim        }
65226586Sdim        public MySslRMIServerSocketFactory(String[] ciphers,
66226586Sdim                                           String[] protocols,
67226586Sdim                                           boolean need) {
68226586Sdim            super(ciphers, protocols, need);
69226586Sdim        }
70226586Sdim        public MySslRMIServerSocketFactory(SSLContext context,
71226586Sdim                                           String[] ciphers,
72226586Sdim                                           String[] protocols,
73226586Sdim                                           boolean need) {
74226586Sdim            super(context, ciphers, protocols, need);
75226586Sdim        }
76226586Sdim    }
77226586Sdim
78226586Sdim    public static Object serializeAndClone(Object o) throws Exception {
79226586Sdim        System.out.println("Serializing object: " + o);
80226586Sdim        final ByteArrayOutputStream obytes =
81226586Sdim            new ByteArrayOutputStream();
82226586Sdim        final ObjectOutputStream ostr =
83226586Sdim            new ObjectOutputStream(obytes);
84226586Sdim        ostr.writeObject(o);
85226586Sdim        ostr.flush();
86226586Sdim
87226586Sdim        System.out.println("Deserializing object");
88226586Sdim        final ByteArrayInputStream ibytes =
89226586Sdim            new ByteArrayInputStream(obytes.toByteArray());
90226586Sdim        final ObjectInputStream istr =
91226586Sdim            new ObjectInputStream(ibytes);
92226586Sdim        return istr.readObject();
93226586Sdim    }
94226586Sdim
95226586Sdim    public static void testEquals(Object a, Object b, boolean expected) {
96226586Sdim        final boolean found = a.equals(b);
97226586Sdim        if (found != expected)
98226586Sdim            throw new RuntimeException("testEquals failed: objects are " +
99226586Sdim                                       ((found)?"equals":"not equals"));
100226586Sdim        if (found && a.hashCode()!=b.hashCode())
101226586Sdim            throw new RuntimeException("testEquals failed: objects are " +
102226586Sdim                                       "equals but their hashcode differ");
103226586Sdim    }
104226586Sdim
105226586Sdim    public static void main(String[] args) {
106226586Sdim        try {
107226586Sdim            System.out.println("SocketFactoryTest START.");
108226586Sdim
109226586Sdim            final SSLContext context = SSLContext.getInstance("SSL");
110226586Sdim            context.init(null, null, null);
111226586Sdim
112226586Sdim            final SslRMIClientSocketFactory client1 =
113226586Sdim                new SslRMIClientSocketFactory();
114226586Sdim            final SslRMIClientSocketFactory client2 =
115226586Sdim                new SslRMIClientSocketFactory();
116226586Sdim            final SslRMIClientSocketFactory client11 =
117226586Sdim                (SslRMIClientSocketFactory) serializeAndClone(client1);
118226586Sdim            final SslRMIClientSocketFactory client21 =
119226586Sdim                (SslRMIClientSocketFactory) serializeAndClone(client2);
120226586Sdim            final SslRMIServerSocketFactory server1 =
121226586Sdim                new SslRMIServerSocketFactory();
122226586Sdim            final SslRMIServerSocketFactory server2 =
123226586Sdim                new SslRMIServerSocketFactory(null,
124226586Sdim                                              null,
125226586Sdim                                              false);
126226586Sdim            final SslRMIServerSocketFactory server3 =
127226586Sdim                new SslRMIServerSocketFactory(ciphersuite,
128226586Sdim                                              null,
129226586Sdim                                              false);
130226586Sdim            final SslRMIServerSocketFactory server4 =
131226586Sdim                new SslRMIServerSocketFactory(null,
132226586Sdim                                              protocol,
133226586Sdim                                              false);
134226586Sdim            final SslRMIServerSocketFactory server5 =
135226586Sdim                new SslRMIServerSocketFactory(null,
136226586Sdim                                              null,
137226586Sdim                                              true);
138226586Sdim            final SslRMIServerSocketFactory server6 =
139226586Sdim                new SslRMIServerSocketFactory(null,
140226586Sdim                                              null,
141226586Sdim                                              null,
142226586Sdim                                              false);
143226586Sdim            final SslRMIServerSocketFactory server7 =
144226586Sdim                new SslRMIServerSocketFactory(SSLContext.getDefault(),
145226586Sdim                                              null,
146226586Sdim                                              null,
147226586Sdim                                              false);
148226586Sdim            final SslRMIServerSocketFactory server8 =
149226586Sdim                new SslRMIServerSocketFactory(null,
150226586Sdim                                              null,
151226586Sdim                                              null,
152226586Sdim                                              true);
153226586Sdim            final SslRMIServerSocketFactory server9 =
154226586Sdim                new SslRMIServerSocketFactory(SSLContext.getDefault(),
155226586Sdim                                              null,
156226586Sdim                                              null,
157226586Sdim                                              true);
158226586Sdim            final SslRMIServerSocketFactory server10 =
159226586Sdim                new SslRMIServerSocketFactory(context,
160226586Sdim                                              null,
161234353Sdim                                              null,
162234353Sdim                                              true);
163234353Sdim            final MySslRMIClientSocketFactory subclient1 =
164234353Sdim                new MySslRMIClientSocketFactory();
165234353Sdim            final MySslRMIClientSocketFactory subclient2 =
166234353Sdim                new MySslRMIClientSocketFactory();
167234353Sdim            final MySslRMIServerSocketFactory subserver1 =
168234353Sdim                new MySslRMIServerSocketFactory();
169234353Sdim            final MySslRMIServerSocketFactory subserver2 =
170234353Sdim                new MySslRMIServerSocketFactory(null,
171234353Sdim                                                null,
172234353Sdim                                                false);
173234353Sdim            final MySslRMIServerSocketFactory subserver3 =
174234353Sdim                new MySslRMIServerSocketFactory(ciphersuite,
175234353Sdim                                                null,
176234353Sdim                                                false);
177234353Sdim            final MySslRMIServerSocketFactory subserver4 =
178234353Sdim                new MySslRMIServerSocketFactory(null,
179234353Sdim                                                protocol,
180234353Sdim                                                false);
181234353Sdim            final MySslRMIServerSocketFactory subserver5 =
182234353Sdim                new MySslRMIServerSocketFactory(null,
183234353Sdim                                                null,
184234353Sdim                                                true);
185234353Sdim            final MySslRMIServerSocketFactory subserver6 =
186234353Sdim                new MySslRMIServerSocketFactory(null,
187234353Sdim                                                ciphersuite,
188234353Sdim                                                null,
189234353Sdim                                                false);
190234353Sdim            final MySslRMIServerSocketFactory subserver7 =
191234353Sdim                new MySslRMIServerSocketFactory(SSLContext.getDefault(),
192234353Sdim                                                ciphersuite,
193234353Sdim                                                null,
194234353Sdim                                                false);
195234353Sdim            final MySslRMIServerSocketFactory subserver8 =
196234353Sdim                new MySslRMIServerSocketFactory(context,
197234353Sdim                                                null,
198234353Sdim                                                null,
199234353Sdim                                                true);
200234353Sdim
201234353Sdim            // clients
202234353Sdim            System.out.println("testEquals(client1,client1,true)");
203234353Sdim            testEquals(client1,client1,true);
204234353Sdim            System.out.println("testEquals(client1,client2,true)");
205            testEquals(client1,client2,true);
206            System.out.println("testEquals(client1,client11,true)");
207            testEquals(client1,client11,true);
208            System.out.println("testEquals(client1,client21,true)");
209            testEquals(client1,client21,true);
210            System.out.println("testEquals(client11,client21,true)");
211            testEquals(client11,client21,true);
212            System.out.println("testEquals(client1,null,false)");
213            testEquals(client1,null,false);
214            System.out.println("testEquals(client1,server1,false)");
215            testEquals(client1,server1,false);
216            System.out.println("testEquals(client21,server2,false)");
217            testEquals(client21,server2,false);
218            System.out.println("testEquals(client1,new Object(),false)");
219            testEquals(client1,new Object(),false);
220
221            // servers
222            System.out.println("testEquals(server1,server1,true)");
223            testEquals(server1,server1,true);
224            System.out.println("testEquals(server2,server2,true)");
225            testEquals(server2,server2,true);
226            System.out.println("testEquals(server3,server3,true)");
227            testEquals(server3,server3,true);
228            System.out.println("testEquals(server4,server4,true)");
229            testEquals(server4,server4,true);
230            System.out.println("testEquals(server5,server5,true)");
231            testEquals(server5,server5,true);
232            System.out.println("testEquals(server1,server2,true)");
233            testEquals(server1,server2,true);
234            System.out.println("testEquals(server1,server3,false)");
235            testEquals(server1,server3,false);
236            System.out.println("testEquals(server2,server3,false)");
237            testEquals(server2,server3,false);
238            System.out.println("testEquals(server3,server4,false)");
239            testEquals(server3,server4,false);
240            System.out.println("testEquals(server4,server5,false)");
241            testEquals(server4,server5,false);
242            System.out.println("testEquals(server6,server7,false)");
243            testEquals(server6,server7,false);
244            System.out.println("testEquals(server8,server9,false)");
245            testEquals(server8,server9,false);
246            System.out.println("testEquals(server9,server10,false)");
247            testEquals(server9,server10,false);
248            System.out.println("testEquals(server2,server6,true)");
249            testEquals(server2,server6,true);
250            System.out.println("testEquals(server2,server7,false)");
251            testEquals(server2,server7,false);
252            System.out.println("testEquals(server5,server8,true)");
253            testEquals(server5,server8,true);
254            System.out.println("testEquals(server5,server9,false)");
255            testEquals(server5,server9,false);
256            System.out.println("testEquals(server1,null,false)");
257            testEquals(server1,null,false);
258            System.out.println("testEquals(server2,null,false)");
259            testEquals(server2,null,false);
260            System.out.println("testEquals(server3,null,false)");
261            testEquals(server3,null,false);
262            System.out.println("testEquals(server1,client2,false)");
263            testEquals(server1,client2,false);
264            System.out.println("testEquals(server2,client11,false)");
265            testEquals(server2,client11,false);
266            System.out.println("testEquals(server1,new Object(),false)");
267            testEquals(server1,new Object(),false);
268
269            // client subclass
270            System.out.println("testEquals(subclient1,subclient1,true)");
271            testEquals(subclient1,subclient1,true);
272            System.out.println("testEquals(subclient1,subclient2,true)");
273            testEquals(subclient1,subclient2,true);
274            System.out.println("testEquals(subclient1,client1,false)");
275            testEquals(subclient1,client1,false);
276            System.out.println("testEquals(client1,subclient1,false)");
277            testEquals(client1,subclient1,false);
278            System.out.println("testEquals(subclient1,null,false)");
279            testEquals(subclient1,null,false);
280            System.out.println("testEquals(subclient1,server1,false)");
281            testEquals(subclient1,server1,false);
282            System.out.println("testEquals(server1,subclient1,false)");
283            testEquals(server1,subclient1,false);
284            System.out.println("testEquals(subclient2,subserver2,false)");
285            testEquals(subclient1,subserver2,false);
286            System.out.println("testEquals(subclient1,new Object(),false)");
287            testEquals(subclient1,new Object(),false);
288
289            // server subclass
290            System.out.println("testEquals(subserver1,subserver1,true)");
291            testEquals(subserver1,subserver1,true);
292            System.out.println("testEquals(subserver2,subserver2,true)");
293            testEquals(subserver2,subserver2,true);
294            System.out.println("testEquals(subserver3,subserver3,true)");
295            testEquals(subserver3,subserver3,true);
296            System.out.println("testEquals(subserver4,subserver4,true)");
297            testEquals(subserver4,subserver4,true);
298            System.out.println("testEquals(subserver5,subserver5,true)");
299            testEquals(subserver5,subserver5,true);
300            System.out.println("testEquals(subserver1,subserver2,true)");
301            testEquals(subserver1,subserver2,true);
302            System.out.println("testEquals(subserver1,subserver3,false)");
303            testEquals(subserver1,subserver3,false);
304            System.out.println("testEquals(subserver2,subserver3,false)");
305            testEquals(subserver2,subserver3,false);
306            System.out.println("testEquals(subserver3,subserver4,false)");
307            testEquals(subserver3,subserver4,false);
308            System.out.println("testEquals(subserver4,subserver5,false)");
309            testEquals(subserver4,subserver5,false);
310            System.out.println("testEquals(subserver3,subserver6,true)");
311            testEquals(subserver3,subserver6,true);
312            System.out.println("testEquals(subserver3,subserver7,false)");
313            testEquals(subserver3,subserver7,false);
314            System.out.println("testEquals(subserver1,server1,false)");
315            testEquals(subserver1,server1,false);
316            System.out.println("testEquals(server1,subserver1,false)");
317            testEquals(server1,subserver1,false);
318            System.out.println("testEquals(subserver2,server2,false)");
319            testEquals(subserver2,server2,false);
320            System.out.println("testEquals(server2,subserver2,false)");
321            testEquals(server2,subserver2,false);
322            System.out.println("testEquals(subserver3,server3,false)");
323            testEquals(subserver3,server3,false);
324            System.out.println("testEquals(server3,subserver3,false)");
325            testEquals(server3,subserver3,false);
326            System.out.println("testEquals(subserver4,server4,false)");
327            testEquals(subserver4,server4,false);
328            System.out.println("testEquals(server4,subserver4,false)");
329            testEquals(server4,subserver4,false);
330            System.out.println("testEquals(subserver5,server5,false)");
331            testEquals(subserver5,server5,false);
332            System.out.println("testEquals(server5,subserver5,false)");
333            testEquals(server5,subserver5,false);
334            System.out.println("testEquals(server10,subserver8,false)");
335            testEquals(server10,subserver8,false);
336            System.out.println("testEquals(subserver8,server10,false)");
337            testEquals(subserver8,server10,false);
338            System.out.println("testEquals(subserver1,null,false)");
339            testEquals(subserver1,null,false);
340            System.out.println("testEquals(subserver1,client2,false)");
341            testEquals(subserver1,client2,false);
342            System.out.println("testEquals(subserver1,subclient2,false)");
343            testEquals(subserver1,subclient2,false);
344            System.out.println("testEquals(client1,subserver2,false)");
345            testEquals(client1,subserver2,false);
346            System.out.println("testEquals(subserver1,new Object(),false)");
347            testEquals(subserver1,new Object(),false);
348
349            System.out.println("SocketFactoryTest PASSED.");
350        } catch (Exception x) {
351            System.out.println("SocketFactoryTest FAILED: " + x);
352            x.printStackTrace();
353            System.exit(1);
354        }
355    }
356}
357