Chromium Code Reviews| Index: components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java |
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java |
| index 11075895c4afbbf28633cf982feb9f4e02429fa3..6aebb2a27ae4ac29ee5526b0d7bc419d14a5fa5c 100644 |
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java |
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java |
| @@ -23,24 +23,24 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| private CronetTestActivity mActivity; |
| private MockUrlRequestJobFactory mMockUrlRequestJobFactory; |
| + private TestHttpUrlRequestListener mListener; |
| + private HttpUrlRequest mRequest; |
| // Helper function to create a HttpUrlRequest with the specified url. |
| - private TestHttpUrlRequestListener createRequestAndWaitForComplete( |
| + private void createRequestAndWaitForComplete( |
| String url, boolean disableRedirects) { |
| HashMap<String, String> headers = new HashMap<String, String>(); |
| - TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); |
| - |
| - HttpUrlRequest request = mActivity.mRequestFactory.createRequest( |
| + mListener = new TestHttpUrlRequestListener(); |
| + mRequest = mActivity.mRequestFactory.createRequest( |
| url, |
| HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, |
| headers, |
| - listener); |
| + mListener); |
| if (disableRedirects) { |
| - request.disableRedirects(); |
| + mRequest.disableRedirects(); |
| } |
| - request.start(); |
| - listener.blockForComplete(); |
| - return listener; |
| + mRequest.start(); |
| + mListener.blockForComplete(); |
| } |
| @Override |
| @@ -54,75 +54,105 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| @SmallTest |
| @Feature({"Cronet"}) |
| public void testSuccessURLRequest() throws Exception { |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| + createRequestAndWaitForComplete( |
| MockUrlRequestJobFactory.SUCCESS_URL, false); |
| - assertEquals(MockUrlRequestJobFactory.SUCCESS_URL, listener.mUrl); |
| - assertEquals(200, listener.mHttpStatusCode); |
| - assertEquals("OK", listener.mHttpStatusText); |
| + assertEquals(MockUrlRequestJobFactory.SUCCESS_URL, mListener.mUrl); |
| + assertEquals(200, mListener.mHttpStatusCode); |
| + assertEquals("OK", mListener.mHttpStatusText); |
| assertEquals("this is a text file\n", |
| - new String(listener.mResponseAsBytes)); |
| + new String(mListener.mResponseAsBytes)); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(200, mRequest.getHttpStatusCode()); |
| + assertEquals("OK", mRequest.getHttpStatusText()); |
| + assertNull(mRequest.getException()); |
| } |
| @SmallTest |
| @Feature({"Cronet"}) |
| public void testRedirectURLRequest() throws Exception { |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| + createRequestAndWaitForComplete( |
| MockUrlRequestJobFactory.REDIRECT_URL, false); |
| - |
| - // Currently Cronet does not expose the url after redirect. |
| - assertEquals(MockUrlRequestJobFactory.REDIRECT_URL, listener.mUrl); |
| - assertEquals(200, listener.mHttpStatusCode); |
| - assertEquals("OK", listener.mHttpStatusText); |
| + // ChromiumUrlRequest does not expose the url after redirect. |
| + assertEquals(MockUrlRequestJobFactory.REDIRECT_URL, mListener.mUrl); |
| + assertEquals(200, mListener.mHttpStatusCode); |
| + assertEquals("OK", mListener.mHttpStatusText); |
| // Expect that the request is redirected to success.txt. |
| assertEquals("this is a text file\n", |
| - new String(listener.mResponseAsBytes)); |
| + new String(mListener.mResponseAsBytes)); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(200, mRequest.getHttpStatusCode()); |
| + assertEquals("OK", mRequest.getHttpStatusText()); |
| + assertNull(mRequest.getException()); |
| } |
| @SmallTest |
| @Feature({"Cronet"}) |
| public void testNotFoundURLRequest() throws Exception { |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| + createRequestAndWaitForComplete( |
| MockUrlRequestJobFactory.NOTFOUND_URL, false); |
| - assertEquals(MockUrlRequestJobFactory.NOTFOUND_URL, listener.mUrl); |
| - assertEquals(404, listener.mHttpStatusCode); |
| - assertEquals("Not Found", listener.mHttpStatusText); |
| + assertEquals(MockUrlRequestJobFactory.NOTFOUND_URL, mListener.mUrl); |
| + assertEquals(404, mListener.mHttpStatusCode); |
| + assertEquals("Not Found", mListener.mHttpStatusText); |
| assertEquals( |
| "<!DOCTYPE html>\n<html>\n<head>\n<title>Not found</title>\n" |
| + "<p>Test page loaded.</p>\n</head>\n</html>\n", |
| - new String(listener.mResponseAsBytes)); |
| + new String(mListener.mResponseAsBytes)); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(404, mRequest.getHttpStatusCode()); |
| + assertEquals("Not Found", mRequest.getHttpStatusText()); |
| + assertNull(mRequest.getException()); |
| } |
| @SmallTest |
| @Feature({"Cronet"}) |
| public void testFailedURLRequest() throws Exception { |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| + createRequestAndWaitForComplete( |
| MockUrlRequestJobFactory.FAILED_URL, false); |
| - |
| - assertEquals(MockUrlRequestJobFactory.FAILED_URL, listener.mUrl); |
| - assertEquals(null, listener.mHttpStatusText); |
| - assertEquals(0, listener.mHttpStatusCode); |
| + assertEquals(MockUrlRequestJobFactory.FAILED_URL, mListener.mUrl); |
| + assertEquals("", mListener.mHttpStatusText); |
| + assertEquals(0, mListener.mHttpStatusCode); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(0, mRequest.getHttpStatusCode()); |
| + assertEquals("", mRequest.getHttpStatusText()); |
| + Exception e = mRequest.getException(); |
| + assertEquals("System error: net::ERR_FAILED(-2)", e.getMessage()); |
| } |
| @SmallTest |
| @Feature({"Cronet"}) |
| // Test that redirect can be disabled for a request. |
| public void testDisableRedirects() throws Exception { |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| + createRequestAndWaitForComplete( |
| MockUrlRequestJobFactory.REDIRECT_URL, true); |
| // Currently Cronet does not expose the url after redirect. |
| - assertEquals(MockUrlRequestJobFactory.REDIRECT_URL, listener.mUrl); |
| - assertEquals(302, listener.mHttpStatusCode); |
| + assertEquals(MockUrlRequestJobFactory.REDIRECT_URL, mListener.mUrl); |
| + assertEquals(302, mListener.mHttpStatusCode); |
| + // MockUrlRequestJob somehow does not populate status text as "Found". |
| + assertEquals("", mListener.mHttpStatusText); |
| // Expect that the request is not redirected to success.txt. |
| - assertNotNull(listener.mResponseHeaders); |
| - List<String> entry = listener.mResponseHeaders.get("redirect-header"); |
| + assertNotNull(mListener.mResponseHeaders); |
| + List<String> entry = mListener.mResponseHeaders.get("redirect-header"); |
| assertEquals(1, entry.size()); |
| assertEquals("header-value", entry.get(0)); |
| - List<String> location = listener.mResponseHeaders.get("Location"); |
| + List<String> location = mListener.mResponseHeaders.get("Location"); |
| assertEquals(1, location.size()); |
| assertEquals("/success.txt", location.get(0)); |
| assertEquals("Request failed because there were too many redirects or " |
| + "redirects have been disabled", |
| - listener.mException.getMessage()); |
| + mListener.mException.getMessage()); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(302, mRequest.getHttpStatusCode()); |
| + // MockUrlRequestJob somehow does not populate status text as "Found". |
| + assertEquals("", mRequest.getHttpStatusText()); |
| + Exception e = mRequest.getException(); |
| + assertNotNull(e); |
| + assertEquals("Request failed because there were too many redirects " |
| + + "or redirects have been disabled", e.getMessage()); |
| } |
|
mef
2015/02/27 17:24:29
check that get[All]Header[s] throw exception?
xunjieli
2015/02/27 19:17:33
Done.
|
| /** |
| @@ -161,8 +191,6 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| @LargeTest |
| @Feature({"Cronet"}) |
| public void testNoWriteAfterCancelOnAnotherThread() throws Exception { |
| - CronetTestActivity activity = launchCronetTestApp(); |
| - |
| // This test verifies that WritableByteChannel.write is not called after |
| // WritableByteChannel.close if request is canceled from another |
| // thread. |
| @@ -174,7 +202,7 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| // Create request. |
| final HttpUrlRequest request = |
| - activity.mRequestFactory.createRequest( |
| + mActivity.mRequestFactory.createRequest( |
| MockUrlRequestJobFactory.SUCCESS_URL, |
| HttpUrlRequest.REQUEST_PRIORITY_LOW, headers, |
| channel, listener); |
| @@ -188,14 +216,16 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| Executors.newCachedThreadPool().execute(cancelTask); |
| listener.blockForComplete(); |
| assertFalse(channel.isOpen()); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(200, request.getHttpStatusCode()); |
| + assertEquals("OK", request.getHttpStatusText()); |
| } |
| } |
| @SmallTest |
| @Feature({"Cronet"}) |
| public void testNoWriteAfterSyncCancel() throws Exception { |
| - CronetTestActivity activity = launchCronetTestApp(); |
| - |
| HashMap<String, String> headers = new HashMap<String, String>(); |
| TestByteChannel channel = new TestByteChannel(); |
| TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); |
| @@ -208,7 +238,7 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| // Create request. |
| final HttpUrlRequest request = |
| - activity.mRequestFactory.createRequest( |
| + mActivity.mRequestFactory.createRequest( |
| mockUrl, |
| HttpUrlRequest.REQUEST_PRIORITY_LOW, headers, |
| channel, listener); |
| @@ -219,6 +249,10 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| listener.blockForComplete(); |
| assertTrue(request.isCanceled()); |
| assertFalse(channel.isOpen()); |
| + // Tests that ChromiumUrlRequest caches information which is available |
| + // after the native request adapter has been destroyed. |
| + assertEquals(-1, request.getHttpStatusCode()); |
|
mef
2015/02/27 17:24:29
It is unclear why it expects -1 if default is 0.
xunjieli
2015/02/27 19:17:33
This is returned by the native stack. Not very int
|
| + assertEquals("", request.getHttpStatusText()); |
|
mef
2015/02/27 17:24:29
It is unclear why it expects "" if default is null
xunjieli
2015/02/27 19:17:33
The native stack never returns null. It returns em
|
| } |
| @SmallTest |
| @@ -229,13 +263,11 @@ public class MockUrlRequestJobTest extends CronetTestBase { |
| int repeatCount = 100000; |
| String mockUrl = mMockUrlRequestJobFactory.getMockUrlForData(data, |
| repeatCount); |
| - TestHttpUrlRequestListener listener = createRequestAndWaitForComplete( |
| - mockUrl, false); |
| - assertEquals(mockUrl, listener.mUrl); |
| - String responseData = new String(listener.mResponseAsBytes); |
| + createRequestAndWaitForComplete(mockUrl, false); |
| + assertEquals(mockUrl, mListener.mUrl); |
| for (int i = 0; i < repeatCount; ++i) { |
| - assertEquals(data, responseData.substring(dataLength * i, |
| - dataLength * (i + 1))); |
| + assertEquals(data, mListener.mResponseAsString.substring( |
| + dataLength * i, dataLength * (i + 1))); |
| } |
| } |
| } |