KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > example > echoserver > AcceptorTest


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.mina.example.echoserver;
21
22 import java.io.IOException JavaDoc;
23 import java.net.InetAddress JavaDoc;
24 import java.net.ServerSocket JavaDoc;
25 import java.net.Socket JavaDoc;
26 import java.net.SocketTimeoutException JavaDoc;
27 import java.net.UnknownHostException JavaDoc;
28
29 import javax.net.ServerSocketFactory;
30 import javax.net.SocketFactory;
31
32 import org.apache.commons.net.EchoTCPClient;
33 import org.apache.commons.net.EchoUDPClient;
34 import org.apache.mina.example.echoserver.ssl.SSLServerSocketFactory;
35 import org.apache.mina.example.echoserver.ssl.SSLSocketFactory;
36
37 /**
38  * Tests echo server example.
39  *
40  * @author The Apache Directory Project (mina-dev@directory.apache.org)
41  * @version $Rev:448075 $, $Date:2006-09-20 05:26:53Z $
42  */

43 public class AcceptorTest extends AbstractTest {
44     public AcceptorTest() {
45     }
46
47     public void testTCP() throws Exception JavaDoc {
48         EchoTCPClient client = new EchoTCPClient();
49         testTCP0(client);
50     }
51
52     public void testTCPWithSSL() throws Exception JavaDoc {
53         // Add an SSL filter
54
useSSL = true;
55
56         // Create a commons-net socket factory
57
SSLSocketFactory.setSslEnabled(true);
58         SSLServerSocketFactory.setSslEnabled(true);
59         org.apache.commons.net.SocketFactory factory = new org.apache.commons.net.SocketFactory() {
60
61             private SocketFactory f = SSLSocketFactory.getSocketFactory();
62
63             private ServerSocketFactory ssf = SSLServerSocketFactory
64                     .getServerSocketFactory();
65
66             public Socket JavaDoc createSocket(String JavaDoc arg0, int arg1)
67                     throws UnknownHostException JavaDoc, IOException JavaDoc {
68                 return f.createSocket(arg0, arg1);
69             }
70
71             public Socket JavaDoc createSocket(InetAddress JavaDoc arg0, int arg1)
72                     throws IOException JavaDoc {
73                 return f.createSocket(arg0, arg1);
74             }
75
76             public Socket JavaDoc createSocket(String JavaDoc arg0, int arg1, InetAddress JavaDoc arg2,
77                     int arg3) throws UnknownHostException JavaDoc, IOException JavaDoc {
78                 return f.createSocket(arg0, arg1, arg2, arg3);
79             }
80
81             public Socket JavaDoc createSocket(InetAddress JavaDoc arg0, int arg1,
82                     InetAddress JavaDoc arg2, int arg3) throws IOException JavaDoc {
83                 return f.createSocket(arg0, arg1, arg2, arg3);
84             }
85
86             public ServerSocket JavaDoc createServerSocket(int arg0) throws IOException JavaDoc {
87                 return ssf.createServerSocket(arg0);
88             }
89
90             public ServerSocket JavaDoc createServerSocket(int arg0, int arg1)
91                     throws IOException JavaDoc {
92                 return ssf.createServerSocket(arg0, arg1);
93             }
94
95             public ServerSocket JavaDoc createServerSocket(int arg0, int arg1,
96                     InetAddress JavaDoc arg2) throws IOException JavaDoc {
97                 return ssf.createServerSocket(arg0, arg1, arg2);
98             }
99
100         };
101
102         // Create a echo client with SSL factory and test it.
103
EchoTCPClient client = new EchoTCPClient();
104         client.setSocketFactory(factory);
105         testTCP0(client);
106     }
107
108     private void testTCP0(EchoTCPClient client) throws Exception JavaDoc {
109         client.connect("localhost", port);
110         byte[] writeBuf = new byte[16];
111
112         for (int i = 0; i < 10; i++) {
113             fillWriteBuffer(writeBuf, i);
114             client.getOutputStream().write(writeBuf);
115         }
116
117         client.setSoTimeout(30000);
118
119         byte[] readBuf = new byte[writeBuf.length];
120
121         for (int i = 0; i < 10; i++) {
122             fillWriteBuffer(writeBuf, i);
123
124             int readBytes = 0;
125             while (readBytes < readBuf.length) {
126                 int nBytes = client.getInputStream().read(readBuf, readBytes,
127                         readBuf.length - readBytes);
128
129                 if (nBytes < 0)
130                     fail("Unexpected disconnection.");
131
132                 readBytes += nBytes;
133             }
134
135             assertEquals(writeBuf, readBuf);
136         }
137
138         client.setSoTimeout(500);
139
140         try {
141             client.getInputStream().read();
142             fail("Unexpected incoming data.");
143         } catch (SocketTimeoutException JavaDoc e) {
144         }
145
146         client.disconnect();
147     }
148
149     public void testUDP() throws Exception JavaDoc {
150         EchoUDPClient client = new EchoUDPClient();
151         client.open();
152         client.setSoTimeout(3000);
153
154         byte[] writeBuf = new byte[16];
155         byte[] readBuf = new byte[writeBuf.length];
156
157         client.setSoTimeout(500);
158
159         for (int i = 0; i < 10; i++) {
160             fillWriteBuffer(writeBuf, i);
161             client.send(writeBuf, writeBuf.length, InetAddress.getByName(null),
162                     port);
163
164             assertEquals(readBuf.length, client
165                     .receive(readBuf, readBuf.length));
166             assertEquals(writeBuf, readBuf);
167         }
168
169         try {
170             client.receive(readBuf);
171             fail("Unexpected incoming data.");
172         } catch (SocketTimeoutException JavaDoc e) {
173         }
174
175         client.close();
176     }
177
178     private void fillWriteBuffer(byte[] writeBuf, int i) {
179         for (int j = writeBuf.length - 1; j >= 0; j--) {
180             writeBuf[j] = (byte) (j + i);
181         }
182     }
183
184     public static void main(String JavaDoc[] args) {
185         junit.textui.TestRunner.run(AcceptorTest.class);
186     }
187 }
188
Popular Tags