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

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 Ryan'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.addWriteData("Test String".getBytes(), false);
243 callback.addWriteData("1234567890".getBytes(), false);
244 callback.addWriteData("woot!".getBytes(), true);
245 BidirectionalStream stream = new BidirectionalStream
246 .Builder(url, callback, callback.ge tExecutor(),
247 mTestFramework.mCronetEngin e)
248 .disableAutoFlush(true)
249 .addHeader("foo", "bar")
250 .addHeader("empty", "")
251 .addHeader("Content-Type", "zebra")
252 .build();
253 stream.start();
254 callback.blockForDone();
255 assertTrue(stream.isDone());
256 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
257 assertEquals("Test String1234567890woot!", callback.mResponseAsString);
258 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
259 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
260 assertEquals(
261 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
262 }
263
264 @SmallTest
265 @Feature({"Cronet"})
266 @OnlyRunNativeCronet
267 public void testSimplePostWithFlushTwice() throws Exception {
268 String url = Http2TestServer.getEchoStreamUrl();
269 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
270 callback.addWriteData("Test String".getBytes(), false);
271 callback.addWriteData("1234567890".getBytes(), false);
272 callback.addWriteData("woot!".getBytes(), true);
273 callback.addWriteData("Test String".getBytes(), false);
274 callback.addWriteData("1234567890".getBytes(), false);
275 callback.addWriteData("woot!".getBytes(), true);
276 BidirectionalStream stream = new BidirectionalStream
277 .Builder(url, callback, callback.ge tExecutor(),
278 mTestFramework.mCronetEngin e)
279 .disableAutoFlush(true)
280 .addHeader("foo", "bar")
281 .addHeader("empty", "")
282 .addHeader("Content-Type", "zebra")
283 .build();
284 stream.start();
285 callback.blockForDone();
286 assertTrue(stream.isDone());
287 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
288 assertEquals(
289 "Test String1234567890woot!Test String1234567890woot!", callback .mResponseAsString);
290 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo ").get(0));
291 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty" ).get(0));
292 assertEquals(
293 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten t-type").get(0));
294 }
295
296 @SmallTest
297 @Feature({"Cronet"})
298 @OnlyRunNativeCronet
239 public void testSimplePut() throws Exception { 299 public void testSimplePut() throws Exception {
240 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 300 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
241 callback.addWriteData("Put This Data!".getBytes()); 301 callback.addWriteData("Put This Data!".getBytes());
242 String methodName = "PUT"; 302 String methodName = "PUT";
243 BidirectionalStream.Builder builder = 303 BidirectionalStream.Builder builder =
244 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback, 304 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(), callback,
245 callback.getExecutor(), mTestFramework.mCronetEngine); 305 callback.getExecutor(), mTestFramework.mCronetEngine);
246 builder.setHttpMethod(methodName); 306 builder.setHttpMethod(methodName);
247 builder.build().start(); 307 builder.build().start();
248 callback.blockForDone(); 308 callback.blockForDone();
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 assertEquals("", callback.mResponseAsString); 536 assertEquals("", callback.mResponseAsString);
477 } 537 }
478 538
479 @SmallTest 539 @SmallTest
480 @Feature({"Cronet"}) 540 @Feature({"Cronet"})
481 @OnlyRunNativeCronet 541 @OnlyRunNativeCronet
482 public void testDoubleWrite() throws Exception { 542 public void testDoubleWrite() throws Exception {
483 String url = Http2TestServer.getEchoStreamUrl(); 543 String url = Http2TestServer.getEchoStreamUrl();
484 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() { 544 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback() {
485 @Override 545 @Override
486 public void onRequestHeadersSent(BidirectionalStream stream) { 546 public void onStreamReady(BidirectionalStream stream) {
487 startNextWrite(stream); 547 startNextWrite(stream);
488 try { 548 try {
489 // Second write from callback invoked on single-threaded exe cutor throws 549 // Second write from callback invoked on single-threaded exe cutor throws
490 // an exception because first write is still pending until i ts completion 550 // an exception because first write is still pending until i ts completion
491 // is handled on executor. 551 // is handled on executor.
492 ByteBuffer writeBuffer = ByteBuffer.allocateDirect(5); 552 ByteBuffer writeBuffer = ByteBuffer.allocateDirect(5);
493 writeBuffer.put("abc".getBytes()); 553 writeBuffer.put("abc".getBytes());
494 writeBuffer.flip(); 554 writeBuffer.flip();
495 stream.write(writeBuffer, false); 555 stream.write(writeBuffer, false);
496 fail("Exception is not thrown."); 556 fail("Exception is not thrown.");
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback(); 876 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa llback();
817 callback.setFailure(failureType, failureStep); 877 callback.setFailure(failureType, failureStep);
818 BidirectionalStream.Builder builder = 878 BidirectionalStream.Builder builder =
819 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback, 879 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl (), callback,
820 callback.getExecutor(), mTestFramework.mCronetEngine); 880 callback.getExecutor(), mTestFramework.mCronetEngine);
821 BidirectionalStream stream = builder.setHttpMethod("GET").build(); 881 BidirectionalStream stream = builder.setHttpMethod("GET").build();
822 stream.start(); 882 stream.start();
823 callback.blockForDone(); 883 callback.blockForDone();
824 // assertEquals(callback.mResponseStep, failureStep); 884 // assertEquals(callback.mResponseStep, failureStep);
825 assertTrue(stream.isDone()); 885 assertTrue(stream.isDone());
826 // Cancellation when request headers are sent does not guarantee that 886 // Cancellation when stream is ready does not guarantee that
827 // mResponseInfo is null because there might be a 887 // mResponseInfo is null because there might be a
828 // onResponseHeadersReceived already queued in the executor. 888 // onResponseHeadersReceived already queued in the executor.
829 // See crbug.com/594432. 889 // See crbug.com/594432.
830 if (failureStep != ResponseStep.ON_REQUEST_HEADERS_SENT) { 890 if (failureStep != ResponseStep.ON_STREAM_READY) {
831 assertNotNull(callback.mResponseInfo); 891 assertNotNull(callback.mResponseInfo);
832 } 892 }
833 assertEquals(expectError, callback.mError != null); 893 assertEquals(expectError, callback.mError != null);
834 assertEquals(expectError, callback.mOnErrorCalled); 894 assertEquals(expectError, callback.mOnErrorCalled);
835 assertEquals(failureType == FailureType.CANCEL_SYNC 895 assertEquals(failureType == FailureType.CANCEL_SYNC
836 || failureType == FailureType.CANCEL_ASYNC 896 || failureType == FailureType.CANCEL_ASYNC
837 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE , 897 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE ,
838 callback.mOnCanceledCalled); 898 callback.mOnCanceledCalled);
839 } 899 }
840 900
841 @SmallTest 901 @SmallTest
842 @Feature({"Cronet"}) 902 @Feature({"Cronet"})
843 @OnlyRunNativeCronet 903 @OnlyRunNativeCronet
844 public void testFailures() throws Exception { 904 public void testFailures() throws Exception {
845 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_REQUEST_HEADERS_S ENT, false); 905 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_STREAM_READY, fal se);
846 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_REQUEST_HEADERS_ SENT, false); 906 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_STREAM_READY, fa lse);
847 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RE QUEST_HEADERS_SENT, 907 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_ST REAM_READY, false);
848 false); 908 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_STREAM_READY, true );
849 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_REQUEST_HEADERS_SE NT, true);
850 909
851 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED, false); 910 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED, false);
852 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED , false); 911 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED , false);
853 throwOrCancel( 912 throwOrCancel(
854 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE _STARTED, false); 913 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE _STARTED, false);
855 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED, true); 914 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED, true);
856 915
857 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f alse); 916 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f alse);
858 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED, false); 917 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED, false);
859 throwOrCancel( 918 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) { 1109 private static String bufferContentsToString(ByteBuffer byteBuffer, int star t, int end) {
1051 // Use a duplicate to avoid modifying byteBuffer. 1110 // Use a duplicate to avoid modifying byteBuffer.
1052 ByteBuffer duplicate = byteBuffer.duplicate(); 1111 ByteBuffer duplicate = byteBuffer.duplicate();
1053 duplicate.position(start); 1112 duplicate.position(start);
1054 duplicate.limit(end); 1113 duplicate.limit(end);
1055 byte[] contents = new byte[duplicate.remaining()]; 1114 byte[] contents = new byte[duplicate.remaining()];
1056 duplicate.get(contents); 1115 duplicate.get(contents);
1057 return new String(contents); 1116 return new String(contents);
1058 } 1117 }
1059 } 1118 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698