Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Side by Side Diff: components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java

Issue 1856073002: Coalesce small buffers in net::BidirectionalStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address Andrei's comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.os.ConditionVariable; 7 import android.os.ConditionVariable;
8 import android.test.suitebuilder.annotation.SmallTest; 8 import android.test.suitebuilder.annotation.SmallTest;
9 9
10 import org.chromium.base.test.util.DisabledTest; 10 import org.chromium.base.test.util.DisabledTest;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 assertEquals("Test String1234567890woot!", callback.mResponseAsString); 229 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
230 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0)); 230 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
231 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0)); 231 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
232 assertEquals( 232 assertEquals(
233 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0)); 233 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
234 } 234 }
235 235
236 @SmallTest 236 @SmallTest
237 @Feature({"Cronet"}) 237 @Feature({"Cronet"})
238 @OnlyRunNativeCronet 238 @OnlyRunNativeCronet
239 public void testSimplePostWithFlush() throws Exception {
240 String url = Http2TestServer.getEchoStreamUrl();
241 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
242 callback.setHandleFlush();
243 callback.addWriteData("Test String".getBytes(), false);
244 callback.addWriteData("1234567890".getBytes(), false);
245 callback.addWriteData("woot!".getBytes(), true);
246 BidirectionalStream stream = new BidirectionalStream
247 .Builder(url, callback, callback.ge tExecutor(),
248 mTestFramework.mCronetEngin e)
249 .disableAutoFlush(true)
250 .addHeader("foo", "bar")
251 .addHeader("empty", "")
252 .addHeader("Content-Type", "zebra")
253 .build();
254 stream.start();
255 callback.blockForDone();
256 assertTrue(stream.isDone());
257 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
258 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
259 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
260 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
261 assertEquals(
262 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
263 }
264
265 @SmallTest
266 @Feature({"Cronet"})
267 @OnlyRunNativeCronet
268 public void testSimplePostWithFlushTwice() throws Exception {
269 String url = Http2TestServer.getEchoStreamUrl();
270 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
271 callback.setHandleFlush();
272 callback.addWriteData("Test String".getBytes(), false);
273 callback.addWriteData("1234567890".getBytes(), false);
274 callback.addWriteData("woot!".getBytes(), true);
275 callback.addWriteData("Test String".getBytes(), false);
276 callback.addWriteData("1234567890".getBytes(), false);
277 callback.addWriteData("woot!".getBytes(), true);
278 BidirectionalStream stream = new BidirectionalStream
279 .Builder(url, callback, callback.ge tExecutor(),
280 mTestFramework.mCronetEngin e)
281 .disableAutoFlush(true)
282 .addHeader("foo", "bar")
283 .addHeader("empty", "")
284 .addHeader("Content-Type", "zebra")
285 .build();
286 stream.start();
287 callback.blockForDone();
288 assertTrue(stream.isDone());
289 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
290 assertEquals(
291 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString);
292 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
293 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
294 assertEquals(
295 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
296 }
297
298 @SmallTest
299 @Feature({"Cronet"})
300 @OnlyRunNativeCronet
239 public void testSimplePut() throws Exception { 301 public void testSimplePut() throws Exception {
240 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 302 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
241 callback.addWriteData("Put This Data!".getBytes()); 303 callback.addWriteData("Put This Data!".getBytes());
242 String methodName = "PUT"; 304 String methodName = "PUT";
243 BidirectionalStream.Builder builder = 305 BidirectionalStream.Builder builder =
244 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 306 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback,
245 callback.getExecutor(), mTestFramework.mCronetEngine); 307 callback.getExecutor(), mTestFramework.mCronetEngine);
246 builder.setHttpMethod(methodName); 308 builder.setHttpMethod(methodName);
247 builder.build().start(); 309 builder.build().start();
248 callback.blockForDone(); 310 callback.blockForDone();
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 assertEquals("", callback.mResponseAsString); 538 assertEquals("", callback.mResponseAsString);
477 } 539 }
478 540
479 @SmallTest 541 @SmallTest
480 @Feature({"Cronet"}) 542 @Feature({"Cronet"})
481 @OnlyRunNativeCronet 543 @OnlyRunNativeCronet
482 public void testDoubleWrite() throws Exception { 544 public void testDoubleWrite() throws Exception {
483 String url = Http2TestServer.getEchoStreamUrl(); 545 String url = Http2TestServer.getEchoStreamUrl();
484 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 546 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
485 @Override 547 @Override
486 public void onRequestHeadersSent(BidirectionalStream stream) { 548 public void onStreamReady(BidirectionalStream stream) {
487 startNextWrite(stream); 549 startNextWrite(stream);
488 try { 550 try {
489 // Second write from callback invoked on single-threaded exe cutor throws 551 // Second write from callback invoked on single-threaded exe cutor throws
490 // an exception because first write is still pending until i ts completion 552 // an exception because first write is still pending until i ts completion
491 // is handled on executor. 553 // is handled on executor.
492 ByteBuffer writeBuffer = ByteBuffer.allocateDirect(5); 554 ByteBuffer writeBuffer = ByteBuffer.allocateDirect(5);
493 writeBuffer.put("abc".getBytes()); 555 writeBuffer.put("abc".getBytes());
494 writeBuffer.flip(); 556 writeBuffer.flip();
495 stream.write(writeBuffer, false); 557 stream.write(writeBuffer, false);
496 fail("Exception is not thrown."); 558 fail("Exception is not thrown.");
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 878 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
817 callback.setFailure(failureType, failureStep); 879 callback.setFailure(failureType, failureStep);
818 BidirectionalStream.Builder builder = 880 BidirectionalStream.Builder builder =
819 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 881 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback,
820 callback.getExecutor(), mTestFramework.mCronetEngine); 882 callback.getExecutor(), mTestFramework.mCronetEngine);
821 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 883 BidirectionalStream stream = builder.setHttpMethod("GET").build();
822 stream.start(); 884 stream.start();
823 callback.blockForDone(); 885 callback.blockForDone();
824 // assertEquals(callback.mResponseStep, failureStep); 886 // assertEquals(callback.mResponseStep, failureStep);
825 assertTrue(stream.isDone()); 887 assertTrue(stream.isDone());
826 // Cancellation when request headers are sent does not guarantee that 888 // Cancellation when stream is ready does not guarantee that
827 // mResponseInfo is null because there might be a 889 // mResponseInfo is null because there might be a
828 // onResponseHeadersReceived already queued in the executor. 890 // onResponseHeadersReceived already queued in the executor.
829 // See crbug.com/594432. 891 // See crbug.com/594432.
830 if (failureStep != ResponseStep.ON_REQUEST_HEADERS_SENT) { 892 if (failureStep != ResponseStep.ON_STREAM_READY) {
831 assertNotNull(callback.mResponseInfo); 893 assertNotNull(callback.mResponseInfo);
832 } 894 }
833 assertEquals(expectError, callback.mError != null); 895 assertEquals(expectError, callback.mError != null);
834 assertEquals(expectError, callback.mOnErrorCalled); 896 assertEquals(expectError, callback.mOnErrorCalled);
835 assertEquals(failureType == FailureType.CANCEL_SYNC 897 assertEquals(failureType == FailureType.CANCEL_SYNC
836 || failureType == FailureType.CANCEL_ASYNC 898 || failureType == FailureType.CANCEL_ASYNC
837 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE , 899 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE ,
838 callback.mOnCanceledCalled); 900 callback.mOnCanceledCalled);
839 } 901 }
840 902
841 @SmallTest 903 @SmallTest
842 @Feature({"Cronet"}) 904 @Feature({"Cronet"})
843 @OnlyRunNativeCronet 905 @OnlyRunNativeCronet
844 public void testFailures() throws Exception { 906 public void testFailures() throws Exception {
845 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_REQUEST_HEADERS_S ENT, false); 907 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_STREAM_READY, fal se);
846 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_REQUEST_HEADERS_ SENT, false); 908 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_STREAM_READY, fa lse);
847 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RE QUEST_HEADERS_SENT, 909 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_ST REAM_READY, false);
848 false); 910 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_STREAM_READY, true );
849 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_REQUEST_HEADERS_SE NT, true);
850 911
851 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED, false); 912 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED, false);
852 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED , false); 913 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED , false);
853 throwOrCancel( 914 throwOrCancel(
854 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE _STARTED, false); 915 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE _STARTED, false);
855 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED, true); 916 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED, true);
856 917
857 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f alse); 918 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f alse);
858 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED, false); 919 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED, false);
859 throwOrCancel( 920 throwOrCancel(
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) { 1111 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1051 // Use a duplicate to avoid modifying byteBuffer. 1112 // Use a duplicate to avoid modifying byteBuffer.
1052 ByteBuffer duplicate = byteBuffer.duplicate(); 1113 ByteBuffer duplicate = byteBuffer.duplicate();
1053 duplicate.position(start); 1114 duplicate.position(start);
1054 duplicate.limit(end); 1115 duplicate.limit(end);
1055 byte[] contents = new byte[duplicate.remaining()]; 1116 byte[] contents = new byte[duplicate.remaining()];
1056 duplicate.get(contents); 1117 duplicate.get(contents);
1057 return new String(contents); 1118 return new String(contents);
1058 } 1119 }
1059 } 1120 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698