diff options
author | JW Wang <wangchun@google.com> | 2019-11-28 10:38:53 +0800 |
---|---|---|
committer | JW Wang <wangchun@google.com> | 2019-11-28 10:46:20 +0800 |
commit | 5f6719f2c92769dd51e225c237be29b2a464a1f1 (patch) | |
tree | 0583c4fe926d903658ef0617f8a8aa12903e0598 | |
parent | cb9074a83a8b759900260a594d402e1b18c66530 (diff) |
Better handle cases where version code can't be resolved (2/n)
Use factory method to create MonitoredPackage which will return null
when version code can't be resolved.
Bug: 141155222
Test: atest PackageWatchdogTest
Change-Id: I6c983872cbdfd02940d76f7307aa4a6a1062d438
-rw-r--r-- | services/core/java/com/android/server/PackageWatchdog.java | 42 | ||||
-rw-r--r-- | tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java | 8 |
2 files changed, 34 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/PackageWatchdog.java b/services/core/java/com/android/server/PackageWatchdog.java index 6b623453b923..969064ef670b 100644 --- a/services/core/java/com/android/server/PackageWatchdog.java +++ b/services/core/java/com/android/server/PackageWatchdog.java @@ -247,7 +247,14 @@ public class PackageWatchdog { List<MonitoredPackage> packages = new ArrayList<>(); for (int i = 0; i < packageNames.size(); i++) { // Health checks not available yet so health check state will start INACTIVE - packages.add(new MonitoredPackage(packageNames.get(i), durationMs, false)); + MonitoredPackage pkg = newMonitoredPackage(packageNames.get(i), durationMs, false); + if (pkg != null) { + packages.add(pkg); + } + } + + if (packages.isEmpty()) { + return; } // Sync before we add the new packages to the observers. This will #pruneObservers, @@ -654,7 +661,7 @@ public class PackageWatchdog { @Nullable private VersionedPackage getVersionedPackage(String packageName) { final PackageManager pm = mContext.getPackageManager(); - if (pm == null) { + if (pm == null || TextUtils.isEmpty(packageName)) { return null; } try { @@ -925,9 +932,10 @@ public class PackageWatchdog { ATTR_EXPLICIT_HEALTH_CHECK_DURATION)); boolean hasPassedHealthCheck = Boolean.parseBoolean( parser.getAttributeValue(null, ATTR_PASSED_HEALTH_CHECK)); - if (!TextUtils.isEmpty(packageName)) { - packages.add(watchdog.new MonitoredPackage(packageName, duration, - healthCheckDuration, hasPassedHealthCheck)); + MonitoredPackage pkg = watchdog.newMonitoredPackage(packageName, + duration, healthCheckDuration, hasPassedHealthCheck); + if (pkg != null) { + packages.add(pkg); } } catch (NumberFormatException e) { Slog.wtf(TAG, "Skipping package for observer " + observerName, e); @@ -963,6 +971,20 @@ public class PackageWatchdog { int FAILED = 3; } + MonitoredPackage newMonitoredPackage( + String name, long durationMs, boolean hasPassedHealthCheck) { + return newMonitoredPackage(name, durationMs, Long.MAX_VALUE, hasPassedHealthCheck); + } + + MonitoredPackage newMonitoredPackage(String name, long durationMs, long healthCheckDurationMs, + boolean hasPassedHealthCheck) { + VersionedPackage pkg = getVersionedPackage(name); + if (pkg == null) { + return null; + } + return new MonitoredPackage(pkg, durationMs, healthCheckDurationMs, hasPassedHealthCheck); + } + /** * Represents a package and its health check state along with the time * it should be monitored for. @@ -995,13 +1017,9 @@ public class PackageWatchdog { @GuardedBy("mLock") private long mHealthCheckDurationMs = Long.MAX_VALUE; - MonitoredPackage(String name, long durationMs, boolean hasPassedHealthCheck) { - this(name, durationMs, Long.MAX_VALUE, hasPassedHealthCheck); - } - - MonitoredPackage(String name, long durationMs, long healthCheckDurationMs, - boolean hasPassedHealthCheck) { - mPackage = getVersionedPackage(name); + private MonitoredPackage(VersionedPackage pkg, long durationMs, + long healthCheckDurationMs, boolean hasPassedHealthCheck) { + mPackage = pkg; mDurationMs = durationMs; mHealthCheckDurationMs = healthCheckDurationMs; mHasPassedHealthCheck = hasPassedHealthCheck; diff --git a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java index 06b58fda5b7d..e30878157a26 100644 --- a/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java +++ b/tests/PackageWatchdog/src/com/android/server/PackageWatchdogTest.java @@ -670,11 +670,11 @@ public class PackageWatchdogTest { public void testPackageHealthCheckStateTransitions() { TestController controller = new TestController(); PackageWatchdog wd = createWatchdog(controller, true /* withPackagesReady */); - MonitoredPackage m1 = wd.new MonitoredPackage(APP_A, LONG_DURATION, + MonitoredPackage m1 = wd.newMonitoredPackage(APP_A, LONG_DURATION, false /* hasPassedHealthCheck */); - MonitoredPackage m2 = wd.new MonitoredPackage(APP_B, LONG_DURATION, false); - MonitoredPackage m3 = wd.new MonitoredPackage(APP_C, LONG_DURATION, false); - MonitoredPackage m4 = wd.new MonitoredPackage(APP_D, LONG_DURATION, SHORT_DURATION, true); + MonitoredPackage m2 = wd.newMonitoredPackage(APP_B, LONG_DURATION, false); + MonitoredPackage m3 = wd.newMonitoredPackage(APP_C, LONG_DURATION, false); + MonitoredPackage m4 = wd.newMonitoredPackage(APP_D, LONG_DURATION, SHORT_DURATION, true); // Verify transition: inactive -> active -> passed // Verify initially inactive |