diff --git a/tests/cts/net/Android.mk b/tests/cts/net/Android.mk
index d1a459f..0a2a6f3 100644
--- a/tests/cts/net/Android.mk
+++ b/tests/cts/net/Android.mk
@@ -26,5 +26,7 @@
 
 LOCAL_INSTRUMENTATION_FOR := CtsTestStubs
 
+LOCAL_SDK_VERSION := current
+
 include $(BUILD_PACKAGE)
 
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index 201105f..f2ddd21 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -16,12 +16,11 @@
 
 package android.net.cts;
 
-import com.android.internal.telephony.Phone;
-
-import dalvik.annotation.TestTargets;
-import dalvik.annotation.TestTargetNew;
 import dalvik.annotation.TestLevel;
 import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
@@ -112,10 +111,10 @@
     })
     public void testAccessNetworkPreference() {
 
-        final int EXPECTED = 1;
+        final int expected = 1;
         int per = mCm.getNetworkPreference();
-        mCm.setNetworkPreference(EXPECTED);
-        assertEquals(EXPECTED, mCm.getNetworkPreference());
+        mCm.setNetworkPreference(expected);
+        assertEquals(expected, mCm.getNetworkPreference());
 
         mCm.setNetworkPreference(0);
         assertEquals(0, mCm.getNetworkPreference());
@@ -144,20 +143,22 @@
         NetworkInfo[] ni = mCm.getAllNetworkInfo();
         assertEquals(2, ni.length);
 
-        assertTrue(ni[0].getType() >=0 && ni[0].getType() <= 1);
-        assertTrue(ni[1].getType() >=0 && ni[1].getType() <= 1);
+        assertTrue(ni[0].getType() >= 0 && ni[0].getType() <= 1);
+        assertTrue(ni[1].getType() >= 0 && ni[1].getType() <= 1);
     }
 
     @TestTargets({
         @TestTargetNew(
             level = TestLevel.TODO,
-            notes = "Test start and stop usingNetworkFeature(int networkType, String feature).",
+            notes = "Test startUsingNetworkFeature(int networkType, String feature)."
+                    + "Only test failure case.",
             method = "startUsingNetworkFeature",
             args = {int.class, java.lang.String.class}
         ),
         @TestTargetNew(
             level = TestLevel.TODO,
-            notes = "Test start and stop usingNetworkFeature(int networkType, String feature).",
+            notes = "Test stopUsingNetworkFeature(int networkType, String feature)."
+                    + "Only test failure case.",
             method = "stopUsingNetworkFeature",
             args = {int.class, java.lang.String.class}
         )
@@ -165,16 +166,18 @@
     public void testStartUsingNetworkFeature() {
 
         final String invalidateFeature = "invalidateFeature";
-        assertEquals(-1, mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
+        // TODO: MMS feature string is not public
+        final String mmsFeature = "enableMMS";
+        final int failureCode = -1;
+
+        assertEquals(failureCode, mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
+                invalidateFeature));
+        assertEquals(failureCode, mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
                 invalidateFeature));
 
-        assertEquals(-1, mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE,
-                invalidateFeature));
-
-        assertEquals(-1, mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_WIFI,
-                Phone.FEATURE_ENABLE_MMS));
-        assertEquals(-1, mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_WIFI,
-                Phone.FEATURE_ENABLE_MMS));
+        // Should return failure(-1) because MMS is not supported on WIFI.
+        assertEquals(failureCode, mCm.startUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, mmsFeature));
+        assertEquals(failureCode, mCm.stopUsingNetworkFeature(ConnectivityManager.TYPE_WIFI, mmsFeature));
     }
 
     @TestTargetNew(
diff --git a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
index 248ef9a..5036c4a 100644
--- a/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkInfoTest.java
@@ -16,6 +16,12 @@
 
 package android.net.cts;
 
+import dalvik.annotation.TestInfo;
+import dalvik.annotation.TestStatus;
+import dalvik.annotation.TestTarget;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.ToBeFixed;
+
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
@@ -23,10 +29,6 @@
 import android.net.NetworkInfo.State;
 import android.os.Parcel;
 import android.test.AndroidTestCase;
-import dalvik.annotation.TestInfo;
-import dalvik.annotation.TestStatus;
-import dalvik.annotation.TestTarget;
-import dalvik.annotation.TestTargetClass;
 
 @TestTargetClass(NetworkInfo.class)
 public class NetworkInfoTest extends AndroidTestCase {
@@ -109,12 +111,10 @@
         // test environment:connect as TYPE_MOBILE, and connect to internet.
         assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getType(),
                 ConnectivityManager.TYPE_MOBILE);
-        assertEquals(ni[ConnectivityManager.TYPE_WIFI].getType(),
-                ConnectivityManager.TYPE_WIFI);
-        assertEquals("MOBILE",ni[ConnectivityManager.TYPE_MOBILE].getTypeName());
-        assertEquals("WIFI",ni[ConnectivityManager.TYPE_WIFI].getTypeName());
-        assertTrue(ni[ConnectivityManager.TYPE_MOBILE]
-                .isConnectedOrConnecting());
+        assertEquals(ni[ConnectivityManager.TYPE_WIFI].getType(), ConnectivityManager.TYPE_WIFI);
+        assertEquals("MOBILE", ni[ConnectivityManager.TYPE_MOBILE].getTypeName());
+        assertEquals("WIFI", ni[ConnectivityManager.TYPE_WIFI].getTypeName());
+        assertTrue(ni[ConnectivityManager.TYPE_MOBILE].isConnectedOrConnecting());
         assertFalse(ni[ConnectivityManager.TYPE_WIFI].isConnectedOrConnecting());
         assertTrue(ni[ConnectivityManager.TYPE_MOBILE].isAvailable());
         assertFalse(ni[ConnectivityManager.TYPE_WIFI].isAvailable());
@@ -124,14 +124,13 @@
         assertEquals(ni[ConnectivityManager.TYPE_MOBILE].describeContents(), 0);
         assertEquals(ni[ConnectivityManager.TYPE_WIFI].describeContents(), 0);
 
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getState(),
-                State.CONNECTED);
+        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getState(), State.CONNECTED);
         assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getDetailedState(),
                 DetailedState.CONNECTED);
 
         assertNull(ni[ConnectivityManager.TYPE_MOBILE].getReason());
         assertNull(ni[ConnectivityManager.TYPE_WIFI].getReason());
-        assertEquals("internet",ni[ConnectivityManager.TYPE_MOBILE].getExtraInfo());
+        assertEquals("internet", ni[ConnectivityManager.TYPE_MOBILE].getExtraInfo());
         assertNull(ni[ConnectivityManager.TYPE_WIFI].getExtraInfo());
 
         assertNotNull(ni[ConnectivityManager.TYPE_MOBILE].toString());
@@ -147,25 +146,13 @@
           methodArgs = {Parcel.class, Integer.class}
         )
     })
+    @ToBeFixed(bug = "1703933", explanation = "Cannot test if the data was written correctly,"
+        + " if build CTS against SDK.")
     public void testWriteToParcel() {
-        NetworkInfo[] ni = mConnectivityManager.getAllNetworkInfo();
+        NetworkInfo[] networkInfos = mConnectivityManager.getAllNetworkInfo();
+        NetworkInfo mobileInfo = networkInfos[ConnectivityManager.TYPE_MOBILE];
         Parcel p = Parcel.obtain();
-        ni[ConnectivityManager.TYPE_MOBILE].writeToParcel(p, 1);
-        p.setDataPosition(0);
-        NetworkInfo mNetworkInfo = NetworkInfo.CREATOR.createFromParcel(p);
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getExtraInfo(),
-                mNetworkInfo.getExtraInfo());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getReason(),
-                mNetworkInfo.getReason());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getType(),
-                mNetworkInfo.getType());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getState(),
-                mNetworkInfo.getState());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].getDetailedState(),
-                mNetworkInfo.getDetailedState());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].isAvailable(),
-                mNetworkInfo.isAvailable());
-        assertEquals(ni[ConnectivityManager.TYPE_MOBILE].isFailover(),
-                mNetworkInfo.isFailover());
+
+        mobileInfo.writeToParcel(p, 1);
     }
 }
