| Index: components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestContextTest.java
|
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestContextTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1362ce5047a34b50244918dc609ea7a54688a51d
|
| --- /dev/null
|
| +++ b/components/cronet/android/test/javatests/src/org/chromium/cronet_test_apk/CronetUrlRequestContextTest.java
|
| @@ -0,0 +1,182 @@
|
| +// 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.test.suitebuilder.annotation.SmallTest;
|
| +
|
| +import org.chromium.base.test.util.Feature;
|
| +import org.chromium.cronet_test_apk.TestUrlRequestListener.FailureType;
|
| +import org.chromium.cronet_test_apk.TestUrlRequestListener.ResponseStep;
|
| +import org.chromium.net.ExtendedResponseInfo;
|
| +import org.chromium.net.ResponseInfo;
|
| +import org.chromium.net.UrlRequest;
|
| +import org.chromium.net.UrlRequestContextConfig;
|
| +import org.chromium.net.UrlRequestException;
|
| +
|
| +import java.nio.ByteBuffer;
|
| +
|
| +/**
|
| + * Test CronetUrlRequestContext.
|
| + */
|
| +public class CronetUrlRequestContextTest extends CronetTestBase {
|
| + // URLs used for tests.
|
| + private static final String TEST_URL = "http://127.0.0.1:8000";
|
| + private static final String MOCK_CRONET_TEST_FAILED_URL =
|
| + "http://mock.failed.request/-2";
|
| + private static final String MOCK_CRONET_TEST_SUCCESS_URL =
|
| + "http://mock.http/success.txt";
|
| +
|
| + CronetTestActivity mActivity;
|
| +
|
| + /**
|
| + * Listener that shutdowns the request context when request has succeeded
|
| + * or failed.
|
| + */
|
| + class ShutdownTestUrlRequestListener extends TestUrlRequestListener {
|
| + @Override
|
| + public void onDataReceived(UrlRequest request,
|
| + ResponseInfo info,
|
| + ByteBuffer byteBuffer) {
|
| + assertTrue(byteBuffer.capacity() != 0);
|
| + byte[] receivedDataBefore = new byte[byteBuffer.capacity()];
|
| + byteBuffer.get(receivedDataBefore);
|
| + // super will block if necessary.
|
| + super.onDataReceived(request, info, byteBuffer);
|
| + // |byteBuffer| is still accessible even if 'cancel' was called on
|
| + // another thread.
|
| + assertTrue(byteBuffer.capacity() != 0);
|
| + byte[] receivedDataAfter = new byte[byteBuffer.capacity()];
|
| + byteBuffer.get(receivedDataAfter);
|
| + assertEquals(receivedDataBefore, receivedDataAfter);
|
| + }
|
| +
|
| + @Override
|
| + public void onSucceeded(UrlRequest request, ExtendedResponseInfo info) {
|
| + super.onSucceeded(request, info);
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + }
|
| +
|
| + @Override
|
| + public void onFailed(UrlRequest request,
|
| + ResponseInfo info,
|
| + UrlRequestException error) {
|
| + super.onFailed(request, info, error);
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + }
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testConfigUserAgent() throws Exception {
|
| + String userAgentName = "User-Agent";
|
| + String userAgentValue = "User-Agent-Value";
|
| + UrlRequestContextConfig config = new UrlRequestContextConfig();
|
| + config.setUserAgent(userAgentValue);
|
| + config.setLibraryName("cronet_tests");
|
| + String[] commandLineArgs = {
|
| + CronetTestActivity.CONFIG_KEY, config.toString()
|
| + };
|
| + mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(TEST_URL,
|
| + commandLineArgs);
|
| + waitForActiveShellToBeDoneLoading();
|
| + assertTrue(UploadTestServer.startUploadTestServer());
|
| + TestUrlRequestListener listener = new TestUrlRequestListener();
|
| + UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest(
|
| + UploadTestServer.getEchoHeaderURL(userAgentName), listener,
|
| + listener.getExecutor());
|
| + urlRequest.start();
|
| + listener.blockForDone();
|
| + assertEquals(userAgentValue, listener.mResponseAsString);
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testShutdown() throws Exception {
|
| + mActivity = launchCronetTestApp();
|
| + TestUrlRequestListener listener = new ShutdownTestUrlRequestListener();
|
| + // Block listener when response starts to verify that shutdown fails
|
| + // if there are active requests.
|
| + listener.setFailure(FailureType.BLOCK,
|
| + ResponseStep.ON_RESPONSE_STARTED);
|
| + UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest(
|
| + TEST_URL, listener, listener.getExecutor());
|
| + urlRequest.start();
|
| + try {
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + fail("Should throw an exception");
|
| + } catch (Exception e) {
|
| + assertEquals("Cannot shutdown with active requests.",
|
| + e.getMessage());
|
| + }
|
| + listener.openBlockedStep();
|
| + listener.blockForDone();
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testShutdownAfterError() throws Exception {
|
| + mActivity = launchCronetTestApp();
|
| + TestUrlRequestListener listener = new ShutdownTestUrlRequestListener();
|
| + UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest(
|
| + MOCK_CRONET_TEST_FAILED_URL, listener, listener.getExecutor());
|
| + urlRequest.start();
|
| + listener.blockForDone();
|
| + assertTrue(listener.mOnErrorCalled);
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testShutdownAfterCancel() throws Exception {
|
| + mActivity = launchCronetTestApp();
|
| + TestUrlRequestListener listener = new TestUrlRequestListener();
|
| + // Block listener when response starts to verify that shutdown fails
|
| + // if there are active requests.
|
| + listener.setFailure(FailureType.BLOCK,
|
| + ResponseStep.ON_RESPONSE_STARTED);
|
| + UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest(
|
| + TEST_URL, listener, listener.getExecutor());
|
| + urlRequest.start();
|
| + try {
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + fail("Should throw an exception");
|
| + } catch (Exception e) {
|
| + assertEquals("Cannot shutdown with active requests.",
|
| + e.getMessage());
|
| + }
|
| + urlRequest.cancel();
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + }
|
| +
|
| + @SmallTest
|
| + @Feature({"Cronet"})
|
| + public void testShutdownAfterCancelDuringOnDataReceived() throws Exception {
|
| + mActivity = launchCronetTestApp();
|
| + TestUrlRequestListener listener = new TestUrlRequestListener();
|
| + // Block listener when response starts to verify that shutdown fails
|
| + // if there are active requests.
|
| + listener.setFailure(FailureType.BLOCK, ResponseStep.ON_DATA_RECEIVED);
|
| + UrlRequest urlRequest = mActivity.mUrlRequestContext.createRequest(
|
| + MOCK_CRONET_TEST_SUCCESS_URL, listener, listener.getExecutor());
|
| + urlRequest.start();
|
| + try {
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + fail("Should throw an exception");
|
| + } catch (Exception e) {
|
| + assertEquals("Cannot shutdown with active requests.",
|
| + e.getMessage());
|
| + }
|
| + // This cancel happens during 'onDataReceived' step, but cancel is
|
| + // delayed until listener call returns as it is accessing direct
|
| + // data buffer owned by request.
|
| + urlRequest.cancel();
|
| + assertTrue(urlRequest.isCanceled());
|
| + Thread.sleep(1000);
|
| + // Cancel happens when listener returns.
|
| + listener.openBlockedStep();
|
| + Thread.sleep(1000);
|
| +
|
| + mActivity.mUrlRequestContext.shutdown();
|
| + }
|
| +}
|
|
|