|
28 | 28 |
|
29 | 29 | import java.io.ByteArrayOutputStream; |
30 | 30 | import java.io.IOException; |
| 31 | +import java.nio.ByteBuffer; |
31 | 32 | import java.nio.InvalidMarkException; |
32 | 33 | import org.junit.After; |
33 | 34 | import org.junit.Before; |
@@ -336,6 +337,33 @@ public void coalesceBeforeLargeBuffer() { |
336 | 337 | assertEquals(1524, composite.readableBytes()); |
337 | 338 | } |
338 | 339 |
|
| 340 | + @Test |
| 341 | + public void coalesceBeforeLargeBufferKeepsByteBufferSupport() { |
| 342 | + composite = new CompositeReadableBuffer(); |
| 343 | + // Small frames that support getByteBuffer(), as Netty's do |
| 344 | + composite.addBuffer(ReadableBuffers.wrap(ByteBuffer.wrap("hello ".getBytes(UTF_8)))); |
| 345 | + composite.addBuffer(ReadableBuffers.wrap(ByteBuffer.wrap("world".getBytes(UTF_8)))); |
| 346 | + composite.addBuffer(ReadableBuffers.wrap(ByteBuffer.wrap(new byte[1024]))); |
| 347 | + assertEquals(2, composite.getBufferCount()); |
| 348 | + |
| 349 | + assertTrue(composite.byteBufferSupported()); |
| 350 | + assertEquals(ByteBuffer.wrap("hello world".getBytes(UTF_8)), composite.getByteBuffer()); |
| 351 | + } |
| 352 | + |
| 353 | + @Test |
| 354 | + public void coalesceOnMaxSmallBuffersKeepsByteBufferSupport() { |
| 355 | + composite = new CompositeReadableBuffer(); |
| 356 | + byte[] expected = new byte[1000]; |
| 357 | + for (int i = 0; i < 1000; i++) { |
| 358 | + expected[i] = (byte) i; |
| 359 | + composite.addBuffer(ReadableBuffers.wrap(ByteBuffer.wrap(new byte[] {(byte) i}))); |
| 360 | + } |
| 361 | + assertEquals(1, composite.getBufferCount()); |
| 362 | + |
| 363 | + assertTrue(composite.byteBufferSupported()); |
| 364 | + assertEquals(ByteBuffer.wrap(expected), composite.getByteBuffer()); |
| 365 | + } |
| 366 | + |
339 | 367 | @Test |
340 | 368 | public void largeBufferResetsTailSmallBufferCount() { |
341 | 369 | composite = new CompositeReadableBuffer(); |
|
0 commit comments