You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2011/09/19 13:27:34 UTC

svn commit: r1172571 - in /mina/trunk/core/src: main/java/org/apache/mina/api/ main/java/org/apache/mina/filterchain/ main/java/org/apache/mina/transport/tcp/ test/java/org/apache/mina/filterchain/ test/java/org/apache/mina/session/

Author: jvermillard
Date: Mon Sep 19 11:27:33 2011
New Revision: 1172571

URL: http://svn.apache.org/viewvc?rev=1172571&view=rev
Log:
Unit testing for chain

Added:
    mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java   (with props)
    mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java   (contents, props changed)
      - copied, changed from r1171914, mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java
Removed:
    mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java
Modified:
    mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
    mina/trunk/core/src/main/java/org/apache/mina/filterchain/IoFilterController.java
    mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
    mina/trunk/core/src/test/java/org/apache/mina/session/AbstractIoSessionTest.java

Added: mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java?rev=1172571&view=auto
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java (added)
+++ mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java Mon Sep 19 11:27:33 2011
@@ -0,0 +1,58 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.mina.api;
+
+import org.apache.mina.filterchain.ReadFilterChainController;
+import org.apache.mina.filterchain.WriteFilterChainController;
+
+/**
+ * A convenient {@link IoFilter} implementation to be sub-classed for easier IoFilter implementation.
+ * 
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public abstract class DefaultIoFilter implements IoFilter {
+
+    @Override
+    public void sessionCreated(IoSession session) {
+
+    }
+
+    @Override
+    public void sessionOpened(IoSession session) {
+    }
+
+    @Override
+    public void sessionClosed(IoSession session) {
+    }
+
+    @Override
+    public void sessionIdle(IoSession session, IdleStatus status) {
+    }
+
+    @Override
+    public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
+        controller.callReadNextFilter(session, message);
+    }
+
+    @Override
+    public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
+        controller.callWriteNextFilter(session, message);
+    }
+
+}

Propchange: mina/trunk/core/src/main/java/org/apache/mina/api/DefaultIoFilter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java?rev=1172571&r1=1172570&r2=1172571&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java Mon Sep 19 11:27:33 2011
@@ -39,6 +39,9 @@ public class DefaultIoFilterController i
      * The instance of {@link DefaultIoFilterController} with the {@link IoService} chain.
      */
     public DefaultIoFilterController(IoFilter[] chain) {
+        if (chain == null) {
+            throw new IllegalArgumentException("chain");
+        }
         this.chain = chain;
     }
 
@@ -51,7 +54,7 @@ public class DefaultIoFilterController i
     }
 
     @Override
-    public void processSessionOpen(IoSession session) {
+    public void processSessionOpened(IoSession session) {
         LOG.debug("processing session open event");
         for (IoFilter filter : chain) {
             filter.sessionOpened(session);

Modified: mina/trunk/core/src/main/java/org/apache/mina/filterchain/IoFilterController.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filterchain/IoFilterController.java?rev=1172571&r1=1172570&r2=1172571&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filterchain/IoFilterController.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filterchain/IoFilterController.java Mon Sep 19 11:27:33 2011
@@ -41,7 +41,7 @@ public interface IoFilterController {
      * Call this method for processing a session open event using this chain.
      * @param session {@link IoSession} the opened session
      */
-    void processSessionOpen(IoSession session);
+    void processSessionOpened(IoSession session);
 
     /**
      * Call this method for processing a session closed event using the chain.

Modified: mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1172571&r1=1172570&r2=1172571&view=diff
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java Mon Sep 19 11:27:33 2011
@@ -233,7 +233,7 @@ public class NioSelectorProcessor implem
                             session.setConnected();
                             // fire the event
                             ((AbstractIoService) session.getService()).fireSessionCreated(session);
-                            session.getFilterChain().processSessionOpen(session);
+                            session.getFilterChain().processSessionOpened(session);
                         }
                     }
 

Copied: mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java (from r1171914, mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java)
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java?p2=mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java&p1=mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java&r1=1171914&r2=1172571&rev=1172571&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterChainTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java Mon Sep 19 11:27:33 2011
@@ -19,49 +19,108 @@
  */
 package org.apache.mina.filterchain;
 
-import org.apache.mina.api.IdleStatus;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
+
+import java.nio.ByteBuffer;
+
+import org.apache.mina.api.DefaultIoFilter;
 import org.apache.mina.api.IoFilter;
 import org.apache.mina.api.IoSession;
+import org.junit.Test;
 
-public class DefaultIoFilterChainTest {
+public class DefaultIoFilterControllerTest {
 
-    private static class DummyFilter implements IoFilter {
+    @Test
+    public void constructor() {
 
-        String id;
-
-        public DummyFilter(String id) {
-            this.id = id;
+        // null chain
+        try {
+            new DefaultIoFilterController(null);
+            fail();
+        } catch (IllegalArgumentException e) {
+            // happy
+        }
+
+        // nominal
+        try {
+            DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] {});
+        } catch (IllegalArgumentException e) {
+            fail();
         }
+    }
 
-        @Override
-        public void sessionCreated(IoSession session) {
-        }
+    @Test
+    public void chain_reads() {
+        IoFilter filter1 = spy(new PassthruFilter());
+        IoFilter filter2 = spy(new PassthruFilter());
+        IoFilter filter3 = spy(new PassthruFilter());
+        DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] { filter1, filter2, filter3 });
+        IoSession session = mock(IoSession.class);
+        ByteBuffer buffer = mock(ByteBuffer.class);
+        ctrl.processMessageReceived(session, buffer);
+        verify(filter1).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
+        verify(filter2).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
+        verify(filter3).messageReceived(eq(session), eq(buffer), any(ReadFilterChainController.class));
+    }
 
-        @Override
-        public void sessionOpened(IoSession session) {
-        }
+    @Test
+    public void chain_writes() {
+        IoFilter filter1 = spy(new PassthruFilter());
+        IoFilter filter2 = spy(new PassthruFilter());
+        IoFilter filter3 = spy(new PassthruFilter());
+        DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] { filter1, filter2, filter3 });
+        IoSession session = mock(IoSession.class);
+        ByteBuffer buffer = mock(ByteBuffer.class);
+        ctrl.processMessageWriting(session, buffer);
+        verify(filter1).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
+        verify(filter2).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
+        verify(filter3).messageWriting(eq(session), eq(buffer), any(WriteFilterChainController.class));
+        verify(session).enqueueWriteRequest(eq(buffer));
+    }
 
-        @Override
-        public void sessionClosed(IoSession session) {
-        }
+    @Test
+    public void chain_created() {
+        IoFilter filter1 = spy(new PassthruFilter());
+        IoFilter filter2 = spy(new PassthruFilter());
+        IoFilter filter3 = spy(new PassthruFilter());
+        DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] { filter1, filter2, filter3 });
+        IoSession session = mock(IoSession.class);
+        ctrl.processSessionCreated(session);
+        verify(filter1).sessionCreated(eq(session));
+        verify(filter2).sessionCreated(eq(session));
+        verify(filter3).sessionCreated(eq(session));
+    }
 
-        @Override
-        public void sessionIdle(IoSession session, IdleStatus status) {
-        }
+    @Test
+    public void chain_open() {
+        IoFilter filter1 = spy(new PassthruFilter());
+        IoFilter filter2 = spy(new PassthruFilter());
+        IoFilter filter3 = spy(new PassthruFilter());
+        DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] { filter1, filter2, filter3 });
+        IoSession session = mock(IoSession.class);
+        ctrl.processSessionOpened(session);
+        verify(filter1).sessionOpened(eq(session));
+        verify(filter2).sessionOpened(eq(session));
+        verify(filter3).sessionOpened(eq(session));
+    }
 
-        public String toString() {
-            return "DummyFilter(" + id + ")";
-        }
+    @Test
+    public void chain_close() {
+        IoFilter filter1 = spy(new PassthruFilter());
+        IoFilter filter2 = spy(new PassthruFilter());
+        IoFilter filter3 = spy(new PassthruFilter());
+        DefaultIoFilterController ctrl = new DefaultIoFilterController(new IoFilter[] { filter1, filter2, filter3 });
+        IoSession session = mock(IoSession.class);
+        ctrl.processSessionClosed(session);
+        verify(filter1).sessionClosed(eq(session));
+        verify(filter2).sessionClosed(eq(session));
+        verify(filter3).sessionClosed(eq(session));
+    }
 
-        @Override
-        public void messageReceived(IoSession session, Object message, ReadFilterChainController controller) {
-            controller.callReadNextFilter(session, message);
-        }
+    private class PassthruFilter extends DefaultIoFilter {
 
-        @Override
-        public void messageWriting(IoSession session, Object message, WriteFilterChainController controller) {
-            controller.callWriteNextFilter(session, message);
-        }
     }
 
 }

Propchange: mina/trunk/core/src/test/java/org/apache/mina/filterchain/DefaultIoFilterControllerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: mina/trunk/core/src/test/java/org/apache/mina/session/AbstractIoSessionTest.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/session/AbstractIoSessionTest.java?rev=1172571&r1=1172570&r2=1172571&view=diff
==============================================================================
--- mina/trunk/core/src/test/java/org/apache/mina/session/AbstractIoSessionTest.java (original)
+++ mina/trunk/core/src/test/java/org/apache/mina/session/AbstractIoSessionTest.java Mon Sep 19 11:27:33 2011
@@ -1,3 +1,21 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package org.apache.mina.session;
 
 import static org.mockito.Mockito.mock;