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

Commit dcd029cd authored by JW Wang's avatar JW Wang
Browse files

Rewrite PackageWatchdogTest#testRegistration (3/n)

Following go/unit-test-practices, we split testRegistration into smaller
ones so each test focuses on one behavior at a time.

Note we will remove testRegistration in a later CL.

Bug: 140472424
Test: atest PackageWatchdogTest
Change-Id: I88e00a8fc43b953d575ee047979b7fe1d5fbd3ba
parent a5dc6d54
Loading
Loading
Loading
Loading
+100 −0
Original line number Diff line number Diff line
@@ -115,6 +115,106 @@ public class PackageWatchdogTest {
        dropShellPermissions();
    }

    @Test
    public void testRegistration_singleObserver() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer = new TestObserver(OBSERVER_NAME_1);

        watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // The failed packages should be the same as the registered ones to ensure registration is
        // done successfully
        assertEquals(1, observer.mHealthCheckFailedPackages.size());
        assertTrue(observer.mHealthCheckFailedPackages.contains(APP_A));
    }

    @Test
    public void testRegistration_multiObservers() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer1 = new TestObserver(OBSERVER_NAME_1);
        TestObserver observer2 = new TestObserver(OBSERVER_NAME_2);

        watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION);
        watchdog.startObservingHealth(observer2, Arrays.asList(APP_A, APP_B), SHORT_DURATION);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE),
                new VersionedPackage(APP_B, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // The failed packages should be the same as the registered ones to ensure registration is
        // done successfully
        assertEquals(1, observer1.mHealthCheckFailedPackages.size());
        assertEquals(2, observer2.mHealthCheckFailedPackages.size());
        assertTrue(observer1.mHealthCheckFailedPackages.contains(APP_A));
        assertTrue(observer2.mHealthCheckFailedPackages.contains(APP_A));
        assertTrue(observer2.mHealthCheckFailedPackages.contains(APP_B));
    }

    @Test
    public void testUnregistration_singleObserver() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer = new TestObserver(OBSERVER_NAME_1);

        watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION);
        watchdog.unregisterHealthObserver(observer);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // We should have no failed packages to ensure unregistration is done successfully
        assertEquals(0, observer.mHealthCheckFailedPackages.size());
    }

    @Test
    public void testUnregistration_multiObservers() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer1 = new TestObserver(OBSERVER_NAME_1);
        TestObserver observer2 = new TestObserver(OBSERVER_NAME_2);

        watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION);
        watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION);
        watchdog.unregisterHealthObserver(observer2);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // observer1 should receive failed packages as intended.
        assertEquals(1, observer1.mHealthCheckFailedPackages.size());
        // observer2 should have no failed packages to ensure unregistration is done successfully
        assertEquals(0, observer2.mHealthCheckFailedPackages.size());
    }

    @Test
    public void testExpiration_singleObserver() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer = new TestObserver(OBSERVER_NAME_1);

        watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION);
        moveTimeForwardAndDispatch(SHORT_DURATION);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // We should have no failed packages for the fatal failure is raised after expiration
        assertEquals(0, observer.mHealthCheckFailedPackages.size());
    }

    @Test
    public void testExpiration_multiObservers() {
        PackageWatchdog watchdog = createWatchdog();
        TestObserver observer1 = new TestObserver(OBSERVER_NAME_1);
        TestObserver observer2 = new TestObserver(OBSERVER_NAME_2);

        watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION);
        watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), LONG_DURATION);
        moveTimeForwardAndDispatch(SHORT_DURATION);
        raiseFatalFailure(watchdog, Arrays.asList(new VersionedPackage(APP_A, VERSION_CODE)));
        mTestLooper.dispatchAll();

        // We should have no failed packages for the fatal failure is raised after expiration
        assertEquals(0, observer1.mHealthCheckFailedPackages.size());
        // We should have failed packages since observer2 hasn't expired
        assertEquals(1, observer2.mHealthCheckFailedPackages.size());
    }

    /**
     * Test registration, unregistration, package expiry and duration reduction
     */