summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGavin Corkery <gavincorkery@google.com>2020-03-09 11:29:45 +0000
committerGavin Corkery <gavincorkery@google.com>2020-03-17 22:41:09 +0000
commit449b5853ba3b8e15140771b51372672a40bf68f9 (patch)
tree4c5f4ed11b328cde78ca31c35d941b2d63029d8b /tests
parent6e4ef9b5eb5e15d4f5548fb614aa102590a95c69 (diff)
Sync requests only when there are changes to report
Instead of periodically syncing requests with the same information, only call into the ExplicitHealthCheckController when the set of packages with pending health checks has changed, or a new observer has been registered. Add tests to verify that duplicate calls are not made. Test: atest PackageWatchdogTest#testSyncHealthCheckRequests Test: atest NetworkStagedRollbackTest Bug: 150114865 Bug: 146767850 Change-Id: I2926e9c7689e0ac9c4a142263ffd50a4747d016f
Diffstat (limited to 'tests')
-rw-r--r--tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
index dfaac2cde91d..2957192ecf0f 100644
--- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
+++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java
@@ -1077,6 +1077,52 @@ public class PackageWatchdogTest {
assertThat(observer1.mMitigatedPackages).isEmpty();
}
+ /**
+ * Test to verify that Package Watchdog syncs health check requests with the controller
+ * correctly, and that the requests are only synced when the set of observed packages
+ * changes.
+ */
+ @Test
+ public void testSyncHealthCheckRequests() {
+ TestController testController = spy(TestController.class);
+ testController.setSupportedPackages(List.of(APP_A, APP_B, APP_C));
+ PackageWatchdog watchdog = createWatchdog(testController, true);
+
+ TestObserver testObserver1 = new TestObserver(OBSERVER_NAME_1);
+ watchdog.registerHealthObserver(testObserver1);
+ watchdog.startObservingHealth(testObserver1, List.of(APP_A), LONG_DURATION);
+ mTestLooper.dispatchAll();
+
+ TestObserver testObserver2 = new TestObserver(OBSERVER_NAME_2);
+ watchdog.registerHealthObserver(testObserver2);
+ watchdog.startObservingHealth(testObserver2, List.of(APP_B), LONG_DURATION);
+ mTestLooper.dispatchAll();
+
+ TestObserver testObserver3 = new TestObserver(OBSERVER_NAME_3);
+ watchdog.registerHealthObserver(testObserver3);
+ watchdog.startObservingHealth(testObserver3, List.of(APP_C), LONG_DURATION);
+ mTestLooper.dispatchAll();
+
+ watchdog.unregisterHealthObserver(testObserver1);
+ mTestLooper.dispatchAll();
+
+ watchdog.unregisterHealthObserver(testObserver2);
+ mTestLooper.dispatchAll();
+
+ watchdog.unregisterHealthObserver(testObserver3);
+ mTestLooper.dispatchAll();
+
+ List<Set> expectedSyncRequests = List.of(
+ Set.of(APP_A),
+ Set.of(APP_A, APP_B),
+ Set.of(APP_A, APP_B, APP_C),
+ Set.of(APP_B, APP_C),
+ Set.of(APP_C),
+ Set.of()
+ );
+ assertThat(testController.getSyncRequests()).isEqualTo(expectedSyncRequests);
+ }
+
private void adoptShellPermissions(String... permissions) {
InstrumentationRegistry
.getInstrumentation()
@@ -1233,6 +1279,7 @@ public class PackageWatchdogTest {
private Consumer<String> mPassedConsumer;
private Consumer<List<PackageConfig>> mSupportedConsumer;
private Runnable mNotifySyncRunnable;
+ private List<Set> mSyncRequests = new ArrayList<>();
@Override
public void setEnabled(boolean enabled) {
@@ -1252,6 +1299,7 @@ public class PackageWatchdogTest {
@Override
public void syncRequests(Set<String> packages) {
+ mSyncRequests.add(packages);
mRequestedPackages.clear();
if (mIsEnabled) {
packages.retainAll(mSupportedPackages);
@@ -1282,6 +1330,10 @@ public class PackageWatchdogTest {
return Collections.emptyList();
}
}
+
+ public List<Set> getSyncRequests() {
+ return mSyncRequests;
+ }
}
private static class TestClock implements PackageWatchdog.SystemClock {