Improvements on test case setup.

- On hostside, checks if wi-fi is on instead of checking for connectivity (which can be very slow).
- Don't automatically reset metered network on superclass' tearDown().
- Make sure tearDown() cleans up all state changes.

BUG: 27808364
Change-Id: I4818047c5fb8f6f430b0aab5ecfa77717f860db3
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
index 360257a..2b7dd39 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/AbstractRestrictBackgroundNetworkTestCase.java
@@ -76,11 +76,12 @@
     protected ConnectivityManager mCm;
     protected WifiManager mWfm;
     protected int mUid;
-    private boolean mResetMeteredWifi = false;
+    private String mMeteredWifi;
 
     @Override
     public void setUp() throws Exception {
         super.setUp();
+
         mInstrumentation = getInstrumentation();
         mContext = mInstrumentation.getContext();
         mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -93,15 +94,6 @@
                 + "\tapp2: uid=" + mUid + ", state=" + getProcessStateByUid(mUid));
    }
 
-    @Override
-    protected void tearDown() throws Exception {
-        super.tearDown();
-
-        if (mResetMeteredWifi) {
-            setWifiMeteredStatus(false);
-        }
-    }
-
     protected int getUid(String packageName) throws Exception {
         return mContext.getPackageManager().getPackageUid(packageName, 0);
     }
@@ -289,12 +281,21 @@
         final String netId = setWifiMeteredStatus(true);
         assertTrue("Could not set wifi '" + netId + "' as metered ("
                 + mCm.getActiveNetworkInfo() +")", mCm.isActiveNetworkMetered());
-        // Set flag so status is reverted on teardown.
-        mResetMeteredWifi = true;
+        // Set flag so status is reverted on resetMeteredNetwork();
+        mMeteredWifi = netId;
         // Sanity check.
         assertMeteredNetwork(netId, true);
     }
 
+    protected void resetMeteredNetwork() throws Exception {
+        if (mMeteredWifi == null) {
+            Log.d(TAG, "resetMeteredNetwork(): wifi not set as metered");
+            return;
+        }
+        Log.i(TAG, "resetMeteredNetwork(): resetting " + mMeteredWifi);
+        setWifiMeteredStatus(mMeteredWifi, false);
+    }
+
     private String setWifiMeteredStatus(boolean metered) throws Exception {
         // We could call setWifiEnabled() here, but it might take sometime to be in a consistent
         // state (for example, if one of the saved network is not properly authenticated), so it's
@@ -303,6 +304,10 @@
         // TODO: if it's not guaranteed the device has wi-fi, we need to change the tests
         // to make the actual verification of restrictions optional.
         final String ssid = mWfm.getConnectionInfo().getSSID();
+        return setWifiMeteredStatus(ssid, metered);
+    }
+
+    private String setWifiMeteredStatus(String ssid, boolean metered) throws Exception {
         assertNotNull("null SSID", ssid);
         final String netId = ssid.trim().replaceAll("\"", ""); // remove quotes, if any.
         assertFalse("empty SSID", ssid.isEmpty());
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
index 6a8540a..d1217b4 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/BatterySaverModeTest.java
@@ -33,7 +33,11 @@
     protected void tearDown() throws Exception {
         super.tearDown();
 
-        setPowerSaveMode(false);
+        try {
+            resetMeteredNetwork();
+        } finally {
+            setPowerSaveMode(false);
+        }
     }
 
     public void testBackgroundNetworkAccess_enabled() throws Exception {
diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
index ff68090..62f670e 100644
--- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
+++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/DataSaverModeTest.java
@@ -44,7 +44,11 @@
     protected void tearDown() throws Exception {
         super.tearDown();
 
-        setRestrictBackground(false);
+        try {
+            resetMeteredNetwork();
+        } finally {
+            setRestrictBackground(false);
+        }
     }
 
     public void testGetRestrictBackgroundStatus_disabled() throws Exception {
diff --git a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
index ab1b7d6..39b5652 100644
--- a/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
+++ b/tests/cts/hostside/src/com/android/cts/net/HostsideNetworkTestCase.java
@@ -63,7 +63,7 @@
         assertNotNull(mAbi);
         assertNotNull(mCtsBuild);
 
-        assertTrue("device not connected to network", getDevice().checkConnectivity());
+        assertTrue("wi-fi not enabled", getDevice().isWifiEnabled());
 
         uninstallPackage(TEST_PKG, false);
         installPackage(TEST_APK);