Merge "Remove usage of networkAttributes"
This commit is contained in:
@@ -23,6 +23,8 @@ import static android.content.Intent.ACTION_USER_ADDED;
|
||||
import static android.content.Intent.ACTION_USER_REMOVED;
|
||||
import static android.content.Intent.ACTION_USER_UNLOCKED;
|
||||
import static android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED;
|
||||
import static android.content.pm.PackageManager.FEATURE_WIFI;
|
||||
import static android.content.pm.PackageManager.FEATURE_WIFI_DIRECT;
|
||||
import static android.content.pm.PackageManager.GET_PERMISSIONS;
|
||||
import static android.content.pm.PackageManager.MATCH_ANY_USER;
|
||||
import static android.content.pm.PackageManager.PERMISSION_DENIED;
|
||||
@@ -42,6 +44,7 @@ import static android.net.ConnectivityManager.TYPE_MOBILE;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE_FOTA;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE_MMS;
|
||||
import static android.net.ConnectivityManager.TYPE_MOBILE_SUPL;
|
||||
import static android.net.ConnectivityManager.TYPE_PROXY;
|
||||
import static android.net.ConnectivityManager.TYPE_VPN;
|
||||
import static android.net.ConnectivityManager.TYPE_WIFI;
|
||||
import static android.net.INetworkMonitor.NETWORK_VALIDATION_PROBE_DNS;
|
||||
@@ -1505,6 +1508,9 @@ public class ConnectivityServiceTest {
|
||||
Looper.prepare();
|
||||
}
|
||||
mockDefaultPackages();
|
||||
mockHasSystemFeature(FEATURE_WIFI, true);
|
||||
mockHasSystemFeature(FEATURE_WIFI_DIRECT, true);
|
||||
doReturn(true).when(mTelephonyManager).isDataCapable();
|
||||
|
||||
FakeSettingsProvider.clearSettingsProvider();
|
||||
mServiceContext = new MockContext(InstrumentationRegistry.getContext(),
|
||||
@@ -1829,7 +1835,8 @@ public class ConnectivityServiceTest {
|
||||
assertTrue(mCm.isNetworkSupported(TYPE_WIFI));
|
||||
assertTrue(mCm.isNetworkSupported(TYPE_MOBILE));
|
||||
assertTrue(mCm.isNetworkSupported(TYPE_MOBILE_MMS));
|
||||
assertFalse(mCm.isNetworkSupported(TYPE_MOBILE_FOTA));
|
||||
assertTrue(mCm.isNetworkSupported(TYPE_MOBILE_FOTA));
|
||||
assertFalse(mCm.isNetworkSupported(TYPE_PROXY));
|
||||
|
||||
// Check that TYPE_ETHERNET is supported. Unlike the asserts above, which only validate our
|
||||
// mocks, this assert exercises the ConnectivityService code path that ensures that
|
||||
|
||||
@@ -21,13 +21,29 @@
|
||||
|
||||
package com.android.server
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.PackageManager.FEATURE_WIFI
|
||||
import android.content.pm.PackageManager.FEATURE_WIFI_DIRECT
|
||||
import android.net.ConnectivityManager.TYPE_ETHERNET
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_CBS
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_DUN
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_EMERGENCY
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_FOTA
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_HIPRI
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_IA
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_IMS
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_MMS
|
||||
import android.net.ConnectivityManager.TYPE_MOBILE_SUPL
|
||||
import android.net.ConnectivityManager.TYPE_VPN
|
||||
import android.net.ConnectivityManager.TYPE_WIFI
|
||||
import android.net.ConnectivityManager.TYPE_WIFI_P2P
|
||||
import android.net.ConnectivityManager.TYPE_WIMAX
|
||||
import android.net.EthernetManager
|
||||
import android.net.NetworkInfo.DetailedState.CONNECTED
|
||||
import android.net.NetworkInfo.DetailedState.DISCONNECTED
|
||||
import android.telephony.TelephonyManager
|
||||
import androidx.test.filters.SmallTest
|
||||
import androidx.test.runner.AndroidJUnit4
|
||||
import com.android.server.ConnectivityService.LegacyTypeTracker
|
||||
@@ -36,7 +52,6 @@ import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Assert.assertSame
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Assert.fail
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
@@ -52,88 +67,130 @@ const val UNSUPPORTED_TYPE = TYPE_WIMAX
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
@SmallTest
|
||||
class LegacyTypeTrackerTest {
|
||||
private val supportedTypes = arrayOf(TYPE_MOBILE, TYPE_WIFI, TYPE_ETHERNET, TYPE_MOBILE_SUPL)
|
||||
private val supportedTypes = arrayOf(TYPE_WIFI, TYPE_WIFI_P2P, TYPE_ETHERNET, TYPE_MOBILE,
|
||||
TYPE_MOBILE_SUPL, TYPE_MOBILE_MMS, TYPE_MOBILE_SUPL, TYPE_MOBILE_DUN, TYPE_MOBILE_HIPRI,
|
||||
TYPE_MOBILE_FOTA, TYPE_MOBILE_IMS, TYPE_MOBILE_CBS, TYPE_MOBILE_IA,
|
||||
TYPE_MOBILE_EMERGENCY, TYPE_VPN)
|
||||
|
||||
private val mMockService = mock(ConnectivityService::class.java).apply {
|
||||
doReturn(false).`when`(this).isDefaultNetwork(any())
|
||||
}
|
||||
private val mTracker = LegacyTypeTracker(mMockService).apply {
|
||||
supportedTypes.forEach {
|
||||
addSupportedType(it)
|
||||
}
|
||||
private val mPm = mock(PackageManager::class.java)
|
||||
private val mContext = mock(Context::class.java).apply {
|
||||
doReturn(true).`when`(mPm).hasSystemFeature(FEATURE_WIFI)
|
||||
doReturn(true).`when`(mPm).hasSystemFeature(FEATURE_WIFI_DIRECT)
|
||||
doReturn(mPm).`when`(this).packageManager
|
||||
doReturn(mock(EthernetManager::class.java)).`when`(this).getSystemService(
|
||||
Context.ETHERNET_SERVICE)
|
||||
}
|
||||
private val mTm = mock(TelephonyManager::class.java).apply {
|
||||
doReturn(true).`when`(this).isDataCapable
|
||||
}
|
||||
|
||||
private fun makeTracker() = LegacyTypeTracker(mMockService).apply {
|
||||
loadSupportedTypes(mContext, mTm)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSupportedTypes() {
|
||||
try {
|
||||
mTracker.addSupportedType(supportedTypes[0])
|
||||
fail("Expected IllegalStateException")
|
||||
} catch (expected: IllegalStateException) {}
|
||||
val tracker = makeTracker()
|
||||
supportedTypes.forEach {
|
||||
assertTrue(mTracker.isTypeSupported(it))
|
||||
assertTrue(tracker.isTypeSupported(it))
|
||||
}
|
||||
assertFalse(tracker.isTypeSupported(UNSUPPORTED_TYPE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSupportedTypes_NoEthernet() {
|
||||
doReturn(null).`when`(mContext).getSystemService(Context.ETHERNET_SERVICE)
|
||||
assertFalse(makeTracker().isTypeSupported(TYPE_ETHERNET))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSupportedTypes_NoTelephony() {
|
||||
doReturn(false).`when`(mTm).isDataCapable
|
||||
val tracker = makeTracker()
|
||||
val nonMobileTypes = arrayOf(TYPE_WIFI, TYPE_WIFI_P2P, TYPE_ETHERNET, TYPE_VPN)
|
||||
nonMobileTypes.forEach {
|
||||
assertTrue(tracker.isTypeSupported(it))
|
||||
}
|
||||
supportedTypes.toSet().minus(nonMobileTypes).forEach {
|
||||
assertFalse(tracker.isTypeSupported(it))
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSupportedTypes_NoWifiDirect() {
|
||||
doReturn(false).`when`(mPm).hasSystemFeature(FEATURE_WIFI_DIRECT)
|
||||
val tracker = makeTracker()
|
||||
assertFalse(tracker.isTypeSupported(TYPE_WIFI_P2P))
|
||||
supportedTypes.toSet().minus(TYPE_WIFI_P2P).forEach {
|
||||
assertTrue(tracker.isTypeSupported(it))
|
||||
}
|
||||
assertFalse(mTracker.isTypeSupported(UNSUPPORTED_TYPE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testSupl() {
|
||||
val tracker = makeTracker()
|
||||
val mobileNai = mock(NetworkAgentInfo::class.java)
|
||||
mTracker.add(TYPE_MOBILE, mobileNai)
|
||||
tracker.add(TYPE_MOBILE, mobileNai)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, CONNECTED, TYPE_MOBILE)
|
||||
reset(mMockService)
|
||||
mTracker.add(TYPE_MOBILE_SUPL, mobileNai)
|
||||
tracker.add(TYPE_MOBILE_SUPL, mobileNai)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, CONNECTED, TYPE_MOBILE_SUPL)
|
||||
reset(mMockService)
|
||||
mTracker.remove(TYPE_MOBILE_SUPL, mobileNai, false /* wasDefault */)
|
||||
tracker.remove(TYPE_MOBILE_SUPL, mobileNai, false /* wasDefault */)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, DISCONNECTED, TYPE_MOBILE_SUPL)
|
||||
reset(mMockService)
|
||||
mTracker.add(TYPE_MOBILE_SUPL, mobileNai)
|
||||
tracker.add(TYPE_MOBILE_SUPL, mobileNai)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, CONNECTED, TYPE_MOBILE_SUPL)
|
||||
reset(mMockService)
|
||||
mTracker.remove(mobileNai, false)
|
||||
tracker.remove(mobileNai, false)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, DISCONNECTED, TYPE_MOBILE_SUPL)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai, DISCONNECTED, TYPE_MOBILE)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAddNetwork() {
|
||||
val tracker = makeTracker()
|
||||
val mobileNai = mock(NetworkAgentInfo::class.java)
|
||||
val wifiNai = mock(NetworkAgentInfo::class.java)
|
||||
mTracker.add(TYPE_MOBILE, mobileNai)
|
||||
mTracker.add(TYPE_WIFI, wifiNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
tracker.add(TYPE_MOBILE, mobileNai)
|
||||
tracker.add(TYPE_WIFI, wifiNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
// Make sure adding a second NAI does not change the results.
|
||||
val secondMobileNai = mock(NetworkAgentInfo::class.java)
|
||||
mTracker.add(TYPE_MOBILE, secondMobileNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
tracker.add(TYPE_MOBILE, secondMobileNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
// Make sure removing a network that wasn't added for this type is a no-op.
|
||||
mTracker.remove(TYPE_MOBILE, wifiNai, false /* wasDefault */)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
tracker.remove(TYPE_MOBILE, wifiNai, false /* wasDefault */)
|
||||
assertSame(tracker.getNetworkForType(TYPE_MOBILE), mobileNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
// Remove the top network for mobile and make sure the second one becomes the network
|
||||
// of record for this type.
|
||||
mTracker.remove(TYPE_MOBILE, mobileNai, false /* wasDefault */)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_MOBILE), secondMobileNai)
|
||||
assertSame(mTracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
tracker.remove(TYPE_MOBILE, mobileNai, false /* wasDefault */)
|
||||
assertSame(tracker.getNetworkForType(TYPE_MOBILE), secondMobileNai)
|
||||
assertSame(tracker.getNetworkForType(TYPE_WIFI), wifiNai)
|
||||
// Make sure adding a network for an unsupported type does not register it.
|
||||
mTracker.add(UNSUPPORTED_TYPE, mobileNai)
|
||||
assertNull(mTracker.getNetworkForType(UNSUPPORTED_TYPE))
|
||||
tracker.add(UNSUPPORTED_TYPE, mobileNai)
|
||||
assertNull(tracker.getNetworkForType(UNSUPPORTED_TYPE))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testBroadcastOnDisconnect() {
|
||||
val tracker = makeTracker()
|
||||
val mobileNai1 = mock(NetworkAgentInfo::class.java)
|
||||
val mobileNai2 = mock(NetworkAgentInfo::class.java)
|
||||
doReturn(false).`when`(mMockService).isDefaultNetwork(mobileNai1)
|
||||
mTracker.add(TYPE_MOBILE, mobileNai1)
|
||||
tracker.add(TYPE_MOBILE, mobileNai1)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai1, CONNECTED, TYPE_MOBILE)
|
||||
reset(mMockService)
|
||||
doReturn(false).`when`(mMockService).isDefaultNetwork(mobileNai2)
|
||||
mTracker.add(TYPE_MOBILE, mobileNai2)
|
||||
tracker.add(TYPE_MOBILE, mobileNai2)
|
||||
verify(mMockService, never()).sendLegacyNetworkBroadcast(any(), any(), anyInt())
|
||||
mTracker.remove(TYPE_MOBILE, mobileNai1, false /* wasDefault */)
|
||||
tracker.remove(TYPE_MOBILE, mobileNai1, false /* wasDefault */)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai1, DISCONNECTED, TYPE_MOBILE)
|
||||
verify(mMockService).sendLegacyNetworkBroadcast(mobileNai2, CONNECTED, TYPE_MOBILE)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user