1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.mina.protocol;
20
21 import java.net.SocketAddress;
22
23 import junit.framework.Assert;
24 import junit.framework.TestCase;
25
26 import org.apache.mina.common.BaseSession;
27 import org.apache.mina.common.IdleStatus;
28 import org.apache.mina.common.SessionConfig;
29 import org.apache.mina.common.TransportType;
30
31 /***
32 * Tests {@link AbstractProtocolFilterChain}.
33 *
34 * @author Trustin Lee (trustin@apache.org)
35 * @version $Rev: 165586 $, $Date: 2005-05-02 15:27:27 +0900 $
36 */
37 public class ProtocolFilterChainTest extends TestCase
38 {
39 private ProtocolFilterChainImpl chain;
40 private ProtocolSession session;
41 private String result;
42
43 public void setUp()
44 {
45 chain = new ProtocolFilterChainImpl();
46 session = new TestSession();
47 result = "";
48 }
49
50 public void tearDown()
51 {
52 }
53
54 public void testDefault()
55 {
56 run( "HSO HMR HMS HSI HEC HSC" );
57 }
58
59 public void testChained()
60 {
61 chain.addLast( "A", new TestFilter( 'A' ) );
62 chain.addLast( "B", new TestFilter( 'B' ) );
63 run( "ASO BSO HSO" +
64 "AMR BMR HMR" +
65 "BFW AFW AMS BMS HMS" +
66 "ASI BSI HSI" +
67 "AEC BEC HEC" +
68 "ASC BSC HSC" );
69 }
70
71 private void run( String expectedResult )
72 {
73 chain.sessionOpened( session );
74 chain.messageReceived( session, new Object() );
75 chain.filterWrite( session, new Object() );
76 chain.sessionIdle( session, IdleStatus.READER_IDLE );
77 chain.exceptionCaught( session, new Exception() );
78 chain.sessionClosed( session );
79
80 result = formatResult( result );
81 expectedResult = formatResult( expectedResult );
82
83 System.out.println( "Expected: " + expectedResult );
84 System.out.println( "Actual: " + result );
85 Assert.assertEquals( expectedResult, result );
86 }
87
88 private String formatResult( String result )
89 {
90 result = result.replaceAll( "//s", "" );
91 StringBuffer buf = new StringBuffer( result.length() * 4 / 3 );
92 for( int i = 0; i < result.length(); i++ )
93 {
94 buf.append( result.charAt( i ) );
95 if( i % 3 == 2 )
96 {
97 buf.append(' ');
98 }
99 }
100
101 return buf.toString();
102 }
103
104 private class TestSession extends BaseSession implements ProtocolSession
105 {
106 private ProtocolHandler handler = new ProtocolHandlerAdapter()
107 {
108 public void sessionOpened(ProtocolSession session) {
109 result += "HSO";
110 }
111
112 public void sessionClosed(ProtocolSession session) {
113 result += "HSC";
114 }
115
116 public void sessionIdle(ProtocolSession session, IdleStatus status) {
117 result += "HSI";
118 }
119
120 public void exceptionCaught(ProtocolSession session, Throwable cause) {
121 result += "HEC";
122 if( cause.getClass() != Exception.class )
123 {
124 cause.printStackTrace( System.out );
125 }
126 }
127
128 public void messageReceived(ProtocolSession session, Object message) {
129 result += "HMR";
130 }
131
132 public void messageSent(ProtocolSession session, Object message) {
133 result += "HMS";
134 }
135 };
136
137 public ProtocolHandler getHandler() {
138 return handler;
139 }
140
141 public ProtocolEncoder getEncoder() {
142 return null;
143 }
144
145 public ProtocolDecoder getDecoder() {
146 return null;
147 }
148
149 public void close( boolean wait ) {
150 }
151
152 public void write(Object message) {
153 }
154
155 public TransportType getTransportType() {
156 return null;
157 }
158
159 public boolean isConnected() {
160 return false;
161 }
162
163 public SessionConfig getConfig() {
164 return null;
165 }
166
167 public SocketAddress getRemoteAddress() {
168 return null;
169 }
170
171 public SocketAddress getLocalAddress() {
172 return null;
173 }
174
175 public ProtocolFilterChain getFilterChain()
176 {
177 return null;
178 }
179 }
180
181 private class TestFilter implements ProtocolFilter
182 {
183 private final char id;
184
185 private TestFilter( char id )
186 {
187 this.id = id;
188 }
189
190 public void sessionOpened(NextFilter nextFilter, ProtocolSession session) {
191 result += id + "SO";
192 nextFilter.sessionOpened( session );
193 }
194
195 public void sessionClosed(NextFilter nextFilter, ProtocolSession session) {
196 result += id + "SC";
197 nextFilter.sessionClosed( session );
198 }
199
200 public void sessionIdle(NextFilter nextFilter, ProtocolSession session, IdleStatus status) {
201 result += id + "SI";
202 nextFilter.sessionIdle( session, status );
203 }
204
205 public void exceptionCaught(NextFilter nextFilter, ProtocolSession session, Throwable cause) {
206 result += id + "EC";
207 nextFilter.exceptionCaught( session, cause );
208 }
209
210 public void filterWrite(NextFilter nextFilter, ProtocolSession session, Object message) {
211 result += id + "FW";
212 nextFilter.filterWrite( session, message );
213 }
214
215 public void messageReceived(NextFilter nextFilter, org.apache.mina.protocol.ProtocolSession session, Object message) {
216 result += id + "MR";
217 nextFilter.messageReceived( session, message );
218 }
219
220 public void messageSent(NextFilter nextFilter, org.apache.mina.protocol.ProtocolSession session, Object message) {
221 result += id + "MS";
222 nextFilter.messageSent( session, message );
223 }
224 }
225
226 private static class ProtocolFilterChainImpl extends AbstractProtocolFilterChain
227 {
228 protected ProtocolFilterChainImpl()
229 {
230 }
231
232 protected void doWrite( ProtocolSession session, Object message )
233 {
234 messageSent( session, message );
235 }
236 }
237
238 }