KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > filter > codec > CumulativeProtocolDecoderTest


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.codec;
21
22 import java.net.SocketAddress JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.List JavaDoc;
25
26 import junit.framework.Assert;
27 import junit.framework.TestCase;
28
29 import org.apache.mina.common.ByteBuffer;
30 import org.apache.mina.common.CloseFuture;
31 import org.apache.mina.common.IoFilterChain;
32 import org.apache.mina.common.IoHandler;
33 import org.apache.mina.common.IoServiceConfig;
34 import org.apache.mina.common.IoSession;
35 import org.apache.mina.common.IoService;
36 import org.apache.mina.common.IoSessionConfig;
37 import org.apache.mina.common.TransportType;
38 import org.apache.mina.common.support.BaseIoSession;
39
40 /**
41  * Tests {@link CumulativeProtocolDecoder}.
42  *
43  * @author The Apache Directory Project (mina-dev@directory.apache.org)
44  * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (금, 13 7월 2007) $
45  */

46 public class CumulativeProtocolDecoderTest extends TestCase {
47     private final IoSession session = new IoSessionImpl();
48
49     private ByteBuffer buf;
50
51     private IntegerDecoder decoder;
52
53     private IntegerDecoderOutput output;
54
55     public static void main(String JavaDoc[] args) {
56         junit.textui.TestRunner.run(CumulativeProtocolDecoderTest.class);
57     }
58
59     protected void setUp() throws Exception JavaDoc {
60         buf = ByteBuffer.allocate(16);
61         decoder = new IntegerDecoder();
62         output = new IntegerDecoderOutput();
63     }
64
65     protected void tearDown() throws Exception JavaDoc {
66         decoder.dispose(session);
67     }
68
69     public void testCumulation() throws Exception JavaDoc {
70         buf.put((byte) 0);
71         buf.flip();
72
73         decoder.decode(session, buf, output);
74         Assert.assertEquals(0, output.getValues().size());
75         Assert.assertEquals(buf.limit(), buf.position());
76
77         buf.clear();
78         buf.put((byte) 0);
79         buf.put((byte) 0);
80         buf.put((byte) 1);
81         buf.flip();
82
83         decoder.decode(session, buf, output);
84         Assert.assertEquals(1, output.getValues().size());
85         Assert.assertEquals(new Integer JavaDoc(1), output.getValues().get(0));
86         Assert.assertEquals(buf.limit(), buf.position());
87     }
88
89     public void testRepeatitiveDecode() throws Exception JavaDoc {
90         for (int i = 0; i < 4; i++) {
91             buf.putInt(i);
92         }
93         buf.flip();
94
95         decoder.decode(session, buf, output);
96         Assert.assertEquals(4, output.getValues().size());
97         Assert.assertEquals(buf.limit(), buf.position());
98
99         List JavaDoc<Integer JavaDoc> expected = new ArrayList JavaDoc<Integer JavaDoc>();
100         for (int i = 0; i < 4; i++) {
101             expected.add(new Integer JavaDoc(i));
102         }
103         Assert.assertEquals(expected, output.getValues());
104     }
105
106     public void testWrongImplementationDetection() throws Exception JavaDoc {
107         try {
108             new WrongDecoder().decode(session, buf, output);
109             Assert.fail();
110         } catch (IllegalStateException JavaDoc e) {
111             // OK
112
}
113     }
114
115     private static class IntegerDecoder extends CumulativeProtocolDecoder {
116
117         protected boolean doDecode(IoSession session, ByteBuffer in,
118                 ProtocolDecoderOutput out) throws Exception JavaDoc {
119             Assert.assertTrue(in.hasRemaining());
120             if (in.remaining() < 4)
121                 return false;
122
123             out.write(new Integer JavaDoc(in.getInt()));
124             return true;
125         }
126
127         public void dispose() throws Exception JavaDoc {
128         }
129
130     }
131
132     private static class IntegerDecoderOutput implements ProtocolDecoderOutput {
133         private List JavaDoc<Object JavaDoc> values = new ArrayList JavaDoc<Object JavaDoc>();
134
135         public void write(Object JavaDoc message) {
136             values.add(message);
137         }
138
139         public List JavaDoc getValues() {
140             return values;
141         }
142
143         public void clear() {
144             values.clear();
145         }
146
147         public void flush() {
148         }
149     }
150
151     private static class WrongDecoder extends CumulativeProtocolDecoder {
152
153         protected boolean doDecode(IoSession session, ByteBuffer in,
154                 ProtocolDecoderOutput out) throws Exception JavaDoc {
155             return true;
156         }
157
158         public void dispose() throws Exception JavaDoc {
159         }
160     }
161
162     private static class IoSessionImpl extends BaseIoSession implements
163             IoSession {
164
165         public IoHandler getHandler() {
166             return null;
167         }
168
169         public ProtocolEncoder getEncoder() {
170             return null;
171         }
172
173         public ProtocolDecoder getDecoder() {
174             return null;
175         }
176
177         public CloseFuture close() {
178             return null;
179         }
180
181         public TransportType getTransportType() {
182             return TransportType.SOCKET;
183         }
184
185         public SocketAddress JavaDoc getRemoteAddress() {
186             return null;
187         }
188
189         public SocketAddress JavaDoc getLocalAddress() {
190             return null;
191         }
192
193         public IoFilterChain getFilterChain() {
194             return null;
195         }
196
197         public int getScheduledWriteRequests() {
198             return 0;
199         }
200
201         protected void updateTrafficMask() {
202         }
203
204         public boolean isClosing() {
205             return false;
206         }
207
208         public IoService getService() {
209             return null;
210         }
211
212         public IoServiceConfig getServiceConfig() {
213             return null;
214         }
215
216         public IoSessionConfig getConfig() {
217             return null;
218         }
219
220         public SocketAddress JavaDoc getServiceAddress() {
221             return null;
222         }
223
224         public int getScheduledWriteBytes() {
225             return 0;
226         }
227     }
228 }
229
Popular Tags