diff options
author | Philip P. Moltmann <moltmann@google.com> | 2020-05-02 23:38:00 -0700 |
---|---|---|
committer | Philip P. Moltmann <moltmann@google.com> | 2020-05-04 19:27:22 -0700 |
commit | e3b0dd7554f248077cdc95b887b83a86c276d366 (patch) | |
tree | 006eb9397185c903ffacb7416a2f0c0f1dec57a4 /tests | |
parent | 0aa049454c3287a868f51a4129f5455da009e026 (diff) | |
download | PackageInstaller-e3b0dd7554f248077cdc95b887b83a86c276d366.tar.gz |
Test onUpgradeLockedDataLoaded
Found issues related to loading groups for expanding location and
storage.
Bug: 155019930
Test: atest RuntimePermissionsUpgradeControllerTest
Change-Id: I6b95817052a1409f3cdd581897304c7fc13e4188
Merged-In: I6b95817052a1409f3cdd581897304c7fc13e4188
Diffstat (limited to 'tests')
-rw-r--r-- | tests/mocking/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeControllerTest.kt | 253 |
1 files changed, 251 insertions, 2 deletions
diff --git a/tests/mocking/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeControllerTest.kt b/tests/mocking/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeControllerTest.kt index f4c5d132c..e9af1521a 100644 --- a/tests/mocking/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeControllerTest.kt +++ b/tests/mocking/src/com/android/permissioncontroller/permission/service/RuntimePermissionsUpgradeControllerTest.kt @@ -16,19 +16,29 @@ package com.android.permissioncontroller.permission.service +import android.Manifest.permission.ACCESS_BACKGROUND_LOCATION import android.Manifest.permission.ACCESS_FINE_LOCATION +import android.Manifest.permission.ACCESS_MEDIA_LOCATION +import android.Manifest.permission.READ_CALL_LOG +import android.Manifest.permission.READ_EXTERNAL_STORAGE import android.Manifest.permission.SEND_SMS import android.app.ActivityManager import android.app.AppOpsManager +import android.app.job.JobScheduler import android.content.ComponentCallbacks2 import android.content.pm.ApplicationInfo import android.content.pm.PackageInfo import android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED import android.content.pm.PackageManager +import android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT +import android.content.pm.PackageManager.FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT import android.content.pm.PackageManager.FLAG_PERMISSION_WHITELIST_UPGRADE import android.content.pm.PackageManager.MATCH_FACTORY_ONLY +import android.location.LocationManager import android.os.Build.VERSION_CODES.R +import android.os.UserManager import android.permission.PermissionManager +import android.provider.Settings import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession @@ -42,6 +52,7 @@ import org.mockito.ArgumentMatchers.any import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.eq import org.mockito.Mock +import org.mockito.Mockito.anyString import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.timeout @@ -90,6 +101,12 @@ class RuntimePermissionsUpgradeControllerTest { lateinit var activityManager: ActivityManager @Mock lateinit var appOpsManager: AppOpsManager + @Mock + lateinit var locationManager: LocationManager + @Mock + lateinit var userManager: UserManager + @Mock + lateinit var jobScheduler: JobScheduler /** * Set up {@link #packageManager} as if the passed packages are installed. @@ -120,6 +137,14 @@ class RuntimePermissionsUpgradeControllerTest { } } + whenever(packageManager.getPackageInfo(anyString(), anyInt())).thenAnswer { + val packageName = it.arguments[0] as String + + packageManager.getInstalledPackagesAsUser(0, 0) + .find { it.packageName == packageName } + ?: throw PackageManager.NameNotFoundException() + } + whenever(packageManager.getPermissionFlags(any(), any(), any())).thenAnswer { val permissionName = it.arguments[0] as String val packageName = it.arguments[1] as String @@ -138,14 +163,21 @@ class RuntimePermissionsUpgradeControllerTest { initMocks(this) mockitoSession = mockitoSession().mockStatic(PermissionControllerApplication::class.java) - .strictness(LENIENT).startMocking() + .mockStatic(Settings.Secure::class.java).strictness(LENIENT).startMocking() whenever(PermissionControllerApplication.get()).thenReturn(application) whenever(application.getSystemService(PermissionManager::class.java)).thenReturn( permissionManager) - whenever(application.getSystemService(ActivityManager::class.java)).thenReturn(activityManager) + whenever(application.getSystemService(ActivityManager::class.java)).thenReturn( + activityManager) whenever(application.getSystemService(AppOpsManager::class.java)).thenReturn(appOpsManager) + whenever(application.getSystemService(LocationManager::class.java)).thenReturn( + locationManager) + whenever(application.getSystemService(UserManager::class.java)).thenReturn( + userManager) + whenever(application.getSystemService(JobScheduler::class.java)).thenReturn( + jobScheduler) whenever(application.packageManager).thenReturn(packageManager) @@ -155,6 +187,16 @@ class RuntimePermissionsUpgradeControllerTest { InstrumentationRegistry.getInstrumentation().getTargetContext().packageManager .getPermissionInfo(permissionName, 0) } + + whenever(packageManager.getPermissionGroupInfo(any(), anyInt())).thenAnswer { + val groupName = it.arguments[0] as String + + InstrumentationRegistry.getInstrumentation().getTargetContext().packageManager + .getPermissionGroupInfo(groupName, 0) + } + + whenever(packageManager.queryPermissionsByGroup(any(), anyInt())).thenReturn( + mutableListOf()) } /** @@ -186,6 +228,16 @@ class RuntimePermissionsUpgradeControllerTest { } } + private fun verifyGranted(packageName: String, permissionName: String) { + verify(packageManager, timeout(100)).grantRuntimePermission(eq(packageName), + eq(permissionName), any()) + } + + private fun verifyNotGranted(packageName: String, permissionName: String) { + verify(packageManager, never()).grantRuntimePermission(eq(packageName), + eq(permissionName), any()) + } + @Test fun restrictedPermissionsOfPreinstalledPackagesGetWhiteListed() { setInitialDatabaseVersion(LATEST_VERSION) @@ -230,6 +282,203 @@ class RuntimePermissionsUpgradeControllerTest { verifyNotWhitelisted(TEST_PKG_NAME, SEND_SMS) } + @Test + fun smsAndCallLogGetsWhitelistedWhenInitialVersionIs0() { + setInitialDatabaseVersion(0) + setPackages( + Package(TEST_PKG_NAME, + Permission(SEND_SMS), + Permission(READ_CALL_LOG) + ) + ) + + upgradeIfNeeded() + + verifyWhitelisted(TEST_PKG_NAME, SEND_SMS) + verifyWhitelisted(TEST_PKG_NAME, READ_CALL_LOG) + } + + @Test + fun smsAndCallLogGDoesNotGetWhitelistedWhenInitialVersionIs1() { + setInitialDatabaseVersion(1) + setPackages( + Package(TEST_PKG_NAME, + Permission(SEND_SMS), + Permission(READ_CALL_LOG) + ) + ) + + upgradeIfNeeded() + + verifyNotWhitelisted(TEST_PKG_NAME, SEND_SMS) + verifyNotWhitelisted(TEST_PKG_NAME, READ_CALL_LOG) + } + + @Test + fun backgroundLocationGetsWhitelistedWhenInitialVersionIs3() { + setInitialDatabaseVersion(3) + setPackages( + Package(TEST_PKG_NAME, + Permission(ACCESS_BACKGROUND_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyWhitelisted(TEST_PKG_NAME, ACCESS_BACKGROUND_LOCATION) + } + + @Test + fun backgroundLocationGetsWhitelistedWhenInitialVersionIs4() { + setInitialDatabaseVersion(4) + setPackages( + Package(TEST_PKG_NAME, + Permission(ACCESS_BACKGROUND_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotWhitelisted(TEST_PKG_NAME, ACCESS_BACKGROUND_LOCATION) + } + + @Test + fun storageGetsWhitelistedWhenInitialVersionIs5() { + setInitialDatabaseVersion(5) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE) + ) + ) + + upgradeIfNeeded() + + verifyWhitelisted(TEST_PKG_NAME, READ_EXTERNAL_STORAGE) + } + + @Test + fun storageGetsWhitelistedWhenInitialVersionIs6() { + setInitialDatabaseVersion(6) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE) + ) + ) + + upgradeIfNeeded() + + verifyNotWhitelisted(TEST_PKG_NAME, READ_EXTERNAL_STORAGE) + } + + @Test + fun locationGetsExpandedWhenUpgradingFromP() { + setInitialDatabaseVersion(-1) + setPackages( + Package(TEST_PKG_NAME, + Permission(ACCESS_FINE_LOCATION, isGranted = true), + Permission(ACCESS_BACKGROUND_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyGranted(TEST_PKG_NAME, ACCESS_BACKGROUND_LOCATION) + } + + @Test + fun locationDoesNotGetExpandedWhenNotUpgradingFromP() { + setInitialDatabaseVersion(0) + setPackages( + Package(TEST_PKG_NAME, + Permission(ACCESS_FINE_LOCATION, isGranted = true), + Permission(ACCESS_BACKGROUND_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, ACCESS_BACKGROUND_LOCATION) + } + + @Test + fun locationDoesNotGetExpandedWhenUpgradingFromPWhenForegroundPermissionIsDenied() { + setInitialDatabaseVersion(-1) + setPackages( + Package(TEST_PKG_NAME, + Permission(ACCESS_FINE_LOCATION), + Permission(ACCESS_BACKGROUND_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, ACCESS_BACKGROUND_LOCATION) + } + + @Test + fun storageGetsExpandedWhenVersionIs7() { + setInitialDatabaseVersion(7) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE, isGranted = true, + flags = FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT), + Permission(ACCESS_MEDIA_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotWhitelisted(TEST_PKG_NAME, SEND_SMS) + } + + @Test + fun storageDoesNotGetExpandedWhenVersionIs8() { + setInitialDatabaseVersion(8) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE, isGranted = true, + flags = FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT), + Permission(ACCESS_MEDIA_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, ACCESS_MEDIA_LOCATION) + } + + @Test + fun storageDoesNotGetExpandedWhenDenied() { + setInitialDatabaseVersion(7) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE, + flags = FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT), + Permission(ACCESS_MEDIA_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, ACCESS_MEDIA_LOCATION) + } + + @Test + fun storageDoesNotGetExpandedWhenNewUser() { + setInitialDatabaseVersion(0) + setPackages( + Package(TEST_PKG_NAME, + Permission(READ_EXTERNAL_STORAGE, isGranted = true, + flags = FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT), + Permission(ACCESS_MEDIA_LOCATION) + ) + ) + + upgradeIfNeeded() + + verifyNotGranted(TEST_PKG_NAME, ACCESS_MEDIA_LOCATION) + } + @After fun resetSystem() { // Send low memory notifications for all data repositories which will clear cached data |