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   * @version $Rev: 567208 $, $Date: 2007-08-18 04:27:05 +0200 (za, 18 aug 2007) $
42   */
43  
44  public class WrappingFilterTest extends TestCase {
45      private IoSession session;
46  
47      private IoFilter.NextFilter nextFilter;
48  
49      @Override
50      protected void setUp() throws Exception {
51          super.setUp();
52          /*
53           * Create the mocks.
54           */
55          session = new DummySession();
56          nextFilter = EasyMock.createMock(IoFilter.NextFilter.class);
57          //nextFilter = (IoFilter.NextFilter) mockNextFilter.getClass();
58      }
59  
60      public void testFilter() throws Exception {
61          MyWrappingFilter wrappingFilter = new MyWrappingFilter();
62  
63          /* record expectations */
64          Object message1 = "message one";
65          Object message2 = "message two";
66          WriteRequest writeRequest1 = new DefaultWriteRequest("test1");
67          WriteRequest writeRequest2 = new DefaultWriteRequest("test2");
68          Throwable cause = new Throwable("testing");
69  
70          nextFilter.sessionCreated(session);
71          nextFilter.sessionOpened(session);
72          nextFilter.sessionIdle(session, IdleStatus.READER_IDLE);
73          nextFilter.messageReceived(session, message1);
74          nextFilter.messageSent(session, writeRequest1);
75          nextFilter.messageSent(session, writeRequest2);
76          nextFilter.messageReceived(session, message2);
77          nextFilter.filterWrite(session, writeRequest1);
78          nextFilter.filterClose(session);
79          nextFilter.exceptionCaught(session, cause);
80          nextFilter.sessionClosed(session);
81  
82          /* replay */
83          EasyMock.replay( nextFilter );
84          wrappingFilter.sessionCreated(nextFilter, session);
85          wrappingFilter.sessionOpened(nextFilter, session);
86          wrappingFilter.sessionIdle(nextFilter, session, IdleStatus.READER_IDLE);
87          wrappingFilter.messageReceived(nextFilter, session, message1);
88          wrappingFilter.messageSent(nextFilter, session, writeRequest1);
89          wrappingFilter.messageSent(nextFilter, session, writeRequest2);
90          wrappingFilter.messageReceived(nextFilter, session, message2);
91          wrappingFilter.filterWrite(nextFilter,session, writeRequest1);
92          wrappingFilter.filterClose(nextFilter, session);
93          wrappingFilter.exceptionCaught(nextFilter, session, cause);
94          wrappingFilter.sessionClosed(nextFilter, session);
95  
96          /* verify */
97          EasyMock.verify( nextFilter );
98  
99          /* check event lists */
100         assertEquals(11, wrappingFilter.eventsBefore.size());
101         assertEquals(IoEventType.SESSION_CREATED, wrappingFilter.eventsBefore.get(0));
102         assertEquals(IoEventType.SESSION_OPENED, wrappingFilter.eventsBefore.get(1));
103         assertEquals(IoEventType.SESSION_IDLE, wrappingFilter.eventsBefore.get(2));
104         assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(3));
105         assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(4));
106         assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(5));
107         assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(6));
108         assertEquals(IoEventType.WRITE, wrappingFilter.eventsBefore.get(7));
109         assertEquals(IoEventType.CLOSE, wrappingFilter.eventsBefore.get(8));
110         assertEquals(IoEventType.EXCEPTION_CAUGHT, wrappingFilter.eventsBefore.get(9));
111         assertEquals(IoEventType.SESSION_CLOSED, wrappingFilter.eventsBefore.get(10));
112         assertEquals(wrappingFilter.eventsBefore,  wrappingFilter.eventsAfter);
113     }
114 
115 
116     private static class MyWrappingFilter extends CommonEventFilter {
117 
118         private List<IoEventType> eventsBefore = new ArrayList<IoEventType>();
119 
120         private List<IoEventType> eventsAfter = new ArrayList<IoEventType>();
121 
122         @Override
123         protected void filter(IoFilterEvent event) {
124             eventsBefore.add(event.getType());
125             event.fire();
126             eventsAfter.add(event.getType());
127         }
128     }
129 }