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