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.suitebuilder.annotation.SmallTest; | 8 import android.test.suitebuilder.annotation.SmallTest; |
9 import android.util.Pair; | |
10 | 9 |
11 import org.chromium.base.test.util.Feature; | 10 import org.chromium.base.test.util.Feature; |
12 import org.chromium.net.TestUrlRequestListener.FailureType; | 11 import org.chromium.net.TestUrlRequestListener.FailureType; |
13 import org.chromium.net.TestUrlRequestListener.ResponseStep; | 12 import org.chromium.net.TestUrlRequestListener.ResponseStep; |
14 import org.chromium.net.test.FailurePhase; | 13 import org.chromium.net.test.FailurePhase; |
15 | 14 |
16 import java.nio.ByteBuffer; | 15 import java.nio.ByteBuffer; |
17 import java.util.ArrayList; | 16 import java.util.ArrayList; |
18 import java.util.List; | 17 import java.util.List; |
19 import java.util.Map; | 18 import java.util.Map; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 urlRequest.start(); | 56 urlRequest.start(); |
58 listener.blockForDone(); | 57 listener.blockForDone(); |
59 assertTrue(urlRequest.isDone()); | 58 assertTrue(urlRequest.isDone()); |
60 return listener; | 59 return listener; |
61 } | 60 } |
62 | 61 |
63 private void checkResponseInfo(ResponseInfo responseInfo, | 62 private void checkResponseInfo(ResponseInfo responseInfo, |
64 String expectedUrl, int expectedHttpStatusCode, | 63 String expectedUrl, int expectedHttpStatusCode, |
65 String expectedHttpStatusText) { | 64 String expectedHttpStatusText) { |
66 assertEquals(expectedUrl, responseInfo.getUrl()); | 65 assertEquals(expectedUrl, responseInfo.getUrl()); |
67 assertEquals(expectedUrl, responseInfo.getUrlChain()[ | 66 assertEquals( |
68 responseInfo.getUrlChain().length - 1]); | 67 expectedUrl, responseInfo.getUrlChain().get(responseInfo.getUrlC
hain().size() - 1)); |
69 assertEquals(expectedHttpStatusCode, responseInfo.getHttpStatusCode()); | 68 assertEquals(expectedHttpStatusCode, responseInfo.getHttpStatusCode()); |
70 assertEquals(expectedHttpStatusText, responseInfo.getHttpStatusText()); | 69 assertEquals(expectedHttpStatusText, responseInfo.getHttpStatusText()); |
71 assertFalse(responseInfo.wasCached()); | 70 assertFalse(responseInfo.wasCached()); |
| 71 assertTrue(responseInfo.toString().length() > 0); |
72 } | 72 } |
73 | 73 |
74 private void checkResponseInfoHeader(ResponseInfo responseInfo, | 74 private void checkResponseInfoHeader(ResponseInfo responseInfo, |
75 String headerName, String headerValue) { | 75 String headerName, String headerValue) { |
76 Map<String, List<String>> responseHeaders = | 76 Map<String, List<String>> responseHeaders = |
77 responseInfo.getAllHeaders(); | 77 responseInfo.getAllHeaders(); |
78 List<String> header = responseHeaders.get(headerName); | 78 List<String> header = responseHeaders.get(headerName); |
79 assertNotNull(header); | 79 assertNotNull(header); |
80 assertTrue(header.contains(headerValue)); | 80 assertTrue(header.contains(headerValue)); |
81 } | 81 } |
(...skipping 28 matching lines...) Expand all Loading... |
110 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( | 110 UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest( |
111 NativeTestServer.getRedirectURL(), listener, listener.getExecuto
r()); | 111 NativeTestServer.getRedirectURL(), listener, listener.getExecuto
r()); |
112 urlRequest.start(); | 112 urlRequest.start(); |
113 listener.waitForNextStep(); | 113 listener.waitForNextStep(); |
114 | 114 |
115 // Check the redirect. | 115 // Check the redirect. |
116 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, listener.mResponseStep); | 116 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, listener.mResponseStep); |
117 assertEquals(1, listener.mRedirectResponseInfoList.size()); | 117 assertEquals(1, listener.mRedirectResponseInfoList.size()); |
118 checkResponseInfo(listener.mRedirectResponseInfoList.get(0), | 118 checkResponseInfo(listener.mRedirectResponseInfoList.get(0), |
119 NativeTestServer.getRedirectURL(), 302, "Found"); | 119 NativeTestServer.getRedirectURL(), 302, "Found"); |
120 assertEquals(1, | 120 assertEquals(1, listener.mRedirectResponseInfoList.get(0).getUrlChain().
size()); |
121 listener.mRedirectResponseInfoList.get(0).getUrlChain().length); | |
122 assertEquals(NativeTestServer.getSuccessURL(), listener.mRedirectUrlList
.get(0)); | 121 assertEquals(NativeTestServer.getSuccessURL(), listener.mRedirectUrlList
.get(0)); |
123 checkResponseInfoHeader(listener.mRedirectResponseInfoList.get(0), | 122 checkResponseInfoHeader(listener.mRedirectResponseInfoList.get(0), |
124 "redirect-header", "header-value"); | 123 "redirect-header", "header-value"); |
125 | 124 |
126 // Wait for an unrelated request to finish. The request should not | 125 // Wait for an unrelated request to finish. The request should not |
127 // advance until followRedirect is invoked. | 126 // advance until followRedirect is invoked. |
128 testSimpleGet(); | 127 testSimpleGet(); |
129 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, listener.mResponseStep); | 128 assertEquals(ResponseStep.ON_RECEIVED_REDIRECT, listener.mResponseStep); |
130 assertEquals(1, listener.mRedirectResponseInfoList.size()); | 129 assertEquals(1, listener.mRedirectResponseInfoList.size()); |
131 | 130 |
132 // Follow the redirect and wait for the next set of headers. | 131 // Follow the redirect and wait for the next set of headers. |
133 urlRequest.followRedirect(); | 132 urlRequest.followRedirect(); |
134 listener.waitForNextStep(); | 133 listener.waitForNextStep(); |
135 | 134 |
136 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); | 135 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); |
137 assertEquals(1, listener.mRedirectResponseInfoList.size()); | 136 assertEquals(1, listener.mRedirectResponseInfoList.size()); |
138 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 137 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); |
139 checkResponseInfo(listener.mResponseInfo, NativeTestServer.getSuccessURL
(), 200, "OK"); | 138 checkResponseInfo(listener.mResponseInfo, NativeTestServer.getSuccessURL
(), 200, "OK"); |
140 assertEquals(2, listener.mResponseInfo.getUrlChain().length); | 139 assertEquals(2, listener.mResponseInfo.getUrlChain().size()); |
141 assertEquals(NativeTestServer.getRedirectURL(), listener.mResponseInfo.g
etUrlChain()[0]); | 140 assertEquals( |
142 assertEquals(NativeTestServer.getSuccessURL(), listener.mResponseInfo.ge
tUrlChain()[1]); | 141 NativeTestServer.getRedirectURL(), listener.mResponseInfo.getUrl
Chain().get(0)); |
| 142 assertEquals(NativeTestServer.getSuccessURL(), listener.mResponseInfo.ge
tUrlChain().get(1)); |
143 | 143 |
144 // Wait for an unrelated request to finish. The request should not | 144 // Wait for an unrelated request to finish. The request should not |
145 // advance until read is invoked. | 145 // advance until read is invoked. |
146 testSimpleGet(); | 146 testSimpleGet(); |
147 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); | 147 assertEquals(ResponseStep.ON_RESPONSE_STARTED, listener.mResponseStep); |
148 | 148 |
149 // One read should get all the characters, but best not to depend on | 149 // One read should get all the characters, but best not to depend on |
150 // how much is actually read from the socket at once. | 150 // how much is actually read from the socket at once. |
151 while (!listener.isDone()) { | 151 while (!listener.isDone()) { |
152 listener.startNextRead(urlRequest); | 152 listener.startNextRead(urlRequest); |
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 assertEquals(2, multiHeader.size()); | 386 assertEquals(2, multiHeader.size()); |
387 assertEquals("header-value1", multiHeader.get(0)); | 387 assertEquals("header-value1", multiHeader.get(0)); |
388 assertEquals("header-value2", multiHeader.get(1)); | 388 assertEquals("header-value2", multiHeader.get(1)); |
389 } | 389 } |
390 | 390 |
391 @SmallTest | 391 @SmallTest |
392 @Feature({"Cronet"}) | 392 @Feature({"Cronet"}) |
393 public void testResponseHeadersList() throws Exception { | 393 public void testResponseHeadersList() throws Exception { |
394 TestUrlRequestListener listener = startAndWaitForComplete(NativeTestServ
er.getSuccessURL()); | 394 TestUrlRequestListener listener = startAndWaitForComplete(NativeTestServ
er.getSuccessURL()); |
395 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 395 assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); |
396 List<Pair<String, String>> responseHeaders = | 396 List<Map.Entry<String, String>> responseHeaders = |
397 listener.mResponseInfo.getAllHeadersAsList(); | 397 listener.mResponseInfo.getAllHeadersAsList(); |
398 assertEquals(5, responseHeaders.size()); | 398 assertEquals(5, responseHeaders.size()); |
399 assertEquals("Content-Type", responseHeaders.get(0).first); | 399 assertEquals("Content-Type", responseHeaders.get(0).getKey()); |
400 assertEquals("text/plain", responseHeaders.get(0).second); | 400 assertEquals("text/plain", responseHeaders.get(0).getValue()); |
401 assertEquals("Access-Control-Allow-Origin", | 401 assertEquals("Access-Control-Allow-Origin", responseHeaders.get(1).getKe
y()); |
402 responseHeaders.get(1).first); | 402 assertEquals("*", responseHeaders.get(1).getValue()); |
403 assertEquals("*", responseHeaders.get(1).second); | 403 assertEquals("header-name", responseHeaders.get(2).getKey()); |
404 assertEquals("header-name", responseHeaders.get(2).first); | 404 assertEquals("header-value", responseHeaders.get(2).getValue()); |
405 assertEquals("header-value", responseHeaders.get(2).second); | 405 assertEquals("multi-header-name", responseHeaders.get(3).getKey()); |
406 assertEquals("multi-header-name", responseHeaders.get(3).first); | 406 assertEquals("header-value1", responseHeaders.get(3).getValue()); |
407 assertEquals("header-value1", responseHeaders.get(3).second); | 407 assertEquals("multi-header-name", responseHeaders.get(4).getKey()); |
408 assertEquals("multi-header-name", responseHeaders.get(4).first); | 408 assertEquals("header-value2", responseHeaders.get(4).getValue()); |
409 assertEquals("header-value2", responseHeaders.get(4).second); | |
410 } | 409 } |
411 | 410 |
412 @SmallTest | 411 @SmallTest |
413 @Feature({"Cronet"}) | 412 @Feature({"Cronet"}) |
414 public void testMockMultiRedirect() throws Exception { | 413 public void testMockMultiRedirect() throws Exception { |
415 TestUrlRequestListener listener = | 414 TestUrlRequestListener listener = |
416 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); | 415 startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); |
417 ResponseInfo mResponseInfo = listener.mResponseInfo; | 416 ResponseInfo mResponseInfo = listener.mResponseInfo; |
418 assertEquals(2, listener.mRedirectCount); | 417 assertEquals(2, listener.mRedirectCount); |
419 assertEquals(200, mResponseInfo.getHttpStatusCode()); | 418 assertEquals(200, mResponseInfo.getHttpStatusCode()); |
420 assertEquals(2, listener.mRedirectResponseInfoList.size()); | 419 assertEquals(2, listener.mRedirectResponseInfoList.size()); |
421 | 420 |
422 // Check first redirect (multiredirect.html -> redirect.html) | 421 // Check first redirect (multiredirect.html -> redirect.html) |
423 ResponseInfo firstRedirectResponseInfo = | 422 ResponseInfo firstRedirectResponseInfo = |
424 listener.mRedirectResponseInfoList.get(0); | 423 listener.mRedirectResponseInfoList.get(0); |
425 assertEquals(1, firstRedirectResponseInfo.getUrlChain().length); | 424 assertEquals(1, firstRedirectResponseInfo.getUrlChain().size()); |
426 assertEquals( | 425 assertEquals(NativeTestServer.getMultiRedirectURL(), |
427 NativeTestServer.getMultiRedirectURL(), firstRedirectResponseInf
o.getUrlChain()[0]); | 426 firstRedirectResponseInfo.getUrlChain().get(0)); |
428 checkResponseInfo( | 427 checkResponseInfo( |
429 firstRedirectResponseInfo, NativeTestServer.getMultiRedirectURL(
), 302, "Found"); | 428 firstRedirectResponseInfo, NativeTestServer.getMultiRedirectURL(
), 302, "Found"); |
430 checkResponseInfoHeader(firstRedirectResponseInfo, | 429 checkResponseInfoHeader(firstRedirectResponseInfo, |
431 "redirect-header0", "header-value"); | 430 "redirect-header0", "header-value"); |
432 | 431 |
433 // Check second redirect (redirect.html -> success.txt) | 432 // Check second redirect (redirect.html -> success.txt) |
434 ResponseInfo secondRedirectResponseInfo = | 433 ResponseInfo secondRedirectResponseInfo = |
435 listener.mRedirectResponseInfoList.get(1); | 434 listener.mRedirectResponseInfoList.get(1); |
436 assertEquals(2, secondRedirectResponseInfo.getUrlChain().length); | 435 assertEquals(2, secondRedirectResponseInfo.getUrlChain().size()); |
437 assertEquals(NativeTestServer.getMultiRedirectURL(), | 436 assertEquals(NativeTestServer.getMultiRedirectURL(), |
438 secondRedirectResponseInfo.getUrlChain()[0]); | 437 secondRedirectResponseInfo.getUrlChain().get(0)); |
439 assertEquals( | 438 assertEquals( |
440 NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.ge
tUrlChain()[1]); | 439 NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.ge
tUrlChain().get(1)); |
441 checkResponseInfo( | 440 checkResponseInfo( |
442 secondRedirectResponseInfo, NativeTestServer.getRedirectURL(), 3
02, "Found"); | 441 secondRedirectResponseInfo, NativeTestServer.getRedirectURL(), 3
02, "Found"); |
443 checkResponseInfoHeader(secondRedirectResponseInfo, | 442 checkResponseInfoHeader(secondRedirectResponseInfo, |
444 "redirect-header", "header-value"); | 443 "redirect-header", "header-value"); |
445 | 444 |
446 // Check final response (success.txt). | 445 // Check final response (success.txt). |
447 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrl()); | 446 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrl()); |
448 assertEquals(3, mResponseInfo.getUrlChain().length); | 447 assertEquals(3, mResponseInfo.getUrlChain().size()); |
449 assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUr
lChain()[0]); | 448 assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUr
lChain().get(0)); |
450 assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChai
n()[1]); | 449 assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChai
n().get(1)); |
451 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain
()[2]); | 450 assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain
().get(2)); |
452 assertTrue(listener.mHttpResponseDataLength != 0); | 451 assertTrue(listener.mHttpResponseDataLength != 0); |
453 assertEquals(2, listener.mRedirectCount); | 452 assertEquals(2, listener.mRedirectCount); |
454 assertEquals(listener.mResponseStep, ResponseStep.ON_SUCCEEDED); | 453 assertEquals(listener.mResponseStep, ResponseStep.ON_SUCCEEDED); |
455 } | 454 } |
456 | 455 |
457 @SmallTest | 456 @SmallTest |
458 @Feature({"Cronet"}) | 457 @Feature({"Cronet"}) |
459 public void testMockNotFound() throws Exception { | 458 public void testMockNotFound() throws Exception { |
460 TestUrlRequestListener listener = | 459 TestUrlRequestListener listener = |
461 startAndWaitForComplete(NativeTestServer.getNotFoundURL()); | 460 startAndWaitForComplete(NativeTestServer.getNotFoundURL()); |
(...skipping 1038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1500 int end) { | 1499 int end) { |
1501 // Use a duplicate to avoid modifying byteBuffer. | 1500 // Use a duplicate to avoid modifying byteBuffer. |
1502 ByteBuffer duplicate = byteBuffer.duplicate(); | 1501 ByteBuffer duplicate = byteBuffer.duplicate(); |
1503 duplicate.position(start); | 1502 duplicate.position(start); |
1504 duplicate.limit(end); | 1503 duplicate.limit(end); |
1505 byte[] contents = new byte[duplicate.remaining()]; | 1504 byte[] contents = new byte[duplicate.remaining()]; |
1506 duplicate.get(contents); | 1505 duplicate.get(contents); |
1507 return new String(contents); | 1506 return new String(contents); |
1508 } | 1507 } |
1509 } | 1508 } |
OLD | NEW |