Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: components/cronet/android/test/javatests/src/org/chromium/net/SdchTest.java

Issue 1133883002: [Cronet] Enable persistence mode for Sdch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quic_server_remove_loop
Patch Set: Missing include Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..80f5a1f6ac32b959921f616c491f69d9613dc4c9 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
@@ -4,57 +4,72 @@
package org.chromium.net;
+import android.os.ConditionVariable;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.base.Log;
import org.chromium.base.test.util.Feature;
+import org.chromium.net.SdchTestUtil.SdchObserver;
+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.
- ChromiumUrlRequestFactory factory = (ChromiumUrlRequestFactory) mActivity.mRequestFactory;
- long legacyAdapter = factory.getRequestContext().getUrlRequestContextAdapterForTesting();
- 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.
+ private enum SDCH {
+ ENABLED,
+ DISABLED,
+ }
+
+ private enum API {
+ LEGACY,
+ ASYNC,
+ }
+
+ private void setUp(SDCH setting, API api) {
+ List<String> commandLineArgs = new ArrayList<String>();
+ commandLineArgs.add(CronetTestActivity.CACHE_KEY);
+ commandLineArgs.add(CronetTestActivity.CACHE_DISK);
+ if (setting == SDCH.ENABLED) {
+ commandLineArgs.add(CronetTestActivity.SDCH_KEY);
+ commandLineArgs.add("enable");
+ }
+
+ String[] args = new String[commandLineArgs.size()];
+ mActivity =
+ launchCronetTestAppWithUrlAndCommandLineArgs(null, commandLineArgs.toArray(args));
+ long urlRequestContextAdapter = (api == API.LEGACY)
+ ? getRequestAdapter((ChromiumUrlRequestFactory) mActivity.mRequestFactory)
+ : getRequestAdapter((CronetUrlRequestContext) mActivity.mUrlRequestContext);
+ NativeTestServer.registerHostResolverProc(urlRequestContextAdapter, api == API.LEGACY);
+ // Start NativeTestServer.
assertTrue(NativeTestServer.startNativeTestServer(getInstrumentation().getTargetContext()));
}
@Override
protected void tearDown() throws Exception {
NativeTestServer.shutdownNativeTestServer();
- mActivity.stopNetLog();
super.tearDown();
}
@SmallTest
@Feature({"Cronet"})
public void testSdchEnabled_LegacyAPI() throws Exception {
- setUp(true);
+ setUp(SDCH.ENABLED, API.LEGACY);
+ long requestAdapter =
+ getRequestAdapter((ChromiumUrlRequestFactory) mActivity.mRequestFactory);
+ Observer observer = addObserver(requestAdapter, API.LEGACY);
// Make a request to /sdch/index which advertises the dictionary.
TestHttpUrlRequestListener listener1 = startAndWaitForComplete_LegacyAPI(
NativeTestServer.getSdchURL() + "/sdch/index?q=LeQxM80O");
@@ -63,19 +78,20 @@ public class SdchTest extends CronetTestBase {
assertEquals(Arrays.asList("/sdch/dict/LeQxM80O"),
listener1.mResponseHeaders.get("Get-Dictionary"));
- waitForDictionaryAdded("LeQxM80O", true);
+ observer.waitForDictionaryAdded("LeQxM80O");
// Make a request to fetch encoded response at /sdch/test.
TestHttpUrlRequestListener listener2 =
startAndWaitForComplete_LegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test");
assertEquals(200, listener2.mHttpStatusCode);
assertEquals("The quick brown fox jumps over the lazy dog.\n", listener2.mResponseAsString);
+ removeObserver(requestAdapter, observer, API.LEGACY);
}
@SmallTest
@Feature({"Cronet"})
public void testSdchDisabled_LegacyAPI() throws Exception {
- setUp(false);
+ setUp(SDCH.DISABLED, API.LEGACY);
// Make a request to /sdch/index.
// Since Sdch is not enabled, no dictionary should be advertised.
TestHttpUrlRequestListener listener = startAndWaitForComplete_LegacyAPI(
@@ -88,7 +104,7 @@ public class SdchTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
public void testDictionaryNotFound_LegacyAPI() throws Exception {
- setUp(true);
+ setUp(SDCH.ENABLED, API.LEGACY);
// Make a request to /sdch/index which advertises a bad dictionary that
// does not exist.
TestHttpUrlRequestListener listener1 = startAndWaitForComplete_LegacyAPI(
@@ -98,9 +114,7 @@ public class SdchTest extends CronetTestBase {
assertEquals(Arrays.asList("/sdch/dict/NotFound"),
listener1.mResponseHeaders.get("Get-Dictionary"));
- waitForDictionaryAdded("NotFound", true);
-
- // Make a request to fetch /sdch/test, and make sure Sdch encoding is not used.
+ // Make a request to fetch /sdch/test, and make sure request succeeds.
TestHttpUrlRequestListener listener2 =
startAndWaitForComplete_LegacyAPI(NativeTestServer.getSdchURL() + "/sdch/test");
assertEquals(200, listener2.mHttpStatusCode);
@@ -110,32 +124,64 @@ public class SdchTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
public void testSdchEnabled() throws Exception {
- setUp(true);
+ setUp(SDCH.ENABLED, API.ASYNC);
+ long requestAdapter =
+ getRequestAdapter((CronetUrlRequestContext) mActivity.mUrlRequestContext);
+ Observer observer = addObserver(requestAdapter, API.ASYNC);
// 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"),
listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary"));
- waitForDictionaryAdded("LeQxM80O", false);
+ observer.waitForDictionaryAdded("LeQxM80O");
// 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);
+ removeObserver(requestAdapter, observer, API.ASYNC);
+
+ // 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());
+
+ long newRequestAdapter = getRequestAdapter(newContext);
+ NativeTestServer.registerHostResolverProc(newRequestAdapter, false);
+ Observer newObserver = addObserver(newRequestAdapter, API.ASYNC);
+
+ newObserver.waitForDictionaryAdded("LeQxM80O");
+
+ // 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);
+ removeObserver(newRequestAdapter, newObserver, API.ASYNC);
}
@SmallTest
@Feature({"Cronet"})
public void testSdchDisabled() throws Exception {
- setUp(false);
+ setUp(SDCH.DISABLED, API.ASYNC);
// 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"));
@@ -144,56 +190,59 @@ public class SdchTest extends CronetTestBase {
@SmallTest
@Feature({"Cronet"})
public void testDictionaryNotFound() throws Exception {
- setUp(true);
+ setUp(SDCH.ENABLED, API.ASYNC);
// 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"),
listener1.mResponseInfo.getAllHeaders().get("Get-Dictionary"));
- 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);
}
- /**
- * Helper method to wait for dictionary to be fetched and added to the list of available
- * dictionaries.
- */
- private void waitForDictionaryAdded(String dict, boolean isLegacyAPI) throws Exception {
- // Since Http cache is enabled, making a request to the dictionary explicitly will
- // be served from the cache.
- String url = NativeTestServer.getSdchURL() + "/sdch/dict/" + dict;
- if (isLegacyAPI) {
- TestHttpUrlRequestListener listener = startAndWaitForComplete_LegacyAPI(url);
- if (dict.equals("NotFound")) {
- assertEquals(404, listener.mHttpStatusCode);
- } else {
- assertEquals(200, listener.mHttpStatusCode);
- assertTrue(listener.mWasCached);
- }
- } else {
- TestUrlRequestListener listener = startAndWaitForComplete(url);
- if (dict.equals("NotFound")) {
- assertEquals(404, listener.mResponseInfo.getHttpStatusCode());
- } else {
- assertEquals(200, listener.mResponseInfo.getHttpStatusCode());
- assertTrue(listener.mResponseInfo.wasCached());
- }
+ private static class Observer implements SdchObserver {
+ ConditionVariable mBlock = new ConditionVariable();
+ private String mLastAddedDict;
+
+ @Override
+ public void onDictionaryAdded(String url) {
+ Log.i(TAG, "Dictionary %s is added ", url);
+ mLastAddedDict = url;
+ mBlock.open();
}
- // Now wait for dictionary to be added to the manager, which occurs
- // asynchronously.
- // TODO(xunjieli): Rather than setting an arbitrary delay, consider
- // implementing a SdchObserver to watch for dictionary add events once
- // add event is implemented in SdchObserver.
- Thread.sleep(1000);
+
+ public void waitForDictionaryAdded(String dictName) {
+ mBlock.block();
+ mBlock.close();
+ assertTrue(mLastAddedDict.contains(dictName));
+ }
+ }
+
+ // Registers Observer.
+ private Observer addObserver(long contextAdapter, API api) {
+ Observer observer = new Observer();
+ SdchTestUtil.addSdchObserver(contextAdapter, observer, api == API.LEGACY);
+ return observer;
+ }
+
+ // Unregisters Observer.
+ private void removeObserver(long contextAdapter, Observer observer, API api) {
+ SdchTestUtil.removeSdchObserver(contextAdapter, observer, api == API.LEGACY);
+ }
+
+ private long getRequestAdapter(ChromiumUrlRequestFactory factory) {
+ return factory.getRequestContext().getUrlRequestContextAdapter();
+ }
+
+ private long getRequestAdapter(CronetUrlRequestContext requestContext) {
+ return requestContext.getUrlRequestContextAdapter();
}
private TestHttpUrlRequestListener startAndWaitForComplete_LegacyAPI(String url)
@@ -207,12 +256,30 @@ 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;
+ }
}

Powered by Google App Engine
This is Rietveld 408576698