Chromium Code Reviews| Index: components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..80c3e3dddeafedc0ede1a46d360594fa5af4b1a3 |
| --- /dev/null |
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
| @@ -0,0 +1,155 @@ |
| +// Copyright 2015 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.net; |
| + |
| +import android.test.suitebuilder.annotation.SmallTest; |
| + |
| +import org.chromium.base.test.util.Feature; |
| + |
| +import java.util.Arrays; |
| +import java.util.HashMap; |
| +import java.util.Map; |
| + |
| +/** |
| + * Tests Sdch support. |
| + */ |
| +public class SdchTest extends CronetTestBase { |
| + private CronetTestActivity mActivity; |
| + |
| + private void setUp(boolean enableSdch) { |
| + UrlRequestContextConfig config = new UrlRequestContextConfig(); |
| + config.enableSDCH(enableSdch); |
| + config.setLibraryName("cronet_tests"); |
| + String[] commandLineArgs = {CronetTestActivity.CONFIG_KEY, config.toString()}; |
| + mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineArgs); |
| + |
| + // Registers custom DNS mapping for legacy ChromiumUrlRequestFactory. |
| + ChromiumUrlRequestFactory factory = (ChromiumUrlRequestFactory) mActivity.mRequestFactory; |
| + long legacyAdapter = factory.getRequestContext().getUrlRequestContextAdapter(); |
| + assertTrue(legacyAdapter != 0); |
| + NativeTestServer.registerHostResolverProc(legacyAdapter, true); |
| + |
| + // Registers custom DNS mapping for CronetUrlRequestContext. |
| + CronetUrlRequestContext requestContext = |
| + (CronetUrlRequestContext) mActivity.mUrlRequestContext; |
| + long adapter = requestContext.getUrlRequestContextAdapter(); |
| + assertTrue(adapter != 0); |
| + NativeTestServer.registerHostResolverProc(adapter, false); |
| + |
| + // Starts NativeTestServer. |
| + assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext())); |
| + } |
| + |
| + @Override |
| + protected void tearDown() { |
| + NativeTestServer.shutdownNativeTestServer(); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + public void testSdchEnabledLegacyAPI() throws Exception { |
| + setUp(true); |
| + // Make a request to /sdch which advertises the dictionary. |
| + TestHttpUrlRequestListener listener1 = |
| + startAndWaitForCompleteLegacyAPI(NativeTestServer.getSdchURL() + "/sdch"); |
| + assertEquals(200, listener1.mHttpStatusCode); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener1.mResponseAsString); |
| + assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), |
| + listener1.mResponseHeaders.get("Get-Dictionary")); |
| + |
| + // TODO(xunjieli): Rather than setting an arbitrary delay here, consider |
| + // implementing a SdchObserver to watch for dictionary add events once |
| + // add event is implemented in SdchObserver. |
| + Thread.sleep(5000); |
| + |
| + // Make a request to fetch encoded response at /sdch/test. |
| + TestHttpUrlRequestListener listener2 = |
| + startAndWaitForCompleteLegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener2.mHttpStatusCode); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2.mResponseAsString); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + public void testSdchDisabledLegacyAPI() throws Exception { |
| + setUp(false); |
| + // Make a request to /sdch. |
| + // Since Sdch is not enabled, no dictionary should be advertised. |
| + TestHttpUrlRequestListener listener1 = |
| + startAndWaitForCompleteLegacyAPI(NativeTestServer.getSdchURL() + "/sdch"); |
| + assertEquals(200, listener1.mHttpStatusCode); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener1.mResponseAsString); |
| + assertEquals(null, listener1.mResponseHeaders.get("Get-Dictionary")); |
| + |
| + // Make a request to fetch /sdch/test. |
|
alexraikman
2015/04/14 18:11:33
I am not sure how this check is useful. In theory,
xunjieli
2015/04/14 18:21:51
Yea. I just wanted to make sure that when sdch is
|
| + TestHttpUrlRequestListener listener2 = |
| + startAndWaitForCompleteLegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener2.mHttpStatusCode); |
| + assertEquals("Sdch is not used.\n", listener2.mResponseAsString); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + public void testSdchEnabled() throws Exception { |
| + setUp(true); |
| + // Make a request to /sdch which advertises the dictionary. |
| + TestUrlRequestListener listener1 = |
| + startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch"); |
| + assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener1.mResponseAsString); |
| + assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), |
| + listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); |
| + |
| + // TODO(xunjieli): Rather than setting an arbitrary delay here, consider |
| + // implementing a SdchObserver to watch for dictionary add events once |
| + // add event is implemented in SdchObserver. |
| + Thread.sleep(5000); |
| + |
| + // Make a request to fetch encoded response at /sdch/test. |
| + TestUrlRequestListener listener2 = |
| + startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2.mResponseAsString); |
| + } |
| + |
| + @SmallTest |
| + @Feature({"Cronet"}) |
| + public void testSdchDisabled() throws Exception { |
| + setUp(false); |
| + // Make a request to /sdch. |
| + // Since Sdch is not enabled, no dictionary should be advertised. |
| + TestUrlRequestListener listener1 = |
| + startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch"); |
| + assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener1.mResponseAsString); |
| + assertEquals(null, listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary")); |
| + |
| + // Make a request to fetch /sdch/test. |
|
alexraikman
2015/04/14 18:11:33
ditto
|
| + TestUrlRequestListener listener2 = |
| + startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("Sdch is not used.\n", listener2.mResponseAsString); |
| + } |
| + |
| + private TestHttpUrlRequestListener startAndWaitForCompleteLegacyAPI(String url) |
| + throws Exception { |
| + Map<String, String> headers = new HashMap<String, String>(); |
| + TestHttpUrlRequestListener listener = new TestHttpUrlRequestListener(); |
| + HttpUrlRequest request = mActivity.mRequestFactory.createRequest( |
| + url, HttpUrlRequest.REQUEST_PRIORITY_MEDIUM, headers, listener); |
| + request.start(); |
| + listener.blockForComplete(); |
| + return listener; |
| + } |
| + |
| + private TestUrlRequestListener startAndWaitForComplete(String url) throws Exception { |
| + TestUrlRequestListener listener = new TestUrlRequestListener(); |
| + UrlRequest request = |
| + mActivity.mUrlRequestContext.createRequest(url, listener, listener.getExecutor()); |
| + request.start(); |
| + listener.blockForDone(); |
| + return listener; |
| + } |
| +} |