1 /* 2 * Copyright (c) 2003, 2012, 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 4932837 6582235 27 * @summary Test SslRMI[Client|Server]SocketFactory equals() and hashCode(). 28 * @author Daniel Fuchs 29 * 30 * @run main SocketFactoryTest 31 */ 32 33 import java.io.PrintWriter; 34 import java.io.IOException; 35 import java.io.Serializable; 36 import java.io.ObjectInputStream; 37 import java.io.ObjectOutputStream; 38 import java.io.ByteArrayInputStream; 39 import java.io.ByteArrayOutputStream; 40 import java.util.Map; 41 import java.util.HashMap; 42 import javax.net.ssl.SSLContext; 43 import javax.rmi.ssl.SslRMIClientSocketFactory; 44 import javax.rmi.ssl.SslRMIServerSocketFactory; 45 46 public class SocketFactoryTest { 47 48 public static final String[] ciphersuite = 49 new String[] { "SSL_RSA_WITH_NULL_MD5" }; 50 51 public static final String[] protocol = 52 new String[] { "TLSv1" }; 53 54 public static class MySslRMIClientSocketFactory 55 extends SslRMIClientSocketFactory { 56 } 57 58 public static class MySslRMIServerSocketFactory 59 extends SslRMIServerSocketFactory { MySslRMIServerSocketFactory()60 public MySslRMIServerSocketFactory() { 61 super(); 62 } MySslRMIServerSocketFactory(String[] ciphers, String[] protocols, boolean need)63 public MySslRMIServerSocketFactory(String[] ciphers, 64 String[] protocols, 65 boolean need) { 66 super(ciphers, protocols, need); 67 } MySslRMIServerSocketFactory(SSLContext context, String[] ciphers, String[] protocols, boolean need)68 public MySslRMIServerSocketFactory(SSLContext context, 69 String[] ciphers, 70 String[] protocols, 71 boolean need) { 72 super(context, ciphers, protocols, need); 73 } 74 } 75 serializeAndClone(Object o)76 public static Object serializeAndClone(Object o) throws Exception { 77 System.out.println("Serializing object: " + o); 78 final ByteArrayOutputStream obytes = 79 new ByteArrayOutputStream(); 80 final ObjectOutputStream ostr = 81 new ObjectOutputStream(obytes); 82 ostr.writeObject(o); 83 ostr.flush(); 84 85 System.out.println("Deserializing object"); 86 final ByteArrayInputStream ibytes = 87 new ByteArrayInputStream(obytes.toByteArray()); 88 final ObjectInputStream istr = 89 new ObjectInputStream(ibytes); 90 return istr.readObject(); 91 } 92 testEquals(Object a, Object b, boolean expected)93 public static void testEquals(Object a, Object b, boolean expected) { 94 final boolean found = a.equals(b); 95 if (found != expected) 96 throw new RuntimeException("testEquals failed: objects are " + 97 ((found)?"equals":"not equals")); 98 if (found && a.hashCode()!=b.hashCode()) 99 throw new RuntimeException("testEquals failed: objects are " + 100 "equals but their hashcode differ"); 101 } 102 main(String[] args)103 public static void main(String[] args) { 104 try { 105 System.out.println("SocketFactoryTest START."); 106 107 final SSLContext context = SSLContext.getInstance("SSL"); 108 context.init(null, null, null); 109 110 final SslRMIClientSocketFactory client1 = 111 new SslRMIClientSocketFactory(); 112 final SslRMIClientSocketFactory client2 = 113 new SslRMIClientSocketFactory(); 114 final SslRMIClientSocketFactory client11 = 115 (SslRMIClientSocketFactory) serializeAndClone(client1); 116 final SslRMIClientSocketFactory client21 = 117 (SslRMIClientSocketFactory) serializeAndClone(client2); 118 final SslRMIServerSocketFactory server1 = 119 new SslRMIServerSocketFactory(); 120 final SslRMIServerSocketFactory server2 = 121 new SslRMIServerSocketFactory(null, 122 null, 123 false); 124 final SslRMIServerSocketFactory server3 = 125 new SslRMIServerSocketFactory(ciphersuite, 126 null, 127 false); 128 final SslRMIServerSocketFactory server4 = 129 new SslRMIServerSocketFactory(null, 130 protocol, 131 false); 132 final SslRMIServerSocketFactory server5 = 133 new SslRMIServerSocketFactory(null, 134 null, 135 true); 136 final SslRMIServerSocketFactory server6 = 137 new SslRMIServerSocketFactory(null, 138 null, 139 null, 140 false); 141 final SslRMIServerSocketFactory server7 = 142 new SslRMIServerSocketFactory(SSLContext.getDefault(), 143 null, 144 null, 145 false); 146 final SslRMIServerSocketFactory server8 = 147 new SslRMIServerSocketFactory(null, 148 null, 149 null, 150 true); 151 final SslRMIServerSocketFactory server9 = 152 new SslRMIServerSocketFactory(SSLContext.getDefault(), 153 null, 154 null, 155 true); 156 final SslRMIServerSocketFactory server10 = 157 new SslRMIServerSocketFactory(context, 158 null, 159 null, 160 true); 161 final MySslRMIClientSocketFactory subclient1 = 162 new MySslRMIClientSocketFactory(); 163 final MySslRMIClientSocketFactory subclient2 = 164 new MySslRMIClientSocketFactory(); 165 final MySslRMIServerSocketFactory subserver1 = 166 new MySslRMIServerSocketFactory(); 167 final MySslRMIServerSocketFactory subserver2 = 168 new MySslRMIServerSocketFactory(null, 169 null, 170 false); 171 final MySslRMIServerSocketFactory subserver3 = 172 new MySslRMIServerSocketFactory(ciphersuite, 173 null, 174 false); 175 final MySslRMIServerSocketFactory subserver4 = 176 new MySslRMIServerSocketFactory(null, 177 protocol, 178 false); 179 final MySslRMIServerSocketFactory subserver5 = 180 new MySslRMIServerSocketFactory(null, 181 null, 182 true); 183 final MySslRMIServerSocketFactory subserver6 = 184 new MySslRMIServerSocketFactory(null, 185 ciphersuite, 186 null, 187 false); 188 final MySslRMIServerSocketFactory subserver7 = 189 new MySslRMIServerSocketFactory(SSLContext.getDefault(), 190 ciphersuite, 191 null, 192 false); 193 final MySslRMIServerSocketFactory subserver8 = 194 new MySslRMIServerSocketFactory(context, 195 null, 196 null, 197 true); 198 199 // clients 200 System.out.println("testEquals(client1,client1,true)"); 201 testEquals(client1,client1,true); 202 System.out.println("testEquals(client1,client2,true)"); 203 testEquals(client1,client2,true); 204 System.out.println("testEquals(client1,client11,true)"); 205 testEquals(client1,client11,true); 206 System.out.println("testEquals(client1,client21,true)"); 207 testEquals(client1,client21,true); 208 System.out.println("testEquals(client11,client21,true)"); 209 testEquals(client11,client21,true); 210 System.out.println("testEquals(client1,null,false)"); 211 testEquals(client1,null,false); 212 System.out.println("testEquals(client1,server1,false)"); 213 testEquals(client1,server1,false); 214 System.out.println("testEquals(client21,server2,false)"); 215 testEquals(client21,server2,false); 216 System.out.println("testEquals(client1,new Object(),false)"); 217 testEquals(client1,new Object(),false); 218 219 // servers 220 System.out.println("testEquals(server1,server1,true)"); 221 testEquals(server1,server1,true); 222 System.out.println("testEquals(server2,server2,true)"); 223 testEquals(server2,server2,true); 224 System.out.println("testEquals(server3,server3,true)"); 225 testEquals(server3,server3,true); 226 System.out.println("testEquals(server4,server4,true)"); 227 testEquals(server4,server4,true); 228 System.out.println("testEquals(server5,server5,true)"); 229 testEquals(server5,server5,true); 230 System.out.println("testEquals(server1,server2,true)"); 231 testEquals(server1,server2,true); 232 System.out.println("testEquals(server1,server3,false)"); 233 testEquals(server1,server3,false); 234 System.out.println("testEquals(server2,server3,false)"); 235 testEquals(server2,server3,false); 236 System.out.println("testEquals(server3,server4,false)"); 237 testEquals(server3,server4,false); 238 System.out.println("testEquals(server4,server5,false)"); 239 testEquals(server4,server5,false); 240 System.out.println("testEquals(server6,server7,false)"); 241 testEquals(server6,server7,false); 242 System.out.println("testEquals(server8,server9,false)"); 243 testEquals(server8,server9,false); 244 System.out.println("testEquals(server9,server10,false)"); 245 testEquals(server9,server10,false); 246 System.out.println("testEquals(server2,server6,true)"); 247 testEquals(server2,server6,true); 248 System.out.println("testEquals(server2,server7,false)"); 249 testEquals(server2,server7,false); 250 System.out.println("testEquals(server5,server8,true)"); 251 testEquals(server5,server8,true); 252 System.out.println("testEquals(server5,server9,false)"); 253 testEquals(server5,server9,false); 254 System.out.println("testEquals(server1,null,false)"); 255 testEquals(server1,null,false); 256 System.out.println("testEquals(server2,null,false)"); 257 testEquals(server2,null,false); 258 System.out.println("testEquals(server3,null,false)"); 259 testEquals(server3,null,false); 260 System.out.println("testEquals(server1,client2,false)"); 261 testEquals(server1,client2,false); 262 System.out.println("testEquals(server2,client11,false)"); 263 testEquals(server2,client11,false); 264 System.out.println("testEquals(server1,new Object(),false)"); 265 testEquals(server1,new Object(),false); 266 267 // client subclass 268 System.out.println("testEquals(subclient1,subclient1,true)"); 269 testEquals(subclient1,subclient1,true); 270 System.out.println("testEquals(subclient1,subclient2,true)"); 271 testEquals(subclient1,subclient2,true); 272 System.out.println("testEquals(subclient1,client1,false)"); 273 testEquals(subclient1,client1,false); 274 System.out.println("testEquals(client1,subclient1,false)"); 275 testEquals(client1,subclient1,false); 276 System.out.println("testEquals(subclient1,null,false)"); 277 testEquals(subclient1,null,false); 278 System.out.println("testEquals(subclient1,server1,false)"); 279 testEquals(subclient1,server1,false); 280 System.out.println("testEquals(server1,subclient1,false)"); 281 testEquals(server1,subclient1,false); 282 System.out.println("testEquals(subclient2,subserver2,false)"); 283 testEquals(subclient1,subserver2,false); 284 System.out.println("testEquals(subclient1,new Object(),false)"); 285 testEquals(subclient1,new Object(),false); 286 287 // server subclass 288 System.out.println("testEquals(subserver1,subserver1,true)"); 289 testEquals(subserver1,subserver1,true); 290 System.out.println("testEquals(subserver2,subserver2,true)"); 291 testEquals(subserver2,subserver2,true); 292 System.out.println("testEquals(subserver3,subserver3,true)"); 293 testEquals(subserver3,subserver3,true); 294 System.out.println("testEquals(subserver4,subserver4,true)"); 295 testEquals(subserver4,subserver4,true); 296 System.out.println("testEquals(subserver5,subserver5,true)"); 297 testEquals(subserver5,subserver5,true); 298 System.out.println("testEquals(subserver1,subserver2,true)"); 299 testEquals(subserver1,subserver2,true); 300 System.out.println("testEquals(subserver1,subserver3,false)"); 301 testEquals(subserver1,subserver3,false); 302 System.out.println("testEquals(subserver2,subserver3,false)"); 303 testEquals(subserver2,subserver3,false); 304 System.out.println("testEquals(subserver3,subserver4,false)"); 305 testEquals(subserver3,subserver4,false); 306 System.out.println("testEquals(subserver4,subserver5,false)"); 307 testEquals(subserver4,subserver5,false); 308 System.out.println("testEquals(subserver3,subserver6,true)"); 309 testEquals(subserver3,subserver6,true); 310 System.out.println("testEquals(subserver3,subserver7,false)"); 311 testEquals(subserver3,subserver7,false); 312 System.out.println("testEquals(subserver1,server1,false)"); 313 testEquals(subserver1,server1,false); 314 System.out.println("testEquals(server1,subserver1,false)"); 315 testEquals(server1,subserver1,false); 316 System.out.println("testEquals(subserver2,server2,false)"); 317 testEquals(subserver2,server2,false); 318 System.out.println("testEquals(server2,subserver2,false)"); 319 testEquals(server2,subserver2,false); 320 System.out.println("testEquals(subserver3,server3,false)"); 321 testEquals(subserver3,server3,false); 322 System.out.println("testEquals(server3,subserver3,false)"); 323 testEquals(server3,subserver3,false); 324 System.out.println("testEquals(subserver4,server4,false)"); 325 testEquals(subserver4,server4,false); 326 System.out.println("testEquals(server4,subserver4,false)"); 327 testEquals(server4,subserver4,false); 328 System.out.println("testEquals(subserver5,server5,false)"); 329 testEquals(subserver5,server5,false); 330 System.out.println("testEquals(server5,subserver5,false)"); 331 testEquals(server5,subserver5,false); 332 System.out.println("testEquals(server10,subserver8,false)"); 333 testEquals(server10,subserver8,false); 334 System.out.println("testEquals(subserver8,server10,false)"); 335 testEquals(subserver8,server10,false); 336 System.out.println("testEquals(subserver1,null,false)"); 337 testEquals(subserver1,null,false); 338 System.out.println("testEquals(subserver1,client2,false)"); 339 testEquals(subserver1,client2,false); 340 System.out.println("testEquals(subserver1,subclient2,false)"); 341 testEquals(subserver1,subclient2,false); 342 System.out.println("testEquals(client1,subserver2,false)"); 343 testEquals(client1,subserver2,false); 344 System.out.println("testEquals(subserver1,new Object(),false)"); 345 testEquals(subserver1,new Object(),false); 346 347 System.out.println("SocketFactoryTest PASSED."); 348 } catch (Exception x) { 349 System.out.println("SocketFactoryTest FAILED: " + x); 350 x.printStackTrace(); 351 System.exit(1); 352 } 353 } 354 } 355