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