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

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

Issue 1492583002: Add HttpUrlConnection backed implementation of CronetEngine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests Created 5 years 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 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
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
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
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698