From 00625abeda5d9c903a04ea18215bea1cdfb5f597 Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Tue, 29 Apr 2025 18:25:05 +0800 Subject: [PATCH] Enforce run on handler thread for SatelliteAccessController This is a no-op refactoring that ensures events are handled on the handler thread. While this is already the case in production code, it's not consistently true in the tests. This change adds the necessary methods for faking events on the handler thread while maintaining readability in the tests. Flag: EXEMPT refactor Test: atest ConnectivityCoverageTests:android.net.connectivity.com.android.server.connectivity.SatelliteAccessControllerTest \ --update-device Bug: 410731080 Change-Id: I816233a823314c4c276138438bbaf33f781eccfe --- .../SatelliteAccessController.java | 12 ++ .../SatelliteAccessControllerTest.kt | 130 ++++++++++-------- 2 files changed, 82 insertions(+), 60 deletions(-) diff --git a/service/src/com/android/server/connectivity/SatelliteAccessController.java b/service/src/com/android/server/connectivity/SatelliteAccessController.java index 3055b27eab..bbbd4aabea 100644 --- a/service/src/com/android/server/connectivity/SatelliteAccessController.java +++ b/service/src/com/android/server/connectivity/SatelliteAccessController.java @@ -39,6 +39,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IndentingPrintWriter; import com.android.net.module.util.CollectionUtils; import com.android.net.module.util.DeviceConfigUtils; +import com.android.net.module.util.HandlerUtils; import com.android.net.module.util.SharedLog; import java.util.List; @@ -52,10 +53,14 @@ import javax.annotation.CheckReturnValue; * Tracks the uid of all the default messaging application which are role_sms role and * satellite_communication permission complaint and requests ConnectivityService to create multi * layer request with satellite internet access support for the default message application. + * + * Note that this class is not thread safe and should only be accessed on the handler + * thread, except {@link #start()}. */ public class SatelliteAccessController { private static final String TAG = SatelliteAccessController.class.getSimpleName(); // Shamelessly copied from telephony/satellite/SatelliteManager.java. + // TODO: Import from SatelliteManager when it is available. @VisibleForTesting public static final String PROPERTY_SATELLITE_DATA_OPTIMIZED = "android.telephony.PROPERTY_SATELLITE_DATA_OPTIMIZED"; @@ -93,6 +98,7 @@ public class SatelliteAccessController { implements OnRoleHoldersChangedListener { @Override public void onRoleHoldersChanged(String role, UserHandle userHandle) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); if (RoleManager.ROLE_SMS.equals(role) && updateSatelliteRoleSmsUids(userHandle)) { mLog.i("ROLE_SMS Change detected "); reportSatelliteNetworkFallbackUids(); @@ -267,6 +273,7 @@ public class SatelliteAccessController { */ public void onUserAddedWithInstalledPackageList(@NonNull UserHandle userHandle, @NonNull List apps) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); // Obtain uids with role sms and satellite communication permission for the added user. final boolean roleSmsUidsChanged = updateSatelliteRoleSmsUids(userHandle); @@ -297,6 +304,7 @@ public class SatelliteAccessController { * @param userHandle The integer userHandle of the removed user. See {@link #EXTRA_USER_HANDLE}. */ public void onUserRemoved(@NonNull UserHandle userHandle) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); final boolean smsRoleUidsChanged = updateSatelliteRoleSmsUidListOnUserRemoval(userHandle.getIdentifier()); final boolean satelliteOptInUidsChanged; @@ -319,6 +327,7 @@ public class SatelliteAccessController { * @param uid The uid of the new package. */ public void onPackageAdded(@NonNull final String packageName, final int uid) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); if (!mSupportConstrainedDataSatelliteOptIn) return; if (addSatelliteDataOptInUid(packageName, uid)) { reportSatelliteNetworkFallbackUids(); @@ -340,6 +349,7 @@ public class SatelliteAccessController { * @param pkgList An array of package names that have become available. */ public void onExternalApplicationsAvailable(String[] pkgList) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); if (!mSupportConstrainedDataSatelliteOptIn) return; if (CollectionUtils.isEmpty(pkgList)) { mLog.e("No available external application."); @@ -367,6 +377,7 @@ public class SatelliteAccessController { * @param uid containing the integer uid previously assigned to the package. */ public void onPackageRemoved(@NonNull final String packageName, final int uid) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); if (!mSupportConstrainedDataSatelliteOptIn) return; // Scan for all apps sharing the same uid. @@ -414,6 +425,7 @@ public class SatelliteAccessController { /** Dump info to dumpsys */ public void dump(@NonNull IndentingPrintWriter pw) { + HandlerUtils.ensureRunningOnHandlerThread(mConnectivityServiceHandler); pw.println("SatelliteAccessController:"); pw.increaseIndent(); pw.println("SupportConstrainedDataSatelliteOptIn: " diff --git a/tests/unit/java/com/android/server/connectivity/SatelliteAccessControllerTest.kt b/tests/unit/java/com/android/server/connectivity/SatelliteAccessControllerTest.kt index 4c157d4370..3bb1c92bf3 100644 --- a/tests/unit/java/com/android/server/connectivity/SatelliteAccessControllerTest.kt +++ b/tests/unit/java/com/android/server/connectivity/SatelliteAccessControllerTest.kt @@ -159,13 +159,13 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) // check DEFAULT_MESSAGING_APP1 is available as satellite network fallback uid doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet()) // check SMS_APP2 is available as satellite network Fallback uid @@ -173,7 +173,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet()) // check no uid is available as satellite network fallback uid @@ -181,7 +181,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(emptySet(), emptySet()) } @@ -192,7 +192,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) // Check DEFAULT_MESSAGING_APP1 is not available as satellite network fallback uid @@ -202,7 +202,7 @@ class SatelliteAccessControllerTest { .checkPermission(Manifest.permission.SATELLITE_COMMUNICATION, SMS_APP1) doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) } @@ -211,10 +211,7 @@ class SatelliteAccessControllerTest { startSatelliteAccessController() doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged( - RoleManager.ROLE_BROWSER, - PRIMARY_USER_HANDLE - ) + onRoleHoldersChanged(RoleManager.ROLE_BROWSER, PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) } @@ -225,13 +222,13 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) // check SMS_APP1 is available as satellite network fallback uid at primary user doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet()) // check SMS_APP2 is available as satellite network fallback uid at primary user @@ -239,7 +236,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet()) // check SMS_APP1 is available as satellite network fallback uid at secondary user @@ -247,7 +244,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) verify(callback).accept( setOf(SMS_APP_ID2.toUid(PRIMARY_USER), SMS_APP_ID1.toUid(SECONDARY_USER)), emptySet() @@ -258,16 +255,13 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged( - RoleManager.ROLE_SMS, - PRIMARY_USER_HANDLE - ) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID1.toUid(SECONDARY_USER)), emptySet()) // check SMS_APP2 is available as satellite network fallback uid at secondary user doReturn(listOf(SMS_APP2)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID2.toUid(SECONDARY_USER)), emptySet()) // check no uid is available as satellite network fallback uid at secondary user @@ -275,7 +269,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) verify(callback).accept(emptySet(), emptySet()) } @@ -287,7 +281,7 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).accept(setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet()) // check SMS_APP1 is available as satellite network fallback uid at secondary user @@ -295,14 +289,12 @@ class SatelliteAccessControllerTest { RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE ) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, SECONDARY_USER_HANDLE) verify(callback).accept( setOf(SMS_APP_ID2.toUid(PRIMARY_USER), SMS_APP_ID1.toUid(SECONDARY_USER)), emptySet() ) - processOnHandlerThread { - satelliteAccessController.onUserRemoved(SECONDARY_USER_HANDLE) - } + onUserRemoved(SECONDARY_USER_HANDLE) verify(callback, times(2)).accept( setOf(SMS_APP_ID2.toUid(PRIMARY_USER)), emptySet() @@ -315,6 +307,33 @@ class SatelliteAccessControllerTest { return future.get() } + private fun onRoleHoldersChanged(roleName: String, userHandle: UserHandle) = + processOnHandlerThread { + roleHolderChangedListener.onRoleHoldersChanged(roleName, userHandle) + } + + private fun onUserAddedWithInstalledPackageList( + userHandle: UserHandle, + apps: List + ) = processOnHandlerThread { + satelliteAccessController.onUserAddedWithInstalledPackageList(userHandle, apps) + } + + private fun onUserRemoved(userHandle: UserHandle) = processOnHandlerThread { + satelliteAccessController.onUserRemoved(userHandle) + } + + private fun onPackageAdded(packageName: String, uid: Int) = + processOnHandlerThread { satelliteAccessController.onPackageAdded(packageName, uid) } + + private fun onPackageRemoved(packageName: String, uid: Int) = + processOnHandlerThread { satelliteAccessController.onPackageRemoved(packageName, uid) } + + private fun onExternalApplicationsAvailable(pkgList: Array) = + processOnHandlerThread { + satelliteAccessController.onExternalApplicationsAvailable(pkgList) + } + private fun startSatelliteAccessController() { satelliteAccessController.start() // Get registered listener using captor @@ -352,7 +371,7 @@ class SatelliteAccessControllerTest { @Test fun testSatelliteOptInUids_onPackageAdded() { mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) verify(callback).accept(emptySet(), setOf(TEST_UID1)) } @@ -360,7 +379,7 @@ class SatelliteAccessControllerTest { @Test fun testSatelliteOptInUids_onPackageAdded_ignoresIfNotSatelliteOptimized() { mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, false) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) verify(callback, never()).accept(any(), any()) } @@ -370,9 +389,9 @@ class SatelliteAccessControllerTest { mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true) mockGetPackagesForUid(TEST_UID1, arrayOf(TEST_PACKAGE1)) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) verify(callback).accept(emptySet(), setOf(TEST_UID1)) - satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1) + onPackageRemoved(TEST_PACKAGE1, TEST_UID1) verify(callback).accept(emptySet(), emptySet()) } @@ -385,14 +404,14 @@ class SatelliteAccessControllerTest { // Verify uid is not removed if there is still another package shares the same uid. val inOrder = inOrder(callback) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1)) - satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1) + onPackageRemoved(TEST_PACKAGE1, TEST_UID1) inOrder.verifyNoMoreInteractions() // Verify uid is removed if there is no other package with shared uid. mockGetPackagesForUid(TEST_UID1, null) - satelliteAccessController.onPackageRemoved(TEST_PACKAGE2, TEST_UID1) + onPackageRemoved(TEST_PACKAGE2, TEST_UID1) inOrder.verify(callback).accept(emptySet(), emptySet()) } @@ -405,18 +424,16 @@ class SatelliteAccessControllerTest { val packageInfo2 = makePackageInfo(TEST_PACKAGE2, TEST_UID2) val inOrder = inOrder(callback) - satelliteAccessController - .onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) - satelliteAccessController - .onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, listOf(packageInfo2)) + onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) + onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, listOf(packageInfo2)) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1)) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, TEST_UID2)) - satelliteAccessController.onUserRemoved(SECONDARY_USER_HANDLE) + onUserRemoved(SECONDARY_USER_HANDLE) // Verify that the app associated with the non-removed user is not removed. inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1)) - satelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE) + onUserRemoved(PRIMARY_USER_HANDLE) // Verify everything is removed. inOrder.verify(callback).accept(emptySet(), emptySet()) inOrder.verifyNoMoreInteractions() @@ -429,12 +446,11 @@ class SatelliteAccessControllerTest { val packageInfo1 = makePackageInfo(TEST_PACKAGE1, TEST_UID1) // Verify nothing changes and nothing crashes. - satelliteAccessController - .onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) - satelliteAccessController.onPackageRemoved(TEST_PACKAGE1, TEST_UID1) - satelliteAccessController.onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2)) - satelliteAccessController.onUserRemoved(PRIMARY_USER_HANDLE) + onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageRemoved(TEST_PACKAGE1, TEST_UID1) + onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2)) + onUserRemoved(PRIMARY_USER_HANDLE) verify(callback, never()).accept(any(), any()) } @@ -445,12 +461,12 @@ class SatelliteAccessControllerTest { // Set SMS_APP1 under primary user as a role-sms Uid. doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) verify(callback).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) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) verify(callback).accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), setOf(TEST_UID1)) } @@ -463,8 +479,7 @@ class SatelliteAccessControllerTest { .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) val inOrder = inOrder(callback) - satelliteAccessController - .onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) + onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, listOf(packageInfo1)) // Verify the callback only fired once after both lists are ready. inOrder.verify(callback, never()) .accept(setOf(SMS_APP_ID1.toUid(PRIMARY_USER)), emptySet()) @@ -483,23 +498,23 @@ class SatelliteAccessControllerTest { // However, one opt-in uid is a messaging app and will surprise us later. mockIsSatelliteDataOptimizedApp(TEST_PACKAGE1, true) mockIsSatelliteDataOptimizedApp(SMS_APP1, true) - satelliteAccessController.onPackageAdded(TEST_PACKAGE1, TEST_UID1) + onPackageAdded(TEST_PACKAGE1, TEST_UID1) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1)) - satelliteAccessController.onPackageAdded(SMS_APP1, smsUid) + onPackageAdded(SMS_APP1, smsUid) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, smsUid)) // Set SMS_APP1 as a role-sms Uid. // Verify the role-sms Uid is excluded from the opt-in Uid list. doReturn(listOf(SMS_APP1)) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) inOrder.verify(callback).accept(setOf(smsUid), setOf(TEST_UID1)) // Unset SMS_APP1 as the role-sms Uid. // Verify the role-sms Uid is included to the opt-in Uid list again. doReturn(emptyList()) .`when`(deps).getRoleHoldersAsUser(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) - roleHolderChangedListener.onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) + onRoleHoldersChanged(RoleManager.ROLE_SMS, PRIMARY_USER_HANDLE) inOrder.verify(callback).accept(emptySet(), setOf(TEST_UID1, smsUid)) } @@ -511,14 +526,9 @@ class SatelliteAccessControllerTest { mockIsSatelliteDataOptimizedApp(SMS_APP2, true) val inOrder = inOrder(callback) - satelliteAccessController - .onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, emptyList()) - satelliteAccessController - .onUserAddedWithInstalledPackageList( - SECONDARY_USER_HANDLE, - emptyList() - ) - satelliteAccessController.onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2)) + onUserAddedWithInstalledPackageList(PRIMARY_USER_HANDLE, emptyList()) + onUserAddedWithInstalledPackageList(SECONDARY_USER_HANDLE, emptyList()) + onExternalApplicationsAvailable(arrayOf(SMS_APP1, SMS_APP2)) inOrder.verify(callback).accept(emptySet(), setOf( SMS_APP_ID1.toUid(PRIMARY_USER), SMS_APP_ID1.toUid(SECONDARY_USER),