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

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

Issue 1503943003: [Cronet] Unit test refactoring and fixes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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/CronetTestBase.java
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java
index bd22a6ddc26056642d82ef604690ac9b5246a509..d542d2d21cd3e67ef7d4c2ea1c9687b4ef884e3d 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestBase.java
@@ -21,12 +21,41 @@ import java.net.URL;
public class CronetTestBase extends AndroidTestCase {
private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "cronet_test";
- private CronetTestFramework mCronetTestFramework;
+ /**
+ * Package name that contains Cronet URLConnection tests.
+ */
+ private static final String URLCONNECTION_PACKAGE = "org.chromium.net.urlconnection";
+
+ /**
+ * Indicates that the test should run with CronetHttpURLConnection. If the flag is
+ * <code>true</code>, the next call to any <code>startCronetTestFramework...()</code> method
+ * will replace the global URLStreamHandlerFactory factory with the Cronet one.
+ */
+ private boolean mTestingCronetHttpURLConnection = false;
+
+ /**
+ * <code>URL.setURLStreamHandlerFactory()</code> method can only be called once. This flag
xunjieli 2015/12/07 23:09:10 nit: maybe use {@code true} ? That's how it was us
kapishnikov 2015/12/08 01:09:37 Will fix it.
+ * indicates that the method has already been called and should not be called again. The flag
+ * is needed for tests that test CronetHttpURLConnection and start the Cronet Test Framework
+ * multiple times.
+ */
+ private boolean mURLStreamHandlerFactoryReplaced = false;
@Override
protected void setUp() throws Exception {
super.setUp();
PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX, getContext());
+ CronetTestFramework.prepareTestStorage(getContext());
+
+ // If the test method has the OnlyRunCronetHttpURLConnection annotation then
+ // set mTestingCronetHttpURLConnection to true, so the next startCronetTestFramework...()
+ // method will replace URLStreamHandlerFactory.
+ if (getClass().getPackage().getName().equals(URLCONNECTION_PACKAGE)) {
+ Method method = getClass().getMethod(getName(), (Class[]) null);
+ if (method.isAnnotationPresent(OnlyRunCronetHttpURLConnection.class)) {
+ mTestingCronetHttpURLConnection = true;
+ }
+ }
}
/**
@@ -50,8 +79,9 @@ public class CronetTestBase extends AndroidTestCase {
*/
protected CronetTestFramework startCronetTestFrameworkWithUrlAndCronetEngineBuilder(
String url, CronetEngine.Builder builder) {
- mCronetTestFramework = new CronetTestFramework(url, null, getContext(), builder);
- return mCronetTestFramework;
+ CronetTestFramework framework = new CronetTestFramework(url, null, getContext(), builder);
+ switchToCronetHttpURLConnectionTestingIfNeeded(framework);
+ return framework;
}
/**
@@ -60,17 +90,17 @@ public class CronetTestBase extends AndroidTestCase {
*/
protected CronetTestFramework startCronetTestFrameworkWithUrlAndCommandLineArgs(
String url, String[] commandLineArgs) {
- mCronetTestFramework = new CronetTestFramework(url, commandLineArgs, getContext(), null);
- return mCronetTestFramework;
+ CronetTestFramework framework =
+ new CronetTestFramework(url, commandLineArgs, getContext(), null);
+ switchToCronetHttpURLConnectionTestingIfNeeded(framework);
+ return framework;
}
// Helper method to tell the framework to skip library init during construction.
protected CronetTestFramework startCronetTestFrameworkAndSkipLibraryInit() {
String[] commandLineArgs = {
CronetTestFramework.LIBRARY_INIT_KEY, CronetTestFramework.LibraryInitType.NONE};
- mCronetTestFramework =
- startCronetTestFrameworkWithUrlAndCommandLineArgs(null, commandLineArgs);
- return mCronetTestFramework;
+ return startCronetTestFrameworkWithUrlAndCommandLineArgs(null, commandLineArgs);
}
/**
@@ -80,15 +110,12 @@ public class CronetTestBase extends AndroidTestCase {
protected CronetTestFramework startCronetTestFrameworkForLegacyApi(String url) {
String[] commandLineArgs = {
CronetTestFramework.LIBRARY_INIT_KEY, CronetTestFramework.LibraryInitType.LEGACY};
- mCronetTestFramework =
- startCronetTestFrameworkWithUrlAndCommandLineArgs(url, commandLineArgs);
- return mCronetTestFramework;
+ return startCronetTestFrameworkWithUrlAndCommandLineArgs(url, commandLineArgs);
}
@Override
protected void runTest() throws Throwable {
- if (!getClass().getPackage().getName().equals(
- "org.chromium.net.urlconnection")) {
+ if (!getClass().getPackage().getName().equals(URLCONNECTION_PACKAGE)) {
super.runTest();
return;
}
@@ -98,12 +125,9 @@ public class CronetTestBase extends AndroidTestCase {
// Run with the default HttpURLConnection implementation first.
super.runTest();
// Use Cronet's implementation, and run the same test.
- URL.setURLStreamHandlerFactory(mCronetTestFramework.mStreamHandlerFactory);
- super.runTest();
- } else if (method.isAnnotationPresent(
- OnlyRunCronetHttpURLConnection.class)) {
- // Run only with Cronet's implementation.
- URL.setURLStreamHandlerFactory(mCronetTestFramework.mStreamHandlerFactory);
+ this.tearDown();
+ mTestingCronetHttpURLConnection = true;
+ this.setUp();
super.runTest();
} else {
xunjieli 2015/12/07 23:09:10 I'd prefer to keep CronetHttpURLConnection logic a
kapishnikov 2015/12/08 01:09:37 The problem with keeping all logic inside runTest(
xunjieli 2015/12/08 13:40:25 I don't really like this. The @CompareDefaultWithC
// For all other tests.
@@ -114,6 +138,44 @@ public class CronetTestBase extends AndroidTestCase {
}
}
+ /**
+ * Registers test host resolver for testing with the new API.
+ */
+ protected void registerHostResolver(CronetTestFramework framework) {
+ registerHostResolver(framework, false);
+ }
+
+ /**
+ * Registers test host resolver.
+ *
+ * @param isLegacyAPI true if the test should use the legacy API.
+ */
+ protected void registerHostResolver(CronetTestFramework framework, boolean isLegacyAPI) {
+ long urlRequestContextAdapter;
+ if (isLegacyAPI) {
+ urlRequestContextAdapter = ((ChromiumUrlRequestFactory) framework.mRequestFactory)
+ .getRequestContext()
+ .getUrlRequestContextAdapter();
+ } else {
+ urlRequestContextAdapter = ((CronetUrlRequestContext) framework.mCronetEngine)
+ .getUrlRequestContextAdapter();
+ }
+ NativeTestServer.registerHostResolverProc(urlRequestContextAdapter, isLegacyAPI);
+ }
+
+ /**
+ * Replaces global URLStreamHandlerFactory with the Cronet one if it is required by the
+ * running test.
+ *
+ * @param framework the Cronet Test Framework to use for StreamHandlerFactory retreival.
+ */
+ private void switchToCronetHttpURLConnectionTestingIfNeeded(CronetTestFramework framework) {
+ if (mTestingCronetHttpURLConnection && !mURLStreamHandlerFactoryReplaced) {
+ URL.setURLStreamHandlerFactory(framework.mStreamHandlerFactory);
+ mURLStreamHandlerFactoryReplaced = true;
+ }
+ }
+
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CompareDefaultWithCronet {

Powered by Google App Engine
This is Rietveld 408576698