|
7 | 7 | import static org.junit.Assert.fail;
|
8 | 8 |
|
9 | 9 | import java.nio.ByteBuffer;
|
| 10 | +import java.util.Arrays; |
10 | 11 | import java.util.zip.Deflater;
|
11 |
| -import java.util.zip.Inflater; |
| 12 | + |
12 | 13 | import org.java_websocket.exceptions.InvalidDataException;
|
13 | 14 | import org.java_websocket.extensions.permessage_deflate.PerMessageDeflateExtension;
|
14 |
| -import org.java_websocket.framing.BinaryFrame; |
15 | 15 | import org.java_websocket.framing.ContinuousFrame;
|
16 | 16 | import org.java_websocket.framing.TextFrame;
|
17 | 17 | import org.junit.Test;
|
@@ -51,6 +51,79 @@ public void testDecodeFrameIfRSVIsNotSet() throws InvalidDataException {
|
51 | 51 | assertFalse(frame.isRSV1());
|
52 | 52 | }
|
53 | 53 |
|
| 54 | + @Test |
| 55 | + public void testDecodeFrameNoCompression() throws InvalidDataException { |
| 56 | + PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(Deflater.NO_COMPRESSION); |
| 57 | + deflateExtension.setThreshold(0); |
| 58 | + String str = "This is a highly compressable text" |
| 59 | + + "This is a highly compressable text" |
| 60 | + + "This is a highly compressable text" |
| 61 | + + "This is a highly compressable text" |
| 62 | + + "This is a highly compressable text"; |
| 63 | + byte[] message = str.getBytes(); |
| 64 | + TextFrame frame = new TextFrame(); |
| 65 | + frame.setPayload(ByteBuffer.wrap(message)); |
| 66 | + deflateExtension.encodeFrame(frame); |
| 67 | + byte[] payloadArray = frame.getPayloadData().array(); |
| 68 | + assertArrayEquals(message, Arrays.copyOfRange(payloadArray, 5,payloadArray.length-5)); |
| 69 | + assertTrue(frame.isRSV1()); |
| 70 | + deflateExtension.decodeFrame(frame); |
| 71 | + assertArrayEquals(message, frame.getPayloadData().array()); |
| 72 | + } |
| 73 | + |
| 74 | + @Test |
| 75 | + public void testDecodeFrameBestSpeedCompression() throws InvalidDataException { |
| 76 | + PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(Deflater.BEST_SPEED); |
| 77 | + deflateExtension.setThreshold(0); |
| 78 | + String str = "This is a highly compressable text" |
| 79 | + + "This is a highly compressable text" |
| 80 | + + "This is a highly compressable text" |
| 81 | + + "This is a highly compressable text" |
| 82 | + + "This is a highly compressable text"; |
| 83 | + byte[] message = str.getBytes(); |
| 84 | + TextFrame frame = new TextFrame(); |
| 85 | + frame.setPayload(ByteBuffer.wrap(message)); |
| 86 | + |
| 87 | + Deflater localDeflater = new Deflater(Deflater.BEST_SPEED,true); |
| 88 | + localDeflater.setInput(ByteBuffer.wrap(message).array()); |
| 89 | + byte[] buffer = new byte[1024]; |
| 90 | + int bytesCompressed = localDeflater.deflate(buffer, 0, buffer.length, Deflater.SYNC_FLUSH); |
| 91 | + |
| 92 | + deflateExtension.encodeFrame(frame); |
| 93 | + byte[] payloadArray = frame.getPayloadData().array(); |
| 94 | + assertArrayEquals(Arrays.copyOfRange(buffer,0, bytesCompressed), Arrays.copyOfRange(payloadArray,0,payloadArray.length)); |
| 95 | + assertTrue(frame.isRSV1()); |
| 96 | + deflateExtension.decodeFrame(frame); |
| 97 | + assertArrayEquals(message, frame.getPayloadData().array()); |
| 98 | + } |
| 99 | + |
| 100 | + @Test |
| 101 | + public void testDecodeFrameBestCompression() throws InvalidDataException { |
| 102 | + PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(Deflater.BEST_COMPRESSION); |
| 103 | + deflateExtension.setThreshold(0); |
| 104 | + String str = "This is a highly compressable text" |
| 105 | + + "This is a highly compressable text" |
| 106 | + + "This is a highly compressable text" |
| 107 | + + "This is a highly compressable text" |
| 108 | + + "This is a highly compressable text"; |
| 109 | + byte[] message = str.getBytes(); |
| 110 | + TextFrame frame = new TextFrame(); |
| 111 | + frame.setPayload(ByteBuffer.wrap(message)); |
| 112 | + |
| 113 | + Deflater localDeflater = new Deflater(Deflater.BEST_COMPRESSION,true); |
| 114 | + localDeflater.setInput(ByteBuffer.wrap(message).array()); |
| 115 | + byte[] buffer = new byte[1024]; |
| 116 | + int bytesCompressed = localDeflater.deflate(buffer, 0, buffer.length, Deflater.SYNC_FLUSH); |
| 117 | + |
| 118 | + deflateExtension.encodeFrame(frame); |
| 119 | + byte[] payloadArray = frame.getPayloadData().array(); |
| 120 | + assertArrayEquals(Arrays.copyOfRange(buffer,0, bytesCompressed), Arrays.copyOfRange(payloadArray,0,payloadArray.length)); |
| 121 | + assertTrue(frame.isRSV1()); |
| 122 | + deflateExtension.decodeFrame(frame); |
| 123 | + assertArrayEquals(message, frame.getPayloadData().array()); |
| 124 | + } |
| 125 | + |
| 126 | + |
54 | 127 | @Test
|
55 | 128 | public void testEncodeFrame() {
|
56 | 129 | PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
|
@@ -191,35 +264,45 @@ public void testSetClientNoContextTakeover() {
|
191 | 264 | @Test
|
192 | 265 | public void testCopyInstance() {
|
193 | 266 | PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
|
194 |
| - IExtension newDeflateExtension = deflateExtension.copyInstance(); |
195 |
| - assertEquals(deflateExtension.toString(), newDeflateExtension.toString()); |
196 |
| - } |
| 267 | + PerMessageDeflateExtension newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance(); |
| 268 | + assertEquals("PerMessageDeflateExtension", newDeflateExtension.toString()); |
| 269 | + // Also check the values |
| 270 | + assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold()); |
| 271 | + assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover()); |
| 272 | + assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover()); |
| 273 | + assertEquals(deflateExtension.getCompressionLevel(), newDeflateExtension.getCompressionLevel()); |
197 | 274 |
|
198 |
| - @Test |
199 |
| - public void testGetInflater() { |
200 |
| - PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(); |
201 |
| - assertEquals(deflateExtension.getInflater().getRemaining(), new Inflater(true).getRemaining()); |
202 |
| - } |
203 | 275 |
|
204 |
| - @Test |
205 |
| - public void testSetInflater() { |
206 |
| - PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(); |
207 |
| - deflateExtension.setInflater(new Inflater(false)); |
208 |
| - assertEquals(deflateExtension.getInflater().getRemaining(), new Inflater(false).getRemaining()); |
209 |
| - } |
| 276 | + deflateExtension = new PerMessageDeflateExtension(Deflater.BEST_COMPRESSION); |
| 277 | + deflateExtension.setThreshold(512); |
| 278 | + deflateExtension.setServerNoContextTakeover(false); |
| 279 | + deflateExtension.setClientNoContextTakeover(true); |
| 280 | + newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance(); |
210 | 281 |
|
211 |
| - @Test |
212 |
| - public void testGetDeflater() { |
213 |
| - PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension(); |
214 |
| - assertEquals(deflateExtension.getDeflater().finished(), |
215 |
| - new Deflater(Deflater.DEFAULT_COMPRESSION, true).finished()); |
| 282 | + assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold()); |
| 283 | + assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover()); |
| 284 | + assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover()); |
| 285 | + assertEquals(deflateExtension.getCompressionLevel(), newDeflateExtension.getCompressionLevel()); |
| 286 | + |
| 287 | + |
| 288 | + deflateExtension = new PerMessageDeflateExtension(Deflater.NO_COMPRESSION); |
| 289 | + deflateExtension.setThreshold(64); |
| 290 | + deflateExtension.setServerNoContextTakeover(true); |
| 291 | + deflateExtension.setClientNoContextTakeover(false); |
| 292 | + newDeflateExtension = (PerMessageDeflateExtension)deflateExtension.copyInstance(); |
| 293 | + |
| 294 | + assertEquals(deflateExtension.getThreshold(), newDeflateExtension.getThreshold()); |
| 295 | + assertEquals(deflateExtension.isClientNoContextTakeover(), newDeflateExtension.isClientNoContextTakeover()); |
| 296 | + assertEquals(deflateExtension.isServerNoContextTakeover(), newDeflateExtension.isServerNoContextTakeover()); |
| 297 | + assertEquals(deflateExtension.getCompressionLevel(), newDeflateExtension.getCompressionLevel()); |
216 | 298 | }
|
217 | 299 |
|
218 | 300 | @Test
|
219 |
| - public void testSetDeflater() { |
| 301 | + public void testDefaults() { |
220 | 302 | PerMessageDeflateExtension deflateExtension = new PerMessageDeflateExtension();
|
221 |
| - deflateExtension.setDeflater(new Deflater(Deflater.DEFAULT_COMPRESSION, false)); |
222 |
| - assertEquals(deflateExtension.getDeflater().finished(), |
223 |
| - new Deflater(Deflater.DEFAULT_COMPRESSION, false).finished()); |
| 303 | + assertFalse(deflateExtension.isClientNoContextTakeover()); |
| 304 | + assertTrue(deflateExtension.isServerNoContextTakeover()); |
| 305 | + assertEquals(1024, deflateExtension.getThreshold()); |
| 306 | + assertEquals(Deflater.DEFAULT_COMPRESSION, deflateExtension.getCompressionLevel()); |
224 | 307 | }
|
225 | 308 | }
|
0 commit comments