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

Commit bf576d77 authored by Harshit Mahajan's avatar Harshit Mahajan
Browse files

Add tests to verify that Package Health resets

Bug: 418245953
Test: atest PackageWatchdogTest
Flag: EXEMPT bug fix
Change-Id: I6d13b506181de893d39cfa251b83f8bc223b0ce1
parent a4fc9ffb
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