Chromium Code Reviews| Index: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java |
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java |
| index 96f4fbb7293eed732f0a716a0a9d0a845974beff..c0bce0028f1318cbeec007eb5a14bb33992175cb 100644 |
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java |
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java |
| @@ -271,6 +271,76 @@ public class BidirectionalStreamTest extends CronetTestBase { |
| @SmallTest |
| @Feature({"Cronet"}) |
| @OnlyRunNativeCronet |
| + // Tests that a delayed flush() only sends buffers that have been written |
| + // before it is called, and it doesn't flush buffers in mPendingQueue. |
| + public void testFlushData() throws Exception { |
| + String url = Http2TestServer.getEchoStreamUrl(); |
| + TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCallback() { |
| + // Number of onWriteCompleted callbacks that have been invoked. |
| + private int mNumWriteCompleted = 0; |
| + @Override |
| + public void onWriteCompleted(BidirectionalStream stream, UrlResponseInfo info, |
| + ByteBuffer buffer, boolean endOfStream) { |
| + super.onWriteCompleted(stream, info, buffer, endOfStream); |
| + mNumWriteCompleted++; |
| + if (mNumWriteCompleted <= 3) { |
| + // 6 is in pending queue |
|
mef
2016/06/24 19:36:30
nit: end comment with period.
Maybe 6 -> "6" here
xunjieli
2016/06/24 20:48:22
Done.
|
| + assertEquals(1, |
| + ((CronetBidirectionalStream) stream).getPendingQueueSizeForTesting()); |
|
mef
2016/06/24 19:36:30
Maybe instead of getPendingQueueSizeForTesting() w
xunjieli
2016/06/24 20:48:22
Done. I made a list of read only copies of the byt
|
| + // 4 and 5 have been flushed. |
| + assertEquals( |
| + 0, ((CronetBidirectionalStream) stream).getFlushQueueSizeForTesting()); |
| + } else if (mNumWriteCompleted == 5) { |
| + // Now flush 6. |
| + assertEquals(1, |
| + ((CronetBidirectionalStream) stream).getPendingQueueSizeForTesting()); |
| + stream.flush(); |
| + assertEquals(0, |
| + ((CronetBidirectionalStream) stream).getPendingQueueSizeForTesting()); |
| + assertEquals( |
| + 0, ((CronetBidirectionalStream) stream).getFlushQueueSizeForTesting()); |
| + } |
| + } |
| + }; |
| + callback.addWriteData("1".getBytes(), false); |
| + callback.addWriteData("2".getBytes(), false); |
| + callback.addWriteData("3".getBytes(), true); |
| + callback.addWriteData("4".getBytes(), false); |
| + callback.addWriteData("5".getBytes(), true); |
| + callback.addWriteData("6".getBytes(), false); |
| + CronetBidirectionalStream stream = (CronetBidirectionalStream) new BidirectionalStream |
| + .Builder(url, callback, callback.getExecutor(), |
| + mTestFramework.mCronetEngine) |
| + .disableAutoFlush(true) |
| + .addHeader("foo", "bar") |
| + .addHeader("empty", "") |
| + .addHeader("Content-Type", "zebra") |
| + .build(); |
| + callback.setAutoAdvance(false); |
| + stream.start(); |
| + callback.waitForNextWriteStep(); // onStreamReady |
| + assertEquals(0, stream.getPendingQueueSizeForTesting()); |
| + assertEquals(0, stream.getFlushQueueSizeForTesting()); |
| + // Write 1, 2, 3 and flush(). |
| + callback.startNextWrite(stream); |
| + // Write 4, 5 and flush(). 4, 5 will be in flush queue. |
| + callback.startNextWrite(stream); |
| + // Write 6, but do not flush. 6 will be in pending queue. |
| + callback.startNextWrite(stream); |
| + |
| + callback.setAutoAdvance(true); |
| + callback.blockForDone(); |
| + assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("123456", callback.mResponseAsString); |
| + assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo").get(0)); |
| + assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty").get(0)); |
| + assertEquals( |
| + "zebra", callback.mResponseInfo.getAllHeaders().get("echo-content-type").get(0)); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + @OnlyRunNativeCronet |
| public void testSimpleGetWithFlush() throws Exception { |
| // TODO(xunjieli): Use ParameterizedTest instead of the loop. |
| for (int i = 0; i < 2; i++) { |