001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.mina.filter.util; 021 022import static org.junit.Assert.assertEquals; 023 024import java.util.ArrayList; 025import java.util.List; 026 027import org.apache.mina.core.filterchain.IoFilter; 028import org.apache.mina.core.filterchain.IoFilterEvent; 029import org.apache.mina.core.session.DummySession; 030import org.apache.mina.core.session.IdleStatus; 031import org.apache.mina.core.session.IoEventType; 032import org.apache.mina.core.session.IoSession; 033import org.apache.mina.core.write.DefaultWriteRequest; 034import org.apache.mina.core.write.WriteRequest; 035import org.easymock.EasyMock; 036import org.junit.Before; 037import org.junit.Test; 038 039/** 040 * Tests {@link CommonEventFilter}. 041 * 042 * @author <a href="http://mina.apache.org">Apache MINA Project</a> 043 */ 044 045public class WrappingFilterTest { 046 private IoSession session; 047 048 private IoFilter.NextFilter nextFilter; 049 050 @Before 051 public void setUp() throws Exception { 052 /* 053 * Create the mocks. 054 */ 055 session = new DummySession(); 056 nextFilter = EasyMock.createMock(IoFilter.NextFilter.class); 057 //nextFilter = (IoFilter.NextFilter) mockNextFilter.getClass(); 058 } 059 060 @Test 061 public void testFilter() throws Exception { 062 MyWrappingFilter wrappingFilter = new MyWrappingFilter(); 063 064 /* record expectations */ 065 Object message1 = "message one"; 066 Object message2 = "message two"; 067 WriteRequest writeRequest1 = new DefaultWriteRequest("test1"); 068 WriteRequest writeRequest2 = new DefaultWriteRequest("test2"); 069 Throwable cause = new Throwable("testing"); 070 071 nextFilter.sessionCreated(session); 072 nextFilter.sessionOpened(session); 073 nextFilter.sessionIdle(session, IdleStatus.READER_IDLE); 074 nextFilter.messageReceived(session, message1); 075 nextFilter.messageSent(session, writeRequest1); 076 nextFilter.messageSent(session, writeRequest2); 077 nextFilter.messageReceived(session, message2); 078 nextFilter.filterWrite(session, writeRequest1); 079 nextFilter.filterClose(session); 080 nextFilter.exceptionCaught(session, cause); 081 nextFilter.sessionClosed(session); 082 083 /* replay */ 084 EasyMock.replay(nextFilter); 085 wrappingFilter.sessionCreated(nextFilter, session); 086 wrappingFilter.sessionOpened(nextFilter, session); 087 wrappingFilter.sessionIdle(nextFilter, session, IdleStatus.READER_IDLE); 088 wrappingFilter.messageReceived(nextFilter, session, message1); 089 wrappingFilter.messageSent(nextFilter, session, writeRequest1); 090 wrappingFilter.messageSent(nextFilter, session, writeRequest2); 091 wrappingFilter.messageReceived(nextFilter, session, message2); 092 wrappingFilter.filterWrite(nextFilter, session, writeRequest1); 093 wrappingFilter.filterClose(nextFilter, session); 094 wrappingFilter.exceptionCaught(nextFilter, session, cause); 095 wrappingFilter.sessionClosed(nextFilter, session); 096 097 /* verify */ 098 EasyMock.verify(nextFilter); 099 100 /* check event lists */ 101 assertEquals(11, wrappingFilter.eventsBefore.size()); 102 assertEquals(IoEventType.SESSION_CREATED, wrappingFilter.eventsBefore.get(0)); 103 assertEquals(IoEventType.SESSION_OPENED, wrappingFilter.eventsBefore.get(1)); 104 assertEquals(IoEventType.SESSION_IDLE, wrappingFilter.eventsBefore.get(2)); 105 assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(3)); 106 assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(4)); 107 assertEquals(IoEventType.MESSAGE_SENT, wrappingFilter.eventsBefore.get(5)); 108 assertEquals(IoEventType.MESSAGE_RECEIVED, wrappingFilter.eventsBefore.get(6)); 109 assertEquals(IoEventType.WRITE, wrappingFilter.eventsBefore.get(7)); 110 assertEquals(IoEventType.CLOSE, wrappingFilter.eventsBefore.get(8)); 111 assertEquals(IoEventType.EXCEPTION_CAUGHT, wrappingFilter.eventsBefore.get(9)); 112 assertEquals(IoEventType.SESSION_CLOSED, wrappingFilter.eventsBefore.get(10)); 113 assertEquals(wrappingFilter.eventsBefore, wrappingFilter.eventsAfter); 114 } 115 116 private static class MyWrappingFilter extends CommonEventFilter { 117 List<IoEventType> eventsBefore = new ArrayList<IoEventType>(); 118 119 List<IoEventType> eventsAfter = new ArrayList<IoEventType>(); 120 121 /** 122 * Default constructor 123 */ 124 public MyWrappingFilter() { 125 super(); 126 } 127 128 @Override 129 protected void filter(IoFilterEvent event) { 130 eventsBefore.add(event.getType()); 131 event.fire(); 132 eventsAfter.add(event.getType()); 133 } 134 } 135}