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

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

Issue 586143002: Initial implementation of Cronet Async API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments, add mock errors to CronetUrlRequestTest. Created 6 years, 2 months 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/cronet_test_apk/CronetUrlRequestTest.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c44755d4b59c1865c278af3d6e6ff91f78ebf34
--- /dev/null
+++ b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestTest.java
@@ -0,0 +1,215 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.cronet_test_apk;
+
+import android.os.ConditionVariable;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.test.util.Feature;
+import org.chromium.net.ExtendedResponseInfo;
+import org.chromium.net.ResponseInfo;
+import org.chromium.net.UrlRequest;
+import org.chromium.net.UrlRequestException;
+import org.chromium.net.UrlRequestListener;
+
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Test basic functionality of UrlRequest.
+ */
+public class CronetUrlRequestTest extends CronetTestBase {
+ // URL used for base tests.
+ private static final String TEST_URL = "http://127.0.0.1:8000";
+ private static final String MOCK_CRONET_TEST_SUCCESS_URL =
+ "http://mock.http/success.txt";
+ private static final String MOCK_CRONET_TEST_REDIRECT_URL =
+ "http://mock.http/redirect.html";
+ private static final String MOCK_CRONET_TEST_NOTFOUND_URL =
+ "http://mock.http/notfound.html";
+ private static final String MOCK_CRONET_TEST_FAILED_URL =
+ "http://mock.failed.request/-2";
+
+ class SimpleUrlRequestListener implements UrlRequestListener {
+ ConditionVariable mComplete = new ConditionVariable();
+ public int httpResponseDataLength = 0;
xunjieli 2014/10/17 00:31:35 nit: mmenke@ once suggested to use "m" prefix for
mef 2014/10/17 20:19:43 Done.
+ public ResponseInfo responseInfo;
+ public UrlRequestException error;
+
+ public boolean onRedirectCalled = false;
+ public boolean onResponseStartedCalled = false;
+ public boolean onDataReceivedCalled = false;
+ public boolean onCompleteCalled = false;
+ public boolean onErrorCalled = false;
+
+ public SimpleUrlRequestListener() {
+ }
+
+ @Override
+ public void onRedirect(UrlRequest request, ResponseInfo info,
+ URL newLocation) {
xunjieli 2014/10/17 00:31:35 nit: indent.
mef 2014/10/17 20:19:43 Done.
+ onRedirectCalled = true;
+ }
+
+ @Override
+ public void onResponseStarted(UrlRequest request, ResponseInfo info) {
+ onResponseStartedCalled = true;
+ responseInfo = info;
+ }
+
+ @Override
+ public void onDataReceived(UrlRequest request,
+ ResponseInfo info,
+ ByteBuffer byteBuffer) {
+ onDataReceivedCalled = true;
+ httpResponseDataLength += byteBuffer.capacity();
+ }
+
+ @Override
+ public void onComplete(UrlRequest request, ExtendedResponseInfo info) {
+ onCompleteCalled = true;
+ mComplete.open();
+ }
+
+ @Override
+ public void onError(UrlRequest request,
+ ResponseInfo info,
+ UrlRequestException error) {
+ onErrorCalled = true;
+ this.error = error;
+ mComplete.open();
+ }
+
+ public void blockForComplete() {
+ mComplete.block();
+ }
+
+ public void resetComplete() {
+ mComplete.close();
+ }
+ }
+
+ public SimpleUrlRequestListener launchAndWaitForComplete(String url)
+ throws Exception {
+ CronetTestActivity activity = launchCronetTestApp();
+
+ // Make sure the activity was created as expected.
+ waitForActiveShellToBeDoneLoading();
+ // AddUrlInterceptors() after native application context is initialized.
+ MockUrlRequestJobUtil.addUrlInterceptors();
+
+ ExecutorService executor = Executors.newFixedThreadPool(4);
+ SimpleUrlRequestListener listener = new SimpleUrlRequestListener();
+
+ // Create request.
+ UrlRequest request = activity.mUrlRequestFactory.createRequest(
+ url, listener, executor);
+ request.start();
+ listener.blockForComplete();
+ return listener;
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testSimpleGet() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(TEST_URL);
+ assertEquals(200, listener.responseInfo.getHttpStatusCode());
+ assertTrue(listener.httpResponseDataLength != 0);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockSuccess() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_SUCCESS_URL);
+ assertEquals(200, listener.responseInfo.getHttpStatusCode());
+ assertTrue(listener.httpResponseDataLength != 0);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockRedirect() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_REDIRECT_URL);
+ ResponseInfo responseInfo = listener.responseInfo;
+ assertEquals(200, responseInfo.getHttpStatusCode());
+ assertEquals(MOCK_CRONET_TEST_SUCCESS_URL,
+ responseInfo.getUrl());
+ assertEquals(2, responseInfo.getUrlChain().length);
+ assertEquals(MOCK_CRONET_TEST_REDIRECT_URL,
+ responseInfo.getUrlChain()[0]);
+ assertEquals(MOCK_CRONET_TEST_SUCCESS_URL,
+ responseInfo.getUrlChain()[1]);
+ assertTrue(listener.httpResponseDataLength != 0);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockNotFound() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_NOTFOUND_URL);
+ assertEquals(404, listener.responseInfo.getHttpStatusCode());
+ assertTrue(listener.httpResponseDataLength != 0);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockFailed() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_FAILED_URL);
+ assertEquals(null, listener.responseInfo);
+ assertEquals(0, listener.httpResponseDataLength);
+ assertNotNull(listener.error);
+ assertEquals(-2, listener.error.netError());
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockStartSyncError() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_SUCCESS_URL + "?start=-3");
+ assertNull(listener.responseInfo);
+ assertNotNull(listener.error);
+ assertEquals(-3, listener.error.netError());
+ assertFalse(listener.onRedirectCalled);
+ assertFalse(listener.onResponseStartedCalled);
+ assertFalse(listener.onDataReceivedCalled);
+ assertFalse(listener.onCompleteCalled);
+ assertTrue(listener.onErrorCalled);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockReadDataSyncError() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_SUCCESS_URL + "?readsync=-5");
+ assertEquals(200, listener.responseInfo.getHttpStatusCode());
+ assertNotNull(listener.error);
+ assertEquals(-5, listener.error.netError());
+ assertFalse(listener.onRedirectCalled);
+ assertTrue(listener.onResponseStartedCalled);
+ assertFalse(listener.onDataReceivedCalled);
+ assertFalse(listener.onCompleteCalled);
+ assertTrue(listener.onErrorCalled);
+ }
+
+ @SmallTest
+ @Feature({"Cronet"})
+ public void testMockReadDataAsyncError() throws Exception {
+ SimpleUrlRequestListener listener = launchAndWaitForComplete(
+ MOCK_CRONET_TEST_SUCCESS_URL + "?readasync=-5");
xunjieli 2014/10/17 00:31:35 indent: +4.
mef 2014/10/17 20:19:43 Done.
+ assertEquals(200, listener.responseInfo.getHttpStatusCode());
+ assertNotNull(listener.error);
+ assertEquals(-5, listener.error.netError());
+ assertFalse(listener.onRedirectCalled);
+ assertTrue(listener.onResponseStartedCalled);
+ assertFalse(listener.onDataReceivedCalled);
+ assertFalse(listener.onCompleteCalled);
+ assertTrue(listener.onErrorCalled);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698