Merge "Preserve failure history when calling startObservingHealth" into rvc-dev am: da41b0a238
Change-Id: I4ec4b7a77a7e72a2b8503eb970bbcc172e4d14ce
This commit is contained in:
@@ -1062,7 +1062,12 @@ public class PackageWatchdog {
|
|||||||
public void updatePackagesLocked(List<MonitoredPackage> packages) {
|
public void updatePackagesLocked(List<MonitoredPackage> packages) {
|
||||||
for (int pIndex = 0; pIndex < packages.size(); pIndex++) {
|
for (int pIndex = 0; pIndex < packages.size(); pIndex++) {
|
||||||
MonitoredPackage p = packages.get(pIndex);
|
MonitoredPackage p = packages.get(pIndex);
|
||||||
this.packages.put(p.getName(), p);
|
MonitoredPackage existingPackage = this.packages.get(p.getName());
|
||||||
|
if (existingPackage != null) {
|
||||||
|
existingPackage.updateHealthCheckDuration(p.mDurationMs);
|
||||||
|
} else {
|
||||||
|
this.packages.put(p.getName(), p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1331,6 +1336,12 @@ public class PackageWatchdog {
|
|||||||
return updateHealthCheckStateLocked();
|
return updateHealthCheckStateLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Explicitly update the monitoring duration of the package. */
|
||||||
|
@GuardedBy("mLock")
|
||||||
|
public void updateHealthCheckDuration(long newDurationMs) {
|
||||||
|
mDurationMs = newDurationMs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marks the health check as passed and transitions to {@link HealthCheckState.PASSED}
|
* Marks the health check as passed and transitions to {@link HealthCheckState.PASSED}
|
||||||
* if not yet {@link HealthCheckState.FAILED}.
|
* if not yet {@link HealthCheckState.FAILED}.
|
||||||
|
|||||||
@@ -1123,6 +1123,28 @@ public class PackageWatchdogTest {
|
|||||||
assertThat(testController.getSyncRequests()).isEqualTo(expectedSyncRequests);
|
assertThat(testController.getSyncRequests()).isEqualTo(expectedSyncRequests);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensure that the failure history of a package is preserved when making duplicate calls to
|
||||||
|
* observe the package.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFailureHistoryIsPreserved() {
|
||||||
|
PackageWatchdog watchdog = createWatchdog();
|
||||||
|
TestObserver observer = new TestObserver(OBSERVER_NAME_1);
|
||||||
|
watchdog.startObservingHealth(observer, List.of(APP_A), SHORT_DURATION);
|
||||||
|
for (int i = 0; i < PackageWatchdog.DEFAULT_TRIGGER_FAILURE_COUNT - 1; i++) {
|
||||||
|
watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)),
|
||||||
|
PackageWatchdog.FAILURE_REASON_UNKNOWN);
|
||||||
|
}
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
assertThat(observer.mMitigatedPackages).isEmpty();
|
||||||
|
watchdog.startObservingHealth(observer, List.of(APP_A), LONG_DURATION);
|
||||||
|
watchdog.onPackageFailure(List.of(new VersionedPackage(APP_A, VERSION_CODE)),
|
||||||
|
PackageWatchdog.FAILURE_REASON_UNKNOWN);
|
||||||
|
mTestLooper.dispatchAll();
|
||||||
|
assertThat(observer.mMitigatedPackages).isEqualTo(List.of(APP_A));
|
||||||
|
}
|
||||||
|
|
||||||
private void adoptShellPermissions(String... permissions) {
|
private void adoptShellPermissions(String... permissions) {
|
||||||
InstrumentationRegistry
|
InstrumentationRegistry
|
||||||
.getInstrumentation()
|
.getInstrumentation()
|
||||||
|
|||||||
Reference in New Issue
Block a user