blob: fa15e8f82c6ded20be777c56549189c23f91af32 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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
const val TYPE_MOBILE = ConnectivityManager.TYPE_MOBILE
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
.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val ni = cm.getAllNetworkInfo()
assertTrue(ni.isNotEmpty())
for (netInfo in ni) {
when (netInfo.getType()) {
TYPE_MOBILE -> assertNetworkInfo(netInfo, MOBILE_TYPE_NAME)
TYPE_WIFI -> assertNetworkInfo(netInfo, WIFI_TYPE_NAME)
// TODO: Add BLUETOOTH_TETHER testing
}
}
}
private fun assertNetworkInfo(netInfo: NetworkInfo, expectedTypeName: String) {
assertTrue(expectedTypeName.equals(netInfo.getTypeName(), ignoreCase = true))
assertNotNull(netInfo.toString())
if (!netInfo.isConnectedOrConnecting()) return
assertTrue(netInfo.isAvailable())
if (State.CONNECTED == netInfo.getState()) {
assertTrue(netInfo.isConnected())
}
assertTrue(State.CONNECTING == netInfo.getState() ||
State.CONNECTED == netInfo.getState())
assertTrue(DetailedState.SCANNING == netInfo.getDetailedState() ||
DetailedState.CONNECTING == netInfo.getDetailedState() ||
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)
}
}