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..e5e872ce7a3f20ca40c106a743217c09e80f8332 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,53 @@ 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.ByteArrayOutputStream; |
| +import java.io.File; |
| +import java.io.FileInputStream; |
| +import java.io.IOException; |
| +import java.io.InputStream; |
| +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 +117,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 +127,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)); |
| + |
| + // 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. |
|
xunjieli
2015/05/11 15:50:41
FYI. Elly said she might be able to put in a CL to
|
| + 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 +165,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 +178,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 +188,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 +211,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 +239,45 @@ 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 { |
| + File prefFile = new File(mActivity.getTestStorage() + "/" + filename); |
| + assertTrue(prefFile.exists()); |
| + boolean contains = false; |
| + InputStream in = null; |
| + ByteArrayOutputStream out = null; |
| + try { |
| + in = new FileInputStream(prefFile); |
|
mef
2015/05/12 16:39:17
It seems that canonical way of reading file into s
xunjieli
2015/05/12 19:17:50
Done. That's much cleaner! thanks.
|
| + out = new ByteArrayOutputStream(); |
| + int b; |
| + while ((b = in.read()) != -1) { |
| + out.write(b); |
| + } |
| + String prefFileContent = out.toString(); |
| + contains = prefFileContent.contains(content); |
| + if (!contains) { |
| + Log.i(TAG, "Did not find \"%s\" in file which contains \"%s\"", content, |
| + prefFileContent); |
| + } |
| + } finally { |
| + if (in != null) in.close(); |
| + if (out != null) out.close(); |
| + } |
| + 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); |
| + } |
| } |