1   package org.apache.mina.filter.util;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import junit.framework.TestCase;
7   
8   import org.apache.mina.common.DefaultWriteRequest;
9   import org.apache.mina.common.DummySession;
10  import org.apache.mina.common.IdleStatus;
11  import org.apache.mina.common.IoEventType;
12  import org.apache.mina.common.IoFilter;
13  import org.apache.mina.common.IoFilterEvent;
14  import org.apache.mina.common.IoSession;
15  import org.apache.mina.common.WriteRequest;
16  import org.easymock.MockControl;
17  
18  /**
19   * Tests {@link CommonEventFilter}.
20   *
21   * @author The Apache MINA Project (dev@mina.apache.org)
22   * @version $Rev: 567208 $, $Date: 2007-08-18 04:27:05 +0200 (za, 18 aug 2007) $
23   */
24  
25  public class WrappingFilterTest extends TestCase {
26  
27      private MockControl mockNextFilter;
28  
29      private IoSession session;
30  
31      private IoFilter.NextFilter nextFilter;
32  
33      @Override
34      protected void setUp() throws Exception {
35          super.setUp();
36          /*
37           * Create the mocks.
38           */
39          session = new DummySession();
40          mockNextFilter = MockControl.createControl(IoFilter.NextFilter.class);
41          nextFilter = (IoFilter.NextFilter) mockNextFilter.getMock();
42      }
43  
44      public void testFilter() throws Exception {
45          MyWrappingFilter wrappingFilter = new MyWrappingFilter();
46  
47          /* record expectations */
48          Object message1 = "message one";
49          Object message2 = "message two";
50          WriteRequest writeRequest1 = new DefaultWriteRequest("test1");
51          WriteRequest writeRequest2 = new DefaultWriteRequest("test2");
52          Throwable cause = new Throwable("testing");
53  
54          nextFilter.sessionCreated(session);
55          nextFilter.sessionOpened(session);
56          nextFilter.sessionIdle(session, IdleStatus.READER_IDLE);
57          nextFilter.messageReceived(session, message1);
58          nextFilter.messageSent(session, writeRequest1);
59          nextFilter.messageSent(session, writeRequest2);
60          nextFilter.messageReceived(session, message2);
61          nextFilter.filterWrite(session, writeRequest1);
62          nextFilter.filterClose(session);
63          nextFilter.exceptionCaught(session, cause);
64          nextFilter.sessionClosed(session);
65  
66          /* replay */
67          mockNextFilter.replay();
68          wrappingFilter.sessionCreated(nextFilter, session);
69          wrappingFilter.sessionOpened(nextFilter, session);
70          wrappingFilter.sessionIdle(nextFilter, session, IdleStatus.READER_IDLE);
71          wrappingFilter.messageReceived(nextFilter, session, message1);
72          wrappingFilter.messageSent(nextFilter, session, writeRequest1);
73          wrappingFilter.messageSent(nextFilter, session, writeRequest2);
74          wrappingFilter.messageReceived(nextFilter, session, message2);
75          wrappingFilter.filterWrite(nextFilter,session, writeRequest1);
76          wrappingFilter.filterClose(nextFilter, session);
77          wrappingFilter.exceptionCaught(nextFilter, session, cause);
78          wrappingFilter.sessionClosed(nextFilter, session);
79  
80          /* verify */
81          mockNextFilter.verify();
82  
83          /* check event lists */
84          assertEquals(11, wrappingFilter.eventsBefore.size());
85          assertEquals(IoEventType.SESSION_CREATED, wrappingFilter.eventsBefore.get(0));
86          assertEquals(IoEventType.SESSION_OPENED, wrappingFilter.eventsBefore.get(1));
87          assertEquals(IoEventType.SESSION_IDLE, wrappingFilter.eventsBefore.get(2));
88          assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(3));
89          assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(4));
90          assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(5));
91          assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(6));
92          assertEquals(IoEventType.WRITE, wrappingFilter.eventsBefore.get(7));
93          assertEquals(IoEventType.CLOSE, wrappingFilter.eventsBefore.get(8));
94          assertEquals(IoEventType.EXCEPTION_CAUGHT, wrappingFilter.eventsBefore.get(9));
95          assertEquals(IoEventType.SESSION_CLOSED, wrappingFilter.eventsBefore.get(10));
96          assertEquals(wrappingFilter.eventsBefore,  wrappingFilter.eventsAfter);
97      }
98  
99  
100     private static class MyWrappingFilter extends CommonEventFilter {
101 
102         private List<IoEventType> eventsBefore = new ArrayList<IoEventType>();
103 
104         private List<IoEventType> eventsAfter = new ArrayList<IoEventType>();
105 
106         @Override
107         protected void filter(IoFilterEvent event) {
108             eventsBefore.add(event.getType());
109             event.fire();
110             eventsAfter.add(event.getType());
111         }
112     }
113 }