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 |
| index 18c3d729a7d21a7d92c049c7420a71dae3b3ba3b..00e09dc401cc7bfea335ea66047d54af3d09547f 100644 |
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java |
| @@ -6,48 +6,51 @@ package org.chromium.net; |
| import android.test.suitebuilder.annotation.SmallTest; |
| +import org.chromium.base.Log; |
| import org.chromium.base.test.util.Feature; |
| +import java.io.BufferedReader; |
| +import java.io.FileReader; |
| +import java.io.IOException; |
| +import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| +import java.util.List; |
| import java.util.Map; |
| /** |
| * Tests Sdch support. |
| */ |
| public class SdchTest extends CronetTestBase { |
| + private static final String TAG = Log.makeTag("SdchTest"); |
| private CronetTestActivity mActivity; |
| private void setUp(boolean enableSdch) { |
| - UrlRequestContextConfig config = new UrlRequestContextConfig(); |
| - config.enableSDCH(enableSdch); |
| - config.setLibraryName("cronet_tests"); |
| - config.enableHttpCache(UrlRequestContextConfig.HttpCache.IN_MEMORY, 100 * 1024); |
| - String[] commandLineArgs = {CronetTestActivity.CONFIG_KEY, config.toString()}; |
| - mActivity = launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineArgs); |
| - mActivity.startNetLog(); |
| - |
| - // Registers custom DNS mapping for legacy ChromiumUrlRequestFactory. |
| + List<String> commandLineArgs = new ArrayList<String>(); |
| + commandLineArgs.add(CronetTestActivity.CACHE_KEY); |
| + commandLineArgs.add(CronetTestActivity.CACHE_DISK); |
| + if (enableSdch) { |
| + commandLineArgs.add(CronetTestActivity.SDCH_KEY); |
| + commandLineArgs.add("enable"); |
| + } |
| + String[] args = new String[commandLineArgs.size()]; |
| + mActivity = |
| + launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineArgs.toArray(args)); |
| + |
| ChromiumUrlRequestFactory factory = (ChromiumUrlRequestFactory) mActivity.mRequestFactory; |
| - long legacyAdapter = factory.getRequestContext().getUrlRequestContextAdapterForTesting(); |
| - assertTrue(legacyAdapter != 0); |
| - NativeTestServer.registerHostResolverProc(legacyAdapter, true); |
| + registerDNSMapping(factory.getRequestContext().getUrlRequestContextAdapter(), true); |
| - // Registers custom DNS mapping for CronetUrlRequestContext. |
| CronetUrlRequestContext requestContext = |
| (CronetUrlRequestContext) mActivity.mUrlRequestContext; |
| - long adapter = requestContext.getUrlRequestContextAdapter(); |
| - assertTrue(adapter != 0); |
| - NativeTestServer.registerHostResolverProc(adapter, false); |
| + registerDNSMapping(requestContext.getUrlRequestContextAdapter(), false); |
| - // Starts NativeTestServer. |
| + // Start NativeTestServer. |
| assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext())); |
| } |
| @Override |
| protected void tearDown() throws Exception { |
| NativeTestServer.shutdownNativeTestServer(); |
| - mActivity.stopNetLog(); |
| super.tearDown(); |
| } |
| @@ -112,8 +115,8 @@ public class SdchTest extends CronetTestBase { |
| public void testSdchEnabled() throws Exception { |
| setUp(true); |
| // Make a request to /sdch which advertises the dictionary. |
| - TestUrlRequestListener listener1 = |
| - startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); |
| + TestUrlRequestListener listener1 = startAndWaitForComplete(mActivity.mUrlRequestContext, |
| + NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); |
| assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| assertEquals("This is an index page.\n", listener1.mResponseAsString); |
| assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"), |
| @@ -122,10 +125,36 @@ public class SdchTest extends CronetTestBase { |
| waitForDictionaryAdded("LeQxM80O", false); |
| // Make a request to fetch encoded response at /sdch/test. |
| - TestUrlRequestListener listener2 = |
| - startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/test"); |
| - assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| + TestUrlRequestListener listener2 = startAndWaitForComplete( |
| + mActivity.mUrlRequestContext, NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener2.mResponseInfo.getHttpStatusCode()); |
| assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2.mResponseAsString); |
| + |
| + // Wait for a bit until SimpleCache finished closing entries before |
| + // calling shutdown on the UrlRequestContext. |
| + // TODO(xunjieli): Remove once crbug.com/486120 is fixed. |
| + Thread.sleep(5000); |
| + mActivity.mUrlRequestContext.shutdown(); |
| + |
| + // Shutting down the context will make JsonPrefStore to flush pending |
| + // writes to disk. |
| + String dictUrl = NativeTestServer.getSdchURL() + "/sdch/dict/LeQxM80O"; |
| + assertTrue(prefFileContains("local_prefs.json", dictUrl)); |
|
mef
2015/05/13 15:15:22
Need to delete prefs file at some point before or
xunjieli
2015/05/13 17:50:14
Acknowledged. prepareTestStorage is called in Acti
|
| + |
| + // Test persistence. |
| + CronetUrlRequestContext newContext = new CronetUrlRequestContext( |
| + getInstrumentation().getTargetContext(), mActivity.getContextConfig()); |
| + registerDNSMapping(newContext.getUrlRequestContextAdapter(), false); |
| + |
| + // Wait until dictionaries are reloaded. |
| + // FIXME: confirm with Elly where there's a less flaky way. |
| + Thread.sleep(15000); |
| + |
| + // Make a request to fetch encoded response at /sdch/test. |
| + TestUrlRequestListener listener3 = |
| + startAndWaitForComplete(newContext, NativeTestServer.getSdchURL() + "/sdch/test"); |
| + assertEquals(200, listener3.mResponseInfo.getHttpStatusCode()); |
| + assertEquals("The quick brown fox jumps over the lazy dog.\n", listener3.mResponseAsString); |
| } |
| @SmallTest |
| @@ -134,8 +163,8 @@ public class SdchTest extends CronetTestBase { |
| setUp(false); |
| // Make a request to /sdch. |
| // Since Sdch is not enabled, no dictionary should be advertised. |
| - TestUrlRequestListener listener = |
| - startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); |
| + TestUrlRequestListener listener = startAndWaitForComplete(mActivity.mUrlRequestContext, |
| + NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O"); |
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); |
| assertEquals("This is an index page.\n", listener.mResponseAsString); |
| assertEquals(null, listener.mResponseInfo.getAllHeaders().get("Get-Dictionary")); |
| @@ -147,8 +176,8 @@ public class SdchTest extends CronetTestBase { |
| setUp(true); |
| // Make a request to /sdch/index which advertises a bad dictionary that |
| // does not exist. |
| - TestUrlRequestListener listener1 = |
| - startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/index?q=NotFound"); |
| + TestUrlRequestListener listener1 = startAndWaitForComplete(mActivity.mUrlRequestContext, |
| + NativeTestServer.getSdchURL() + "/sdch/index?q=NotFound"); |
| assertEquals(200, listener1.mResponseInfo.getHttpStatusCode()); |
| assertEquals("This is an index page.\n", listener1.mResponseAsString); |
| assertEquals(Arrays.asList("/sdch/dict/NotFound"), |
| @@ -157,8 +186,8 @@ public class SdchTest extends CronetTestBase { |
| waitForDictionaryAdded("NotFound", false); |
| // Make a request to fetch /sdch/test, and make sure Sdch encoding is not used. |
| - TestUrlRequestListener listener2 = |
| - startAndWaitForComplete(NativeTestServer.getSdchURL() + "/sdch/test"); |
| + TestUrlRequestListener listener2 = startAndWaitForComplete( |
| + mActivity.mUrlRequestContext, NativeTestServer.getSdchURL() + "/sdch/test"); |
| assertEquals(200, listener2.mResponseInfo.getHttpStatusCode()); |
| assertEquals("Sdch is not used.\n", listener2.mResponseAsString); |
| } |
| @@ -180,7 +209,8 @@ public class SdchTest extends CronetTestBase { |
| assertTrue(listener.mWasCached); |
| } |
| } else { |
| - TestUrlRequestListener listener = startAndWaitForComplete(url); |
| + TestUrlRequestListener listener = |
| + startAndWaitForComplete(mActivity.mUrlRequestContext, url); |
| if (dict.equals("NotFound")) { |
| assertEquals(404, listener.mResponseInfo.getHttpStatusCode()); |
| } else { |
| @@ -207,12 +237,36 @@ public class SdchTest extends CronetTestBase { |
| return listener; |
| } |
| - private TestUrlRequestListener startAndWaitForComplete(String url) throws Exception { |
| + private TestUrlRequestListener startAndWaitForComplete( |
| + UrlRequestContext requestContext, String url) throws Exception { |
| TestUrlRequestListener listener = new TestUrlRequestListener(); |
| - UrlRequest request = |
| - mActivity.mUrlRequestContext.createRequest(url, listener, listener.getExecutor()); |
| + UrlRequest request = requestContext.createRequest(url, listener, listener.getExecutor()); |
| request.start(); |
| listener.blockForDone(); |
| return listener; |
| } |
| + |
| + // Returns whether a pref file contains a particular string. |
| + private boolean prefFileContains(String filename, String content) throws IOException { |
| + BufferedReader reader = |
| + new BufferedReader(new FileReader(mActivity.getTestStorage() + "/" + filename)); |
| + StringBuilder builder = new StringBuilder(); |
| + String line; |
| + while ((line = reader.readLine()) != null) { |
| + builder.append(line); |
| + } |
| + reader.close(); |
| + String fileContent = builder.toString(); |
| + final boolean contains = fileContent.contains(content); |
| + if (!contains) { |
| + Log.i(TAG, "Did not find \"%s\" in file which contains \"%s\"", content, fileContent); |
| + } |
| + return contains; |
| + } |
| + |
| + // Registers custom DNS mapping for a native UrlRequestContextAdapter object. |
| + private void registerDNSMapping(long urlRequestContextAdapter, boolean isLegacyAPI) { |
| + assertTrue(urlRequestContextAdapter != 0); |
| + NativeTestServer.registerHostResolverProc(urlRequestContextAdapter, isLegacyAPI); |
| + } |
| } |