OLD | NEW |
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 Loading... |
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 |
| 257 // Flush after stream is completed is no-op. It shouldn't call into the
destroyed adapter. |
| 258 stream.flush(); |
| 259 |
| 260 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 261 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 262 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 263 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 264 assertEquals( |
| 265 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 266 } |
| 267 |
| 268 @SmallTest |
| 269 @Feature({"Cronet"}) |
| 270 @OnlyRunNativeCronet |
| 271 public void testSimplePostWithFlushTwice() throws Exception { |
| 272 String url = Http2TestServer.getEchoStreamUrl(); |
| 273 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
| 274 callback.addWriteData("Test String".getBytes(), false); |
| 275 callback.addWriteData("1234567890".getBytes(), false); |
| 276 callback.addWriteData("woot!".getBytes(), true); |
| 277 callback.addWriteData("Test String".getBytes(), false); |
| 278 callback.addWriteData("1234567890".getBytes(), false); |
| 279 callback.addWriteData("woot!".getBytes(), true); |
| 280 BidirectionalStream stream = new BidirectionalStream |
| 281 .Builder(url, callback, callback.ge
tExecutor(), |
| 282 mTestFramework.mCronetEngin
e) |
| 283 .disableAutoFlush(true) |
| 284 .addHeader("foo", "bar") |
| 285 .addHeader("empty", "") |
| 286 .addHeader("Content-Type", "zebra") |
| 287 .build(); |
| 288 stream.start(); |
| 289 callback.blockForDone(); |
| 290 assertTrue(stream.isDone()); |
| 291 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 292 assertEquals( |
| 293 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
| 294 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 295 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 296 assertEquals( |
| 297 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 298 } |
| 299 |
| 300 @SmallTest |
| 301 @Feature({"Cronet"}) |
| 302 @OnlyRunNativeCronet |
| 303 // Tests that it is legal to call read() in onStreamReady(). |
| 304 public void testReadDuringOnStreamReady() throws Exception { |
| 305 String url = Http2TestServer.getEchoStreamUrl(); |
| 306 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 307 @Override |
| 308 public void onStreamReady(BidirectionalStream stream) { |
| 309 super.onStreamReady(stream); |
| 310 startNextRead(stream); |
| 311 } |
| 312 @Override |
| 313 public void onResponseHeadersReceived( |
| 314 BidirectionalStream stream, UrlResponseInfo info) { |
| 315 // Do nothing. Skip readng. |
| 316 } |
| 317 }; |
| 318 callback.addWriteData("Test String".getBytes()); |
| 319 callback.addWriteData("1234567890".getBytes()); |
| 320 callback.addWriteData("woot!".getBytes()); |
| 321 BidirectionalStream stream = new BidirectionalStream |
| 322 .Builder(url, callback, callback.ge
tExecutor(), |
| 323 mTestFramework.mCronetEngin
e) |
| 324 .addHeader("foo", "bar") |
| 325 .addHeader("empty", "") |
| 326 .addHeader("Content-Type", "zebra") |
| 327 .build(); |
| 328 stream.start(); |
| 329 callback.blockForDone(); |
| 330 assertTrue(stream.isDone()); |
| 331 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 332 assertEquals("Test String1234567890woot!", callback.mResponseAsString); |
| 333 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 334 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 335 assertEquals( |
| 336 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 337 } |
| 338 |
| 339 @SmallTest |
| 340 @Feature({"Cronet"}) |
| 341 @OnlyRunNativeCronet |
| 342 // Tests that it is legal to call flush() when previous nativeWritevData has |
| 343 // yet to complete. |
| 344 public void testSimplePostWithFlushBeforePreviousWriteCompleted() throws Exc
eption { |
| 345 String url = Http2TestServer.getEchoStreamUrl(); |
| 346 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
| 347 @Override |
| 348 public void onStreamReady(BidirectionalStream stream) { |
| 349 super.onStreamReady(stream); |
| 350 // Write a second time before the previous nativeWritevData has
completed. |
| 351 startNextWrite(stream); |
| 352 assertEquals(0, numPendingWrites()); |
| 353 } |
| 354 }; |
| 355 callback.addWriteData("Test String".getBytes(), false); |
| 356 callback.addWriteData("1234567890".getBytes(), false); |
| 357 callback.addWriteData("woot!".getBytes(), true); |
| 358 callback.addWriteData("Test String".getBytes(), false); |
| 359 callback.addWriteData("1234567890".getBytes(), false); |
| 360 callback.addWriteData("woot!".getBytes(), true); |
| 361 BidirectionalStream stream = new BidirectionalStream |
| 362 .Builder(url, callback, callback.ge
tExecutor(), |
| 363 mTestFramework.mCronetEngin
e) |
| 364 .disableAutoFlush(true) |
| 365 .addHeader("foo", "bar") |
| 366 .addHeader("empty", "") |
| 367 .addHeader("Content-Type", "zebra") |
| 368 .build(); |
| 369 stream.start(); |
| 370 callback.blockForDone(); |
| 371 assertTrue(stream.isDone()); |
| 372 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
| 373 assertEquals( |
| 374 "Test String1234567890woot!Test String1234567890woot!", callback
.mResponseAsString); |
| 375 assertEquals("bar", callback.mResponseInfo.getAllHeaders().get("echo-foo
").get(0)); |
| 376 assertEquals("", callback.mResponseInfo.getAllHeaders().get("echo-empty"
).get(0)); |
| 377 assertEquals( |
| 378 "zebra", callback.mResponseInfo.getAllHeaders().get("echo-conten
t-type").get(0)); |
| 379 } |
| 380 |
| 381 @SmallTest |
| 382 @Feature({"Cronet"}) |
| 383 @OnlyRunNativeCronet |
239 public void testSimplePut() throws Exception { | 384 public void testSimplePut() throws Exception { |
240 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 385 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
241 callback.addWriteData("Put This Data!".getBytes()); | 386 callback.addWriteData("Put This Data!".getBytes()); |
242 String methodName = "PUT"; | 387 String methodName = "PUT"; |
243 BidirectionalStream.Builder builder = | 388 BidirectionalStream.Builder builder = |
244 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, | 389 new BidirectionalStream.Builder(Http2TestServer.getServerUrl(),
callback, |
245 callback.getExecutor(), mTestFramework.mCronetEngine); | 390 callback.getExecutor(), mTestFramework.mCronetEngine); |
246 builder.setHttpMethod(methodName); | 391 builder.setHttpMethod(methodName); |
247 builder.build().start(); | 392 builder.build().start(); |
248 callback.blockForDone(); | 393 callback.blockForDone(); |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 assertEquals("", callback.mResponseAsString); | 621 assertEquals("", callback.mResponseAsString); |
477 } | 622 } |
478 | 623 |
479 @SmallTest | 624 @SmallTest |
480 @Feature({"Cronet"}) | 625 @Feature({"Cronet"}) |
481 @OnlyRunNativeCronet | 626 @OnlyRunNativeCronet |
482 public void testDoubleWrite() throws Exception { | 627 public void testDoubleWrite() throws Exception { |
483 String url = Http2TestServer.getEchoStreamUrl(); | 628 String url = Http2TestServer.getEchoStreamUrl(); |
484 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { | 629 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback() { |
485 @Override | 630 @Override |
486 public void onRequestHeadersSent(BidirectionalStream stream) { | 631 public void onStreamReady(BidirectionalStream stream) { |
| 632 // super class will call Write() once. |
| 633 super.onStreamReady(stream); |
| 634 // Call Write() again. |
487 startNextWrite(stream); | 635 startNextWrite(stream); |
488 try { | 636 // Make sure there is no pending write. |
489 // Second write from callback invoked on single-threaded exe
cutor throws | 637 assertEquals(0, numPendingWrites()); |
490 // an exception because first write is still pending until i
ts completion | |
491 // is handled on executor. | |
492 ByteBuffer writeBuffer = ByteBuffer.allocateDirect(5); | |
493 writeBuffer.put("abc".getBytes()); | |
494 writeBuffer.flip(); | |
495 stream.write(writeBuffer, false); | |
496 fail("Exception is not thrown."); | |
497 } catch (Exception e) { | |
498 assertEquals("Unexpected write attempt.", e.getMessage()); | |
499 } | |
500 } | 638 } |
501 }; | 639 }; |
502 callback.addWriteData("1".getBytes()); | 640 callback.addWriteData("1".getBytes()); |
503 callback.addWriteData("2".getBytes()); | 641 callback.addWriteData("2".getBytes()); |
504 // Create stream. | 642 // Create stream. |
505 BidirectionalStream stream = new BidirectionalStream | 643 BidirectionalStream stream = new BidirectionalStream |
506 .Builder(url, callback, callback.ge
tExecutor(), | 644 .Builder(url, callback, callback.ge
tExecutor(), |
507 mTestFramework.mCronetEngin
e) | 645 mTestFramework.mCronetEngin
e) |
508 .build(); | 646 .build(); |
509 stream.start(); | 647 stream.start(); |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 callback.addWriteData(writeData.getBytes()); | 735 callback.addWriteData(writeData.getBytes()); |
598 stringData.append(writeData); | 736 stringData.append(writeData); |
599 } | 737 } |
600 // Create stream. | 738 // Create stream. |
601 BidirectionalStream stream = new BidirectionalStream | 739 BidirectionalStream stream = new BidirectionalStream |
602 .Builder(url, callback, callback.ge
tExecutor(), | 740 .Builder(url, callback, callback.ge
tExecutor(), |
603 mTestFramework.mCronetEngin
e) | 741 mTestFramework.mCronetEngin
e) |
604 .build(); | 742 .build(); |
605 stream.start(); | 743 stream.start(); |
606 // Write first. | 744 // Write first. |
607 callback.waitForNextWriteStep(); | 745 callback.waitForNextWriteStep(); // onStreamReady |
608 for (String expected : testData) { | 746 for (String expected : testData) { |
609 // Write next chunk of test data. | 747 // Write next chunk of test data. |
610 callback.startNextWrite(stream); | 748 callback.startNextWrite(stream); |
611 callback.waitForNextWriteStep(); | 749 callback.waitForNextWriteStep(); // onWriteCompleted |
612 } | 750 } |
613 | 751 |
614 // Wait for read step, but don't read yet. | 752 // Wait for read step, but don't read yet. |
615 callback.waitForNextReadStep(); | 753 callback.waitForNextReadStep(); // onResponseHeadersReceived |
616 assertEquals("", callback.mResponseAsString); | 754 assertEquals("", callback.mResponseAsString); |
617 // Read back. | 755 // Read back. |
618 callback.startNextRead(stream); | 756 callback.startNextRead(stream); |
619 callback.waitForNextReadStep(); | 757 callback.waitForNextReadStep(); // onReadCompleted |
620 // Verify that some part of proper response is read. | 758 // Verify that some part of proper response is read. |
621 assertTrue(callback.mResponseAsString.startsWith(testData[0])); | 759 assertTrue(callback.mResponseAsString.startsWith(testData[0])); |
622 assertTrue(stringData.toString().startsWith(callback.mResponseAsString))
; | 760 assertTrue(stringData.toString().startsWith(callback.mResponseAsString))
; |
623 // Read the rest of the response. | 761 // Read the rest of the response. |
624 callback.setAutoAdvance(true); | 762 callback.setAutoAdvance(true); |
625 callback.startNextRead(stream); | 763 callback.startNextRead(stream); |
626 callback.blockForDone(); | 764 callback.blockForDone(); |
627 assertTrue(stream.isDone()); | 765 assertTrue(stream.isDone()); |
628 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 766 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
629 assertEquals(stringData.toString(), callback.mResponseAsString); | 767 assertEquals(stringData.toString(), callback.mResponseAsString); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 | 874 |
737 // Make sure position and limit were updated correctly. | 875 // Make sure position and limit were updated correctly. |
738 assertEquals(4, readBuffer.position()); | 876 assertEquals(4, readBuffer.position()); |
739 assertEquals(5, readBuffer.limit()); | 877 assertEquals(5, readBuffer.limit()); |
740 | 878 |
741 assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep); | 879 assertEquals(ResponseStep.ON_READ_COMPLETED, callback.mResponseStep); |
742 | 880 |
743 // One more read attempt. The request should complete. | 881 // One more read attempt. The request should complete. |
744 readBuffer.position(1); | 882 readBuffer.position(1); |
745 readBuffer.limit(5); | 883 readBuffer.limit(5); |
| 884 callback.setAutoAdvance(true); |
746 callback.startNextRead(stream, readBuffer); | 885 callback.startNextRead(stream, readBuffer); |
747 callback.waitForNextReadStep(); | 886 callback.blockForDone(); |
748 | 887 |
749 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 888 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
750 assertEquals("GET", callback.mResponseAsString); | 889 assertEquals("GET", callback.mResponseAsString); |
751 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); | 890 checkResponseInfo(callback.mResponseInfo, Http2TestServer.getEchoMethodU
rl(), 200, ""); |
752 | 891 |
753 // Check that buffer contents were not modified. | 892 // Check that buffer contents were not modified. |
754 assertEquals("FORTE", bufferContentsToString(readBuffer, 0, 5)); | 893 assertEquals("FORTE", bufferContentsToString(readBuffer, 0, 5)); |
755 | 894 |
756 // Position should not have been modified, since nothing was read. | 895 // Position should not have been modified, since nothing was read. |
757 assertEquals(1, readBuffer.position()); | 896 assertEquals(1, readBuffer.position()); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); | 955 TestBidirectionalStreamCallback callback = new TestBidirectionalStreamCa
llback(); |
817 callback.setFailure(failureType, failureStep); | 956 callback.setFailure(failureType, failureStep); |
818 BidirectionalStream.Builder builder = | 957 BidirectionalStream.Builder builder = |
819 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, | 958 new BidirectionalStream.Builder(Http2TestServer.getEchoMethodUrl
(), callback, |
820 callback.getExecutor(), mTestFramework.mCronetEngine); | 959 callback.getExecutor(), mTestFramework.mCronetEngine); |
821 BidirectionalStream stream = builder.setHttpMethod("GET").build(); | 960 BidirectionalStream stream = builder.setHttpMethod("GET").build(); |
822 stream.start(); | 961 stream.start(); |
823 callback.blockForDone(); | 962 callback.blockForDone(); |
824 // assertEquals(callback.mResponseStep, failureStep); | 963 // assertEquals(callback.mResponseStep, failureStep); |
825 assertTrue(stream.isDone()); | 964 assertTrue(stream.isDone()); |
826 // Cancellation when request headers are sent does not guarantee that | 965 // Cancellation when stream is ready does not guarantee that |
827 // mResponseInfo is null because there might be a | 966 // mResponseInfo is null because there might be a |
828 // onResponseHeadersReceived already queued in the executor. | 967 // onResponseHeadersReceived already queued in the executor. |
829 // See crbug.com/594432. | 968 // See crbug.com/594432. |
830 if (failureStep != ResponseStep.ON_REQUEST_HEADERS_SENT) { | 969 if (failureStep != ResponseStep.ON_STREAM_READY) { |
831 assertNotNull(callback.mResponseInfo); | 970 assertNotNull(callback.mResponseInfo); |
832 } | 971 } |
833 assertEquals(expectError, callback.mError != null); | 972 assertEquals(expectError, callback.mError != null); |
834 assertEquals(expectError, callback.mOnErrorCalled); | 973 assertEquals(expectError, callback.mOnErrorCalled); |
835 assertEquals(failureType == FailureType.CANCEL_SYNC | 974 assertEquals(failureType == FailureType.CANCEL_SYNC |
836 || failureType == FailureType.CANCEL_ASYNC | 975 || failureType == FailureType.CANCEL_ASYNC |
837 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE
, | 976 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE
, |
838 callback.mOnCanceledCalled); | 977 callback.mOnCanceledCalled); |
839 } | 978 } |
840 | 979 |
841 @SmallTest | 980 @SmallTest |
842 @Feature({"Cronet"}) | 981 @Feature({"Cronet"}) |
843 @OnlyRunNativeCronet | 982 @OnlyRunNativeCronet |
844 public void testFailures() throws Exception { | 983 public void testFailures() throws Exception { |
845 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_REQUEST_HEADERS_S
ENT, false); | 984 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_STREAM_READY, fal
se); |
846 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_REQUEST_HEADERS_
SENT, false); | 985 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_STREAM_READY, fa
lse); |
847 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RE
QUEST_HEADERS_SENT, | 986 throwOrCancel(FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_ST
REAM_READY, false); |
848 false); | 987 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_STREAM_READY, true
); |
849 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_REQUEST_HEADERS_SE
NT, true); | |
850 | 988 |
851 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED,
false); | 989 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_RESPONSE_STARTED,
false); |
852 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED
, false); | 990 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_RESPONSE_STARTED
, false); |
853 throwOrCancel( | 991 throwOrCancel( |
854 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE
_STARTED, false); | 992 FailureType.CANCEL_ASYNC_WITHOUT_PAUSE, ResponseStep.ON_RESPONSE
_STARTED, false); |
855 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED,
true); | 993 throwOrCancel(FailureType.THROW_SYNC, ResponseStep.ON_RESPONSE_STARTED,
true); |
856 | 994 |
857 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f
alse); | 995 throwOrCancel(FailureType.CANCEL_SYNC, ResponseStep.ON_READ_COMPLETED, f
alse); |
858 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED,
false); | 996 throwOrCancel(FailureType.CANCEL_ASYNC, ResponseStep.ON_READ_COMPLETED,
false); |
859 throwOrCancel( | 997 throwOrCancel( |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1050 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { | 1188 private static String bufferContentsToString(ByteBuffer byteBuffer, int star
t, int end) { |
1051 // Use a duplicate to avoid modifying byteBuffer. | 1189 // Use a duplicate to avoid modifying byteBuffer. |
1052 ByteBuffer duplicate = byteBuffer.duplicate(); | 1190 ByteBuffer duplicate = byteBuffer.duplicate(); |
1053 duplicate.position(start); | 1191 duplicate.position(start); |
1054 duplicate.limit(end); | 1192 duplicate.limit(end); |
1055 byte[] contents = new byte[duplicate.remaining()]; | 1193 byte[] contents = new byte[duplicate.remaining()]; |
1056 duplicate.get(contents); | 1194 duplicate.get(contents); |
1057 return new String(contents); | 1195 return new String(contents); |
1058 } | 1196 } |
1059 } | 1197 } |
OLD | NEW |