1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.mina.filter.util;
21  
22  import java.util.ArrayList;
23  import java.util.List;
24  
25  import junit.framework.TestCase;
26  
27  import org.apache.mina.core.filterchain.IoFilter;
28  import org.apache.mina.core.filterchain.IoFilterEvent;
29  import org.apache.mina.core.session.DummySession;
30  import org.apache.mina.core.session.IdleStatus;
31  import org.apache.mina.core.session.IoEventType;
32  import org.apache.mina.core.session.IoSession;
33  import org.apache.mina.core.write.DefaultWriteRequest;
34  import org.apache.mina.core.write.WriteRequest;
35  import org.easymock.EasyMock;
36  
37  /**
38   * Tests {@link CommonEventFilter}.
39   *
40   * @author The Apache MINA Project (dev@mina.apache.org)
41   */
42  
43  public class WrappingFilterTest extends TestCase {
44      private IoSession session;
45  
46      private IoFilter.NextFilter nextFilter;
47  
48      @Override
49      protected void setUp() throws Exception {
50          super.setUp();
51          /*
52           * Create the mocks.
53           */
54          session = new DummySession();
55          nextFilter = EasyMock.createMock(IoFilter.NextFilter.class);
56          //nextFilter = (IoFilter.NextFilter) mockNextFilter.getClass();
57      }
58  
59      public void testFilter() throws Exception {
60          MyWrappingFilter wrappingFilter = new MyWrappingFilter();
61  
62          /* record expectations */
63          Object message1 = "message one";
64          Object message2 = "message two";
65          WriteRequest writeRequest1 = new DefaultWriteRequest("test1");
66          WriteRequest writeRequest2 = new DefaultWriteRequest("test2");
67          Throwable cause = new Throwable("testing");
68  
69          nextFilter.sessionCreated(session);
70          nextFilter.sessionOpened(session);
71          nextFilter.sessionIdle(session, IdleStatus.READER_IDLE);
72          nextFilter.messageReceived(session, message1);
73          nextFilter.messageSent(session, writeRequest1);
74          nextFilter.messageSent(session, writeRequest2);
75          nextFilter.messageReceived(session, message2);
76          nextFilter.filterWrite(session, writeRequest1);
77          nextFilter.filterClose(session);
78          nextFilter.exceptionCaught(session, cause);
79          nextFilter.sessionClosed(session);
80  
81          /* replay */
82          EasyMock.replay( nextFilter );
83          wrappingFilter.sessionCreated(nextFilter, session);
84          wrappingFilter.sessionOpened(nextFilter, session);
85          wrappingFilter.sessionIdle(nextFilter, session, IdleStatus.READER_IDLE);
86          wrappingFilter.messageReceived(nextFilter, session, message1);
87          wrappingFilter.messageSent(nextFilter, session, writeRequest1);
88          wrappingFilter.messageSent(nextFilter, session, writeRequest2);
89          wrappingFilter.messageReceived(nextFilter, session, message2);
90          wrappingFilter.filterWrite(nextFilter,session, writeRequest1);
91          wrappingFilter.filterClose(nextFilter, session);
92          wrappingFilter.exceptionCaught(nextFilter, session, cause);
93          wrappingFilter.sessionClosed(nextFilter, session);
94  
95          /* verify */
96          EasyMock.verify( nextFilter );
97  
98          /* check event lists */
99          assertEquals(11, wrappingFilter.eventsBefore.size());
100         assertEquals(IoEventType.SESSION_CREATED, wrappingFilter.eventsBefore.get(0));
101         assertEquals(IoEventType.SESSION_OPENED, wrappingFilter.eventsBefore.get(1));
102         assertEquals(IoEventType.SESSION_IDLE, wrappingFilter.eventsBefore.get(2));
103         assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(3));
104         assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(4));
105         assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(5));
106         assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(6));
107         assertEquals(IoEventType.WRITE, wrappingFilter.eventsBefore.get(7));
108         assertEquals(IoEventType.CLOSE, wrappingFilter.eventsBefore.get(8));
109         assertEquals(IoEventType.EXCEPTION_CAUGHT, wrappingFilter.eventsBefore.get(9));
110         assertEquals(IoEventType.SESSION_CLOSED, wrappingFilter.eventsBefore.get(10));
111         assertEquals(wrappingFilter.eventsBefore,  wrappingFilter.eventsAfter);
112     }
113 
114 
115     private static class MyWrappingFilter extends CommonEventFilter {
116         List<IoEventType> eventsBefore = new ArrayList<IoEventType>();
117 
118         List<IoEventType> eventsAfter = new ArrayList<IoEventType>();
119 
120         /**
121          * Default constructor
122          */
123         public MyWrappingFilter() {
124             super();
125         }
126         
127         @Override
128         protected void filter(IoFilterEvent event) {
129             eventsBefore.add(event.getType());
130             event.fire();
131             eventsAfter.add(event.getType());
132         }
133     }
134 }