diff options
author | JW Wang <wangchun@google.com> | 2019-09-05 13:42:32 +0800 |
---|---|---|
committer | JW Wang <wangchun@google.com> | 2019-09-06 19:04:49 +0800 |
commit | dcd029cda3cb9d5eeed478cd4402edee498419df (patch) | |
tree | 97f4831aa9c33e26b9c1547b3a38b0df24e33f77 | |
parent | a5dc6d54b6459c5a03f470061973453e39f639f1 (diff) |
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
-rw-r--r-- | tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java index 947d51694ed0..c661065b9949 100644 --- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java @@ -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 */ |