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

Commit bf86938b authored by Kweku Adams's avatar Kweku Adams
Browse files

Test deep transitions when an alarm is imminent.

This adds a test for when an alarm will fire soon. In that case, the
system should stay out of deep idle.

Bug: 116512267
Test: atest com.android.server.DeviceIdleControllerTest
Change-Id: I51f10104422579ad64766c03366f0e952e3ff1ac
parent fa66c22c
Loading
Loading
Loading
Loading
+48 −1
Original line number Diff line number Diff line
@@ -359,6 +359,54 @@ public class DeviceIdleControllerTest {
        verifyStateConditions(STATE_ACTIVE);
    }

    @Test
    public void testStepIdleStateLocked_ValidStates_WithWakeFromIdleAlarmSoon() {
        enterDeepState(STATE_ACTIVE);
        // Return that there's an alarm coming soon.
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_ACTIVE);

        // Everything besides ACTIVE should end up as INACTIVE since the screen would be off.

        enterDeepState(STATE_INACTIVE);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);

        enterDeepState(STATE_IDLE_PENDING);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);

        enterDeepState(STATE_SENSING);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);

        enterDeepState(STATE_LOCATING);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);

        enterDeepState(STATE_IDLE);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);

        enterDeepState(STATE_IDLE_MAINTENANCE);
        doReturn(SystemClock.elapsedRealtime() + mConstants.MIN_TIME_TO_ALARM / 2).when(
                mAlarmManager).getNextWakeFromIdleTime();
        mDeviceIdleController.stepIdleStateLocked("testing");
        verifyStateConditions(STATE_INACTIVE);
    }

    @Test
    public void testStepIdleStateLocked_ValidStates_NoLocationManager() {
        mDeviceIdleController.setLocationManagerForTest(null);
@@ -429,7 +477,6 @@ public class DeviceIdleControllerTest {
    public void testStepIdleStateLocked_ValidStates_WithLocationManager_WithProviders() {
        doReturn(mock(LocationProvider.class)).when(mLocationManager).getProvider(anyString());
        // Make sure the controller doesn't think there's a wake-from-idle alarm coming soon.
        // TODO: add tests for when there's a wake-from-idle alarm coming soon.
        doReturn(Long.MAX_VALUE).when(mAlarmManager).getNextWakeFromIdleTime();
        // Set state to INACTIVE.
        mDeviceIdleController.becomeActiveLocked("testing", 0);