From c97dbae9d4b05eb98ad1e170196ba3cef7724993 Mon Sep 17 00:00:00 2001 From: Brett Chabot Date: Fri, 12 Nov 2010 17:20:23 -0800 Subject: [PATCH 1/3] Stop WifiManagerTest from disabling current network. Bug 3181376 Change-Id: I7dad90ba830678357b900709359f10319070c96e --- .../android/net/wifi/cts/WifiManagerTest.java | 139 +++++++++++------- 1 file changed, 86 insertions(+), 53 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 132ca9247d..e2a583b6ef 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/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.WifiManager; 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 class WifiManagerTest extends AndroidTestCase { ) }) public void testWifiManagerNetWork() throws Exception { - WifiConfiguration wifiConfiguration; - // add a WifiConfig - final int notExist = -1; - List 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 enabledSsids = getEnabledNetworks(mWifiManager.getConfiguredNetworks()); + try { + WifiConfiguration wifiConfiguration; + // add a WifiConfig + final int notExist = -1; + List 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 getEnabledNetworks(List configuredNetworks) { + Set ssids = new HashSet(); + 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 enabledSsids, + List 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({ From 76e1414be8d472827d510785d5529b8e5607141a Mon Sep 17 00:00:00 2001 From: Brian Muramatsu Date: Fri, 14 Jan 2011 17:38:16 -0800 Subject: [PATCH 2/3] Test startUsingNetworkFeature TYPE_MOBILE_HIPRI Bug 3307293 Change-Id: I03b3e11e1de20333ece772e3448937c61ca0fe91 --- .../net/cts/ConnectivityManagerTest.java | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index 354428b8e9..dcb4e1d992 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -16,26 +16,43 @@ package android.net.cts; +import com.android.internal.telephony.Phone; + import dalvik.annotation.TestLevel; import dalvik.annotation.TestTargetClass; import dalvik.annotation.TestTargetNew; import dalvik.annotation.TestTargets; import dalvik.annotation.ToBeFixed; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.DetailedState; import android.net.NetworkInfo.State; +import android.net.wifi.WifiManager; import android.test.AndroidTestCase; +import android.util.Log; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; @TestTargetClass(ConnectivityManager.class) public class ConnectivityManagerTest extends AndroidTestCase { + private static final String TAG = ConnectivityManagerTest.class.getSimpleName(); + + private static final String FEATURE_ENABLE_HIPRI = "enableHIPRI"; + public static final int TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE; public static final int TYPE_WIFI = ConnectivityManager.TYPE_WIFI; private static final int HOST_ADDRESS = 0x7f000001;// represent ip 127.0.0.1 private ConnectivityManager mCm; + private WifiManager mWifiManager; + private PackageManager mPackageManager; // must include both mobile data + wifi private static final int MIN_NUM_NETWORK_TYPES = 2; @@ -43,6 +60,8 @@ public class ConnectivityManagerTest extends AndroidTestCase { protected void setUp() throws Exception { super.setUp(); mCm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); + mWifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE); + mPackageManager = getContext().getPackageManager(); } @TestTargetNew( @@ -235,4 +254,91 @@ public class ConnectivityManagerTest extends AndroidTestCase { public void testTest() { mCm.getBackgroundDataSetting(); } + + /** Test that hipri can be brought up when Wifi is enabled. */ + public void testStartUsingNetworkFeature_enableHipri() throws Exception { + if (!mPackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) + || !mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)) { + // This test requires a mobile data connection and WiFi. + return; + } + + boolean isWifiConnected = mWifiManager.isWifiEnabled() + && mWifiManager.getConnectionInfo().getSSID() != null; + + try { + // Make sure WiFi is connected to an access point. + if (!isWifiConnected) { + connectToWifi(); + } + + // Register a receiver that will capture the connectivity change for hipri. + ConnectivityActionReceiver receiver = + new ConnectivityActionReceiver(ConnectivityManager.TYPE_MOBILE_HIPRI); + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + mContext.registerReceiver(receiver, filter); + + // Try to start using the hipri feature... + int result = mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, + FEATURE_ENABLE_HIPRI); + assertTrue("Couldn't start using the HIPRI feature.", result != -1); + + // Check that the ConnectivityManager reported that it connected using hipri... + assertTrue("Couldn't connect using hipri...", receiver.waitForConnection()); + + assertTrue("Couldn't requestRouteToHost using HIPRI.", + mCm.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_HIPRI, HOST_ADDRESS)); + + } catch (InterruptedException e) { + fail("Broadcast receiver waiting for ConnectivityManager interrupted."); + } finally { + mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, + Phone.FEATURE_ENABLE_HIPRI); + if (!isWifiConnected) { + mWifiManager.setWifiEnabled(false); + } + } + } + + private void connectToWifi() throws InterruptedException { + ConnectivityActionReceiver receiver = + new ConnectivityActionReceiver(ConnectivityManager.TYPE_WIFI); + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + mContext.registerReceiver(receiver, filter); + + assertTrue(mWifiManager.setWifiEnabled(true)); + assertTrue("Wifi must be configured to connect to an access point for this test.", + receiver.waitForConnection()); + + mContext.unregisterReceiver(receiver); + } + + /** Receiver that captures the last connectivity change's network type and state. */ + private class ConnectivityActionReceiver extends BroadcastReceiver { + + private final CountDownLatch mReceiveLatch = new CountDownLatch(1); + + private final int mNetworkType; + + ConnectivityActionReceiver(int networkType) { + mNetworkType = networkType; + } + + public void onReceive(Context context, Intent intent) { + NetworkInfo networkInfo = intent.getExtras() + .getParcelable(ConnectivityManager.EXTRA_NETWORK_INFO); + int networkType = networkInfo.getType(); + State networkState = networkInfo.getState(); + Log.i(TAG, "Network type: " + networkType + " state: " + networkState); + if (networkType == mNetworkType && networkInfo.getState() == State.CONNECTED) { + mReceiveLatch.countDown(); + } + } + + public boolean waitForConnection() throws InterruptedException { + return mReceiveLatch.await(10, TimeUnit.SECONDS); + } + } } From f3336d71e9928e044f8d43aa2ac07191cdcc7fc9 Mon Sep 17 00:00:00 2001 From: Brian Muramatsu Date: Mon, 28 Feb 2011 15:21:42 -0800 Subject: [PATCH 3/3] Remove Reference to Internal Phone Constant Use the constant defined in the test instead. Change-Id: Ia4c85a56663df0c79910395aaae534407952aaf6 --- .../cts/net/src/android/net/cts/ConnectivityManagerTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index dcb4e1d992..3b85e9f92e 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -16,8 +16,6 @@ package android.net.cts; -import com.android.internal.telephony.Phone; - import dalvik.annotation.TestLevel; import dalvik.annotation.TestTargetClass; import dalvik.annotation.TestTargetNew; @@ -294,7 +292,7 @@ public class ConnectivityManagerTest extends AndroidTestCase { fail("Broadcast receiver waiting for ConnectivityManager interrupted."); } finally { mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, - Phone.FEATURE_ENABLE_HIPRI); + FEATURE_ENABLE_HIPRI); if (!isWifiConnected) { mWifiManager.setWifiEnabled(false); }