Merge remote branch 'goog/gingerbread' into manualmerge

Conflicts:
	tests/expectations/knownfailures.txt

Change-Id: I9db887535ef970eef0209251460c13b367f23779
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index 12cc21e..3751b3c 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -48,11 +48,13 @@
     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
+
+    // device could have only one interface: data, wifi.
+    private static final int MIN_NUM_NETWORK_TYPES = 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;
 
     @Override
     protected void setUp() throws Exception {
@@ -68,28 +70,27 @@
         args = {int.class}
     )
     public void testGetNetworkInfo() {
-
-        // this test assumes that there are at least two network types.
         assertTrue(mCm.getAllNetworkInfo().length >= MIN_NUM_NETWORK_TYPES);
-        NetworkInfo ni = mCm.getNetworkInfo(1);
-        State state = ni.getState();
-        assertTrue(State.UNKNOWN.ordinal() >= state.ordinal()
-                && state.ordinal() >= State.CONNECTING.ordinal());
-        DetailedState ds = ni.getDetailedState();
-        assertTrue(DetailedState.FAILED.ordinal() >= ds.ordinal()
-                && ds.ordinal() >= DetailedState.IDLE.ordinal());
-
-        ni = mCm.getNetworkInfo(0);
-        state = ni.getState();
-        assertTrue(State.UNKNOWN.ordinal() >= state.ordinal()
-                && state.ordinal() >= State.CONNECTING.ordinal());
-        ds = ni.getDetailedState();
-        assertTrue(DetailedState.FAILED.ordinal() >= ds.ordinal()
-                && ds.ordinal() >= DetailedState.IDLE.ordinal());
-
+        NetworkInfo ni = mCm.getNetworkInfo(TYPE_WIFI);
+        if (ni != null) {
+            State state = ni.getState();
+            assertTrue(State.UNKNOWN.ordinal() >= state.ordinal()
+                       && state.ordinal() >= State.CONNECTING.ordinal());
+            DetailedState ds = ni.getDetailedState();
+            assertTrue(DetailedState.FAILED.ordinal() >= ds.ordinal()
+                       && ds.ordinal() >= DetailedState.IDLE.ordinal());
+        }
+        ni = mCm.getNetworkInfo(TYPE_MOBILE);
+        if (ni != null) {
+            State state = ni.getState();
+            assertTrue(State.UNKNOWN.ordinal() >= state.ordinal()
+                    && state.ordinal() >= State.CONNECTING.ordinal());
+            DetailedState ds = ni.getDetailedState();
+            assertTrue(DetailedState.FAILED.ordinal() >= ds.ordinal()
+                    && ds.ordinal() >= DetailedState.IDLE.ordinal());
+        }
         ni = mCm.getNetworkInfo(-1);
         assertNull(ni);
-
     }
 
     @TestTargets({
@@ -142,9 +143,21 @@
         final String invalidateFeature = "invalidateFeature";
         final String mmsFeature = "enableMMS";
         final int failureCode = -1;
+        final int wifiOnlyStartFailureCode = 3;
+        final int wifiOnlyStopFailureCode = 1;
 
-        assertEquals(failureCode, mCm.startUsingNetworkFeature(TYPE_MOBILE, invalidateFeature));
-        assertEquals(failureCode, mCm.stopUsingNetworkFeature(TYPE_MOBILE, invalidateFeature));
+        NetworkInfo ni = mCm.getNetworkInfo(TYPE_MOBILE);
+        if (ni != null) {
+            assertEquals(failureCode, mCm.startUsingNetworkFeature(TYPE_MOBILE,
+                    invalidateFeature));
+            assertEquals(failureCode, mCm.stopUsingNetworkFeature(TYPE_MOBILE,
+                    invalidateFeature));
+        } else {
+            assertEquals(wifiOnlyStartFailureCode, mCm.startUsingNetworkFeature(TYPE_MOBILE,
+                    invalidateFeature));
+            assertEquals(wifiOnlyStopFailureCode, mCm.stopUsingNetworkFeature(TYPE_MOBILE,
+                    invalidateFeature));
+        }
 
         // Should return failure(-1) because MMS is not supported on WIFI.
         assertEquals(failureCode, mCm.startUsingNetworkFeature(TYPE_WIFI, mmsFeature));
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index 99e8e15..b333be7 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -120,50 +120,47 @@
     public void testAccessNetworkInfoProperties() {
         ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(
                 Context.CONNECTIVITY_SERVICE);
-
         NetworkInfo[] ni = cm.getAllNetworkInfo();
         assertTrue(ni.length >= 2);
 
-        assertFalse(ni[TYPE_MOBILE].isFailover());
-        assertFalse(ni[TYPE_WIFI].isFailover());
-
-        // test environment:connect as TYPE_MOBILE, and connect to internet.
-        assertEquals(TYPE_MOBILE, ni[TYPE_MOBILE].getType());
-        assertEquals(TYPE_WIFI, ni[TYPE_WIFI].getType());
-
-        // don't know the return value
-        ni[TYPE_MOBILE].getSubtype();
-        ni[TYPE_WIFI].getSubtype();
-
-        assertEquals(MOBILE_TYPE_NAME, ni[TYPE_MOBILE].getTypeName());
-        assertEquals(WIFI_TYPE_NAME, ni[TYPE_WIFI].getTypeName());
-
-        // don't know the return value
-        ni[TYPE_MOBILE].getSubtypeName();
-        ni[TYPE_WIFI].getSubtypeName();
-
-        if(ni[TYPE_MOBILE].isConnectedOrConnecting()) {
-            assertTrue(ni[TYPE_MOBILE].isAvailable());
-            assertTrue(ni[TYPE_MOBILE].isConnected());
-            assertEquals(State.CONNECTED, ni[TYPE_MOBILE].getState());
-            assertEquals(DetailedState.CONNECTED, ni[TYPE_MOBILE].getDetailedState());
-            ni[TYPE_MOBILE].getReason();
-            ni[TYPE_MOBILE].getExtraInfo();
+        for (NetworkInfo netInfo: ni) {
+            switch (netInfo.getType()) {
+                case TYPE_MOBILE:
+                    // don't know the return value
+                    netInfo.getSubtype();
+                    assertEquals(MOBILE_TYPE_NAME, netInfo.getTypeName());
+                    // don't know the return value
+                    netInfo.getSubtypeName();
+                    if(netInfo.isConnectedOrConnecting()) {
+                        assertTrue(netInfo.isAvailable());
+                        assertTrue(netInfo.isConnected());
+                        assertEquals(State.CONNECTED, netInfo.getState());
+                        assertEquals(DetailedState.CONNECTED, netInfo.getDetailedState());
+                        netInfo.getReason();
+                        netInfo.getExtraInfo();
+                    }
+                    assertFalse(netInfo.isRoaming());
+                    assertNotNull(netInfo.toString());
+                    break;
+                case TYPE_WIFI:
+                    netInfo.getSubtype();
+                    assertEquals(WIFI_TYPE_NAME, netInfo.getTypeName());
+                    netInfo.getSubtypeName();
+                    if(netInfo.isConnectedOrConnecting()) {
+                        assertTrue(netInfo.isAvailable());
+                        assertTrue(netInfo.isConnected());
+                        assertEquals(State.CONNECTED, netInfo.getState());
+                        assertEquals(DetailedState.CONNECTED, netInfo.getDetailedState());
+                        netInfo.getReason();
+                        netInfo.getExtraInfo();
+                    }
+                    assertFalse(netInfo.isRoaming());
+                    assertNotNull(netInfo.toString());
+                    break;
+                 // TODO: Add BLUETOOTH_TETHER testing
+                 default:
+                     break;
+            }
         }
-
-        if(ni[TYPE_WIFI].isConnectedOrConnecting()) {
-            assertTrue(ni[TYPE_WIFI].isAvailable());
-            assertTrue(ni[TYPE_WIFI].isConnected());
-            assertEquals(State.CONNECTED, ni[TYPE_WIFI].getState());
-            assertEquals(DetailedState.CONNECTED, ni[TYPE_WIFI].getDetailedState());
-            ni[TYPE_WIFI].getReason();
-            ni[TYPE_WIFI].getExtraInfo();
-        }
-
-        assertFalse(ni[TYPE_MOBILE].isRoaming());
-        assertFalse(ni[TYPE_WIFI].isRoaming());
-
-        assertNotNull(ni[TYPE_MOBILE].toString());
-        assertNotNull(ni[TYPE_WIFI].toString());
     }
 }