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

Commit 43622051 authored by Pavel Grafov's avatar Pavel Grafov
Browse files

Ensure no stale data is cached after policy upgrade

Bug: 198768109
Test: atest PolicyVersionUpgraderTest#testUpgradePerformedInDpmsCtor
Change-Id: I250dcc030e909e2c22620b5943abbdc7f44e81c8
parent f96aa9e8
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -3242,9 +3242,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    }
    private void performPolicyVersionUpgrade() {
        PolicyVersionUpgrader upgrader = new PolicyVersionUpgrader(
                new DpmsUpgradeDataProvider());
        PolicyVersionUpgrader upgrader = new PolicyVersionUpgrader(new DpmsUpgradeDataProvider());
        upgrader.upgradePolicy(DPMS_VERSION);
    }
+43 −1
Original line number Diff line number Diff line
@@ -16,6 +16,11 @@

package com.android.server.devicepolicy;

import static android.os.UserHandle.USER_SYSTEM;

import static com.android.server.devicepolicy.DevicePolicyManagerService.POLICIES_VERSION_XML;
import static com.android.server.devicepolicy.DpmTestUtils.writeInputStreamToFile;

import static com.google.common.truth.Truth.assertThat;

import android.app.admin.DeviceAdminInfo;
@@ -24,12 +29,15 @@ import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.os.Parcel;
import android.os.UserHandle;
import android.util.TypedXmlPullParser;
import android.util.Xml;

import androidx.test.InstrumentationRegistry;

import com.android.frameworks.servicestests.R;
import com.android.internal.util.JournaledFile;
import com.android.server.SystemService;

import com.google.common.io.Files;

@@ -51,7 +59,7 @@ import java.util.Map;
import java.util.function.Function;

@RunWith(JUnit4.class)
public class PolicyVersionUpgraderTest {
public class PolicyVersionUpgraderTest extends DpmTestBase {
    // NOTE: Only change this value if the corresponding CL also adds a test to test the upgrade
    // to the new version.
    private static final int LATEST_TESTED_VERSION = 2;
@@ -189,6 +197,40 @@ public class PolicyVersionUpgraderTest {
                PERMISSIONS_TAG)).isTrue();
    }

    @Test
    public void testNoStaleDataInCacheAfterUpgrade() throws Exception {
        setUpPackageManagerForAdmin(admin1, UserHandle.getUid(USER_SYSTEM, 123 /* admin app ID */));
        // Reusing COPE migration policy files there, only DO on user 0 is needed.
        writeInputStreamToFile(getRawStream(R.raw.comp_policies_primary),
                new File(getServices().systemUserDataDir, "device_policies.xml")
                        .getAbsoluteFile());
        writeInputStreamToFile(getRawStream(R.raw.comp_device_owner),
                new File(getServices().dataDir, "device_owner_2.xml")
                        .getAbsoluteFile());

        // Write policy version 0
        File versionFilePath =
                new File(getServices().systemUserDataDir, POLICIES_VERSION_XML).getAbsoluteFile();
        DpmTestUtils.writeToFile(versionFilePath, "0\n");

        DevicePolicyManagerServiceTestable dpms;
        final long ident = getContext().binder.clearCallingIdentity();
        try {
            dpms = new DevicePolicyManagerServiceTestable(getServices(), getContext());

            // Simulate access that would cause policy data to be cached in mUserData.
            dpms.isCommonCriteriaModeEnabled(null);

            dpms.systemReady(SystemService.PHASE_LOCK_SETTINGS_READY);
        } finally {
            getContext().binder.restoreCallingIdentity(ident);
        }

        // DO should be marked as able to grant sensors permission during upgrade and should be
        // reported as such via the API.
        assertThat(dpms.canAdminGrantSensorsPermissionsForUser(/* userId= */0)).isTrue();
    }

    @Test
    public void isLatestVersionTested() {
        assertThat(DevicePolicyManagerService.DPMS_VERSION).isEqualTo(LATEST_TESTED_VERSION);