Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2827240 authored by Hai Zhang's avatar Hai Zhang
Browse files

Allow mocking RuntimePermissionsPersistence in PM Settings.

So that tests won't crash for unable to read/write runtime
permissions.

Fixes: 162273062
Test: atest PackageManagerSettingsTests
Change-Id: Iaeb3bab6309b921090bac6254dd4ac5ee69e62b3
parent d32d73e4
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -331,6 +331,7 @@ import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
import com.android.permission.persistence.RuntimePermissionsPersistence;
import com.android.server.AttributeCache;
import com.android.server.DeviceIdleInternal;
import com.android.server.EventLogTags;
@@ -2588,7 +2589,7 @@ public class PackageManagerService extends IPackageManager.Stub
                (i, pm) ->
                        new Settings(Environment.getDataDirectory(),
                                i.getPermissionManagerServiceInternal().getPermissionSettings(),
                                lock),
                                RuntimePermissionsPersistence.createInstance(), lock),
                new Injector.LocalServicesProducer<>(ActivityTaskManagerInternal.class),
                new Injector.LocalServicesProducer<>(ActivityManagerInternal.class),
                new Injector.LocalServicesProducer<>(DeviceIdleInternal.class),
+7 −5
Original line number Diff line number Diff line
@@ -435,10 +435,11 @@ public final class Settings {
    }

    Settings(File dataDir, PermissionSettings permission,
            Object lock) {
            RuntimePermissionsPersistence runtimePermissionsPersistence, Object lock) {
        mLock = lock;
        mPermissions = permission;
        mRuntimePermissionsPersistence = new RuntimePermissionPersistence(mLock);
        mRuntimePermissionsPersistence = new RuntimePermissionPersistence(
                runtimePermissionsPersistence, mLock);

        mSystemDir = new File(dataDir, "system");
        mSystemDir.mkdirs();
@@ -5381,8 +5382,7 @@ public final class Settings {

        private String mExtendedFingerprint;

        private final RuntimePermissionsPersistence mPersistence =
                RuntimePermissionsPersistence.createInstance();
        private final RuntimePermissionsPersistence mPersistence;

        private final Handler mHandler = new MyHandler();

@@ -5407,7 +5407,9 @@ public final class Settings {
        // The mapping keys are user ids.
        private final SparseBooleanArray mPermissionUpgradeNeeded = new SparseBooleanArray();

        public RuntimePermissionPersistence(Object persistenceLock) {
        public RuntimePermissionPersistence(RuntimePermissionsPersistence persistence,
                Object persistenceLock) {
            mPersistence = persistence;
            mPersistenceLock = persistenceLock;
        }

+25 −14
Original line number Diff line number Diff line
@@ -57,6 +57,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.permission.persistence.RuntimePermissionsPersistence;
import com.android.server.LocalServices;
import com.android.server.pm.permission.PermissionSettings;

@@ -86,6 +87,8 @@ public class PackageManagerSettingsTests {

    @Mock
    PermissionSettings mPermissionSettings;
    @Mock
    RuntimePermissionsPersistence mRuntimePermissionsPersistence;

    @Before
    public void initializeMocks() {
@@ -106,7 +109,8 @@ public class PackageManagerSettingsTests {
        writeOldFiles();
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));
        verifyKeySetMetaData(settings);
    }
@@ -119,7 +123,8 @@ public class PackageManagerSettingsTests {
        writeOldFiles();
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));

        // write out, read back in and verify the same
@@ -134,7 +139,8 @@ public class PackageManagerSettingsTests {
        writeOldFiles();
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));
        assertThat(settings.getPackageLPr(PACKAGE_NAME_3), is(notNullValue()));
        assertThat(settings.getPackageLPr(PACKAGE_NAME_1), is(notNullValue()));
@@ -155,12 +161,14 @@ public class PackageManagerSettingsTests {
        writeOldFiles();
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));
        settings.writeLPr();

        // Create Settings again to make it read from the new files
        settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));

        PackageSetting ps = settings.getPackageLPr(PACKAGE_NAME_2);
@@ -183,7 +191,7 @@ public class PackageManagerSettingsTests {
        writePackageRestrictions_noSuspendingPackageXml(0);
        final Object lock = new Object();
        final Context context = InstrumentationRegistry.getTargetContext();
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, lock);
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, lock);
        settingsUnderTest.mPackages.put(PACKAGE_NAME_1, createPackageSetting(PACKAGE_NAME_1));
        settingsUnderTest.mPackages.put(PACKAGE_NAME_2, createPackageSetting(PACKAGE_NAME_2));
        settingsUnderTest.readPackageRestrictionsLPr(0);
@@ -206,7 +214,7 @@ public class PackageManagerSettingsTests {
        writePackageRestrictions_noSuspendParamsMapXml(0);
        final Object lock = new Object();
        final Context context = InstrumentationRegistry.getTargetContext();
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, lock);
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null, lock);
        settingsUnderTest.mPackages.put(PACKAGE_NAME_1, createPackageSetting(PACKAGE_NAME_1));
        settingsUnderTest.readPackageRestrictionsLPr(0);

@@ -233,7 +241,8 @@ public class PackageManagerSettingsTests {
    @Test
    public void testReadWritePackageRestrictions_suspendInfo() {
        final Context context = InstrumentationRegistry.getTargetContext();
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, new Object());
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null,
                new Object());
        final PackageSetting ps1 = createPackageSetting(PACKAGE_NAME_1);
        final PackageSetting ps2 = createPackageSetting(PACKAGE_NAME_2);
        final PackageSetting ps3 = createPackageSetting(PACKAGE_NAME_3);
@@ -330,7 +339,8 @@ public class PackageManagerSettingsTests {
    @Test
    public void testReadWritePackageRestrictions_distractionFlags() {
        final Context context = InstrumentationRegistry.getTargetContext();
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, new Object());
        final Settings settingsUnderTest = new Settings(context.getFilesDir(), null, null,
                new Object());
        final PackageSetting ps1 = createPackageSetting(PACKAGE_NAME_1);
        final PackageSetting ps2 = createPackageSetting(PACKAGE_NAME_2);
        final PackageSetting ps3 = createPackageSetting(PACKAGE_NAME_3);
@@ -381,7 +391,8 @@ public class PackageManagerSettingsTests {
        writeOldFiles();
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings, lock);
        Settings settings = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        assertThat(settings.readLPw(createFakeUsers()), is(true));

        // Enable/Disable a package
@@ -558,8 +569,8 @@ public class PackageManagerSettingsTests {
    public void testUpdatePackageSetting03() {
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        final Settings testSettings01 =
                new Settings(context.getFilesDir(), mPermissionSettings, lock);
        final Settings testSettings01 = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        final SharedUserSetting testUserSetting01 = createSharedUserSetting(
                testSettings01, "TestUser", 10064, 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/);
        final PackageSetting testPkgSetting01 =
@@ -673,8 +684,8 @@ public class PackageManagerSettingsTests {
    public void testCreateNewSetting03() {
        final Context context = InstrumentationRegistry.getContext();
        final Object lock = new Object();
        final Settings testSettings01 =
                new Settings(context.getFilesDir(), mPermissionSettings, lock);
        final Settings testSettings01 = new Settings(context.getFilesDir(), mPermissionSettings,
                mRuntimePermissionsPersistence, lock);
        final SharedUserSetting testUserSetting01 = createSharedUserSetting(
                testSettings01, "TestUser", 10064, 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/);
        final PackageSetting testPkgSetting01 = Settings.createNewSetting(