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

Commit 2b303a8e authored by Harshit Mahajan's avatar Harshit Mahajan Committed by Android (Google) Code Review
Browse files

Merge "Add tests to verify that Package Health resets" into main

parents de198a89 bf576d77
Loading
Loading
Loading
Loading
+56 −2
Original line number Diff line number Diff line
@@ -740,6 +740,54 @@ public class PackageWatchdogTest {
        assertThat(observer.mMitigatedPackages).containsExactly(APP_C);
    }

    /**
     * Test explicit health check state resets after a package reaches terminal state.
     */
    @Test
    public void testExplicitHealthCheckStateResets() {
        TestController controller = new TestController();
        PackageWatchdog watchdog = createWatchdog(controller, true /* withPackagesReady */);
        TestObserver observer = new TestObserver(OBSERVER_NAME_1,
                PackageHealthObserverImpact.USER_IMPACT_LEVEL_30);
        observer.setPersistent(true); // don't let the observer get pruned

        // Start observing with explicit health checks for APP_A and APP_B
        controller.setSupportedPackages(Arrays.asList(APP_A, APP_B));
        watchdog.registerHealthObserver(mTestExecutor, observer);
        watchdog.startExplicitHealthCheck(Arrays.asList(APP_A, APP_B), LONG_DURATION, observer);

        // Run handler so requests are dispatched to the controller
        mTestLooper.dispatchAll();

        // Verify we requested health checks for APP_A and APP_B
        List<String> requestedPackages = controller.getRequestedPackages();
        assertThat(requestedPackages).containsExactly(APP_A, APP_B);

        // Mark APP_A as PASSED
        controller.setPackagePassed(APP_A);

        // Then expire APP_B
        moveTimeForwardAndDispatch(SHORT_DURATION);

        // Verify that only APP_B has FAILED
        assertThat(observer.mMitigatedPackages).containsExactly(APP_B);

        // Run handler so requests/cancellations are dispatched to the controller
        mTestLooper.dispatchAll();
        // Verify no active health check requests
        assertThat(controller.getRequestedPackages()).isEmpty();

        // Start explicit health check again
        watchdog.startExplicitHealthCheck(Arrays.asList(APP_A, APP_B), LONG_DURATION, observer);

        // Run handler so requests/cancellations are dispatched to the controller
        mTestLooper.dispatchAll();

        // Verify that health checks were requested again for APP_A and APP_B
        requestedPackages = controller.getRequestedPackages();
        assertThat(requestedPackages).containsExactly(APP_A, APP_B);
    }

    /**
     * Tests failure when health check duration is different from package observation duration
     * Failure is also notified only once.
@@ -836,20 +884,26 @@ public class PackageWatchdogTest {
        // Verify now failed
        assertThat(m2.handleElapsedTimeLocked(SHORT_DURATION)).isEqualTo(HealthCheckState.FAILED);

        // Verify transition: inactive -> failed
        // Verify transition: inactive -> failed -> inactive
        // Verify initially inactive
        assertThat(m3.getHealthCheckStateLocked()).isEqualTo(HealthCheckState.INACTIVE);
        // Verify now failed because package expired
        assertThat(m3.handleElapsedTimeLocked(LONG_DURATION)).isEqualTo(HealthCheckState.FAILED);
        // Verify remains failed even when asked to pass
        assertThat(m3.tryPassHealthCheckLocked()).isEqualTo(HealthCheckState.FAILED);
        // Verify that state resets to INACTIVE
        m3.resetHealthState(LONG_DURATION);
        assertThat(m3.getHealthCheckStateLocked()).isEqualTo(HealthCheckState.INACTIVE);

        // Verify transition: passed
        // Verify transition: passed -> inactive
        assertThat(m4.getHealthCheckStateLocked()).isEqualTo(HealthCheckState.PASSED);
        // Verify remains passed even if health check fails
        assertThat(m4.handleElapsedTimeLocked(SHORT_DURATION)).isEqualTo(HealthCheckState.PASSED);
        // Verify remains passed even if package expires
        assertThat(m4.handleElapsedTimeLocked(LONG_DURATION)).isEqualTo(HealthCheckState.PASSED);
        // Verify that state resets to INACTIVE
        m4.resetHealthState(LONG_DURATION);
        assertThat(m4.getHealthCheckStateLocked()).isEqualTo(HealthCheckState.INACTIVE);
    }

    @Test