OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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.MoreAsserts; | |
8 import android.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
9 | 10 |
10 import org.chromium.base.test.util.Feature; | 11 import org.chromium.base.test.util.Feature; |
11 import org.chromium.net.TestUrlRequestCallback.FailureType; | 12 import org.chromium.net.TestUrlRequestCallback.FailureType; |
12 import org.chromium.net.TestUrlRequestCallback.ResponseStep; | 13 import org.chromium.net.TestUrlRequestCallback.ResponseStep; |
13 import org.chromium.net.test.FailurePhase; | 14 import org.chromium.net.test.FailurePhase; |
14 | 15 |
15 import java.nio.ByteBuffer; | 16 import java.nio.ByteBuffer; |
17 import java.util.AbstractMap; | |
16 import java.util.ArrayList; | 18 import java.util.ArrayList; |
17 import java.util.List; | 19 import java.util.List; |
18 import java.util.Map; | 20 import java.util.Map; |
19 import java.util.concurrent.ExecutorService; | 21 import java.util.concurrent.ExecutorService; |
20 import java.util.concurrent.Executors; | 22 import java.util.concurrent.Executors; |
21 import java.util.regex.Matcher; | 23 import java.util.regex.Matcher; |
22 import java.util.regex.Pattern; | 24 import java.util.regex.Pattern; |
23 | 25 |
24 /** | 26 /** |
25 * Test functionality of CronetUrlRequest. | 27 * Test functionality of CronetUrlRequest. |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
118 @SmallTest | 120 @SmallTest |
119 @Feature({"Cronet"}) | 121 @Feature({"Cronet"}) |
120 public void testSimpleGet() throws Exception { | 122 public void testSimpleGet() throws Exception { |
121 String url = NativeTestServer.getEchoMethodURL(); | 123 String url = NativeTestServer.getEchoMethodURL(); |
122 TestUrlRequestCallback callback = startAndWaitForComplete(url); | 124 TestUrlRequestCallback callback = startAndWaitForComplete(url); |
123 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 125 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
124 // Default method is 'GET'. | 126 // Default method is 'GET'. |
125 assertEquals("GET", callback.mResponseAsString); | 127 assertEquals("GET", callback.mResponseAsString); |
126 assertEquals(0, callback.mRedirectCount); | 128 assertEquals(0, callback.mRedirectCount); |
127 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 129 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
128 assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpSt atus = 200 OK, " | 130 // Length is not supported in pure java |
pauljensen
2015/12/08 19:49:53
Do you mean Content-Length? if so can you clarify
Charles
2015/12/11 16:45:40
No longer relevant.
| |
129 + "headers = [Connection=close, Content-Len gth=3, " | 131 if (!(mTestFramework.mCronetEngine instanceof JavaCronetEngine)) { |
130 + "Content-Type=text/plain], wasCached = fa lse, " | 132 assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], ht tpStatus = 200 OK, " |
131 + "negotiatedProtocol = unknown, proxyServe r= :0, " | 133 + "headers = [Connection=close, Content -Length=3, " |
132 + "receivedBytesCount = 86", | 134 + "Content-Type=text/plain], wasCached = false, " |
133 url, url), | 135 + "negotiatedProtocol = unknown, proxyS erver= :0, " |
134 callback.mResponseInfo.toString()); | 136 + "receivedBytesCount = 86", |
137 url, url), | |
138 callback.mResponseInfo.toString()); | |
139 } | |
140 | |
135 checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethod URL(), 200, "OK"); | 141 checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethod URL(), 200, "OK"); |
136 } | 142 } |
137 | 143 |
138 /** | 144 /** |
139 * Tests a redirect by running it step-by-step. Also tests that delaying a | 145 * Tests a redirect by running it step-by-step. Also tests that delaying a |
140 * request works as expected. To make sure there are no unexpected pending | 146 * request works as expected. To make sure there are no unexpected pending |
141 * messages, does a GET between UrlRequest.Callback callbacks. | 147 * messages, does a GET between UrlRequest.Callback callbacks. |
142 */ | 148 */ |
143 @SmallTest | 149 @SmallTest |
144 @Feature({"Cronet"}) | 150 @Feature({"Cronet"}) |
151 @OnlyRunNativeCronet | |
152 // We can't currently get bytes transferred | |
pauljensen
2015/12/08 19:49:53
Can we clarify "We" in comment?
pauljensen
2015/12/08 19:49:53
Can we disable just the part comparing bytes trans
Charles
2015/12/11 16:45:40
Done.
Charles
2015/12/11 16:45:40
Done.
| |
145 public void testRedirectAsync() throws Exception { | 153 public void testRedirectAsync() throws Exception { |
146 // Start the request and wait to see the redirect. | 154 // Start the request and wait to see the redirect. |
147 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 155 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
148 callback.setAutoAdvance(false); | 156 callback.setAutoAdvance(false); |
149 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), | 157 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), |
150 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 158 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
151 UrlRequest urlRequest = builder.build(); | 159 UrlRequest urlRequest = builder.build(); |
152 urlRequest.start(); | 160 urlRequest.start(); |
153 callback.waitForNextStep(); | 161 callback.waitForNextStep(); |
154 | 162 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
240 callback.mResponseAsString); | 248 callback.mResponseAsString); |
241 assertEquals(0, callback.mRedirectCount); | 249 assertEquals(0, callback.mRedirectCount); |
242 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 250 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
243 } | 251 } |
244 | 252 |
245 // Checks that UrlRequest.Callback.onFailed is only called once in the case | 253 // Checks that UrlRequest.Callback.onFailed is only called once in the case |
246 // of ERR_CONTENT_LENGTH_MISMATCH, which has an unusual failure path. | 254 // of ERR_CONTENT_LENGTH_MISMATCH, which has an unusual failure path. |
247 // See http://crbug.com/468803. | 255 // See http://crbug.com/468803. |
248 @SmallTest | 256 @SmallTest |
249 @Feature({"Cronet"}) | 257 @Feature({"Cronet"}) |
258 @OnlyRunNativeCronet // No canonical exception to assert on | |
250 public void testContentLengthMismatchFailsOnce() throws Exception { | 259 public void testContentLengthMismatchFailsOnce() throws Exception { |
251 String url = NativeTestServer.getFileURL( | 260 String url = NativeTestServer.getFileURL( |
252 "/content_length_mismatch.html"); | 261 "/content_length_mismatch.html"); |
253 TestUrlRequestCallback callback = startAndWaitForComplete(url); | 262 TestUrlRequestCallback callback = startAndWaitForComplete(url); |
254 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 263 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
255 // The entire response body will be read before the error is returned. | 264 // The entire response body will be read before the error is returned. |
256 // This is because the network stack returns data as it's read from the | 265 // This is because the network stack returns data as it's read from the |
257 // socket, and the socket close message which tiggers the error will | 266 // socket, and the socket close message which triggers the error will |
258 // only be passed along after all data has been read. | 267 // only be passed along after all data has been read. |
259 assertEquals("Response that lies about content length.", callback.mRespo nseAsString); | 268 assertEquals("Response that lies about content length.", callback.mRespo nseAsString); |
260 assertNotNull(callback.mError); | 269 assertNotNull(callback.mError); |
261 assertEquals("Exception in CronetUrlRequest: net::ERR_CONTENT_LENGTH_MIS MATCH", | 270 assertEquals("Exception in CronetUrlRequest: net::ERR_CONTENT_LENGTH_MIS MATCH", |
262 callback.mError.getMessage()); | 271 callback.mError.getMessage()); |
263 // Wait for a couple round trips to make sure there are no pending | 272 // Wait for a couple round trips to make sure there are no pending |
264 // onFailed messages. This test relies on checks in | 273 // onFailed messages. This test relies on checks in |
265 // TestUrlRequestCallback catching a second onFailed call. | 274 // TestUrlRequestCallback catching a second onFailed call. |
266 testSimpleGet(); | 275 testSimpleGet(); |
267 } | 276 } |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
427 assertEquals("header-value2", multiHeader.get(1)); | 436 assertEquals("header-value2", multiHeader.get(1)); |
428 } | 437 } |
429 | 438 |
430 @SmallTest | 439 @SmallTest |
431 @Feature({"Cronet"}) | 440 @Feature({"Cronet"}) |
432 public void testResponseHeadersList() throws Exception { | 441 public void testResponseHeadersList() throws Exception { |
433 TestUrlRequestCallback callback = startAndWaitForComplete(NativeTestServ er.getSuccessURL()); | 442 TestUrlRequestCallback callback = startAndWaitForComplete(NativeTestServ er.getSuccessURL()); |
434 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 443 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
435 List<Map.Entry<String, String>> responseHeaders = | 444 List<Map.Entry<String, String>> responseHeaders = |
436 callback.mResponseInfo.getAllHeadersAsList(); | 445 callback.mResponseInfo.getAllHeadersAsList(); |
437 assertEquals(5, responseHeaders.size()); | 446 |
438 assertEquals("Content-Type", responseHeaders.get(0).getKey()); | 447 MoreAsserts.assertContentsInAnyOrder(responseHeaders, |
439 assertEquals("text/plain", responseHeaders.get(0).getValue()); | 448 new AbstractMap.SimpleEntry<>("Content-Type", "text/plain"), |
440 assertEquals("Access-Control-Allow-Origin", responseHeaders.get(1).getKe y()); | 449 new AbstractMap.SimpleEntry<>("Access-Control-Allow-Origin", "*" ), |
441 assertEquals("*", responseHeaders.get(1).getValue()); | 450 new AbstractMap.SimpleEntry<>("header-name", "header-value"), |
442 assertEquals("header-name", responseHeaders.get(2).getKey()); | 451 new AbstractMap.SimpleEntry<>("multi-header-name", "header-value 1"), |
443 assertEquals("header-value", responseHeaders.get(2).getValue()); | 452 new AbstractMap.SimpleEntry<>("multi-header-name", "header-value 2")); |
444 assertEquals("multi-header-name", responseHeaders.get(3).getKey()); | |
445 assertEquals("header-value1", responseHeaders.get(3).getValue()); | |
446 assertEquals("multi-header-name", responseHeaders.get(4).getKey()); | |
447 assertEquals("header-value2", responseHeaders.get(4).getValue()); | |
448 } | 453 } |
449 | 454 |
450 @SmallTest | 455 @SmallTest |
451 @Feature({"Cronet"}) | 456 @Feature({"Cronet"}) |
457 @OnlyRunNativeCronet // We can't currently get bytes transferred | |
pauljensen
2015/12/08 19:49:53
ditto
Charles
2015/12/11 16:45:40
Done.
| |
452 public void testMockMultiRedirect() throws Exception { | 458 public void testMockMultiRedirect() throws Exception { |
453 TestUrlRequestCallback callback = | 459 TestUrlRequestCallback callback = |
454 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); | 460 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); |
455 UrlResponseInfo mResponseInfo = callback.mResponseInfo; | 461 UrlResponseInfo mResponseInfo = callback.mResponseInfo; |
456 assertEquals(2, callback.mRedirectCount); | 462 assertEquals(2, callback.mRedirectCount); |
457 assertEquals(200, mResponseInfo.getHttpStatusCode()); | 463 assertEquals(200, mResponseInfo.getHttpStatusCode()); |
458 assertEquals(2, callback.mRedirectResponseInfoList.size()); | 464 assertEquals(2, callback.mRedirectResponseInfoList.size()); |
459 | 465 |
460 // Check first redirect (multiredirect.html -> redirect.html) | 466 // Check first redirect (multiredirect.html -> redirect.html) |
461 UrlResponseInfo firstRedirectResponseInfo = callback.mRedirectResponseIn foList.get(0); | 467 UrlResponseInfo firstRedirectResponseInfo = callback.mRedirectResponseIn foList.get(0); |
(...skipping 26 matching lines...) Expand all Loading... | |
488 assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChai n().get(1)); | 494 assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChai n().get(1)); |
489 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain ().get(2)); | 495 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain ().get(2)); |
490 assertTrue(callback.mHttpResponseDataLength != 0); | 496 assertTrue(callback.mHttpResponseDataLength != 0); |
491 assertEquals(2, callback.mRedirectCount); | 497 assertEquals(2, callback.mRedirectCount); |
492 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 498 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
493 assertEquals(337, mResponseInfo.getReceivedBytesCount()); | 499 assertEquals(337, mResponseInfo.getReceivedBytesCount()); |
494 } | 500 } |
495 | 501 |
496 @SmallTest | 502 @SmallTest |
497 @Feature({"Cronet"}) | 503 @Feature({"Cronet"}) |
504 @OnlyRunNativeCronet // Can't check data length | |
pauljensen
2015/12/08 19:49:53
ditto
Charles
2015/12/11 16:45:40
Done.
| |
498 public void testMockNotFound() throws Exception { | 505 public void testMockNotFound() throws Exception { |
499 TestUrlRequestCallback callback = | 506 TestUrlRequestCallback callback = |
500 startAndWaitForComplete(NativeTestServer.getNotFoundURL()); | 507 startAndWaitForComplete(NativeTestServer.getNotFoundURL()); |
501 assertEquals(404, callback.mResponseInfo.getHttpStatusCode()); | 508 assertEquals(404, callback.mResponseInfo.getHttpStatusCode()); |
502 assertEquals(121, callback.mResponseInfo.getReceivedBytesCount()); | 509 assertEquals(121, callback.mResponseInfo.getReceivedBytesCount()); |
503 assertTrue(callback.mHttpResponseDataLength != 0); | 510 assertTrue(callback.mHttpResponseDataLength != 0); |
504 assertEquals(0, callback.mRedirectCount); | 511 assertEquals(0, callback.mRedirectCount); |
505 assertFalse(callback.mOnErrorCalled); | 512 assertFalse(callback.mOnErrorCalled); |
506 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 513 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
507 } | 514 } |
508 | 515 |
509 @SmallTest | 516 @SmallTest |
510 @Feature({"Cronet"}) | 517 @Feature({"Cronet"}) |
518 @OnlyRunNativeCronet | |
511 public void testMockStartAsyncError() throws Exception { | 519 public void testMockStartAsyncError() throws Exception { |
512 final int arbitraryNetError = -3; | 520 final int arbitraryNetError = -3; |
513 TestUrlRequestCallback callback = | 521 TestUrlRequestCallback callback = |
514 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( | 522 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( |
515 FailurePhase.START, arbitraryNetError)); | 523 FailurePhase.START, arbitraryNetError)); |
516 assertNull(callback.mResponseInfo); | 524 assertNull(callback.mResponseInfo); |
517 assertNotNull(callback.mError); | 525 assertNotNull(callback.mError); |
518 assertEquals(arbitraryNetError, callback.mError.netError()); | 526 assertEquals(arbitraryNetError, callback.mError.netError()); |
519 assertEquals(0, callback.mRedirectCount); | 527 assertEquals(0, callback.mRedirectCount); |
520 assertTrue(callback.mOnErrorCalled); | 528 assertTrue(callback.mOnErrorCalled); |
521 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); | 529 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); |
522 } | 530 } |
523 | 531 |
524 @SmallTest | 532 @SmallTest |
525 @Feature({"Cronet"}) | 533 @Feature({"Cronet"}) |
534 @OnlyRunNativeCronet | |
526 public void testMockReadDataSyncError() throws Exception { | 535 public void testMockReadDataSyncError() throws Exception { |
527 final int arbitraryNetError = -4; | 536 final int arbitraryNetError = -4; |
528 TestUrlRequestCallback callback = | 537 TestUrlRequestCallback callback = |
529 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( | 538 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( |
530 FailurePhase.READ_SYNC, arbitraryNetError)); | 539 FailurePhase.READ_SYNC, arbitraryNetError)); |
531 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 540 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
532 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); | 541 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); |
533 assertNotNull(callback.mError); | 542 assertNotNull(callback.mError); |
534 assertEquals(arbitraryNetError, callback.mError.netError()); | 543 assertEquals(arbitraryNetError, callback.mError.netError()); |
535 assertEquals(0, callback.mRedirectCount); | 544 assertEquals(0, callback.mRedirectCount); |
536 assertTrue(callback.mOnErrorCalled); | 545 assertTrue(callback.mOnErrorCalled); |
537 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); | 546 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); |
538 } | 547 } |
539 | 548 |
540 @SmallTest | 549 @SmallTest |
541 @Feature({"Cronet"}) | 550 @Feature({"Cronet"}) |
551 @OnlyRunNativeCronet | |
542 public void testMockReadDataAsyncError() throws Exception { | 552 public void testMockReadDataAsyncError() throws Exception { |
543 final int arbitraryNetError = -5; | 553 final int arbitraryNetError = -5; |
544 TestUrlRequestCallback callback = | 554 TestUrlRequestCallback callback = |
545 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( | 555 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( |
546 FailurePhase.READ_ASYNC, arbitraryNetError)); | 556 FailurePhase.READ_ASYNC, arbitraryNetError)); |
547 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 557 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
548 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); | 558 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); |
549 assertNotNull(callback.mError); | 559 assertNotNull(callback.mError); |
550 assertEquals(arbitraryNetError, callback.mError.netError()); | 560 assertEquals(arbitraryNetError, callback.mError.netError()); |
551 assertEquals(0, callback.mRedirectCount); | 561 assertEquals(0, callback.mRedirectCount); |
552 assertTrue(callback.mOnErrorCalled); | 562 assertTrue(callback.mOnErrorCalled); |
553 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); | 563 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); |
554 } | 564 } |
555 | 565 |
556 /** | 566 /** |
557 * Tests that an SSL cert error will be reported via {@link UrlRequest#onFai led}. | 567 * Tests that an SSL cert error will be reported via {@link UrlRequest#onFai led}. |
558 */ | 568 */ |
559 @SmallTest | 569 @SmallTest |
560 @Feature({"Cronet"}) | 570 @Feature({"Cronet"}) |
571 @OnlyRunNativeCronet // No canonical exception to use yet | |
561 public void testMockSSLCertificateError() throws Exception { | 572 public void testMockSSLCertificateError() throws Exception { |
562 TestUrlRequestCallback callback = startAndWaitForComplete( | 573 TestUrlRequestCallback callback = startAndWaitForComplete( |
563 MockUrlRequestJobFactory.getMockUrlForSSLCertificateError()); | 574 MockUrlRequestJobFactory.getMockUrlForSSLCertificateError()); |
564 assertNull(callback.mResponseInfo); | 575 assertNull(callback.mResponseInfo); |
565 assertNotNull(callback.mError); | 576 assertNotNull(callback.mError); |
566 assertTrue(callback.mOnErrorCalled); | 577 assertTrue(callback.mOnErrorCalled); |
567 assertEquals(-201, callback.mError.netError()); | 578 assertEquals(-201, callback.mError.netError()); |
568 assertEquals("Exception in CronetUrlRequest: net::ERR_CERT_DATE_INVALID" , | 579 assertEquals("Exception in CronetUrlRequest: net::ERR_CERT_DATE_INVALID" , |
569 callback.mError.getMessage()); | 580 callback.mError.getMessage()); |
570 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); | 581 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
795 final UrlRequest urlRequest = | 806 final UrlRequest urlRequest = |
796 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, | 807 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, |
797 callback.getExecutor(), mTestFramework.mCr onetEngine) | 808 callback.getExecutor(), mTestFramework.mCr onetEngine) |
798 .build(); | 809 .build(); |
799 | 810 |
800 // Try to read before starting request. | 811 // Try to read before starting request. |
801 try { | 812 try { |
802 callback.startNextRead(urlRequest); | 813 callback.startNextRead(urlRequest); |
803 fail("Exception not thrown"); | 814 fail("Exception not thrown"); |
804 } catch (IllegalStateException e) { | 815 } catch (IllegalStateException e) { |
805 assertEquals("Unexpected read attempt.", | |
806 e.getMessage()); | |
807 } | 816 } |
808 | 817 |
809 // Verify reading right after start throws an assertion. Both must be | 818 // Verify reading right after start throws an assertion. Both must be |
810 // invoked on the Executor thread, to prevent receiving data until after | 819 // invoked on the Executor thread, to prevent receiving data until after |
811 // startNextRead has been invoked. | 820 // startNextRead has been invoked. |
812 Runnable startAndRead = new Runnable() { | 821 Runnable startAndRead = new Runnable() { |
813 @Override | 822 @Override |
814 public void run() { | 823 public void run() { |
815 urlRequest.start(); | 824 urlRequest.start(); |
816 try { | 825 try { |
817 callback.startNextRead(urlRequest); | 826 callback.startNextRead(urlRequest); |
818 fail("Exception not thrown"); | 827 fail("Exception not thrown"); |
819 } catch (IllegalStateException e) { | 828 } catch (IllegalStateException e) { |
820 assertEquals("Unexpected read attempt.", | |
821 e.getMessage()); | |
822 } | 829 } |
823 } | 830 } |
824 }; | 831 }; |
825 callback.getExecutor().execute(startAndRead); | 832 callback.getExecutor().execute(startAndRead); |
826 callback.waitForNextStep(); | 833 callback.waitForNextStep(); |
827 | 834 |
828 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); | 835 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); |
829 // Try to read after the redirect. | 836 // Try to read after the redirect. |
830 try { | 837 try { |
831 callback.startNextRead(urlRequest); | 838 callback.startNextRead(urlRequest); |
832 fail("Exception not thrown"); | 839 fail("Exception not thrown"); |
833 } catch (IllegalStateException e) { | 840 } catch (IllegalStateException e) { |
834 assertEquals("Unexpected read attempt.", | |
835 e.getMessage()); | |
836 } | 841 } |
837 urlRequest.followRedirect(); | 842 urlRequest.followRedirect(); |
838 callback.waitForNextStep(); | 843 callback.waitForNextStep(); |
839 | 844 |
840 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); | 845 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); |
841 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 846 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
842 | 847 |
843 while (!callback.isDone()) { | 848 while (!callback.isDone()) { |
844 Runnable readTwice = new Runnable() { | 849 Runnable readTwice = new Runnable() { |
845 @Override | 850 @Override |
846 public void run() { | 851 public void run() { |
847 callback.startNextRead(urlRequest); | 852 callback.startNextRead(urlRequest); |
848 // Try to read again before the last read completes. | 853 // Try to read again before the last read completes. |
849 try { | 854 try { |
850 callback.startNextRead(urlRequest); | 855 callback.startNextRead(urlRequest); |
851 fail("Exception not thrown"); | 856 fail("Exception not thrown"); |
852 } catch (IllegalStateException e) { | 857 } catch (IllegalStateException e) { |
853 assertEquals("Unexpected read attempt.", | |
854 e.getMessage()); | |
855 } | 858 } |
856 } | 859 } |
857 }; | 860 }; |
858 callback.getExecutor().execute(readTwice); | 861 callback.getExecutor().execute(readTwice); |
859 callback.waitForNextStep(); | 862 callback.waitForNextStep(); |
860 } | 863 } |
861 | 864 |
862 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 865 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
863 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); | 866 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); |
864 | 867 |
865 // Try to read after request is complete. | 868 // Try to read after request is complete. |
866 try { | 869 try { |
867 callback.startNextRead(urlRequest); | 870 callback.startNextRead(urlRequest); |
868 fail("Exception not thrown"); | 871 fail("Exception not thrown"); |
869 } catch (IllegalStateException e) { | 872 } catch (IllegalStateException e) { |
870 assertEquals("Unexpected read attempt.", | |
871 e.getMessage()); | |
872 } | 873 } |
873 } | 874 } |
874 | 875 |
875 @SmallTest | 876 @SmallTest |
876 @Feature({"Cronet"}) | 877 @Feature({"Cronet"}) |
877 public void testUnexpectedFollowRedirects() throws Exception { | 878 public void testUnexpectedFollowRedirects() throws Exception { |
878 final TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 879 final TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
879 callback.setAutoAdvance(false); | 880 callback.setAutoAdvance(false); |
880 final UrlRequest urlRequest = | 881 final UrlRequest urlRequest = |
881 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, | 882 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, |
882 callback.getExecutor(), mTestFramework.mCr onetEngine) | 883 callback.getExecutor(), mTestFramework.mCr onetEngine) |
883 .build(); | 884 .build(); |
884 | 885 |
885 // Try to follow a redirect before starting the request. | 886 // Try to follow a redirect before starting the request. |
886 try { | 887 try { |
887 urlRequest.followRedirect(); | 888 urlRequest.followRedirect(); |
888 fail("Exception not thrown"); | 889 fail("Exception not thrown"); |
889 } catch (IllegalStateException e) { | 890 } catch (IllegalStateException e) { |
890 assertEquals("No redirect to follow.", | |
891 e.getMessage()); | |
892 } | 891 } |
893 | 892 |
894 // Try to follow a redirect just after starting the request. Has to be | 893 // Try to follow a redirect just after starting the request. Has to be |
895 // done on the executor thread to avoid a race. | 894 // done on the executor thread to avoid a race. |
896 Runnable startAndRead = new Runnable() { | 895 Runnable startAndRead = new Runnable() { |
897 @Override | 896 @Override |
898 public void run() { | 897 public void run() { |
899 urlRequest.start(); | 898 urlRequest.start(); |
900 try { | 899 try { |
901 urlRequest.followRedirect(); | 900 urlRequest.followRedirect(); |
902 fail("Exception not thrown"); | 901 fail("Exception not thrown"); |
903 } catch (IllegalStateException e) { | 902 } catch (IllegalStateException e) { |
904 assertEquals("No redirect to follow.", | |
905 e.getMessage()); | |
906 } | 903 } |
907 } | 904 } |
908 }; | 905 }; |
909 callback.getExecutor().execute(startAndRead); | 906 callback.getExecutor().execute(startAndRead); |
910 callback.waitForNextStep(); | 907 callback.waitForNextStep(); |
911 | 908 |
912 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); | 909 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); |
913 // Try to follow the redirect twice. Second attempt should fail. | 910 // Try to follow the redirect twice. Second attempt should fail. |
914 Runnable followRedirectTwice = new Runnable() { | 911 Runnable followRedirectTwice = new Runnable() { |
915 @Override | 912 @Override |
916 public void run() { | 913 public void run() { |
917 urlRequest.followRedirect(); | 914 urlRequest.followRedirect(); |
918 try { | 915 try { |
919 urlRequest.followRedirect(); | 916 urlRequest.followRedirect(); |
920 fail("Exception not thrown"); | 917 fail("Exception not thrown"); |
921 } catch (IllegalStateException e) { | 918 } catch (IllegalStateException e) { |
922 assertEquals("No redirect to follow.", | |
923 e.getMessage()); | |
924 } | 919 } |
925 } | 920 } |
926 }; | 921 }; |
927 callback.getExecutor().execute(followRedirectTwice); | 922 callback.getExecutor().execute(followRedirectTwice); |
928 callback.waitForNextStep(); | 923 callback.waitForNextStep(); |
929 | 924 |
930 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); | 925 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); |
931 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 926 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); |
932 | 927 |
933 while (!callback.isDone()) { | 928 while (!callback.isDone()) { |
934 try { | 929 try { |
935 urlRequest.followRedirect(); | 930 urlRequest.followRedirect(); |
936 fail("Exception not thrown"); | 931 fail("Exception not thrown"); |
937 } catch (IllegalStateException e) { | 932 } catch (IllegalStateException e) { |
938 assertEquals("No redirect to follow.", | |
939 e.getMessage()); | |
940 } | 933 } |
941 callback.startNextRead(urlRequest); | 934 callback.startNextRead(urlRequest); |
942 callback.waitForNextStep(); | 935 callback.waitForNextStep(); |
943 } | 936 } |
944 | 937 |
945 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 938 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
946 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); | 939 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); |
947 | 940 |
948 // Try to follow redirect after request is complete. | 941 // Try to follow redirect after request is complete. |
949 try { | 942 try { |
950 urlRequest.followRedirect(); | 943 urlRequest.followRedirect(); |
951 fail("Exception not thrown"); | 944 fail("Exception not thrown"); |
952 } catch (IllegalStateException e) { | 945 } catch (IllegalStateException e) { |
953 assertEquals("No redirect to follow.", | |
954 e.getMessage()); | |
955 } | 946 } |
956 } | 947 } |
957 | 948 |
958 @SmallTest | 949 @SmallTest |
959 @Feature({"Cronet"}) | 950 @Feature({"Cronet"}) |
960 public void testUploadSetDataProvider() throws Exception { | 951 public void testUploadSetDataProvider() throws Exception { |
961 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 952 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
962 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), | 953 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), |
963 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 954 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
964 | 955 |
965 try { | 956 try { |
966 builder.setUploadDataProvider(null, callback.getExecutor()); | 957 builder.setUploadDataProvider(null, callback.getExecutor()); |
967 fail("Exception not thrown"); | 958 fail("Exception not thrown"); |
968 } catch (NullPointerException e) { | 959 } catch (NullPointerException e) { |
969 assertEquals("Invalid UploadDataProvider.", e.getMessage()); | 960 assertEquals("Invalid UploadDataProvider.", e.getMessage()); |
970 } | 961 } |
971 | 962 |
972 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 963 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
973 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); | 964 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); |
974 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); | 965 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
975 try { | 966 try { |
976 builder.build().start(); | 967 builder.build().start(); |
977 fail("Exception not thrown"); | 968 fail("Exception not thrown"); |
978 } catch (IllegalArgumentException e) { | 969 } catch (IllegalArgumentException e) { |
979 assertEquals("Requests with upload data must have a Content-Type.", e.getMessage()); | |
980 } | 970 } |
981 } | 971 } |
982 | 972 |
983 @SmallTest | 973 @SmallTest |
984 @Feature({"Cronet"}) | 974 @Feature({"Cronet"}) |
985 public void testUploadEmptyBodySync() throws Exception { | 975 public void testUploadEmptyBodySync() throws Exception { |
986 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 976 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
987 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), | 977 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), |
988 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 978 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
989 | 979 |
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1369 | 1359 |
1370 // 2 read call for the first two data chunks, and 1 for final chunk. | 1360 // 2 read call for the first two data chunks, and 1 for final chunk. |
1371 assertEquals(3, dataProvider.getNumReadCalls()); | 1361 assertEquals(3, dataProvider.getNumReadCalls()); |
1372 assertEquals("hello there!", callback.mResponseAsString); | 1362 assertEquals("hello there!", callback.mResponseAsString); |
1373 } | 1363 } |
1374 | 1364 |
1375 // Test where an upload fails without ever initializing the | 1365 // Test where an upload fails without ever initializing the |
1376 // UploadDataStream, because it can't connect to the server. | 1366 // UploadDataStream, because it can't connect to the server. |
1377 @SmallTest | 1367 @SmallTest |
1378 @Feature({"Cronet"}) | 1368 @Feature({"Cronet"}) |
1369 @OnlyRunNativeCronet // No canonical exception to assert on | |
1379 public void testUploadFailsWithoutInitializingStream() throws Exception { | 1370 public void testUploadFailsWithoutInitializingStream() throws Exception { |
1380 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1371 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
1381 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), | 1372 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), |
1382 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1373 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
1383 // Shut down the test server, so connecting to it fails. Note that | 1374 // Shut down the test server, so connecting to it fails. Note that |
1384 // calling shutdown again during teardown is safe. | 1375 // calling shutdown again during teardown is safe. |
1385 NativeTestServer.shutdownNativeTestServer(); | 1376 NativeTestServer.shutdownNativeTestServer(); |
1386 | 1377 |
1387 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 1378 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
1388 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); | 1379 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); |
1389 dataProvider.addRead("test".getBytes()); | 1380 dataProvider.addRead("test".getBytes()); |
1390 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); | 1381 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
1391 builder.addHeader("Content-Type", "useless/string"); | 1382 builder.addHeader("Content-Type", "useless/string"); |
1392 builder.build().start(); | 1383 builder.build().start(); |
1393 callback.blockForDone(); | 1384 callback.blockForDone(); |
1394 | 1385 |
1395 assertNull(callback.mResponseInfo); | 1386 assertNull(callback.mResponseInfo); |
1396 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED ", | 1387 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED ", |
1397 callback.mError.getMessage()); | 1388 callback.mError.getMessage()); |
1398 } | 1389 } |
1399 | 1390 |
1400 private void throwOrCancel(FailureType failureType, ResponseStep failureStep , | 1391 private void throwOrCancel(FailureType failureType, ResponseStep failureStep , |
1401 boolean expectResponseInfo, boolean expectError) { | 1392 boolean expectResponseInfo, boolean expectError) { |
1393 System.out.println("Testing " + failureType + " during " + failureStep); | |
pauljensen
2015/12/08 19:49:53
you still need this?
Charles
2015/12/11 16:45:40
Done.
| |
1402 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1394 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
1403 callback.setFailure(failureType, failureStep); | 1395 callback.setFailure(failureType, failureStep); |
1404 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), | 1396 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), |
1405 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1397 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
1406 UrlRequest urlRequest = builder.build(); | 1398 UrlRequest urlRequest = builder.build(); |
1407 urlRequest.start(); | 1399 urlRequest.start(); |
1408 callback.blockForDone(); | 1400 callback.blockForDone(); |
1409 assertEquals(1, callback.mRedirectCount); | 1401 assertEquals(1, callback.mRedirectCount); |
1410 assertEquals(callback.mResponseStep, failureStep); | |
1411 assertTrue(urlRequest.isDone()); | 1402 assertTrue(urlRequest.isDone()); |
1412 assertEquals(expectResponseInfo, callback.mResponseInfo != null); | 1403 assertEquals(expectResponseInfo, callback.mResponseInfo != null); |
1413 assertEquals(expectError, callback.mError != null); | 1404 assertEquals(expectError, callback.mError != null); |
1414 assertEquals(expectError, callback.mOnErrorCalled); | 1405 assertEquals(expectError, callback.mOnErrorCalled); |
1415 assertEquals(failureType == FailureType.CANCEL_SYNC | 1406 assertEquals(failureType == FailureType.CANCEL_SYNC |
1416 || failureType == FailureType.CANCEL_ASYNC | 1407 || failureType == FailureType.CANCEL_ASYNC |
1417 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE , | 1408 || failureType == FailureType.CANCEL_ASYNC_WITHOUT_PAUSE , |
1418 callback.mOnCanceledCalled); | 1409 callback.mOnCanceledCalled); |
1419 } | 1410 } |
1420 | 1411 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1462 assertEquals(1, callback.mRedirectCount); | 1453 assertEquals(1, callback.mRedirectCount); |
1463 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1454 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
1464 assertTrue(urlRequest.isDone()); | 1455 assertTrue(urlRequest.isDone()); |
1465 assertNotNull(callback.mResponseInfo); | 1456 assertNotNull(callback.mResponseInfo); |
1466 assertNull(callback.mError); | 1457 assertNull(callback.mError); |
1467 assertFalse(callback.mOnErrorCalled); | 1458 assertFalse(callback.mOnErrorCalled); |
1468 } | 1459 } |
1469 | 1460 |
1470 @SmallTest | 1461 @SmallTest |
1471 @Feature({"Cronet"}) | 1462 @Feature({"Cronet"}) |
1463 @OnlyRunNativeCronet | |
pauljensen
2015/12/08 19:49:53
can we add comment mentioning no setOnDestroyedCal
Charles
2015/12/11 16:45:40
Done.
| |
1472 public void testExecutorShutdown() { | 1464 public void testExecutorShutdown() { |
1473 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1465 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
1474 | 1466 |
1475 callback.setAutoAdvance(false); | 1467 callback.setAutoAdvance(false); |
1476 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), | 1468 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), |
1477 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1469 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
1478 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build(); | 1470 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build(); |
1479 urlRequest.start(); | 1471 urlRequest.start(); |
1480 callback.waitForNextStep(); | 1472 callback.waitForNextStep(); |
1481 assertFalse(callback.isDone()); | 1473 assertFalse(callback.isDone()); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1559 int end) { | 1551 int end) { |
1560 // Use a duplicate to avoid modifying byteBuffer. | 1552 // Use a duplicate to avoid modifying byteBuffer. |
1561 ByteBuffer duplicate = byteBuffer.duplicate(); | 1553 ByteBuffer duplicate = byteBuffer.duplicate(); |
1562 duplicate.position(start); | 1554 duplicate.position(start); |
1563 duplicate.limit(end); | 1555 duplicate.limit(end); |
1564 byte[] contents = new byte[duplicate.remaining()]; | 1556 byte[] contents = new byte[duplicate.remaining()]; |
1565 duplicate.get(contents); | 1557 duplicate.get(contents); |
1566 return new String(contents); | 1558 return new String(contents); |
1567 } | 1559 } |
1568 } | 1560 } |
OLD | NEW |