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
20
21
22
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
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
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
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
81 mockNextFilter.verify();
82
83
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 }