diff options
author | Zimuzo Ezeozue <zezeozue@google.com> | 2019-03-06 10:25:22 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-03-06 10:25:22 +0000 |
commit | 101ac58981754e5e1b35ea5cf88f41fd14768891 (patch) | |
tree | 8aa9504062e4f0378848bc40198003ed13421bcf /tests/PackageWatchdog | |
parent | c2143015a2ca4ff9126905379470409d1dca6987 (diff) | |
parent | 9284e74585971c690951b398a3c8c2d3322df5af (diff) |
Merge "Extend PackageWatchdog with explicit health checks"
Diffstat (limited to 'tests/PackageWatchdog')
-rw-r--r-- | tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java | 85 |
1 files changed, 67 insertions, 18 deletions
diff --git a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java index 598f60ad7c8d..44bd75beb143 100644 --- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java @@ -31,6 +31,7 @@ import com.android.server.PackageWatchdog.PackageHealthObserver; import com.android.server.PackageWatchdog.PackageHealthObserverImpact; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import java.io.File; @@ -77,11 +78,12 @@ public class PackageWatchdogTest { TestObserver observer3 = new TestObserver(OBSERVER_NAME_3); // Start observing for observer1 which will be unregistered - watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION); + watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION, false); // Start observing for observer2 which will expire - watchdog.startObservingHealth(observer2, Arrays.asList(APP_A, APP_B), SHORT_DURATION); + watchdog.startObservingHealth(observer2, Arrays.asList(APP_A, APP_B), SHORT_DURATION, + false); // Start observing for observer3 which will have expiry duration reduced - watchdog.startObservingHealth(observer3, Arrays.asList(APP_A), LONG_DURATION); + watchdog.startObservingHealth(observer3, Arrays.asList(APP_A), LONG_DURATION, false); // Verify packages observed at start // 1 @@ -144,8 +146,9 @@ public class PackageWatchdogTest { TestObserver observer1 = new TestObserver(OBSERVER_NAME_1); TestObserver observer2 = new TestObserver(OBSERVER_NAME_2); - watchdog1.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION); - watchdog1.startObservingHealth(observer2, Arrays.asList(APP_A, APP_B), SHORT_DURATION); + watchdog1.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION, false); + watchdog1.startObservingHealth(observer2, Arrays.asList(APP_A, APP_B), SHORT_DURATION, + false); // Verify 2 observers are registered and saved internally // 1 @@ -191,8 +194,8 @@ public class PackageWatchdogTest { TestObserver observer1 = new TestObserver(OBSERVER_NAME_1); TestObserver observer2 = new TestObserver(OBSERVER_NAME_2); - watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION); - watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION); + watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION, false); + watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION, false); // Then fail APP_A below the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT - 1; i++) { @@ -218,8 +221,8 @@ public class PackageWatchdogTest { TestObserver observer2 = new TestObserver(OBSERVER_NAME_2); - watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION); - watchdog.startObservingHealth(observer1, Arrays.asList(APP_B), SHORT_DURATION); + watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION, false); + watchdog.startObservingHealth(observer1, Arrays.asList(APP_B), SHORT_DURATION, false); // Then fail APP_C (not observed) above the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT; i++) { @@ -253,7 +256,7 @@ public class PackageWatchdogTest { } }; - watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION); + watchdog.startObservingHealth(observer, Arrays.asList(APP_A), SHORT_DURATION, false); // Then fail APP_A (different version) above the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT; i++) { @@ -286,13 +289,13 @@ public class PackageWatchdogTest { // Start observing for all impact observers watchdog.startObservingHealth(observerNone, Arrays.asList(APP_A, APP_B, APP_C, APP_D), - SHORT_DURATION); + SHORT_DURATION, false); watchdog.startObservingHealth(observerHigh, Arrays.asList(APP_A, APP_B, APP_C), - SHORT_DURATION); + SHORT_DURATION, false); watchdog.startObservingHealth(observerMid, Arrays.asList(APP_A, APP_B), - SHORT_DURATION); + SHORT_DURATION, false); watchdog.startObservingHealth(observerLow, Arrays.asList(APP_A), - SHORT_DURATION); + SHORT_DURATION, false); // Then fail all apps above the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT; i++) { @@ -344,8 +347,8 @@ public class PackageWatchdogTest { PackageHealthObserverImpact.USER_IMPACT_MEDIUM); // Start observing for observerFirst and observerSecond with failure handling - watchdog.startObservingHealth(observerFirst, Arrays.asList(APP_A), LONG_DURATION); - watchdog.startObservingHealth(observerSecond, Arrays.asList(APP_A), LONG_DURATION); + watchdog.startObservingHealth(observerFirst, Arrays.asList(APP_A), LONG_DURATION, false); + watchdog.startObservingHealth(observerSecond, Arrays.asList(APP_A), LONG_DURATION, false); // Then fail APP_A above the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT; i++) { @@ -422,8 +425,8 @@ public class PackageWatchdogTest { PackageHealthObserverImpact.USER_IMPACT_HIGH); // Start observing for observer1 and observer2 with failure handling - watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION); - watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION); + watchdog.startObservingHealth(observer2, Arrays.asList(APP_A), SHORT_DURATION, false); + watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION, false); // Then fail APP_A above the threshold for (int i = 0; i < TRIGGER_FAILURE_COUNT; i++) { @@ -439,6 +442,52 @@ public class PackageWatchdogTest { assertEquals(0, observer2.mFailedPackages.size()); } + // TODO: Unignore test after package failure is triggered on observer expiry with failing + // explicit health check + /** + * Test explicit health check status determines package failure or success on expiry + */ + @Ignore + @Test + public void testPackageFailureExplicitHealthCheck() throws Exception { + PackageWatchdog watchdog = createWatchdog(); + TestObserver observer1 = new TestObserver(OBSERVER_NAME_1, + PackageHealthObserverImpact.USER_IMPACT_HIGH); + TestObserver observer2 = new TestObserver(OBSERVER_NAME_2, + PackageHealthObserverImpact.USER_IMPACT_HIGH); + TestObserver observer3 = new TestObserver(OBSERVER_NAME_3, + PackageHealthObserverImpact.USER_IMPACT_HIGH); + + + // Start observing with explicit health checks for APP_A and APP_B respectively + // with observer1 and observer2 + watchdog.startObservingHealth(observer1, Arrays.asList(APP_A), SHORT_DURATION, true); + watchdog.startObservingHealth(observer2, Arrays.asList(APP_B), SHORT_DURATION, true); + // Explicit health check passed for APP_A (observer1 is aware) + watchdog.onExplicitHealthCheckPassed(APP_A); + // Start observing APP_A with explicit health checks for observer3. + // Observer3 didn't exist when we got the explicit health check above, so + // it starts out with a non-passing explicit health check and has to wait for a pass + // otherwise it would be notified of APP_A failure on expiry + watchdog.startObservingHealth(observer3, Arrays.asList(APP_A), SHORT_DURATION, true); + + // Then expire observers + Thread.sleep(SHORT_DURATION); + // Run handler so package failures are dispatched to observers + mTestLooper.dispatchAll(); + + // Verify observer1 is not notified + assertEquals(0, observer1.mFailedPackages.size()); + + // Verify observer2 is notifed because health checks for APP_B never passed + assertEquals(1, observer2.mFailedPackages.size()); + assertEquals(APP_B, observer2.mFailedPackages.get(0)); + + // Verify observer3 is notifed because health checks for APP_A did not pass before expiry + assertEquals(1, observer3.mFailedPackages.size()); + assertEquals(APP_A, observer3.mFailedPackages.get(0)); + } + private PackageWatchdog createWatchdog() { return new PackageWatchdog(InstrumentationRegistry.getContext(), mTestLooper.getLooper()); |