KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > spice > netserve > connection > impl > DefaultAcceptorManagerTestCase


1 /*
2  * Copyright (C) The Spice Group. All rights reserved.
3  *
4  * This software is published under the terms of the Spice
5  * Software License version 1.1, a copy of which has been included
6  * with this distribution in the LICENSE.txt file.
7  */

8 package org.codehaus.spice.netserve.connection.impl;
9
10 import java.net.Socket JavaDoc;
11 import java.net.InetAddress JavaDoc;
12 import java.net.InetSocketAddress JavaDoc;
13 import java.net.ServerSocket JavaDoc;
14 import java.nio.channels.ServerSocketChannel JavaDoc;
15 import java.util.Random JavaDoc;
16
17 import junit.framework.TestCase;
18
19 /**
20  *
21  * @author Peter Donald
22  * @version $Revision: 1.2 $ $Date: 2004/03/21 23:42:59 $
23  */

24 public class DefaultAcceptorManagerTestCase
25    extends TestCase
26 {
27    public void testConnectAndDisconnectWithTimeoutNotSet()
28       throws Exception JavaDoc
29    {
30       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
31       manager.setMonitor( NullAcceptorMonitor.MONITOR );
32       manager.setSoTimeout( 10 );
33       manager.setShutdownTimeout( 0 );
34       final String JavaDoc 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 JavaDoc
49    {
50       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
51       manager.setMonitor( NullAcceptorMonitor.MONITOR );
52       manager.setSoTimeout( 10 );
53       final String JavaDoc 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 JavaDoc
65    {
66       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
67       manager.setMonitor( NullAcceptorMonitor.MONITOR );
68       manager.setSoTimeout( 10 );
69       final String JavaDoc 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 JavaDoc
85    {
86       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
87       final RecordingAcceptorMonitor monitor = new RecordingAcceptorMonitor();
88       manager.setMonitor( monitor );
89       manager.setSoTimeout( 10 );
90       final String JavaDoc name = "name";
91       assertEquals( "isConnected pre connect", false, manager.isConnected( name ) );
92       final ServerSocketChannel JavaDoc channel = ServerSocketChannel.open();
93       final ServerSocket JavaDoc serverSocket = channel.socket();
94       serverSocket.setReuseAddress( true );
95       final InetAddress JavaDoc localAddress = InetAddress.getLocalHost();
96       final Random JavaDoc random = new Random JavaDoc();
97       final int port = Math.abs( random.nextInt() % 5000 ) + 1024;
98       final InetSocketAddress JavaDoc address = new InetSocketAddress JavaDoc( 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 JavaDoc clientSocket = new Socket JavaDoc( 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       //Sleep to make sure accept goes through
120
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 JavaDoc
131    {
132       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
133       final String JavaDoc 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 JavaDoc 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 JavaDoc
161    {
162       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
163       try
164       {
165          manager.disconnect( "NonExistent" );
166       }
167       catch ( IllegalArgumentException JavaDoc 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 JavaDoc
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 JavaDoc 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 JavaDoc
202    {
203       final DefaultAcceptorManager manager = new DefaultAcceptorManager();
204       try
205       {
206          manager.connect( "name",
207                           null,
208                           new MockSocketConnectionHandler() );
209       }
210       catch ( final NullPointerException JavaDoc 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 JavaDoc
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 JavaDoc 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 JavaDoc
245     {
246         System.out.print( "Test: " + getName() );
247     }
248 }
249
Popular Tags