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

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: Enabled user agent test Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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;
10 import android.util.Log;
9 11
10 import org.chromium.base.test.util.Feature; 12 import org.chromium.base.test.util.Feature;
11 import org.chromium.net.TestUrlRequestCallback.FailureType; 13 import org.chromium.net.TestUrlRequestCallback.FailureType;
12 import org.chromium.net.TestUrlRequestCallback.ResponseStep; 14 import org.chromium.net.TestUrlRequestCallback.ResponseStep;
13 import org.chromium.net.test.FailurePhase; 15 import org.chromium.net.test.FailurePhase;
14 16
17 import java.net.ConnectException;
15 import java.nio.ByteBuffer; 18 import java.nio.ByteBuffer;
19 import java.util.AbstractMap;
16 import java.util.ArrayList; 20 import java.util.ArrayList;
21 import java.util.Arrays;
17 import java.util.List; 22 import java.util.List;
18 import java.util.Map; 23 import java.util.Map;
19 import java.util.concurrent.ExecutorService; 24 import java.util.concurrent.ExecutorService;
20 import java.util.concurrent.Executors; 25 import java.util.concurrent.Executors;
21 import java.util.regex.Matcher; 26 import java.util.regex.Matcher;
22 import java.util.regex.Pattern; 27 import java.util.regex.Pattern;
23 28
24 /** 29 /**
25 * Test functionality of CronetUrlRequest. 30 * Test functionality of CronetUrlRequest.
26 */ 31 */
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 @SmallTest 123 @SmallTest
119 @Feature({"Cronet"}) 124 @Feature({"Cronet"})
120 public void testSimpleGet() throws Exception { 125 public void testSimpleGet() throws Exception {
121 String url = NativeTestServer.getEchoMethodURL(); 126 String url = NativeTestServer.getEchoMethodURL();
122 TestUrlRequestCallback callback = startAndWaitForComplete(url); 127 TestUrlRequestCallback callback = startAndWaitForComplete(url);
123 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 128 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
124 // Default method is 'GET'. 129 // Default method is 'GET'.
125 assertEquals("GET", callback.mResponseAsString); 130 assertEquals("GET", callback.mResponseAsString);
126 assertEquals(0, callback.mRedirectCount); 131 assertEquals(0, callback.mRedirectCount);
127 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 132 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
128 assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpSt atus = 200 OK, " 133 UrlResponseInfo urlResponseInfo = createUrlResponseInfo(new String[] {ur l}, "OK", 200, 86,
129 + "headers = [Connection=close, Content-Len gth=3, " 134 "Connection", "close", "Content-Length", "3", "Content-Type", "t ext/plain");
130 + "Content-Type=text/plain], wasCached = fa lse, " 135 assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
131 + "negotiatedProtocol = unknown, proxyServe r= :0, "
132 + "receivedBytesCount = 86",
133 url, url),
134 callback.mResponseInfo.toString());
135 checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethod URL(), 200, "OK"); 136 checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethod URL(), 200, "OK");
136 } 137 }
137 138
139 UrlResponseInfo createUrlResponseInfo(
140 String[] urls, String message, int statusCode, int receivedBytes, St ring... headers) {
141 ArrayList<Map.Entry<String, String>> headersList = new ArrayList<>();
142 for (int i = 0; i < headers.length; i += 2) {
143 headersList.add(new AbstractMap.SimpleImmutableEntry<String, String> (
144 headers[i], headers[i + 1]));
145 }
146 UrlResponseInfo unknown = new UrlResponseInfo(
147 Arrays.asList(urls), statusCode, message, headersList, false, "u nknown", ":0");
148 unknown.setReceivedBytesCount(receivedBytes);
149 return unknown;
150 }
151
152 void assertResponseEquals(UrlResponseInfo expected, UrlResponseInfo actual) {
153 assertEquals(expected.getAllHeaders(), actual.getAllHeaders());
154 assertEquals(expected.getAllHeadersAsList(), actual.getAllHeadersAsList( ));
155 assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
156 assertEquals(expected.getHttpStatusText(), actual.getHttpStatusText());
157 assertEquals(expected.getUrlChain(), actual.getUrlChain());
158 assertEquals(expected.getUrl(), actual.getUrl());
159 // Transferred bytes and proxy server are not supported in pure java
160 if (!(mTestFramework.mCronetEngine instanceof JavaCronetEngine)) {
161 assertEquals(expected.getReceivedBytesCount(), actual.getReceivedByt esCount());
162 assertEquals(expected.getProxyServer(), actual.getProxyServer());
163 // This is a place where behavior intentionally differs between nati ve and java
164 assertEquals(expected.getNegotiatedProtocol(), actual.getNegotiatedP rotocol());
165 }
166 }
167
138 /** 168 /**
139 * Tests a redirect by running it step-by-step. Also tests that delaying a 169 * 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 170 * request works as expected. To make sure there are no unexpected pending
141 * messages, does a GET between UrlRequest.Callback callbacks. 171 * messages, does a GET between UrlRequest.Callback callbacks.
142 */ 172 */
143 @SmallTest 173 @SmallTest
144 @Feature({"Cronet"}) 174 @Feature({"Cronet"})
145 public void testRedirectAsync() throws Exception { 175 public void testRedirectAsync() throws Exception {
146 // Start the request and wait to see the redirect. 176 // Start the request and wait to see the redirect.
147 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 177 TestUrlRequestCallback callback = new TestUrlRequestCallback();
148 callback.setAutoAdvance(false); 178 callback.setAutoAdvance(false);
149 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), 179 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(),
150 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 180 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
151 UrlRequest urlRequest = builder.build(); 181 UrlRequest urlRequest = builder.build();
152 urlRequest.start(); 182 urlRequest.start();
153 callback.waitForNextStep(); 183 callback.waitForNextStep();
154 184
155 // Check the redirect. 185 // Check the redirect.
156 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, callback.mResponseStep); 186 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, callback.mResponseStep);
157 assertEquals(1, callback.mRedirectResponseInfoList.size()); 187 assertEquals(1, callback.mRedirectResponseInfoList.size());
158 checkResponseInfo(callback.mRedirectResponseInfoList.get(0), 188 checkResponseInfo(callback.mRedirectResponseInfoList.get(0),
159 NativeTestServer.getRedirectURL(), 302, "Found"); 189 NativeTestServer.getRedirectURL(), 302, "Found");
160 assertEquals(1, callback.mRedirectResponseInfoList.get(0).getUrlChain(). size()); 190 assertEquals(1, callback.mRedirectResponseInfoList.get(0).getUrlChain(). size());
161 assertEquals(NativeTestServer.getSuccessURL(), callback.mRedirectUrlList .get(0)); 191 assertEquals(NativeTestServer.getSuccessURL(), callback.mRedirectUrlList .get(0));
162 checkResponseInfoHeader( 192 checkResponseInfoHeader(
163 callback.mRedirectResponseInfoList.get(0), "redirect-header", "h eader-value"); 193 callback.mRedirectResponseInfoList.get(0), "redirect-header", "h eader-value");
164 194
165 assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpSt atus = 302 Found, " 195 UrlResponseInfo expected =
166 + "headers = [Location=/success.txt, " 196 createUrlResponseInfo(new String[] {NativeTestServer.getRedirect URL()}, "Found",
167 + "redirect-header=header-value], wasCached = false, " 197 302, 74, "Location", "/success.txt", "redirect-header", "header-value");
168 + "negotiatedProtocol = unknown, proxyServe r= :0, " 198 assertResponseEquals(expected, callback.mRedirectResponseInfoList.get(0) );
169 + "receivedBytesCount = 74",
170 NativeTestServer.getRedirectURL(), NativeTestServer .getRedirectURL()),
171 callback.mRedirectResponseInfoList.get(0).toString());
172 199
173 // Wait for an unrelated request to finish. The request should not 200 // Wait for an unrelated request to finish. The request should not
174 // advance until followRedirect is invoked. 201 // advance until followRedirect is invoked.
175 testSimpleGet(); 202 testSimpleGet();
176 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, callback.mResponseStep); 203 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, callback.mResponseStep);
177 assertEquals(1, callback.mRedirectResponseInfoList.size()); 204 assertEquals(1, callback.mRedirectResponseInfoList.size());
178 205
179 // Follow the redirect and wait for the next set of headers. 206 // Follow the redirect and wait for the next set of headers.
180 urlRequest.followRedirect(); 207 urlRequest.followRedirect();
181 callback.waitForNextStep(); 208 callback.waitForNextStep();
(...skipping 24 matching lines...) Expand all
206 } 233 }
207 // Should not receive any messages while waiting for another get, 234 // Should not receive any messages while waiting for another get,
208 // as the next read has not been started. 235 // as the next read has not been started.
209 testSimpleGet(); 236 testSimpleGet();
210 assertEquals(response, callback.mResponseAsString); 237 assertEquals(response, callback.mResponseAsString);
211 assertEquals(step, callback.mResponseStep); 238 assertEquals(step, callback.mResponseStep);
212 } 239 }
213 assertEquals(ResponseStep.ON_SUCCEEDED, callback.mResponseStep); 240 assertEquals(ResponseStep.ON_SUCCEEDED, callback.mResponseStep);
214 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); 241 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString);
215 242
216 assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s, %s], ht tpStatus = 200 OK, " 243 UrlResponseInfo urlResponseInfo = createUrlResponseInfo(
217 + "headers = [Content-Type=text/plain, " 244 new String[] {NativeTestServer.getRedirectURL(), NativeTestServe r.getSuccessURL()},
218 + "Access-Control-Allow-Origin=*, header-na me=header-value, " 245 "OK", 200, 260, "Content-Type", "text/plain", "Access-Control-Al low-Origin", "*",
219 + "multi-header-name=header-value1, " 246 "header-name", "header-value", "multi-header-name", "header-valu e1",
220 + "multi-header-name=header-value2], wasCac hed = false, " 247 "multi-header-name", "header-value2");
221 + "negotiatedProtocol = unknown, proxyServe r= :0, "
222 + "receivedBytesCount = 260",
223 NativeTestServer.getSuccessURL(), NativeTestServer. getRedirectURL(),
224 NativeTestServer.getSuccessURL()),
225 callback.mResponseInfo.toString());
226 248
249 assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
227 // Make sure there are no other pending messages, which would trigger 250 // Make sure there are no other pending messages, which would trigger
228 // asserts in TestUrlRequestCallback. 251 // asserts in TestUrlRequestCallback.
229 testSimpleGet(); 252 testSimpleGet();
230 } 253 }
231 254
232 @SmallTest 255 @SmallTest
233 @Feature({"Cronet"}) 256 @Feature({"Cronet"})
234 public void testNotFound() throws Exception { 257 public void testNotFound() throws Exception {
235 String url = NativeTestServer.getFileURL("/notfound.html"); 258 String url = NativeTestServer.getFileURL("/notfound.html");
236 TestUrlRequestCallback callback = startAndWaitForComplete(url); 259 TestUrlRequestCallback callback = startAndWaitForComplete(url);
237 checkResponseInfo(callback.mResponseInfo, url, 404, "Not Found"); 260 checkResponseInfo(callback.mResponseInfo, url, 404, "Not Found");
238 assertEquals("<!DOCTYPE html>\n<html>\n<head>\n<title>Not found</title>\ n" 261 assertEquals("<!DOCTYPE html>\n<html>\n<head>\n<title>Not found</title>\ n"
239 + "<p>Test page loaded.</p>\n</head>\n</html>\n", 262 + "<p>Test page loaded.</p>\n</head>\n</html>\n",
240 callback.mResponseAsString); 263 callback.mResponseAsString);
241 assertEquals(0, callback.mRedirectCount); 264 assertEquals(0, callback.mRedirectCount);
242 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 265 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
243 } 266 }
244 267
245 // Checks that UrlRequest.Callback.onFailed is only called once in the case 268 // Checks that UrlRequest.Callback.onFailed is only called once in the case
246 // of ERR_CONTENT_LENGTH_MISMATCH, which has an unusual failure path. 269 // of ERR_CONTENT_LENGTH_MISMATCH, which has an unusual failure path.
247 // See http://crbug.com/468803. 270 // See http://crbug.com/468803.
248 @SmallTest 271 @SmallTest
249 @Feature({"Cronet"}) 272 @Feature({"Cronet"})
273 @OnlyRunNativeCronet // No canonical exception to assert on
250 public void testContentLengthMismatchFailsOnce() throws Exception { 274 public void testContentLengthMismatchFailsOnce() throws Exception {
251 String url = NativeTestServer.getFileURL( 275 String url = NativeTestServer.getFileURL(
252 "/content_length_mismatch.html"); 276 "/content_length_mismatch.html");
253 TestUrlRequestCallback callback = startAndWaitForComplete(url); 277 TestUrlRequestCallback callback = startAndWaitForComplete(url);
254 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 278 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
255 // The entire response body will be read before the error is returned. 279 // 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 280 // 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 281 // socket, and the socket close message which triggers the error will
258 // only be passed along after all data has been read. 282 // only be passed along after all data has been read.
259 assertEquals("Response that lies about content length.", callback.mRespo nseAsString); 283 assertEquals("Response that lies about content length.", callback.mRespo nseAsString);
260 assertNotNull(callback.mError); 284 assertNotNull(callback.mError);
261 assertEquals("Exception in CronetUrlRequest: net::ERR_CONTENT_LENGTH_MIS MATCH", 285 assertEquals("Exception in CronetUrlRequest: net::ERR_CONTENT_LENGTH_MIS MATCH",
262 callback.mError.getMessage()); 286 callback.mError.getMessage());
263 // Wait for a couple round trips to make sure there are no pending 287 // Wait for a couple round trips to make sure there are no pending
264 // onFailed messages. This test relies on checks in 288 // onFailed messages. This test relies on checks in
265 // TestUrlRequestCallback catching a second onFailed call. 289 // TestUrlRequestCallback catching a second onFailed call.
266 testSimpleGet(); 290 testSimpleGet();
267 } 291 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 assertEquals("header-value2", multiHeader.get(1)); 451 assertEquals("header-value2", multiHeader.get(1));
428 } 452 }
429 453
430 @SmallTest 454 @SmallTest
431 @Feature({"Cronet"}) 455 @Feature({"Cronet"})
432 public void testResponseHeadersList() throws Exception { 456 public void testResponseHeadersList() throws Exception {
433 TestUrlRequestCallback callback = startAndWaitForComplete(NativeTestServ er.getSuccessURL()); 457 TestUrlRequestCallback callback = startAndWaitForComplete(NativeTestServ er.getSuccessURL());
434 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 458 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
435 List<Map.Entry<String, String>> responseHeaders = 459 List<Map.Entry<String, String>> responseHeaders =
436 callback.mResponseInfo.getAllHeadersAsList(); 460 callback.mResponseInfo.getAllHeadersAsList();
437 assertEquals(5, responseHeaders.size()); 461
438 assertEquals("Content-Type", responseHeaders.get(0).getKey()); 462 MoreAsserts.assertContentsInOrder(responseHeaders,
439 assertEquals("text/plain", responseHeaders.get(0).getValue()); 463 new AbstractMap.SimpleEntry<>("Content-Type", "text/plain"),
440 assertEquals("Access-Control-Allow-Origin", responseHeaders.get(1).getKe y()); 464 new AbstractMap.SimpleEntry<>("Access-Control-Allow-Origin", "*" ),
441 assertEquals("*", responseHeaders.get(1).getValue()); 465 new AbstractMap.SimpleEntry<>("header-name", "header-value"),
442 assertEquals("header-name", responseHeaders.get(2).getKey()); 466 new AbstractMap.SimpleEntry<>("multi-header-name", "header-value 1"),
443 assertEquals("header-value", responseHeaders.get(2).getValue()); 467 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 } 468 }
449 469
450 @SmallTest 470 @SmallTest
451 @Feature({"Cronet"}) 471 @Feature({"Cronet"})
452 public void testMockMultiRedirect() throws Exception { 472 public void testMockMultiRedirect() throws Exception {
453 TestUrlRequestCallback callback = 473 TestUrlRequestCallback callback =
454 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); 474 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL());
455 UrlResponseInfo mResponseInfo = callback.mResponseInfo; 475 UrlResponseInfo mResponseInfo = callback.mResponseInfo;
456 assertEquals(2, callback.mRedirectCount); 476 assertEquals(2, callback.mRedirectCount);
457 assertEquals(200, mResponseInfo.getHttpStatusCode()); 477 assertEquals(200, mResponseInfo.getHttpStatusCode());
458 assertEquals(2, callback.mRedirectResponseInfoList.size()); 478 assertEquals(2, callback.mRedirectResponseInfoList.size());
459 479
460 // Check first redirect (multiredirect.html -> redirect.html) 480 // Check first redirect (multiredirect.html -> redirect.html)
481 UrlResponseInfo firstExpectedResponseInfo = createUrlResponseInfo(
482 new String[] {NativeTestServer.getMultiRedirectURL()}, "Found", 302, 77, "Location",
483 "/redirect.html", "redirect-header0", "header-value");
461 UrlResponseInfo firstRedirectResponseInfo = callback.mRedirectResponseIn foList.get(0); 484 UrlResponseInfo firstRedirectResponseInfo = callback.mRedirectResponseIn foList.get(0);
462 assertEquals(1, firstRedirectResponseInfo.getUrlChain().size()); 485 assertResponseEquals(firstExpectedResponseInfo, firstRedirectResponseInf o);
463 assertEquals(NativeTestServer.getMultiRedirectURL(),
464 firstRedirectResponseInfo.getUrlChain().get(0));
465 checkResponseInfo(
466 firstRedirectResponseInfo, NativeTestServer.getMultiRedirectURL( ), 302, "Found");
467 checkResponseInfoHeader(firstRedirectResponseInfo,
468 "redirect-header0", "header-value");
469 assertEquals(77, firstRedirectResponseInfo.getReceivedBytesCount());
470 486
471 // Check second redirect (redirect.html -> success.txt) 487 // Check second redirect (redirect.html -> success.txt)
472 UrlResponseInfo secondRedirectResponseInfo = callback.mRedirectResponseI nfoList.get(1); 488 UrlResponseInfo secondExpectedResponseInfo = createUrlResponseInfo(
473 assertEquals(2, secondRedirectResponseInfo.getUrlChain().size()); 489 new String[] {NativeTestServer.getMultiRedirectURL(),
474 assertEquals(NativeTestServer.getMultiRedirectURL(), 490 NativeTestServer.getRedirectURL(), NativeTestServer.getS uccessURL()},
475 secondRedirectResponseInfo.getUrlChain().get(0)); 491 "OK", 200, 337, "Content-Type", "text/plain", "Access-Control-Al low-Origin", "*",
476 assertEquals( 492 "header-name", "header-value", "multi-header-name", "header-valu e1",
477 NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.ge tUrlChain().get(1)); 493 "multi-header-name", "header-value2");
478 checkResponseInfo(
479 secondRedirectResponseInfo, NativeTestServer.getRedirectURL(), 3 02, "Found");
480 checkResponseInfoHeader(secondRedirectResponseInfo,
481 "redirect-header", "header-value");
482 assertEquals(151, secondRedirectResponseInfo.getReceivedBytesCount());
483 494
484 // Check final response (success.txt). 495 assertResponseEquals(secondExpectedResponseInfo, mResponseInfo);
485 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrl());
486 assertEquals(3, mResponseInfo.getUrlChain().size());
487 assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUr lChain().get(0));
488 assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChai n().get(1));
489 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());
494 } 499 }
495 500
496 @SmallTest 501 @SmallTest
497 @Feature({"Cronet"}) 502 @Feature({"Cronet"})
498 public void testMockNotFound() throws Exception { 503 public void testMockNotFound() throws Exception {
499 TestUrlRequestCallback callback = 504 TestUrlRequestCallback callback =
500 startAndWaitForComplete(NativeTestServer.getNotFoundURL()); 505 startAndWaitForComplete(NativeTestServer.getNotFoundURL());
501 assertEquals(404, callback.mResponseInfo.getHttpStatusCode()); 506 UrlResponseInfo expected = createUrlResponseInfo(
502 assertEquals(121, callback.mResponseInfo.getReceivedBytesCount()); 507 new String[] {NativeTestServer.getNotFoundURL()}, "Not Found", 4 04, 121);
508 assertResponseEquals(expected, callback.mResponseInfo);
503 assertTrue(callback.mHttpResponseDataLength != 0); 509 assertTrue(callback.mHttpResponseDataLength != 0);
504 assertEquals(0, callback.mRedirectCount); 510 assertEquals(0, callback.mRedirectCount);
505 assertFalse(callback.mOnErrorCalled); 511 assertFalse(callback.mOnErrorCalled);
506 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 512 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
507 } 513 }
508 514
509 @SmallTest 515 @SmallTest
510 @Feature({"Cronet"}) 516 @Feature({"Cronet"})
517 @OnlyRunNativeCronet // Java impl doesn't support MockUrlRequestJobFactory
511 public void testMockStartAsyncError() throws Exception { 518 public void testMockStartAsyncError() throws Exception {
512 final int arbitraryNetError = -3; 519 final int arbitraryNetError = -3;
513 TestUrlRequestCallback callback = 520 TestUrlRequestCallback callback =
514 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( 521 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure(
515 FailurePhase.START, arbitraryNetError)); 522 FailurePhase.START, arbitraryNetError));
516 assertNull(callback.mResponseInfo); 523 assertNull(callback.mResponseInfo);
517 assertNotNull(callback.mError); 524 assertNotNull(callback.mError);
518 assertEquals(arbitraryNetError, callback.mError.netError()); 525 assertEquals(arbitraryNetError, callback.mError.netError());
519 assertEquals(0, callback.mRedirectCount); 526 assertEquals(0, callback.mRedirectCount);
520 assertTrue(callback.mOnErrorCalled); 527 assertTrue(callback.mOnErrorCalled);
521 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); 528 assertEquals(callback.mResponseStep, ResponseStep.NOTHING);
522 } 529 }
523 530
524 @SmallTest 531 @SmallTest
525 @Feature({"Cronet"}) 532 @Feature({"Cronet"})
533 @OnlyRunNativeCronet // Java impl doesn't support MockUrlRequestJobFactory
526 public void testMockReadDataSyncError() throws Exception { 534 public void testMockReadDataSyncError() throws Exception {
527 final int arbitraryNetError = -4; 535 final int arbitraryNetError = -4;
528 TestUrlRequestCallback callback = 536 TestUrlRequestCallback callback =
529 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( 537 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure(
530 FailurePhase.READ_SYNC, arbitraryNetError)); 538 FailurePhase.READ_SYNC, arbitraryNetError));
531 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 539 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
532 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); 540 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount());
533 assertNotNull(callback.mError); 541 assertNotNull(callback.mError);
534 assertEquals(arbitraryNetError, callback.mError.netError()); 542 assertEquals(arbitraryNetError, callback.mError.netError());
535 assertEquals(0, callback.mRedirectCount); 543 assertEquals(0, callback.mRedirectCount);
536 assertTrue(callback.mOnErrorCalled); 544 assertTrue(callback.mOnErrorCalled);
537 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); 545 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED);
538 } 546 }
539 547
540 @SmallTest 548 @SmallTest
541 @Feature({"Cronet"}) 549 @Feature({"Cronet"})
550 @OnlyRunNativeCronet // Java impl doesn't support MockUrlRequestJobFactory
542 public void testMockReadDataAsyncError() throws Exception { 551 public void testMockReadDataAsyncError() throws Exception {
543 final int arbitraryNetError = -5; 552 final int arbitraryNetError = -5;
544 TestUrlRequestCallback callback = 553 TestUrlRequestCallback callback =
545 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure( 554 startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithF ailure(
546 FailurePhase.READ_ASYNC, arbitraryNetError)); 555 FailurePhase.READ_ASYNC, arbitraryNetError));
547 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 556 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
548 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount()); 557 assertEquals(0, callback.mResponseInfo.getReceivedBytesCount());
549 assertNotNull(callback.mError); 558 assertNotNull(callback.mError);
550 assertEquals(arbitraryNetError, callback.mError.netError()); 559 assertEquals(arbitraryNetError, callback.mError.netError());
551 assertEquals(0, callback.mRedirectCount); 560 assertEquals(0, callback.mRedirectCount);
552 assertTrue(callback.mOnErrorCalled); 561 assertTrue(callback.mOnErrorCalled);
553 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); 562 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED);
554 } 563 }
555 564
556 /** 565 /**
557 * Tests that request continues when client certificate is requested. 566 * Tests that request continues when client certificate is requested.
558 */ 567 */
559 @SmallTest 568 @SmallTest
560 @Feature({"Cronet"}) 569 @Feature({"Cronet"})
570 @OnlyRunNativeCronet
561 public void testMockClientCertificateRequested() throws Exception { 571 public void testMockClientCertificateRequested() throws Exception {
562 TestUrlRequestCallback callback = startAndWaitForComplete( 572 TestUrlRequestCallback callback = startAndWaitForComplete(
563 MockUrlRequestJobFactory.getMockUrlForClientCertificateRequest() ); 573 MockUrlRequestJobFactory.getMockUrlForClientCertificateRequest() );
564 assertNotNull(callback.mResponseInfo); 574 assertNotNull(callback.mResponseInfo);
565 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 575 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
566 assertEquals("data", callback.mResponseAsString); 576 assertEquals("data", callback.mResponseAsString);
567 assertEquals(0, callback.mRedirectCount); 577 assertEquals(0, callback.mRedirectCount);
568 assertNull(callback.mError); 578 assertNull(callback.mError);
569 assertFalse(callback.mOnErrorCalled); 579 assertFalse(callback.mOnErrorCalled);
570 } 580 }
571 581
572 /** 582 /**
573 * Tests that an SSL cert error will be reported via {@link UrlRequest#onFai led}. 583 * Tests that an SSL cert error will be reported via {@link UrlRequest#onFai led}.
574 */ 584 */
575 @SmallTest 585 @SmallTest
576 @Feature({"Cronet"}) 586 @Feature({"Cronet"})
587 @OnlyRunNativeCronet // Java impl doesn't support MockUrlRequestJobFactory
577 public void testMockSSLCertificateError() throws Exception { 588 public void testMockSSLCertificateError() throws Exception {
578 TestUrlRequestCallback callback = startAndWaitForComplete( 589 TestUrlRequestCallback callback = startAndWaitForComplete(
579 MockUrlRequestJobFactory.getMockUrlForSSLCertificateError()); 590 MockUrlRequestJobFactory.getMockUrlForSSLCertificateError());
580 assertNull(callback.mResponseInfo); 591 assertNull(callback.mResponseInfo);
581 assertNotNull(callback.mError); 592 assertNotNull(callback.mError);
582 assertTrue(callback.mOnErrorCalled); 593 assertTrue(callback.mOnErrorCalled);
583 assertEquals(-201, callback.mError.netError()); 594 assertEquals(-201, callback.mError.netError());
584 assertEquals("Exception in CronetUrlRequest: net::ERR_CERT_DATE_INVALID" , 595 assertEquals("Exception in CronetUrlRequest: net::ERR_CERT_DATE_INVALID" ,
585 callback.mError.getMessage()); 596 callback.mError.getMessage());
586 assertEquals(callback.mResponseStep, ResponseStep.NOTHING); 597 assertEquals(callback.mResponseStep, ResponseStep.NOTHING);
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 final UrlRequest urlRequest = 822 final UrlRequest urlRequest =
812 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, 823 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck,
813 callback.getExecutor(), mTestFramework.mCr onetEngine) 824 callback.getExecutor(), mTestFramework.mCr onetEngine)
814 .build(); 825 .build();
815 826
816 // Try to read before starting request. 827 // Try to read before starting request.
817 try { 828 try {
818 callback.startNextRead(urlRequest); 829 callback.startNextRead(urlRequest);
819 fail("Exception not thrown"); 830 fail("Exception not thrown");
820 } catch (IllegalStateException e) { 831 } catch (IllegalStateException e) {
821 assertEquals("Unexpected read attempt.",
822 e.getMessage());
823 } 832 }
824 833
825 // Verify reading right after start throws an assertion. Both must be 834 // Verify reading right after start throws an assertion. Both must be
826 // invoked on the Executor thread, to prevent receiving data until after 835 // invoked on the Executor thread, to prevent receiving data until after
827 // startNextRead has been invoked. 836 // startNextRead has been invoked.
828 Runnable startAndRead = new Runnable() { 837 Runnable startAndRead = new Runnable() {
829 @Override 838 @Override
830 public void run() { 839 public void run() {
831 urlRequest.start(); 840 urlRequest.start();
832 try { 841 try {
833 callback.startNextRead(urlRequest); 842 callback.startNextRead(urlRequest);
834 fail("Exception not thrown"); 843 fail("Exception not thrown");
835 } catch (IllegalStateException e) { 844 } catch (IllegalStateException e) {
836 assertEquals("Unexpected read attempt.",
837 e.getMessage());
838 } 845 }
839 } 846 }
840 }; 847 };
841 callback.getExecutor().execute(startAndRead); 848 callback.getExecutor().execute(startAndRead);
842 callback.waitForNextStep(); 849 callback.waitForNextStep();
843 850
844 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); 851 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT);
845 // Try to read after the redirect. 852 // Try to read after the redirect.
846 try { 853 try {
847 callback.startNextRead(urlRequest); 854 callback.startNextRead(urlRequest);
848 fail("Exception not thrown"); 855 fail("Exception not thrown");
849 } catch (IllegalStateException e) { 856 } catch (IllegalStateException e) {
850 assertEquals("Unexpected read attempt.",
851 e.getMessage());
852 } 857 }
853 urlRequest.followRedirect(); 858 urlRequest.followRedirect();
854 callback.waitForNextStep(); 859 callback.waitForNextStep();
855 860
856 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); 861 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED);
857 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 862 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
858 863
859 while (!callback.isDone()) { 864 while (!callback.isDone()) {
860 Runnable readTwice = new Runnable() { 865 Runnable readTwice = new Runnable() {
861 @Override 866 @Override
862 public void run() { 867 public void run() {
863 callback.startNextRead(urlRequest); 868 callback.startNextRead(urlRequest);
864 // Try to read again before the last read completes. 869 // Try to read again before the last read completes.
865 try { 870 try {
866 callback.startNextRead(urlRequest); 871 callback.startNextRead(urlRequest);
867 fail("Exception not thrown"); 872 fail("Exception not thrown");
868 } catch (IllegalStateException e) { 873 } catch (IllegalStateException e) {
869 assertEquals("Unexpected read attempt.",
870 e.getMessage());
871 } 874 }
872 } 875 }
873 }; 876 };
874 callback.getExecutor().execute(readTwice); 877 callback.getExecutor().execute(readTwice);
875 callback.waitForNextStep(); 878 callback.waitForNextStep();
876 } 879 }
877 880
878 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 881 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
879 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); 882 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString);
880 883
881 // Try to read after request is complete. 884 // Try to read after request is complete.
882 try { 885 try {
883 callback.startNextRead(urlRequest); 886 callback.startNextRead(urlRequest);
884 fail("Exception not thrown"); 887 fail("Exception not thrown");
885 } catch (IllegalStateException e) { 888 } catch (IllegalStateException e) {
886 assertEquals("Unexpected read attempt.",
887 e.getMessage());
888 } 889 }
889 } 890 }
890 891
891 @SmallTest 892 @SmallTest
892 @Feature({"Cronet"}) 893 @Feature({"Cronet"})
893 public void testUnexpectedFollowRedirects() throws Exception { 894 public void testUnexpectedFollowRedirects() throws Exception {
894 final TestUrlRequestCallback callback = new TestUrlRequestCallback(); 895 final TestUrlRequestCallback callback = new TestUrlRequestCallback();
895 callback.setAutoAdvance(false); 896 callback.setAutoAdvance(false);
896 final UrlRequest urlRequest = 897 final UrlRequest urlRequest =
897 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck, 898 new UrlRequest.Builder(NativeTestServer.getRedirectURL(), callba ck,
898 callback.getExecutor(), mTestFramework.mCr onetEngine) 899 callback.getExecutor(), mTestFramework.mCr onetEngine)
899 .build(); 900 .build();
900 901
901 // Try to follow a redirect before starting the request. 902 // Try to follow a redirect before starting the request.
902 try { 903 try {
903 urlRequest.followRedirect(); 904 urlRequest.followRedirect();
904 fail("Exception not thrown"); 905 fail("Exception not thrown");
905 } catch (IllegalStateException e) { 906 } catch (IllegalStateException e) {
906 assertEquals("No redirect to follow.",
907 e.getMessage());
908 } 907 }
909 908
910 // Try to follow a redirect just after starting the request. Has to be 909 // Try to follow a redirect just after starting the request. Has to be
911 // done on the executor thread to avoid a race. 910 // done on the executor thread to avoid a race.
912 Runnable startAndRead = new Runnable() { 911 Runnable startAndRead = new Runnable() {
913 @Override 912 @Override
914 public void run() { 913 public void run() {
915 urlRequest.start(); 914 urlRequest.start();
916 try { 915 try {
917 urlRequest.followRedirect(); 916 urlRequest.followRedirect();
918 fail("Exception not thrown"); 917 fail("Exception not thrown");
919 } catch (IllegalStateException e) { 918 } catch (IllegalStateException e) {
920 assertEquals("No redirect to follow.",
921 e.getMessage());
922 } 919 }
923 } 920 }
924 }; 921 };
925 callback.getExecutor().execute(startAndRead); 922 callback.getExecutor().execute(startAndRead);
926 callback.waitForNextStep(); 923 callback.waitForNextStep();
927 924
928 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT); 925 assertEquals(callback.mResponseStep, ResponseStep.ON_RECEIVED_REDIRECT);
929 // Try to follow the redirect twice. Second attempt should fail. 926 // Try to follow the redirect twice. Second attempt should fail.
930 Runnable followRedirectTwice = new Runnable() { 927 Runnable followRedirectTwice = new Runnable() {
931 @Override 928 @Override
932 public void run() { 929 public void run() {
933 urlRequest.followRedirect(); 930 urlRequest.followRedirect();
934 try { 931 try {
935 urlRequest.followRedirect(); 932 urlRequest.followRedirect();
936 fail("Exception not thrown"); 933 fail("Exception not thrown");
937 } catch (IllegalStateException e) { 934 } catch (IllegalStateException e) {
938 assertEquals("No redirect to follow.",
939 e.getMessage());
940 } 935 }
941 } 936 }
942 }; 937 };
943 callback.getExecutor().execute(followRedirectTwice); 938 callback.getExecutor().execute(followRedirectTwice);
944 callback.waitForNextStep(); 939 callback.waitForNextStep();
945 940
946 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED); 941 assertEquals(callback.mResponseStep, ResponseStep.ON_RESPONSE_STARTED);
947 assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); 942 assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
948 943
949 while (!callback.isDone()) { 944 while (!callback.isDone()) {
950 try { 945 try {
951 urlRequest.followRedirect(); 946 urlRequest.followRedirect();
952 fail("Exception not thrown"); 947 fail("Exception not thrown");
953 } catch (IllegalStateException e) { 948 } catch (IllegalStateException e) {
954 assertEquals("No redirect to follow.",
955 e.getMessage());
956 } 949 }
957 callback.startNextRead(urlRequest); 950 callback.startNextRead(urlRequest);
958 callback.waitForNextStep(); 951 callback.waitForNextStep();
959 } 952 }
960 953
961 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 954 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
962 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString); 955 assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString);
963 956
964 // Try to follow redirect after request is complete. 957 // Try to follow redirect after request is complete.
965 try { 958 try {
966 urlRequest.followRedirect(); 959 urlRequest.followRedirect();
967 fail("Exception not thrown"); 960 fail("Exception not thrown");
968 } catch (IllegalStateException e) { 961 } catch (IllegalStateException e) {
969 assertEquals("No redirect to follow.",
970 e.getMessage());
971 } 962 }
972 } 963 }
973 964
974 @SmallTest 965 @SmallTest
975 @Feature({"Cronet"}) 966 @Feature({"Cronet"})
976 public void testUploadSetDataProvider() throws Exception { 967 public void testUploadSetDataProvider() throws Exception {
977 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 968 TestUrlRequestCallback callback = new TestUrlRequestCallback();
978 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), 969 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(),
979 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 970 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
980 971
981 try { 972 try {
982 builder.setUploadDataProvider(null, callback.getExecutor()); 973 builder.setUploadDataProvider(null, callback.getExecutor());
983 fail("Exception not thrown"); 974 fail("Exception not thrown");
984 } catch (NullPointerException e) { 975 } catch (NullPointerException e) {
985 assertEquals("Invalid UploadDataProvider.", e.getMessage()); 976 assertEquals("Invalid UploadDataProvider.", e.getMessage());
986 } 977 }
987 978
988 TestUploadDataProvider dataProvider = new TestUploadDataProvider( 979 TestUploadDataProvider dataProvider = new TestUploadDataProvider(
989 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); 980 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor());
990 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); 981 builder.setUploadDataProvider(dataProvider, callback.getExecutor());
991 try { 982 try {
992 builder.build().start(); 983 builder.build().start();
993 fail("Exception not thrown"); 984 fail("Exception not thrown");
994 } catch (IllegalArgumentException e) { 985 } catch (IllegalArgumentException e) {
995 assertEquals("Requests with upload data must have a Content-Type.", e.getMessage());
996 } 986 }
997 } 987 }
998 988
999 @SmallTest 989 @SmallTest
1000 @Feature({"Cronet"}) 990 @Feature({"Cronet"})
1001 public void testUploadEmptyBodySync() throws Exception { 991 public void testUploadEmptyBodySync() throws Exception {
1002 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 992 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1003 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), 993 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(),
1004 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 994 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
1005 995
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 assertEquals(3, dataProvider.getNumReadCalls()); 1377 assertEquals(3, dataProvider.getNumReadCalls());
1388 assertEquals("hello there!", callback.mResponseAsString); 1378 assertEquals("hello there!", callback.mResponseAsString);
1389 } 1379 }
1390 1380
1391 // Test where an upload fails without ever initializing the 1381 // Test where an upload fails without ever initializing the
1392 // UploadDataStream, because it can't connect to the server. 1382 // UploadDataStream, because it can't connect to the server.
1393 @SmallTest 1383 @SmallTest
1394 @Feature({"Cronet"}) 1384 @Feature({"Cronet"})
1395 public void testUploadFailsWithoutInitializingStream() throws Exception { 1385 public void testUploadFailsWithoutInitializingStream() throws Exception {
1396 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1386 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1397 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), 1387 UrlRequest.Builder builder = new UrlRequest.Builder("http://127.0.0.1:12 345", callback,
pauljensen 2016/01/07 04:33:38 why did you change this and line 1391? I admit th
Charles 2016/01/07 16:10:02 Shutting down the native test server causes getEch
1398 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 1388 callback.getExecutor(), mTestFramework.mCronetEngine);
1399 // Shut down the test server, so connecting to it fails. Note that 1389 // Shut down the test server, so connecting to it fails. Note that
1400 // calling shutdown again during teardown is safe. 1390 // calling shutdown again during teardown is safe.
1401 NativeTestServer.shutdownNativeTestServer(); 1391 // NativeTestServer.shutdownNativeTestServer();
1402 1392
1403 TestUploadDataProvider dataProvider = new TestUploadDataProvider( 1393 TestUploadDataProvider dataProvider = new TestUploadDataProvider(
1404 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor()); 1394 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe cutor());
1405 dataProvider.addRead("test".getBytes()); 1395 dataProvider.addRead("test".getBytes());
1406 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); 1396 builder.setUploadDataProvider(dataProvider, callback.getExecutor());
1407 builder.addHeader("Content-Type", "useless/string"); 1397 builder.addHeader("Content-Type", "useless/string");
1408 builder.build().start(); 1398 builder.build().start();
1409 callback.blockForDone(); 1399 callback.blockForDone();
1410 1400
1411 assertNull(callback.mResponseInfo); 1401 assertNull(callback.mResponseInfo);
1412 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED ", 1402 if (testingJavaImpl()) {
1413 callback.mError.getMessage()); 1403 assertTrue(callback.mError.getCause() instanceof ConnectException);
1404 } else {
1405 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REF USED",
1406 callback.mError.getMessage());
1407 }
1414 } 1408 }
1415 1409
1416 private void throwOrCancel(FailureType failureType, ResponseStep failureStep , 1410 private void throwOrCancel(FailureType failureType, ResponseStep failureStep ,
1417 boolean expectResponseInfo, boolean expectError) { 1411 boolean expectResponseInfo, boolean expectError) {
1412 if (Log.isLoggable("TESTING", Log.VERBOSE)) {
1413 Log.v("TESTING", "Testing " + failureType + " during " + failureStep );
1414 }
1418 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1415 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1419 callback.setFailure(failureType, failureStep); 1416 callback.setFailure(failureType, failureStep);
1420 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(), 1417 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get RedirectURL(),
1421 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 1418 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
1422 UrlRequest urlRequest = builder.build(); 1419 UrlRequest urlRequest = builder.build();
1423 urlRequest.start(); 1420 urlRequest.start();
1424 callback.blockForDone(); 1421 callback.blockForDone();
1425 assertEquals(1, callback.mRedirectCount); 1422 assertEquals(1, callback.mRedirectCount);
1426 assertEquals(callback.mResponseStep, failureStep); 1423 assertEquals(callback.mResponseStep, failureStep);
1427 assertTrue(urlRequest.isDone()); 1424 assertTrue(urlRequest.isDone());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 assertEquals(1, callback.mRedirectCount); 1475 assertEquals(1, callback.mRedirectCount);
1479 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); 1476 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
1480 assertTrue(urlRequest.isDone()); 1477 assertTrue(urlRequest.isDone());
1481 assertNotNull(callback.mResponseInfo); 1478 assertNotNull(callback.mResponseInfo);
1482 assertNull(callback.mError); 1479 assertNull(callback.mError);
1483 assertFalse(callback.mOnErrorCalled); 1480 assertFalse(callback.mOnErrorCalled);
1484 } 1481 }
1485 1482
1486 @SmallTest 1483 @SmallTest
1487 @Feature({"Cronet"}) 1484 @Feature({"Cronet"})
1485 @OnlyRunNativeCronet // No destroyed callback for tests
1488 public void testExecutorShutdown() { 1486 public void testExecutorShutdown() {
1489 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 1487 TestUrlRequestCallback callback = new TestUrlRequestCallback();
1490 1488
1491 callback.setAutoAdvance(false); 1489 callback.setAutoAdvance(false);
1492 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(), 1490 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get EchoBodyURL(),
1493 callback, callback.getExecutor(), mTestFramework.mCronetEngine); 1491 callback, callback.getExecutor(), mTestFramework.mCronetEngine);
1494 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build(); 1492 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build();
1495 urlRequest.start(); 1493 urlRequest.start();
1496 callback.waitForNextStep(); 1494 callback.waitForNextStep();
1497 assertFalse(callback.isDone()); 1495 assertFalse(callback.isDone());
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int end) { 1614 private String bufferContentsToString(ByteBuffer byteBuffer, int start, int end) {
1617 // Use a duplicate to avoid modifying byteBuffer. 1615 // Use a duplicate to avoid modifying byteBuffer.
1618 ByteBuffer duplicate = byteBuffer.duplicate(); 1616 ByteBuffer duplicate = byteBuffer.duplicate();
1619 duplicate.position(start); 1617 duplicate.position(start);
1620 duplicate.limit(end); 1618 duplicate.limit(end);
1621 byte[] contents = new byte[duplicate.remaining()]; 1619 byte[] contents = new byte[duplicate.remaining()];
1622 duplicate.get(contents); 1620 duplicate.get(contents);
1623 return new String(contents); 1621 return new String(contents);
1624 } 1622 }
1625 } 1623 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698