Pipe the satellite network opt-in UIDs down to ConnectivityService
Flag: EXEMPT flagged with a kill switch Test: atest ConnectivityCoverageTests:android.net.connectivity.com.android.server.connectivity.SatelliteAccessControllerTest \ --update-device Bug: 410731080 Change-Id: I76a57a3c42659b594cd541c55e0e179062461085
This commit is contained in:
parent
957799c672
commit
2fd0d11db3
1 changed files with 96 additions and 49 deletions
|
|
@ -38,9 +38,6 @@ import com.android.testutils.com.android.testutils.SetFeatureFlagsRule.FeatureFl
|
|||
import java.util.concurrent.CompletableFuture
|
||||
import java.util.concurrent.Executor
|
||||
import java.util.function.BiConsumer
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
|
@ -50,6 +47,7 @@ import org.mockito.ArgumentMatchers.any
|
|||
import org.mockito.ArgumentMatchers.anyInt
|
||||
import org.mockito.ArgumentMatchers.eq
|
||||
import org.mockito.Mockito.doReturn
|
||||
import org.mockito.Mockito.inOrder
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.times
|
||||
|
|
@ -355,8 +353,7 @@ class SatelliteAccessControllerTest {
|
|||
fun testSatelliteOptimizedUids_onPackageAdded() {
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 1)
|
||||
verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
|
|
@ -364,8 +361,7 @@ class SatelliteAccessControllerTest {
|
|||
fun testSatelliteOptimizedUids_onPackageAdded_ignoresIfNotSatelliteOptimized() {
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, false)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
assertFalse(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
verify(mCallback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
|
|
@ -375,11 +371,9 @@ class SatelliteAccessControllerTest {
|
|||
mockGetPackagesForUid(TEST_UID1, arrayOf(TEST_PACKAGE1))
|
||||
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 1)
|
||||
verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
mSatelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
assertFalse(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
verify(mCallback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
|
|
@ -390,18 +384,16 @@ class SatelliteAccessControllerTest {
|
|||
mockGetPackagesForUid(TEST_UID1, arrayOf(TEST_PACKAGE1, TEST_PACKAGE2))
|
||||
|
||||
// Verify uid is not removed if there is still another package shares the same uid.
|
||||
val inOrder = inOrder(mCallback)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 1)
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
mSatelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 1)
|
||||
inOrder.verifyNoMoreInteractions()
|
||||
|
||||
// Verify uid is removed if there is no other package with shared uid.
|
||||
mockGetPackagesForUid(TEST_UID1, null)
|
||||
mSatelliteAccessController.onPackageRemoved(TEST_PACKAGE2, TEST_UID1)
|
||||
assertFalse(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
inOrder.verify(mCallback).accept(emptySet(), emptySet())
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
|
|
@ -412,22 +404,22 @@ class SatelliteAccessControllerTest {
|
|||
val packageInfo1 = makePackageInfo(TEST_PACKAGE1, TEST_UID1)
|
||||
val packageInfo2 = makePackageInfo(TEST_PACKAGE2, TEST_UID2)
|
||||
|
||||
val inOrder = inOrder(mCallback)
|
||||
mSatelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
mSatelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, listOf(packageInfo2))
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID2))
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1, TEST_UID2))
|
||||
|
||||
mSatelliteAccessController.onUserRemoved(SECONDARY_USER_HANDLE)
|
||||
// Verify that the app associated with the non-removed user is not removed.
|
||||
assertTrue(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID1))
|
||||
// Verify that the app associated with the removed user is removed.
|
||||
assertFalse(mSatelliteAccessController.isSatelliteDataOptimizedUid(TEST_UID2))
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
|
||||
mSatelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
// Verify everything is removed.
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
inOrder.verify(mCallback).accept(emptySet(), emptySet())
|
||||
inOrder.verifyNoMoreInteractions()
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN, enabled = false)
|
||||
|
|
@ -439,12 +431,56 @@ class SatelliteAccessControllerTest {
|
|||
// Verify nothing changes and nothing crashes.
|
||||
mSatelliteAccessController
|
||||
.onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1))
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
mSatelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1)
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
mSatelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE)
|
||||
assertEquals(mSatelliteAccessController.satelliteDataOptimizedUidCount, 0)
|
||||
verify(mCallback, never()).accept(any(), any())
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
@Test
|
||||
fun testSatelliteOptimizedUids_withSmsRoleUids() {
|
||||
startSatelliteAccessController()
|
||||
// Set SMS_APP1 under primary user as a sms-role Uid.
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(mDeps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
mRoleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
verify(mCallback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet())
|
||||
|
||||
// Mock another opt-in uid, verify they both reported via the callback.
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
verify(mCallback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), setOf(TEST_UID1))
|
||||
}
|
||||
|
||||
@FeatureFlag(name = CONSTRAINED_DATA_SATELLITE_OPTIN)
|
||||
@Test
|
||||
fun testSatelliteOptimizedUids_withSmsRoleUids_overlappedUid() {
|
||||
startSatelliteAccessController()
|
||||
val smsUid = SMS_APP_ID1.toUid(PRIMARY_USER)
|
||||
|
||||
val inOrder = inOrder(mCallback)
|
||||
// Mock opt-in uids, verify they both reported via the callback.
|
||||
// However, one opt-in uid is a messaging app and will surprise us later.
|
||||
mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true)
|
||||
mockIsSatelliteDataOptimizedApp(SMS_APP1, true)
|
||||
mSatelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1)
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1))
|
||||
mSatelliteAccessController.onPackageAdded(SMS_APP1, smsUid)
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1, smsUid))
|
||||
|
||||
// Set SMS_APP1 as a sms-role Uid.
|
||||
// Verify the sms-role Uid is excluded from the opt-in Uid list.
|
||||
doReturn(listOf(SMS_APP1))
|
||||
.`when`(mDeps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
mRoleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
inOrder.verify(mCallback).accept(setOf(smsUid), setOf(TEST_UID1))
|
||||
|
||||
// Unset SMS_APP1 as the sms-role Uid.
|
||||
// Verify the sms-role Uid is included to the opt-in Uid list again.
|
||||
doReturn(emptyList<String>())
|
||||
.`when`(mDeps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
mRoleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE)
|
||||
inOrder.verify(mCallback).accept(emptySet(), setOf(TEST_UID1, smsUid))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue