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();
+ }
+ }
+}