1 20 package org.apache.mina.filter; 21 22 import org.apache.mina.common.ByteBuffer; 23 import org.apache.mina.common.IoFilterChain; 24 import org.apache.mina.common.IoSession; 25 import org.apache.mina.common.IoFilter.NextFilter; 26 import org.apache.mina.filter.support.Zlib; 27 import org.apache.mina.common.IoFilter.WriteRequest; 28 import org.easymock.MockControl; 29 import org.easymock.AbstractMatcher; 30 31 import junit.framework.TestCase; 32 33 37 public class CompressionFilterTest extends TestCase { 38 private MockControl mockSession; 39 40 private MockControl mockNextFilter; 41 42 private MockControl mockIoFilterChain; 43 44 private IoSession session; 45 46 private NextFilter nextFilter; 47 48 private IoFilterChain ioFilterChain; 49 50 private CompressionFilter filter; 51 52 private Zlib deflater; 53 54 private Zlib inflater; 55 56 private Zlib actualDeflater; 57 58 private Zlib actualInflater; 59 60 String strCompress = "The quick brown fox jumps over the lazy dog. " 62 + "The quick brown fox jumps over the lazy dog. " 63 + "The quick brown fox jumps over the lazy dog. " 64 + "The quick brown fox jumps over the lazy dog. " 65 + "The quick brown fox jumps over the lazy dog. " 66 + "The quick brown fox jumps over the lazy dog. " 67 + "The quick brown fox jumps over the lazy dog. " 68 + "The quick brown fox jumps over the lazy dog. " 69 + "The quick brown fox jumps over the lazy dog. " 70 + "The quick brown fox jumps over the lazy dog. " 71 + "The quick brown fox jumps over the lazy dog. " 72 + "The quick brown fox jumps over the lazy dog. " 73 + "The quick brown fox jumps over the lazy dog. " 74 + "The quick brown fox jumps over the lazy dog. " 75 + "The quick brown fox jumps over the lazy dog. " 76 + "The quick brown fox jumps over the lazy dog. " 77 + "The quick brown fox jumps over the lazy dog. " 78 + "The quick brown fox jumps over the lazy dog. " 79 + "The quick brown fox jumps over the lazy dog. " 80 + "The quick brown fox jumps over the lazy dog. " 81 + "The quick brown fox jumps over the lazy dog. " 82 + "The quick brown fox jumps over the lazy dog. " 83 + "The quick brown fox jumps over the lazy dog. " 84 + "The quick brown fox jumps over the lazy dog. " 85 + "The quick brown fox jumps over the lazy dog. "; 86 87 protected void setUp() { 88 mockSession = MockControl.createControl(IoSession.class); 90 mockNextFilter = MockControl.createControl(NextFilter.class); 91 mockIoFilterChain = MockControl.createControl(IoFilterChain.class); 92 93 mockNextFilter.setDefaultMatcher(new DataMatcher()); 95 96 session = (IoSession) mockSession.getMock(); 97 nextFilter = (NextFilter) mockNextFilter.getMock(); 98 ioFilterChain = (IoFilterChain) mockIoFilterChain.getMock(); 99 100 filter = new CompressionFilter(CompressionFilter.COMPRESSION_MAX); 102 103 deflater = new Zlib(Zlib.COMPRESSION_MAX, Zlib.MODE_DEFLATER); 105 inflater = new Zlib(Zlib.COMPRESSION_MAX, Zlib.MODE_INFLATER); 106 107 actualDeflater = new Zlib(Zlib.COMPRESSION_MAX, Zlib.MODE_DEFLATER); 109 actualInflater = new Zlib(Zlib.COMPRESSION_MAX, Zlib.MODE_INFLATER); 110 } 111 112 public void testCompression() throws Exception { 113 ByteBuffer buf = ByteBuffer.wrap(strCompress.getBytes("UTF8")); 115 ByteBuffer actualOutput = actualDeflater.deflate(buf); 116 WriteRequest writeRequest = new WriteRequest(buf); 117 118 ioFilterChain.contains(CompressionFilter.class); 120 mockIoFilterChain.setReturnValue(false); 121 122 ioFilterChain.getSession(); 123 mockIoFilterChain.setReturnValue(session); 124 125 session.setAttribute(CompressionFilter.class.getName() + ".Deflater", 126 deflater); 127 mockSession.setDefaultMatcher(new DataMatcher()); 128 mockSession.setReturnValue(null, MockControl.ONE); 129 130 session.setAttribute(CompressionFilter.class.getName() + ".Inflater", 131 inflater); 132 mockSession.setReturnValue(null, MockControl.ONE); 133 134 session.containsAttribute(CompressionFilter.DISABLE_COMPRESSION_ONCE); 135 mockSession.setReturnValue(false); 136 137 session.getAttribute(CompressionFilter.class.getName() + ".Deflater"); 138 mockSession.setReturnValue(deflater); 139 140 nextFilter.filterWrite(session, new WriteRequest(actualOutput)); 141 142 mockSession.replay(); 144 mockIoFilterChain.replay(); 145 mockNextFilter.replay(); 146 147 filter.onPreAdd(ioFilterChain, "CompressionFilter", nextFilter); 149 filter.filterWrite(nextFilter, session, writeRequest); 150 151 mockNextFilter.verify(); 153 154 assertTrue(true); 155 } 156 157 public void testDecompression() throws Exception { 158 ByteBuffer buf = ByteBuffer.wrap(strCompress.getBytes("UTF8")); 160 ByteBuffer byteInput = actualDeflater.deflate(buf); 161 ByteBuffer actualOutput = actualInflater.inflate(byteInput); 162 163 ioFilterChain.contains(CompressionFilter.class); 165 mockIoFilterChain.setReturnValue(false); 166 167 ioFilterChain.getSession(); 168 mockIoFilterChain.setReturnValue(session); 169 170 session.setAttribute(CompressionFilter.class.getName() + ".Deflater", 171 deflater); 172 mockSession.setDefaultMatcher(new DataMatcher()); 173 mockSession.setReturnValue(null, MockControl.ONE); 174 175 session.setAttribute(CompressionFilter.class.getName() + ".Inflater", 176 inflater); 177 mockSession.setReturnValue(null, MockControl.ONE); 178 179 session.getAttribute(CompressionFilter.class.getName() + ".Inflater"); 180 mockSession.setReturnValue(inflater); 181 182 nextFilter.messageReceived(session, actualOutput); 183 184 mockSession.replay(); 186 mockIoFilterChain.replay(); 187 mockNextFilter.replay(); 188 189 filter.onPreAdd(ioFilterChain, "CompressionFilter", nextFilter); 191 filter.messageReceived(nextFilter, session, byteInput); 192 193 mockNextFilter.verify(); 195 196 assertTrue(true); 197 } 198 199 204 class DataMatcher extends AbstractMatcher { 205 protected boolean argumentMatches(Object arg0, Object arg1) { 206 if (arg0 instanceof WriteRequest) { 208 WriteRequest expected = (WriteRequest) arg0; 209 WriteRequest actual = (WriteRequest) arg1; 210 ByteBuffer bExpected = (ByteBuffer) expected.getMessage(); 211 ByteBuffer bActual = (ByteBuffer) actual.getMessage(); 212 return bExpected.equals(bActual); 213 } 214 return true; 215 } 216 } 217 } 218 | Popular Tags |