Author: trustin
Date: Wed Jul 11 01:27:34 2007
New Revision: 555202
URL: http://svn.apache.org/viewvc?view=rev&rev=555202
Log:
Added Maarten's SSLFilter test case
Added:
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
(with props)
Added:
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
URL:
http://svn.apache.org/viewvc/mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java?view=auto&rev=555202
==============================================================================
---
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
(added)
+++
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
Wed Jul 11 01:27:34 2007
@@ -0,0 +1,146 @@
+package org.apache.mina.example.echoserver.ssl;
+
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.nio.charset.Charset;
+import java.security.cert.CertificateException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import junit.framework.TestCase;
+
+import org.apache.mina.common.IoAcceptor;
+import org.apache.mina.common.IoHandlerAdapter;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.SSLFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+
+public class SSLFilterTest extends TestCase {
+
+ private static final int PORT = 17887;
+
+ private IoAcceptor acceptor;
+
+ SocketAddress socketAddress = new InetSocketAddress(PORT);
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ acceptor = new SocketAcceptor();
+ }
+
+ protected void tearDown() throws Exception {
+ acceptor.unbindAll();
+ super.tearDown();
+ }
+
+ public void testMessageSentIsCalled() throws Exception {
+ testMessageSentIsCalled(false);
+ }
+
+ public void testMessageSentIsCalled_With_SSL() throws Exception {
+ testMessageSentIsCalled(true);
+ }
+
+ private void testMessageSentIsCalled(boolean useSSL) throws Exception {
+
+ if (useSSL) {
+ SSLFilter sslFilter = new SSLFilter(BogusSSLContextFactory
+ .getInstance(true));
+ acceptor.getFilterChain().addLast("sslFilter", sslFilter);
+ }
+ acceptor.getFilterChain().addLast(
+ "codec",
+ new ProtocolCodecFilter(new TextLineCodecFactory(Charset
+ .forName("UTF-8"))));
+
+ EchoHandler handler = new EchoHandler();
+ acceptor.bind(socketAddress, handler);
+ System.out.println("MINA server started.");
+
+ Socket socket = getClientSocket(useSSL);
+ int bytesSent = 0;
+ bytesSent += writeMessage(socket, "test-1\n");
+ bytesSent += writeMessage(socket, "test-2\n");
+ byte[] response = new byte[bytesSent];
+ for (int i = 0; i < response.length; i++) {
+ response[i] = (byte) socket.getInputStream().read();
+ }
+ long millis = System.currentTimeMillis();
+ while (handler.sentMessages.size() < 2
+ && System.currentTimeMillis() < millis + 5000) {
+ Thread.sleep(200);
+ }
+ assertEquals("received what we sent", "test-1\ntest-2\n", new String(
+ response, "UTF-8"));
+
+ System.out.println("handler: " + handler.sentMessages);
+ assertEquals("handler should have sent 2 messages:", 2,
+ handler.sentMessages.size());
+ assertTrue(handler.sentMessages.contains("test-1"));
+ assertTrue(handler.sentMessages.contains("test-2"));
+ }
+
+ private int writeMessage(Socket socket, String message) throws Exception {
+ byte request[] = message.getBytes("UTF-8");
+ socket.getOutputStream().write(request);
+ return request.length;
+ }
+
+ private Socket getClientSocket(boolean ssl) throws Exception {
+ if (ssl) {
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ ctx.init(null, trustManagers, null);
+ return ctx.getSocketFactory().createSocket("localhost", PORT);
+ }
+ return new Socket("localhost", PORT);
+ }
+
+ private static class EchoHandler extends IoHandlerAdapter {
+
+ List sentMessages = new ArrayList();
+
+ public void exceptionCaught(IoSession session, Throwable cause)
+ throws Exception {
+ }
+
+ public void messageReceived(IoSession session, Object message)
+ throws Exception {
+ session.write(message);
+ }
+
+ public void messageSent(IoSession session, Object message)
+ throws Exception {
+ sentMessages.add(message.toString());
+ if (sentMessages.size() >= 2) {
+ session.close();
+ }
+ }
+
+ }
+
+ TrustManager[] trustManagers = new TrustManager[] { new TrustAnyone() };
+
+ private static class TrustAnyone implements X509TrustManager {
+ public void checkClientTrusted(
+ java.security.cert.X509Certificate[] x509Certificates, String
s)
+ throws CertificateException {
+ }
+
+ public void checkServerTrusted(
+ java.security.cert.X509Certificate[] x509Certificates, String
s)
+ throws CertificateException {
+ }
+
+ public java.security.cert.X509Certificate[] getAcceptedIssuers() {
+ return new java.security.cert.X509Certificate[0];
+ }
+ }
+
+}
Propchange:
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
mina/branches/1.0/example/src/test/java/org/apache/mina/example/echoserver/ssl/SSLFilterTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date