1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.examples.echoserver;
20
21 import java.io.IOException;
22 import java.net.InetAddress;
23 import java.net.ServerSocket;
24 import java.net.Socket;
25 import java.net.SocketTimeoutException;
26 import java.net.UnknownHostException;
27
28 import javax.net.ServerSocketFactory;
29 import javax.net.SocketFactory;
30
31 import org.apache.commons.net.EchoTCPClient;
32 import org.apache.commons.net.EchoUDPClient;
33 import org.apache.mina.common.TransportType;
34 import org.apache.mina.examples.echoserver.ssl.BogusSSLContextFactory;
35 import org.apache.mina.examples.echoserver.ssl.SSLServerSocketFactory;
36 import org.apache.mina.examples.echoserver.ssl.SSLSocketFactory;
37 import org.apache.mina.io.IoAcceptor;
38 import org.apache.mina.io.filter.SSLFilter;
39
40 /***
41 * Tests echo server example.
42 *
43 * @author The Apache Directory Project (dev@directory.apache.org)
44 * @version $Rev: 332218 $, $Date: 2005-11-10 12:52:42 +0900 $
45 */
46 public class AcceptorTest extends AbstractTest
47 {
48 public AcceptorTest()
49 {
50 }
51
52 public void testTCP() throws Exception
53 {
54 EchoTCPClient client = new EchoTCPClient();
55 testTCP0( client );
56 }
57
58 public void testTCPWithSSL() throws Exception
59 {
60
61 SSLFilter sslFilter =
62 new SSLFilter( BogusSSLContextFactory.getInstance( true ) );
63 IoAcceptor acceptor = registry.getIoAcceptor( TransportType.SOCKET );
64 acceptor.getFilterChain().addLast( "SSL", sslFilter );
65
66
67 SSLSocketFactory.setSslEnabled(true);
68 SSLServerSocketFactory.setSslEnabled(true);
69 org.apache.commons.net.SocketFactory factory = new org.apache.commons.net.SocketFactory() {
70
71 private SocketFactory f = SSLSocketFactory.getSocketFactory();
72 private ServerSocketFactory ssf = SSLServerSocketFactory.getServerSocketFactory();
73
74 public Socket createSocket( String arg0, int arg1 ) throws UnknownHostException, IOException
75 {
76 return f.createSocket(arg0, arg1);
77 }
78
79 public Socket createSocket( InetAddress arg0, int arg1 ) throws IOException
80 {
81 return f.createSocket(arg0, arg1);
82 }
83
84 public Socket createSocket( String arg0, int arg1, InetAddress arg2, int arg3 ) throws UnknownHostException, IOException
85 {
86 return f.createSocket(arg0, arg1, arg2, arg3);
87 }
88
89 public Socket createSocket( InetAddress arg0, int arg1, InetAddress arg2, int arg3 ) throws IOException
90 {
91 return f.createSocket(arg0, arg1, arg2, arg3);
92 }
93
94 public ServerSocket createServerSocket( int arg0 ) throws IOException
95 {
96 return ssf.createServerSocket(arg0);
97 }
98
99 public ServerSocket createServerSocket( int arg0, int arg1 ) throws IOException
100 {
101 return ssf.createServerSocket(arg0, arg1);
102 }
103
104 public ServerSocket createServerSocket( int arg0, int arg1, InetAddress arg2 ) throws IOException
105 {
106 return ssf.createServerSocket(arg0, arg1, arg2);
107 }
108
109 };
110
111
112 EchoTCPClient client = new EchoTCPClient();
113 client.setSocketFactory( factory );
114 testTCP0( client );
115 }
116
117 private void testTCP0( EchoTCPClient client ) throws Exception
118 {
119 client.connect( InetAddress.getLocalHost(), port );
120 byte[] writeBuf = new byte[ 16 ];
121
122 for( int i = 0; i < 10; i ++ )
123 {
124 fillWriteBuffer( writeBuf, i );
125 client.getOutputStream().write( writeBuf );
126 }
127
128 client.setSoTimeout( 30000 );
129
130 byte[] readBuf = new byte[ writeBuf.length ];
131
132 for( int i = 0; i < 10; i ++ )
133 {
134 fillWriteBuffer( writeBuf, i );
135
136 int readBytes = 0;
137 while( readBytes < readBuf.length )
138 {
139 int nBytes = client.getInputStream().read( readBuf,
140 readBytes, readBuf.length - readBytes );
141
142 if( nBytes < 0 )
143 fail( "Unexpected disconnection." );
144
145 readBytes += nBytes;
146 }
147
148 assertEquals( writeBuf, readBuf );
149 }
150
151 client.setSoTimeout( 500 );
152
153 try
154 {
155 client.getInputStream().read();
156 fail( "Unexpected incoming data." );
157 }
158 catch( SocketTimeoutException e )
159 {
160 }
161
162 client.disconnect();
163 }
164
165 public void testUDP() throws Exception
166 {
167 EchoUDPClient client = new EchoUDPClient();
168 client.open();
169 client.setSoTimeout( 3000 );
170
171 byte[] writeBuf = new byte[ 16 ];
172 byte[] readBuf = new byte[ writeBuf.length ];
173
174 client.setSoTimeout( 500 );
175
176 for( int i = 0; i < 10; i ++ )
177 {
178 fillWriteBuffer( writeBuf, i );
179 client.send( writeBuf, writeBuf.length, InetAddress
180 .getLocalHost(), port );
181
182 assertEquals( readBuf.length, client.receive( readBuf,
183 readBuf.length ) );
184 assertEquals( writeBuf, readBuf );
185 }
186
187 try
188 {
189 client.receive( readBuf );
190 fail( "Unexpected incoming data." );
191 }
192 catch( SocketTimeoutException e )
193 {
194 }
195
196 client.close();
197 }
198
199 private void fillWriteBuffer( byte[] writeBuf, int i )
200 {
201 for( int j = writeBuf.length - 1; j >= 0; j -- )
202 {
203 writeBuf[ j ] = ( byte ) ( j + i );
204 }
205 }
206
207 public static void main( String[] args )
208 {
209 junit.textui.TestRunner.run( AcceptorTest.class );
210 }
211 }