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

Commit ecd7f715 authored by Mahaver Chopra's avatar Mahaver Chopra Committed by Android (Google) Code Review
Browse files

Merge "DPM Test: DA and PO cannot call DPM.reboot()"

parents 88efba96 f8373b5a
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -207,6 +207,11 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi
            context.powerManager.goToSleep(time, reason, flags);
        }

        @Override
        void powerManagerReboot(String reason) {
            context.powerManager.reboot(reason);
        }

        @Override
        boolean systemPropertiesGetBoolean(String key, boolean def) {
            return context.systemProperties.getBoolean(key, def);
+36 −0
Original line number Diff line number Diff line
@@ -1349,4 +1349,40 @@ public class DevicePolicyManagerTest extends DpmTestBase {
        when(mContext.wifiManager.getConnectionInfo()).thenReturn(wi);
        assertEquals("11:22:33:44:55:66", dpm.getWifiMacAddress());
    }

    public void testRebootCanOnlyBeCalledByDeviceOwner() throws Exception {
        mContext.callerPermissions.add(permission.MANAGE_DEVICE_ADMINS);
        mContext.callerPermissions.add(permission.MANAGE_PROFILE_AND_DEVICE_OWNERS);

        // In this test, change the caller user to "system".
        mContext.binder.callingUid = DpmMockContext.CALLER_SYSTEM_USER_UID;

        // Make sure admin1 is installed on system user.
        setUpPackageManagerForAdmin(admin1, DpmMockContext.CALLER_SYSTEM_USER_UID);

        // Set admin1 as DA.
        dpm.setActiveAdmin(admin1, false);
        assertTrue(dpm.isAdminActive(admin1));
        try {
            dpm.reboot(admin1);
            fail("DA calls DPM.reboot(), did not throw expected SecurityException");
        } catch (SecurityException expected) {
            MoreAsserts.assertContainsRegex("does not own the device", expected.getMessage());
        }

        // Set admin1 as PO.
        assertTrue(dpm.setProfileOwner(admin1, null, UserHandle.USER_SYSTEM));
        try {
            dpm.reboot(admin1);
            fail("PO calls DPM.reboot(), did not throw expected SecurityException");
        } catch (SecurityException expected) {
            MoreAsserts.assertContainsRegex("does not own the device", expected.getMessage());
        }

        // Remove PO and add DO.
        dpm.clearProfileOwner(admin1);
        assertTrue(dpm.setDeviceOwner(admin1, null, UserHandle.USER_SYSTEM));

        dpm.reboot(admin1);
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -134,6 +134,9 @@ public class DpmMockContext extends MockContext {

        public void goToSleep(long time, int reason, int flags) {
        }

        public void reboot(String reason) {
        }
    }

    public static class SystemPropertiesForMock {