Add NetworkInfo CTS tests

Test APIs below:
NetworkInfo(int, int, String, String)
setDetailedState(android.net.NetworkInfo.DetailedState, String, String)

Bug: 152356365
Test: atest CtsNetTestCasesLatestSdk:android.net.cts.NetworkInfoTest
      on both Q and R devices
Change-Id: Idada858b1d5cd4c0907998b289aca4d6e6d04f56
Merged-In: Idada858b1d5cd4c0907998b289aca4d6e6d04f56
(cherry picked from aosp/1267480)
diff --git a/tests/tests/net/src/android/net/cts/NetworkInfoTest.kt b/tests/tests/net/src/android/net/cts/NetworkInfoTest.kt
index e1dca53..fa15e8f 100644
--- a/tests/tests/net/src/android/net/cts/NetworkInfoTest.kt
+++ b/tests/tests/net/src/android/net/cts/NetworkInfoTest.kt
@@ -16,16 +16,24 @@
 
 package android.net.cts
 
+import android.os.Build
 import android.content.Context
 import android.net.ConnectivityManager
 import android.net.NetworkInfo
 import android.net.NetworkInfo.DetailedState
 import android.net.NetworkInfo.State
+import android.telephony.TelephonyManager
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.runner.AndroidJUnit4
+import com.android.testutils.DevSdkIgnoreRule
+import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
+import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
 import org.junit.Assert.assertTrue
+import org.junit.Assert.fail
+import org.junit.Rule
 import org.junit.runner.RunWith
 import org.junit.Test
 
@@ -33,10 +41,14 @@
 const val TYPE_WIFI = ConnectivityManager.TYPE_WIFI
 const val MOBILE_TYPE_NAME = "mobile"
 const val WIFI_TYPE_NAME = "WIFI"
+const val LTE_SUBTYPE_NAME = "LTE"
 
 @SmallTest
 @RunWith(AndroidJUnit4::class)
 class NetworkInfoTest {
+    @Rule @JvmField
+    val ignoreRule = DevSdkIgnoreRule()
+
     @Test
     fun testAccessNetworkInfoProperties() {
         val cm = InstrumentationRegistry.getInstrumentation().context
@@ -70,4 +82,41 @@
                 DetailedState.AUTHENTICATING == netInfo.getDetailedState() ||
                 DetailedState.CONNECTED == netInfo.getDetailedState())
     }
+
+    @Test @IgnoreUpTo(Build.VERSION_CODES.Q)
+    fun testConstructor() {
+        val networkInfo = NetworkInfo(TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_LTE,
+                MOBILE_TYPE_NAME, LTE_SUBTYPE_NAME)
+
+        assertEquals(TYPE_MOBILE, networkInfo.type)
+        assertEquals(TelephonyManager.NETWORK_TYPE_LTE, networkInfo.subtype)
+        assertEquals(MOBILE_TYPE_NAME, networkInfo.typeName)
+        assertEquals(LTE_SUBTYPE_NAME, networkInfo.subtypeName)
+        assertEquals(DetailedState.IDLE, networkInfo.detailedState)
+        assertEquals(State.UNKNOWN, networkInfo.state)
+        assertNull(networkInfo.reason)
+        assertNull(networkInfo.extraInfo)
+
+        try {
+            NetworkInfo(ConnectivityManager.MAX_NETWORK_TYPE + 1,
+                    TelephonyManager.NETWORK_TYPE_LTE, MOBILE_TYPE_NAME, LTE_SUBTYPE_NAME)
+            fail("Unexpected behavior. Network type is invalid.")
+        } catch (e: IllegalArgumentException) {
+            // Expected behavior.
+        }
+    }
+
+    @Test
+    fun testSetDetailedState() {
+        val networkInfo = NetworkInfo(TYPE_MOBILE, TelephonyManager.NETWORK_TYPE_LTE,
+                MOBILE_TYPE_NAME, LTE_SUBTYPE_NAME)
+        val reason = "TestNetworkInfo"
+        val extraReason = "setDetailedState test"
+
+        networkInfo.setDetailedState(DetailedState.CONNECTED, reason, extraReason)
+        assertEquals(DetailedState.CONNECTED, networkInfo.detailedState)
+        assertEquals(State.CONNECTED, networkInfo.state)
+        assertEquals(reason, networkInfo.reason)
+        assertEquals(extraReason, networkInfo.extraInfo)
+    }
 }