summaryrefslogtreecommitdiff
path: root/tests/PackageWatchdog
diff options
context:
space:
mode:
authorJW Wang <wangchun@google.com>2019-09-05 13:42:32 +0800
committerJW Wang <wangchun@google.com>2019-09-06 19:04:49 +0800
commitdcd029cda3cb9d5eeed478cd4402edee498419df (patch)
tree97f4831aa9c33e26b9c1547b3a38b0df24e33f77 /tests/PackageWatchdog
parenta5dc6d54b6459c5a03f470061973453e39f639f1 (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
Diffstat (limited to 'tests/PackageWatchdog')
-rw-r--r--tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java100
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
*/