Stop WifiManagerTest from disabling current network.

Bug 3181376

Change-Id: Ia8d12a10f4ed0c46325e76f1dffeef93412a55e5
diff --git a/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
index 132ca92..e2a583b 100644
--- a/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
+++ b/tests/tests/net/src/android/net/wifi/cts/WifiManagerTest.java
@@ -16,7 +16,10 @@
 
 package android.net.wifi.cts;
 
-import java.util.List;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -28,10 +31,11 @@
 import android.net.wifi.WifiConfiguration.Status;
 import android.net.wifi.WifiManager.WifiLock;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
-import dalvik.annotation.TestTargets;
+import android.util.Log;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 @TestTargetClass(WifiManager.class)
 public class WifiManagerTest extends AndroidTestCase {
@@ -341,58 +345,87 @@
         )
     })
     public void testWifiManagerNetWork() throws Exception {
-        WifiConfiguration wifiConfiguration;
-        // add a WifiConfig
-        final int notExist = -1;
-        List<WifiConfiguration> wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
-        int pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
-        if (notExist != pos) {
+        // store the list of enabled networks, so they can be re-enabled after test completes
+        Set<String> enabledSsids = getEnabledNetworks(mWifiManager.getConfiguredNetworks());
+        try {
+            WifiConfiguration wifiConfiguration;
+            // add a WifiConfig
+            final int notExist = -1;
+            List<WifiConfiguration> wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
+            int pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            if (notExist != pos) {
+                wifiConfiguration = wifiConfiguredNetworks.get(pos);
+                mWifiManager.removeNetwork(wifiConfiguration.networkId);
+            }
+            pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            assertEquals(notExist, pos);
+            final int size = wifiConfiguredNetworks.size();
+
+            wifiConfiguration = new WifiConfiguration();
+            wifiConfiguration.SSID = SSID1;
+            int netId = mWifiManager.addNetwork(wifiConfiguration);
+            assertTrue(existSSID(SSID1));
+
+            wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
+            assertEquals(size + 1, wifiConfiguredNetworks.size());
+            pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
+            assertTrue(notExist != pos);
+
+            // Enable & disable network
+            boolean disableOthers = false;
+            assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertDisableOthers(wifiConfiguration, disableOthers);
+            assertEquals(Status.ENABLED, wifiConfiguration.status);
+            disableOthers = true;
+
+            assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertDisableOthers(wifiConfiguration, disableOthers);
+
+            assertTrue(mWifiManager.disableNetwork(netId));
+            wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
+            assertEquals(Status.DISABLED, wifiConfiguration.status);
+
+            // Update a WifiConfig
             wifiConfiguration = wifiConfiguredNetworks.get(pos);
-            mWifiManager.removeNetwork(wifiConfiguration.networkId);
+            wifiConfiguration.SSID = SSID2;
+            netId = mWifiManager.updateNetwork(wifiConfiguration);
+            assertFalse(existSSID(SSID1));
+            assertTrue(existSSID(SSID2));
+
+            // Remove a WifiConfig
+            assertTrue(mWifiManager.removeNetwork(netId));
+            assertFalse(mWifiManager.removeNetwork(notExist));
+            assertFalse(existSSID(SSID1));
+            assertFalse(existSSID(SSID2));
+
+            assertTrue(mWifiManager.saveConfiguration());
+        } finally {
+            reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks());
+            mWifiManager.saveConfiguration();
         }
-        pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
-        assertEquals(notExist, pos);
-        final int size = wifiConfiguredNetworks.size();
+    }
 
-        wifiConfiguration = new WifiConfiguration();
-        wifiConfiguration.SSID = SSID1;
-        int netId = mWifiManager.addNetwork(wifiConfiguration);
-        assertTrue(existSSID(SSID1));
+    private Set<String> getEnabledNetworks(List<WifiConfiguration> configuredNetworks) {
+        Set<String> ssids = new HashSet<String>();
+        for (WifiConfiguration wifiConfig : configuredNetworks) {
+            if (Status.ENABLED == wifiConfig.status || Status.CURRENT == wifiConfig.status) {
+                ssids.add(wifiConfig.SSID);
+                Log.i(TAG, String.format("remembering enabled network %s", wifiConfig.SSID));
+            }
+        }
+        return ssids;
+    }
 
-        wifiConfiguredNetworks = mWifiManager.getConfiguredNetworks();
-        assertEquals(size + 1, wifiConfiguredNetworks.size());
-        pos = findConfiguredNetworks(SSID1, wifiConfiguredNetworks);
-        assertTrue(notExist != pos);
-
-        // Enable & disable network
-        boolean disableOthers = false;
-        assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
-        wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
-        assertDisableOthers(wifiConfiguration, disableOthers);
-        assertEquals(Status.ENABLED, wifiConfiguration.status);
-        disableOthers = true;
-        assertTrue(mWifiManager.enableNetwork(netId, disableOthers));
-        wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
-        assertDisableOthers(wifiConfiguration, disableOthers);
-
-        assertTrue(mWifiManager.disableNetwork(netId));
-        wifiConfiguration = mWifiManager.getConfiguredNetworks().get(pos);
-        assertEquals(Status.DISABLED, wifiConfiguration.status);
-
-        // Update a WifiConfig
-        wifiConfiguration = wifiConfiguredNetworks.get(pos);
-        wifiConfiguration.SSID = SSID2;
-        netId = mWifiManager.updateNetwork(wifiConfiguration);
-        assertFalse(existSSID(SSID1));
-        assertTrue(existSSID(SSID2));
-
-        // Remove a WifiConfig
-        assertTrue(mWifiManager.removeNetwork(netId));
-        assertFalse(mWifiManager.removeNetwork(notExist));
-        assertFalse(existSSID(SSID1));
-        assertFalse(existSSID(SSID2));
-
-        assertTrue(mWifiManager.saveConfiguration());
+    private void reEnableNetworks(Set<String> enabledSsids,
+            List<WifiConfiguration> configuredNetworks) {
+        for (WifiConfiguration wifiConfig : configuredNetworks) {
+            if (enabledSsids.contains(wifiConfig.SSID)) {
+                mWifiManager.enableNetwork(wifiConfig.networkId, false);
+                Log.i(TAG, String.format("re-enabling network %s", wifiConfig.SSID));
+            }
+        }
     }
 
     @TestTargets({