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

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java

Issue 2751333004: [Crash Reporting] Only upload Chrome crash reports over unmetered networks. (Closed)
Patch Set: Rebase Created 3 years, 9 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: chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
similarity index 16%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
rename to chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
index 6e198514367aabc27a69adf542952eb522689ffc..f64216f030ba9845d45702eca92558125e0eb142 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/preferences/privacy/PrivacyPreferencesManagerTest.java
@@ -4,118 +4,108 @@
package org.chromium.chrome.browser.preferences.privacy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
-import android.support.test.filters.SmallTest;
-import android.test.InstrumentationTestCase;
-import android.test.UiThreadTest;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
-import org.chromium.base.test.util.AdvancedMockContext;
-import org.chromium.base.test.util.Feature;
+import org.chromium.testing.local.LocalRobolectricTestRunner;
/**
- * Tests "Usage and Crash reporting" preferences.
+ * junit tests for {@link PrivacyPreferencesManager}'s handling of "Usage and Crash reporting"
+ * preferences.
*/
-public class PrivacyPreferencesManagerTest extends InstrumentationTestCase {
-
+@RunWith(LocalRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class PrivacyPreferencesManagerTest {
+ // Parameters to simulate user- and network-permission state.
private static final boolean CONNECTED = true;
private static final boolean DISCONNECTED = false;
- private static final boolean WIFI_ON = true;
- private static final boolean WIFI_OFF = false;
-
- private static final boolean METRICS_UPLOAD_OK = true;
- private static final boolean METRICS_UPLOAD_NOT_PERMITTED = false;
+ private static final boolean METERED = true;
+ private static final boolean UNMETERED = false;
- private static final boolean CRASH_NETWORK_OK = true;
- private static final boolean CRASH_NETWORK_NOT_PERMITTED = false;
+ private static final boolean METRICS_REPORTING_ENABLED = true;
+ private static final boolean METRICS_REPORTING_DISABLED = false;
- private static final boolean METRIC_REPORTING_ENABLED = true;
- private static final boolean METRIC_REPORTING_DISABLED = false;
+ // Used to set test expectations.
+ private static final boolean METRICS_UPLOAD_PERMITTED = true;
+ private static final boolean METRICS_UPLOAD_NOT_PERMITTED = false;
- // Perform the same test a few times to make sure any sort of
- // caching still works.
- private static final int REPS = 3;
+ private static final boolean CRASH_NETWORK_AVAILABLE = true;
+ private static final boolean CRASH_NETWORK_UNAVAILABLE = false;
- @SmallTest
- @Feature({"Android-AppBase"})
- @UiThreadTest
- public void testAllowCrashDumpUploadNowCellDev() {
+ @Test
+ public void testUsageAndCrashReportingAccessors() {
CommandLine.init(null);
- runTest(CONNECTED, WIFI_ON, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_OK, CRASH_NETWORK_OK);
- runTest(CONNECTED, WIFI_OFF, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_OK,
- CRASH_NETWORK_NOT_PERMITTED);
- runTest(DISCONNECTED, WIFI_OFF, METRIC_REPORTING_ENABLED, METRICS_UPLOAD_NOT_PERMITTED,
- CRASH_NETWORK_NOT_PERMITTED);
-
- runTest(CONNECTED, WIFI_ON, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
- CRASH_NETWORK_OK);
- runTest(CONNECTED, WIFI_OFF, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
- CRASH_NETWORK_NOT_PERMITTED);
- runTest(DISCONNECTED, WIFI_OFF, METRIC_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
- CRASH_NETWORK_NOT_PERMITTED);
+
+ // TODO(yolandyan): Use Junit4 parameters to clean up this test structure.
+ runTest(CONNECTED, UNMETERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_PERMITTED,
+ CRASH_NETWORK_AVAILABLE);
+ runTest(CONNECTED, METERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_PERMITTED,
+ CRASH_NETWORK_UNAVAILABLE);
+ runTest(DISCONNECTED, UNMETERED, METRICS_REPORTING_ENABLED, METRICS_UPLOAD_NOT_PERMITTED,
+ CRASH_NETWORK_UNAVAILABLE);
+
+ runTest(CONNECTED, UNMETERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
+ CRASH_NETWORK_AVAILABLE);
+ runTest(CONNECTED, METERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
+ CRASH_NETWORK_UNAVAILABLE);
+ runTest(DISCONNECTED, UNMETERED, METRICS_REPORTING_DISABLED, METRICS_UPLOAD_NOT_PERMITTED,
+ CRASH_NETWORK_UNAVAILABLE);
}
- private void runTest(boolean isConnected, boolean wifiOn, boolean isMetricsReportingEnabled,
+ private void runTest(boolean isConnected, boolean isMetered, boolean isMetricsReportingEnabled,
boolean expectedMetricsUploadPermitted,
boolean expectedNetworkAvailableForCrashUploads) {
- PermissionContext context = new PermissionContext(getInstrumentation().getTargetContext());
- ContextUtils.initApplicationContextForTests(context.getApplicationContext());
- PrivacyPreferencesManager preferenceManager = new MockPrivacyPreferencesManager(
- context, isConnected, wifiOn, isMetricsReportingEnabled);
-
- for (int i = 0; i < REPS; i++) {
- String state = String.format("[connected = %b, wifi = %b, reporting = %b]", isConnected,
- wifiOn, isMetricsReportingEnabled);
- String msg = String.format("Metrics reporting should be %1$b for %2$s",
- expectedMetricsUploadPermitted, state);
- assertEquals(msg, expectedMetricsUploadPermitted,
- preferenceManager.isMetricsUploadPermitted());
-
- msg = String.format("Crash reporting should be %1$b for wifi %2$s",
- expectedNetworkAvailableForCrashUploads, wifiOn);
- assertEquals(msg, expectedNetworkAvailableForCrashUploads,
- preferenceManager.isNetworkAvailableForCrashUploads());
- }
+ // Mock out the network info accessors.
+ NetworkInfo networkInfo = mock(NetworkInfo.class);
+ when(networkInfo.isConnected()).thenReturn(isConnected);
+
+ ConnectivityManager connectivityManager = mock(ConnectivityManager.class);
+ when(connectivityManager.getActiveNetworkInfo()).thenReturn(networkInfo);
+ when(connectivityManager.isActiveNetworkMetered()).thenReturn(isMetered);
+
+ Context context = mock(Context.class);
+ when(context.getSystemService(Context.CONNECTIVITY_SERVICE))
+ .thenReturn(connectivityManager);
+
+ // Perform other setup.
+ ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application);
+ PrivacyPreferencesManager preferenceManager = new TestPrivacyPreferencesManager(context);
+ preferenceManager.setUsageAndCrashReporting(isMetricsReportingEnabled);
+
+ // Test the usage and crash reporting permission accessors!
+ String state = String.format("[connected = %b, metered = %b, reporting = %b]", isConnected,
+ isMetered, isMetricsReportingEnabled);
+ String msg = String.format(
+ "Metrics reporting should be %1$b for %2$s", expectedMetricsUploadPermitted, state);
+ assertEquals(
+ msg, expectedMetricsUploadPermitted, preferenceManager.isMetricsUploadPermitted());
+
+ msg = String.format("Crash reporting should be %1$b for metered state %2$s",
+ expectedNetworkAvailableForCrashUploads, isMetered);
+ assertEquals(msg, expectedNetworkAvailableForCrashUploads,
+ preferenceManager.isNetworkAvailableForCrashUploads());
}
- private static class MockPrivacyPreferencesManager extends PrivacyPreferencesManager {
- private final boolean mIsConnected;
- private final boolean mIsWifi;
-
- MockPrivacyPreferencesManager(Context context, boolean isConnected, boolean isWifi,
- boolean isMetricsReportingEnabled) {
+ private static class TestPrivacyPreferencesManager extends PrivacyPreferencesManager {
+ TestPrivacyPreferencesManager(Context context) {
super(context);
- mIsConnected = isConnected;
- mIsWifi = isWifi;
-
- setUsageAndCrashReporting(isMetricsReportingEnabled);
- }
-
- @Override
- public boolean isNetworkAvailable() {
- return mIsConnected;
}
- @Override
- public boolean isWiFiOrEthernetNetwork() {
- return mIsWifi;
- }
- }
-
- private static class PermissionContext extends AdvancedMockContext {
- public PermissionContext(Context targetContext) {
- super(targetContext);
- }
-
- @Override
- public Object getSystemService(String name) {
- if (Context.CONNECTIVITY_SERVICE.equals(name)) {
- return null;
- }
- fail("Should not ask for any other service than the ConnectionManager.");
- return super.getSystemService(name);
- }
+ // Stub out this call, as it could otherwise call into native code.
+ public void syncUsageAndCrashReportingPrefs() {}
}
}

Powered by Google App Engine
This is Rietveld 408576698