1 20 package org.apache.mina.filter.codec; 21 22 import java.net.SocketAddress ; 23 import java.util.ArrayList ; 24 import java.util.List ; 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 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 [] args) { 56 junit.textui.TestRunner.run(CumulativeProtocolDecoderTest.class); 57 } 58 59 protected void setUp() throws Exception { 60 buf = ByteBuffer.allocate(16); 61 decoder = new IntegerDecoder(); 62 output = new IntegerDecoderOutput(); 63 } 64 65 protected void tearDown() throws Exception { 66 decoder.dispose(session); 67 } 68 69 public void testCumulation() throws Exception { 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 (1), output.getValues().get(0)); 86 Assert.assertEquals(buf.limit(), buf.position()); 87 } 88 89 public void testRepeatitiveDecode() throws Exception { 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 <Integer > expected = new ArrayList <Integer >(); 100 for (int i = 0; i < 4; i++) { 101 expected.add(new Integer (i)); 102 } 103 Assert.assertEquals(expected, output.getValues()); 104 } 105 106 public void testWrongImplementationDetection() throws Exception { 107 try { 108 new WrongDecoder().decode(session, buf, output); 109 Assert.fail(); 110 } catch (IllegalStateException e) { 111 } 113 } 114 115 private static class IntegerDecoder extends CumulativeProtocolDecoder { 116 117 protected boolean doDecode(IoSession session, ByteBuffer in, 118 ProtocolDecoderOutput out) throws Exception { 119 Assert.assertTrue(in.hasRemaining()); 120 if (in.remaining() < 4) 121 return false; 122 123 out.write(new Integer (in.getInt())); 124 return true; 125 } 126 127 public void dispose() throws Exception { 128 } 129 130 } 131 132 private static class IntegerDecoderOutput implements ProtocolDecoderOutput { 133 private List <Object > values = new ArrayList <Object >(); 134 135 public void write(Object message) { 136 values.add(message); 137 } 138 139 public List 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 { 155 return true; 156 } 157 158 public void dispose() throws Exception { 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 getRemoteAddress() { 186 return null; 187 } 188 189 public SocketAddress 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 getServiceAddress() { 221 return null; 222 } 223 224 public int getScheduledWriteBytes() { 225 return 0; 226 } 227 } 228 } 229 | Popular Tags |