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

Commit 2732b610 authored by Pavel Grafov's avatar Pavel Grafov Committed by Android (Google) Code Review
Browse files

Merge "Ensure no stale data is cached after policy upgrade"

parents fe8e6b1b 43622051
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);