1 8 package org.codehaus.spice.netserve.connection.impl; 9 10 import java.net.Socket ; 11 import java.net.InetAddress ; 12 import java.net.InetSocketAddress ; 13 import java.net.ServerSocket ; 14 import java.nio.channels.ServerSocketChannel ; 15 import java.util.Random ; 16 17 import junit.framework.TestCase; 18 19 24 public class DefaultAcceptorManagerTestCase 25 extends TestCase 26 { 27 public void testConnectAndDisconnectWithTimeoutNotSet() 28 throws Exception 29 { 30 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 31 manager.setMonitor( NullAcceptorMonitor.MONITOR ); 32 manager.setSoTimeout( 10 ); 33 manager.setShutdownTimeout( 0 ); 34 final String name = "name"; 35 assertEquals( "isConnected pre connect", false, manager.isConnected( name ) ); 36 final ExceptOnAcceptServerSocket socket = new ExceptOnAcceptServerSocket( true ); 37 assertEquals( "socket.getSoTimeout pre connect", 0, socket.getSoTimeout() ); 38 manager.connect( name, 39 socket, 40 new MockSocketConnectionHandler() ); 41 assertEquals( "socket.getSoTimeout post connect", 10, socket.getSoTimeout() ); 42 assertEquals( "isConnected pre disconnect", true, manager.isConnected( name ) ); 43 manager.disconnect( name ); 44 assertEquals( "isConnected post disconnect", false, manager.isConnected( name ) ); 45 } 46 47 public void testShutdownAcceptors() 48 throws Exception 49 { 50 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 51 manager.setMonitor( NullAcceptorMonitor.MONITOR ); 52 manager.setSoTimeout( 10 ); 53 final String name = "name"; 54 assertEquals( "isConnected pre connect", false, manager.isConnected( name ) ); 55 manager.connect( name, 56 new ExceptOnAcceptServerSocket( true ), 57 new MockSocketConnectionHandler() ); 58 assertEquals( "isConnected pre shutdownAcceptors", true, manager.isConnected( name ) ); 59 manager.shutdownAcceptors(); 60 assertEquals( "isConnected post shutdownAcceptors", false, manager.isConnected( name ) ); 61 } 62 63 public void testConnectAndDisconnectWithTimeoutSet() 64 throws Exception 65 { 66 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 67 manager.setMonitor( NullAcceptorMonitor.MONITOR ); 68 manager.setSoTimeout( 10 ); 69 final String name = "name"; 70 assertEquals( "isConnected pre connect", false, manager.isConnected( name ) ); 71 final ExceptOnAcceptServerSocket socket = new ExceptOnAcceptServerSocket( true ); 72 socket.setSoTimeout( 123 ); 73 assertEquals( "socket.getSoTimeout pre connect", 123, socket.getSoTimeout() ); 74 manager.connect( name, 75 socket, 76 new MockSocketConnectionHandler() ); 77 assertEquals( "socket.getSoTimeout post connect", 123, socket.getSoTimeout() ); 78 assertEquals( "isConnected pre disconnect", true, manager.isConnected( name ) ); 79 manager.disconnect( name ); 80 assertEquals( "isConnected post disconnect", false, manager.isConnected( name ) ); 81 } 82 83 public void testConnectAndAcceptAndDisconnectWithTimeoutSet() 84 throws Exception 85 { 86 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 87 final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor(); 88 manager.setMonitor( monitor ); 89 manager.setSoTimeout( 10 ); 90 final String name = "name"; 91 assertEquals( "isConnected pre connect", false, manager.isConnected( name ) ); 92 final ServerSocketChannel channel = ServerSocketChannel.open(); 93 final ServerSocket serverSocket = channel.socket(); 94 serverSocket.setReuseAddress( true ); 95 final InetAddress localAddress = InetAddress.getLocalHost(); 96 final Random random = new Random (); 97 final int port = Math.abs( random.nextInt() % 5000 ) + 1024; 98 final InetSocketAddress address = new InetSocketAddress ( localAddress, port ); 99 serverSocket.bind( address ); 100 while ( !serverSocket.isBound() ) 101 { 102 System.out.print( "." ); 103 Thread.yield(); 104 } 105 106 final MockSocketConnectionHandler handler = new MockSocketConnectionHandler(); 107 manager.connect( name, serverSocket, handler ); 108 109 final Socket clientSocket = new Socket ( localAddress, port ); 110 System.out.print( "Socket Connecting" ); 111 while ( !clientSocket.isConnected() ) 112 { 113 System.out.print( "." ); 114 Thread.yield(); 115 } 116 System.out.println( " - Connected" ); 117 clientSocket.close(); 118 119 Thread.sleep( 200 ); 121 122 assertNotNull( "handler.socket", handler.getSocket() ); 123 124 assertEquals( "isConnected pre disconnect", true, manager.isConnected( name ) ); 125 manager.disconnect( name ); 126 assertEquals( "isConnected post disconnect", false, manager.isConnected( name ) ); 127 } 128 129 public void testDuplicateConnect() 130 throws Exception 131 { 132 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 133 final String name = "name"; 134 assertEquals( "isConnected pre connect", false, manager.isConnected( name ) ); 135 final ExceptOnAcceptServerSocket socket = new ExceptOnAcceptServerSocket( true ); 136 manager.connect( name, 137 socket, 138 new MockSocketConnectionHandler() ); 139 assertEquals( "isConnected pre disconnect", true, manager.isConnected( name ) ); 140 try 141 { 142 manager.connect( name, 143 new ExceptOnAcceptServerSocket( true ), 144 new MockSocketConnectionHandler() ); 145 } 146 catch ( final IllegalArgumentException iae ) 147 { 148 return; 149 } 150 finally 151 { 152 socket.close(); 153 manager.shutdownAcceptors(); 154 assertEquals( "isConnected post disconnect", false, manager.isConnected( name ) ); 155 } 156 fail( "Expected to fail due to duplicate connect" ); 157 } 158 159 public void testDisconnectNonExistent() 160 throws Exception 161 { 162 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 163 try 164 { 165 manager.disconnect( "NonExistent" ); 166 } 167 catch ( IllegalArgumentException iae ) 168 { 169 return; 170 } 171 finally 172 { 173 manager.shutdownAcceptors(); 174 } 175 fail( "Expected to fail to disconnect non existent acceptor" ); 176 } 177 178 public void testConnectWithNullName() 179 throws Exception 180 { 181 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 182 try 183 { 184 manager.connect( null, 185 new ExceptOnAcceptServerSocket( true ), 186 new MockSocketConnectionHandler() ); 187 } 188 catch ( final NullPointerException npe ) 189 { 190 assertEquals( "npe.message", "name", npe.getMessage() ); 191 return; 192 } 193 finally 194 { 195 manager.shutdownAcceptors(); 196 } 197 fail( "expected NPE due to null name in connect" ); 198 } 199 200 public void testConnectWithNullSocket() 201 throws Exception 202 { 203 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 204 try 205 { 206 manager.connect( "name", 207 null, 208 new MockSocketConnectionHandler() ); 209 } 210 catch ( final NullPointerException npe ) 211 { 212 assertEquals( "npe.message", "socket", npe.getMessage() ); 213 return; 214 } 215 finally 216 { 217 manager.shutdownAcceptors(); 218 } 219 fail( "expected NPE due to null socket in connect" ); 220 } 221 222 public void testConnectWithNullHandler() 223 throws Exception 224 { 225 final DefaultAcceptorManager manager = new DefaultAcceptorManager(); 226 try 227 { 228 manager.connect( "name", 229 new ExceptOnAcceptServerSocket( true ), 230 null ); 231 } 232 catch ( final NullPointerException npe ) 233 { 234 assertEquals( "npe.message", "handler", npe.getMessage() ); 235 return; 236 } 237 finally 238 { 239 manager.shutdownAcceptors(); 240 } 241 fail( "expected NPE due to null handler in connect" ); 242 } 243 244 protected void setUp() throws Exception 245 { 246 System.out.print( "Test: " + getName() ); 247 } 248 } 249 | Popular Tags |