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

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java

Issue 1492583002: Add HttpUrlConnection backed implementation of CronetEngine. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on HEAD Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
index c65e2803c1ba1bf3987e60f6dbaf6de80a865db6..7d5f78e041fa445fd5b1a1df82e23df3a9f2820a 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
@@ -5,6 +5,7 @@
package org.chromium.net;
import android.os.ConditionVariable;
+import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.test.util.Feature;
@@ -13,7 +14,9 @@ import org.chromium.net.TestUrlRequestCallback.ResponseStep;
import org.chromium.net.test.FailurePhase;
import java.nio.ByteBuffer;
+import java.util.AbstractMap;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@@ -125,16 +128,41 @@ public class CronetUrlRequestTest extends CronetTestBase {
assertEquals("GET", callback.mResponseAsString);
assertEquals(0, callback.mRedirectCount);
assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
- assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpStatus = 200 OK, "
- + "headers = [Connection=close, Content-Length=3, "
- + "Content-Type=text/plain], wasCached = false, "
- + "negotiatedProtocol = unknown, proxyServer= :0, "
- + "receivedBytesCount = 86",
- url, url),
- callback.mResponseInfo.toString());
+ UrlResponseInfo urlResponseInfo = createUrlResponseInfo(new String[] {url}, "OK", 200, 86,
+ "Connection", "close", "Content-Length", "3", "Content-Type", "text/plain");
+ assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
checkResponseInfo(callback.mResponseInfo, NativeTestServer.getEchoMethodURL(), 200, "OK");
}
+ UrlResponseInfo createUrlResponseInfo(
+ String[] urls, String message, int statusCode, int receivedBytes, String... headers) {
+ ArrayList<Map.Entry<String, String>> headersList = new ArrayList<>();
+ for (int i = 0; i < headers.length; i += 2) {
+ headersList.add(new AbstractMap.SimpleImmutableEntry<String, String>(
+ headers[i], headers[i + 1]));
+ }
+ UrlResponseInfo unknown = new UrlResponseInfo(
+ Arrays.asList(urls), statusCode, message, headersList, false, "unknown", ":0");
+ unknown.setReceivedBytesCount(receivedBytes);
+ return unknown;
+ }
+
+ void assertResponseEquals(UrlResponseInfo expected, UrlResponseInfo actual) {
+ assertEquals(expected.getAllHeaders(), actual.getAllHeaders());
+ assertEquals(expected.getAllHeadersAsList(), actual.getAllHeadersAsList());
+ assertEquals(expected.getHttpStatusCode(), actual.getHttpStatusCode());
+ assertEquals(expected.getHttpStatusText(), actual.getHttpStatusText());
+ assertEquals(expected.getUrlChain(), actual.getUrlChain());
+ assertEquals(expected.getUrl(), actual.getUrl());
+ // Transferred bytes and proxy server are not supported in pure java
+ if (!(mTestFramework.mCronetEngine instanceof JavaCronetEngine)) {
+ assertEquals(expected.getReceivedBytesCount(), actual.getReceivedBytesCount());
+ assertEquals(expected.getProxyServer(), actual.getProxyServer());
+ // This is a place where behavior intentionally differs between native and java
+ assertEquals(expected.getNegotiatedProtocol(), actual.getNegotiatedProtocol());
+ }
+ }
+
/**
* Tests a redirect by running it step-by-step. Also tests that delaying a
* request works as expected. To make sure there are no unexpected pending
@@ -162,13 +190,10 @@ public class CronetUrlRequestTest extends CronetTestBase {
checkResponseInfoHeader(
callback.mRedirectResponseInfoList.get(0), "redirect-header", "header-value");
- assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpStatus = 302 Found, "
- + "headers = [Location=/success.txt, "
- + "redirect-header=header-value], wasCached = false, "
- + "negotiatedProtocol = unknown, proxyServer= :0, "
- + "receivedBytesCount = 74",
- NativeTestServer.getRedirectURL(), NativeTestServer.getRedirectURL()),
- callback.mRedirectResponseInfoList.get(0).toString());
+ UrlResponseInfo expected =
+ createUrlResponseInfo(new String[] {NativeTestServer.getRedirectURL()}, "Found",
+ 302, 74, "Location", "/success.txt", "redirect-header", "header-value");
+ assertResponseEquals(expected, callback.mRedirectResponseInfoList.get(0));
// Wait for an unrelated request to finish. The request should not
// advance until followRedirect is invoked.
@@ -213,17 +238,13 @@ public class CronetUrlRequestTest extends CronetTestBase {
assertEquals(ResponseStep.ON_SUCCEEDED, callback.mResponseStep);
assertEquals(NativeTestServer.SUCCESS_BODY, callback.mResponseAsString);
- assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s, %s], httpStatus = 200 OK, "
- + "headers = [Content-Type=text/plain, "
- + "Access-Control-Allow-Origin=*, header-name=header-value, "
- + "multi-header-name=header-value1, "
- + "multi-header-name=header-value2], wasCached = false, "
- + "negotiatedProtocol = unknown, proxyServer= :0, "
- + "receivedBytesCount = 260",
- NativeTestServer.getSuccessURL(), NativeTestServer.getRedirectURL(),
- NativeTestServer.getSuccessURL()),
- callback.mResponseInfo.toString());
+ UrlResponseInfo urlResponseInfo = createUrlResponseInfo(
+ new String[] {NativeTestServer.getRedirectURL(), NativeTestServer.getSuccessURL()},
+ "OK", 200, 260, "Content-Type", "text/plain", "Access-Control-Allow-Origin", "*",
+ "header-name", "header-value", "multi-header-name", "header-value1",
+ "multi-header-name", "header-value2");
+ assertResponseEquals(urlResponseInfo, callback.mResponseInfo);
// Make sure there are no other pending messages, which would trigger
// asserts in TestUrlRequestCallback.
testSimpleGet();
@@ -247,6 +268,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
// See http://crbug.com/468803.
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to assert on
public void testContentLengthMismatchFailsOnce() throws Exception {
String url = NativeTestServer.getFileURL(
"/content_length_mismatch.html");
@@ -254,7 +276,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
// The entire response body will be read before the error is returned.
// This is because the network stack returns data as it's read from the
- // socket, and the socket close message which tiggers the error will
+ // socket, and the socket close message which triggers the error will
// only be passed along after all data has been read.
assertEquals("Response that lies about content length.", callback.mResponseAsString);
assertNotNull(callback.mError);
@@ -434,17 +456,13 @@ public class CronetUrlRequestTest extends CronetTestBase {
assertEquals(200, callback.mResponseInfo.getHttpStatusCode());
List<Map.Entry<String, String>> responseHeaders =
callback.mResponseInfo.getAllHeadersAsList();
- assertEquals(5, responseHeaders.size());
- assertEquals("Content-Type", responseHeaders.get(0).getKey());
- assertEquals("text/plain", responseHeaders.get(0).getValue());
- assertEquals("Access-Control-Allow-Origin", responseHeaders.get(1).getKey());
- assertEquals("*", responseHeaders.get(1).getValue());
- assertEquals("header-name", responseHeaders.get(2).getKey());
- assertEquals("header-value", responseHeaders.get(2).getValue());
- assertEquals("multi-header-name", responseHeaders.get(3).getKey());
- assertEquals("header-value1", responseHeaders.get(3).getValue());
- assertEquals("multi-header-name", responseHeaders.get(4).getKey());
- assertEquals("header-value2", responseHeaders.get(4).getValue());
+
+ MoreAsserts.assertContentsInOrder(responseHeaders,
+ new AbstractMap.SimpleEntry<>("Content-Type", "text/plain"),
+ new AbstractMap.SimpleEntry<>("Access-Control-Allow-Origin", "*"),
+ new AbstractMap.SimpleEntry<>("header-name", "header-value"),
+ new AbstractMap.SimpleEntry<>("multi-header-name", "header-value1"),
+ new AbstractMap.SimpleEntry<>("multi-header-name", "header-value2"));
}
@SmallTest
@@ -458,39 +476,24 @@ public class CronetUrlRequestTest extends CronetTestBase {
assertEquals(2, callback.mRedirectResponseInfoList.size());
// Check first redirect (multiredirect.html -> redirect.html)
+ UrlResponseInfo firstExpectedResponseInfo = createUrlResponseInfo(
+ new String[] {NativeTestServer.getMultiRedirectURL()}, "Found", 302, 77, "Location",
+ "/redirect.html", "redirect-header0", "header-value");
UrlResponseInfo firstRedirectResponseInfo = callback.mRedirectResponseInfoList.get(0);
- assertEquals(1, firstRedirectResponseInfo.getUrlChain().size());
- assertEquals(NativeTestServer.getMultiRedirectURL(),
- firstRedirectResponseInfo.getUrlChain().get(0));
- checkResponseInfo(
- firstRedirectResponseInfo, NativeTestServer.getMultiRedirectURL(), 302, "Found");
- checkResponseInfoHeader(firstRedirectResponseInfo,
- "redirect-header0", "header-value");
- assertEquals(77, firstRedirectResponseInfo.getReceivedBytesCount());
+ assertResponseEquals(firstExpectedResponseInfo, firstRedirectResponseInfo);
// Check second redirect (redirect.html -> success.txt)
- UrlResponseInfo secondRedirectResponseInfo = callback.mRedirectResponseInfoList.get(1);
- assertEquals(2, secondRedirectResponseInfo.getUrlChain().size());
- assertEquals(NativeTestServer.getMultiRedirectURL(),
- secondRedirectResponseInfo.getUrlChain().get(0));
- assertEquals(
- NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.getUrlChain().get(1));
- checkResponseInfo(
- secondRedirectResponseInfo, NativeTestServer.getRedirectURL(), 302, "Found");
- checkResponseInfoHeader(secondRedirectResponseInfo,
- "redirect-header", "header-value");
- assertEquals(151, secondRedirectResponseInfo.getReceivedBytesCount());
-
- // Check final response (success.txt).
- assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrl());
- assertEquals(3, mResponseInfo.getUrlChain().size());
- assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUrlChain().get(0));
- assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChain().get(1));
- assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain().get(2));
+ UrlResponseInfo secondExpectedResponseInfo = createUrlResponseInfo(
+ new String[] {NativeTestServer.getMultiRedirectURL(),
+ NativeTestServer.getRedirectURL(), NativeTestServer.getSuccessURL()},
+ "OK", 200, 337, "Content-Type", "text/plain", "Access-Control-Allow-Origin", "*",
+ "header-name", "header-value", "multi-header-name", "header-value1",
+ "multi-header-name", "header-value2");
+
+ assertResponseEquals(secondExpectedResponseInfo, mResponseInfo);
assertTrue(callback.mHttpResponseDataLength != 0);
assertEquals(2, callback.mRedirectCount);
assertEquals(callback.mResponseStep, ResponseStep.ON_SUCCEEDED);
- assertEquals(337, mResponseInfo.getReceivedBytesCount());
}
@SmallTest
@@ -498,8 +501,9 @@ public class CronetUrlRequestTest extends CronetTestBase {
public void testMockNotFound() throws Exception {
TestUrlRequestCallback callback =
startAndWaitForComplete(NativeTestServer.getNotFoundURL());
- assertEquals(404, callback.mResponseInfo.getHttpStatusCode());
- assertEquals(121, callback.mResponseInfo.getReceivedBytesCount());
+ UrlResponseInfo expected = createUrlResponseInfo(
+ new String[] {NativeTestServer.getNotFoundURL()}, "Not Found", 404, 121);
+ assertResponseEquals(expected, callback.mResponseInfo);
assertTrue(callback.mHttpResponseDataLength != 0);
assertEquals(0, callback.mRedirectCount);
assertFalse(callback.mOnErrorCalled);
@@ -508,6 +512,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to assert on
pauljensen 2015/12/21 20:27:58 I think a lot of these comments could be more accu
Charles 2015/12/21 23:36:26 Done.
public void testMockStartAsyncError() throws Exception {
final int arbitraryNetError = -3;
TestUrlRequestCallback callback =
@@ -523,6 +528,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to assert on
public void testMockReadDataSyncError() throws Exception {
final int arbitraryNetError = -4;
TestUrlRequestCallback callback =
@@ -539,6 +545,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to assert on
public void testMockReadDataAsyncError() throws Exception {
final int arbitraryNetError = -5;
TestUrlRequestCallback callback =
@@ -558,6 +565,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
*/
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet
public void testMockClientCertificateRequested() throws Exception {
TestUrlRequestCallback callback = startAndWaitForComplete(
MockUrlRequestJobFactory.getMockUrlForClientCertificateRequest());
@@ -574,6 +582,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
*/
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to use yet
public void testMockSSLCertificateError() throws Exception {
TestUrlRequestCallback callback = startAndWaitForComplete(
MockUrlRequestJobFactory.getMockUrlForSSLCertificateError());
@@ -818,8 +827,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
callback.startNextRead(urlRequest);
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("Unexpected read attempt.",
- e.getMessage());
}
// Verify reading right after start throws an assertion. Both must be
@@ -833,8 +840,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
callback.startNextRead(urlRequest);
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("Unexpected read attempt.",
- e.getMessage());
}
}
};
@@ -847,8 +852,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
callback.startNextRead(urlRequest);
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("Unexpected read attempt.",
- e.getMessage());
}
urlRequest.followRedirect();
callback.waitForNextStep();
@@ -866,8 +869,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
callback.startNextRead(urlRequest);
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("Unexpected read attempt.",
- e.getMessage());
}
}
};
@@ -883,8 +884,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
callback.startNextRead(urlRequest);
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("Unexpected read attempt.",
- e.getMessage());
}
}
@@ -903,8 +902,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.followRedirect();
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("No redirect to follow.",
- e.getMessage());
}
// Try to follow a redirect just after starting the request. Has to be
@@ -917,8 +914,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.followRedirect();
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("No redirect to follow.",
- e.getMessage());
}
}
};
@@ -935,8 +930,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.followRedirect();
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("No redirect to follow.",
- e.getMessage());
}
}
};
@@ -951,8 +944,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.followRedirect();
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("No redirect to follow.",
- e.getMessage());
}
callback.startNextRead(urlRequest);
callback.waitForNextStep();
@@ -966,8 +957,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.followRedirect();
fail("Exception not thrown");
} catch (IllegalStateException e) {
- assertEquals("No redirect to follow.",
- e.getMessage());
}
}
@@ -992,7 +981,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
builder.build().start();
fail("Exception not thrown");
} catch (IllegalArgumentException e) {
- assertEquals("Requests with upload data must have a Content-Type.", e.getMessage());
}
}
@@ -1392,6 +1380,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
// UploadDataStream, because it can't connect to the server.
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No canonical exception to assert on
pauljensen 2015/12/21 20:27:58 can we at least test that some error is generated?
Charles 2015/12/21 23:36:26 Done.
public void testUploadFailsWithoutInitializingStream() throws Exception {
TestUrlRequestCallback callback = new TestUrlRequestCallback();
UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getEchoBodyURL(),
@@ -1415,6 +1404,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
private void throwOrCancel(FailureType failureType, ResponseStep failureStep,
boolean expectResponseInfo, boolean expectError) {
+ System.out.println("Testing " + failureType + " during " + failureStep);
pauljensen 2015/12/21 20:27:58 is this still necessary?
Charles 2015/12/21 23:36:26 Not strictly necessary, but very very helpful for
pauljensen 2015/12/29 16:35:53 I think Chromium generally likes their tests to no
Charles 2016/01/05 21:53:56 Done.
TestUrlRequestCallback callback = new TestUrlRequestCallback();
callback.setFailure(failureType, failureStep);
UrlRequest.Builder builder = new UrlRequest.Builder(NativeTestServer.getRedirectURL(),
@@ -1423,7 +1413,6 @@ public class CronetUrlRequestTest extends CronetTestBase {
urlRequest.start();
callback.blockForDone();
assertEquals(1, callback.mRedirectCount);
- assertEquals(callback.mResponseStep, failureStep);
pauljensen 2015/12/21 20:27:58 why was this removed?
Charles 2015/12/21 23:36:26 Done.
assertTrue(urlRequest.isDone());
assertEquals(expectResponseInfo, callback.mResponseInfo != null);
assertEquals(expectError, callback.mError != null);
@@ -1485,6 +1474,7 @@ public class CronetUrlRequestTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
+ @OnlyRunNativeCronet // No destroyed callback for tests
public void testExecutorShutdown() {
TestUrlRequestCallback callback = new TestUrlRequestCallback();

Powered by Google App Engine
This is Rietveld 408576698