| 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; |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 // The port for PTP will always refuse a TCP connection |
| 1398 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1388 UrlRequest.Builder builder = new UrlRequest.Builder("http://127.0.0.1:31
9", callback, |
| 1399 // Shut down the test server, so connecting to it fails. Note that | 1389 callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1400 // calling shutdown again during teardown is safe. | |
| 1401 NativeTestServer.shutdownNativeTestServer(); | |
| 1402 | 1390 |
| 1403 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 1391 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1404 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); | 1392 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
| 1405 dataProvider.addRead("test".getBytes()); | 1393 dataProvider.addRead("test".getBytes()); |
| 1406 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); | 1394 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
| 1407 builder.addHeader("Content-Type", "useless/string"); | 1395 builder.addHeader("Content-Type", "useless/string"); |
| 1408 builder.build().start(); | 1396 builder.build().start(); |
| 1409 callback.blockForDone(); | 1397 callback.blockForDone(); |
| 1410 | 1398 |
| 1411 assertNull(callback.mResponseInfo); | 1399 assertNull(callback.mResponseInfo); |
| 1412 assertEquals("Exception in CronetUrlRequest: net::ERR_CONNECTION_REFUSED
", | 1400 if (testingJavaImpl()) { |
| 1413 callback.mError.getMessage()); | 1401 Throwable cause = callback.mError.getCause(); |
| 1402 assertTrue("Exception was: " + cause, cause instanceof ConnectExcept
ion); |
| 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 if (Log.isLoggable("TESTING", Log.VERBOSE)) { |
| 1412 Log.v("TESTING", "Testing " + failureType + " during " + failureStep
); |
| 1413 } |
| 1418 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1414 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1419 callback.setFailure(failureType, failureStep); | 1415 callback.setFailure(failureType, failureStep); |
| 1420 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
RedirectURL(), | 1416 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
RedirectURL(), |
| 1421 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1417 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1422 UrlRequest urlRequest = builder.build(); | 1418 UrlRequest urlRequest = builder.build(); |
| 1423 urlRequest.start(); | 1419 urlRequest.start(); |
| 1424 callback.blockForDone(); | 1420 callback.blockForDone(); |
| 1425 assertEquals(1, callback.mRedirectCount); | 1421 assertEquals(1, callback.mRedirectCount); |
| 1426 assertEquals(callback.mResponseStep, failureStep); | 1422 assertEquals(callback.mResponseStep, failureStep); |
| 1427 assertTrue(urlRequest.isDone()); | 1423 assertTrue(urlRequest.isDone()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 assertEquals(1, callback.mRedirectCount); | 1474 assertEquals(1, callback.mRedirectCount); |
| 1479 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); | 1475 assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED); |
| 1480 assertTrue(urlRequest.isDone()); | 1476 assertTrue(urlRequest.isDone()); |
| 1481 assertNotNull(callback.mResponseInfo); | 1477 assertNotNull(callback.mResponseInfo); |
| 1482 assertNull(callback.mError); | 1478 assertNull(callback.mError); |
| 1483 assertFalse(callback.mOnErrorCalled); | 1479 assertFalse(callback.mOnErrorCalled); |
| 1484 } | 1480 } |
| 1485 | 1481 |
| 1486 @SmallTest | 1482 @SmallTest |
| 1487 @Feature({"Cronet"}) | 1483 @Feature({"Cronet"}) |
| 1484 @OnlyRunNativeCronet // No destroyed callback for tests |
| 1488 public void testExecutorShutdown() { | 1485 public void testExecutorShutdown() { |
| 1489 TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 1486 TestUrlRequestCallback callback = new TestUrlRequestCallback(); |
| 1490 | 1487 |
| 1491 callback.setAutoAdvance(false); | 1488 callback.setAutoAdvance(false); |
| 1492 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), | 1489 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1493 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1490 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1494 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build(); | 1491 CronetUrlRequest urlRequest = (CronetUrlRequest) builder.build(); |
| 1495 urlRequest.start(); | 1492 urlRequest.start(); |
| 1496 callback.waitForNextStep(); | 1493 callback.waitForNextStep(); |
| 1497 assertFalse(callback.isDone()); | 1494 assertFalse(callback.isDone()); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1576 @Override | 1573 @Override |
| 1577 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { | 1574 public void onSucceeded(UrlRequest request, UrlResponseInfo info) { |
| 1578 // Stop accepting new tasks. | 1575 // Stop accepting new tasks. |
| 1579 shutdownExecutor(); | 1576 shutdownExecutor(); |
| 1580 super.onSucceeded(request, info); | 1577 super.onSucceeded(request, info); |
| 1581 } | 1578 } |
| 1582 } | 1579 } |
| 1583 | 1580 |
| 1584 @SmallTest | 1581 @SmallTest |
| 1585 @Feature({"Cronet"}) | 1582 @Feature({"Cronet"}) |
| 1583 @OnlyRunNativeCronet // No adapter to destroy in pure java |
| 1586 // Regression test for crbug.com/564946. | 1584 // Regression test for crbug.com/564946. |
| 1587 public void testDestroyUploadDataStreamAdapterOnSucceededCallback() throws E
xception { | 1585 public void testDestroyUploadDataStreamAdapterOnSucceededCallback() throws E
xception { |
| 1588 TestUrlRequestCallback callback = new QuitOnSuccessCallback(); | 1586 TestUrlRequestCallback callback = new QuitOnSuccessCallback(); |
| 1589 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), | 1587 UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.get
EchoBodyURL(), |
| 1590 callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 1588 callback, callback.getExecutor(), mTestFramework.mCronetEngine); |
| 1591 | 1589 |
| 1592 TestUploadDataProvider dataProvider = new TestUploadDataProvider( | 1590 TestUploadDataProvider dataProvider = new TestUploadDataProvider( |
| 1593 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); | 1591 TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExe
cutor()); |
| 1594 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); | 1592 builder.setUploadDataProvider(dataProvider, callback.getExecutor()); |
| 1595 builder.addHeader("Content-Type", "useless/string"); | 1593 builder.addHeader("Content-Type", "useless/string"); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 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 } |
| OLD | NEW |