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..53f30f30920abdea3c33b622cef4c62cf05d05fe |
--- /dev/null |
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
@@ -0,0 +1,143 @@ |
+// 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); |
Elly Fong-Jones
2015/04/16 18:43:00
it seems like this test is going to be inherently
xunjieli
2015/04/16 19:36:57
Unfortunately I can't come up with a better soluti
|
+ |
+ // 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")); |
+ } |
+ |
+ @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")); |
+ } |
+ |
+ 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; |
+ } |
+} |