You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2016/08/16 12:55:38 UTC

mina git commit: Added the test provided by Gijsbert van den Brink (DIRMINA-1041). It seems that the problem has been solved with the fix for the session closure

Repository: mina
Updated Branches:
  refs/heads/2.0 9896a4657 -> 272041287


Added the test provided by Gijsbert van den Brink (DIRMINA-1041). It seems that the problem has been solved with the fix for the session closure


Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/27204128
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/27204128
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/27204128

Branch: refs/heads/2.0
Commit: 272041287701a3e760613888a73ba22a583d8f0c
Parents: 9896a46
Author: Emmanuel L�charny <el...@symas.com>
Authored: Tue Aug 16 14:55:25 2016 +0200
Committer: Emmanuel L�charny <el...@symas.com>
Committed: Tue Aug 16 14:55:25 2016 +0200

----------------------------------------------------------------------
 .../transport/socket/nio/DIRMINA1041Test.java   | 104 +++++++++++++++++++
 1 file changed, 104 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina/blob/27204128/mina-core/src/test/java/org/apache/mina/transport/socket/nio/DIRMINA1041Test.java
----------------------------------------------------------------------
diff --git a/mina-core/src/test/java/org/apache/mina/transport/socket/nio/DIRMINA1041Test.java b/mina-core/src/test/java/org/apache/mina/transport/socket/nio/DIRMINA1041Test.java
new file mode 100644
index 0000000..87974ee
--- /dev/null
+++ b/mina-core/src/test/java/org/apache/mina/transport/socket/nio/DIRMINA1041Test.java
@@ -0,0 +1,104 @@
+package org.apache.mina.transport.socket.nio;
+
+import org.apache.log4j.net.SocketServer;
+import org.apache.mina.core.future.CloseFuture;
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.future.WriteFuture;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+
+public class DIRMINA1041Test {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DIRMINA1041Test.class);
+    private static final String HOST = "localhost";
+    private static int PORT; 
+    private static final long TIMEOUT = 3000L;
+    private SocketAcceptor acceptor;
+    private SocketConnector connector;
+    
+    static {
+        try {
+            ServerSocket serverSocket = new ServerSocket(0);
+            PORT = serverSocket.getLocalPort();
+            serverSocket.close();
+            
+        } catch (IOException ioe) {
+            
+        }
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        acceptor = new NioSocketAcceptor();
+        acceptor.setHandler(new SomeAcceptHandler());
+        acceptor.bind(new InetSocketAddress(HOST, PORT));
+
+        connector = new NioSocketConnector();
+        connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
+        connector.setHandler(new SomeConnectHandler());
+    }
+
+    @Test
+    public void testWrite() throws InterruptedException {
+        for (int i = 0; i < 1000; i++) {
+            IoSession session = getSession();
+
+            WriteFuture future = session.write("Test");
+            LOG.info("Waiting for WriteFuture to complete. Session: " + session);
+            if (!future.await(TIMEOUT)) {
+                Assert.fail("WriteFuture did not complete. Session: " + session);
+            }
+
+            closeSession(session);
+        }
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        try { connector.dispose(true); } catch (Throwable e) { e.printStackTrace(); }
+        try { acceptor.unbind(); acceptor.dispose(true); } catch (Throwable e) { e.printStackTrace(); }
+    }
+
+    private IoSession getSession() {
+        ConnectFuture future = connector.connect(new InetSocketAddress(HOST, PORT));
+        if (!future.awaitUninterruptibly(TIMEOUT)) {
+            Assert.fail("ConnectFuture did not complete.");
+        }
+        return future.getSession();
+    }
+
+    private void closeSession(IoSession session) {
+        CloseFuture closeFuture = session.closeNow();
+        if (!closeFuture.awaitUninterruptibly(TIMEOUT)) {
+            Assert.fail("CloseFuture did not complete.");
+        }
+    }
+
+    private class SomeConnectHandler extends IoHandlerAdapter {
+        @Override
+        public void sessionClosed(IoSession session) throws Exception {
+            LOG.info("Connector - Session closed : " + session);
+        }
+    }
+
+    private class SomeAcceptHandler extends IoHandlerAdapter {
+        @Override
+        public void messageReceived(IoSession session, Object message) throws Exception {
+            session.closeNow();
+        }
+    }
+}