diff options
| author | 2017-09-15 17:56:16 +0000 | |
|---|---|---|
| committer | 2017-09-15 17:56:16 +0000 | |
| commit | b6ccff73dd53cf15d365d543796cfe8522b80e1c (patch) | |
| tree | d368f7375a6c50373b219e622ad0597d5f678010 | |
| parent | 6d9d42f6aa61229a3415ff55b75e322226d5a7dc (diff) | |
| parent | 249b2e35a9f134f49b5baf6b0f650f34c1a70820 (diff) | |
Merge "Fix a no-op uninstall being treated as a failure" into oc-mr1-dev
| -rw-r--r-- | services/core/java/com/android/server/timezone/RulesManagerService.java | 22 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java | 42 |
2 files changed, 50 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/timezone/RulesManagerService.java b/services/core/java/com/android/server/timezone/RulesManagerService.java index 50f27ed67a36..3ad4419c7273 100644 --- a/services/core/java/com/android/server/timezone/RulesManagerService.java +++ b/services/core/java/com/android/server/timezone/RulesManagerService.java @@ -343,16 +343,20 @@ public final class RulesManagerService extends IRulesManager.Stub { @Override public void run() { EventLogTags.writeTimezoneUninstallStarted(toStringOrNull(mCheckToken)); - boolean success = false; + boolean packageTrackerStatus = false; try { - success = mInstaller.stageUninstall(); - // Right now we just have success (0) / failure (1). All clients should be checking - // against SUCCESS. More granular failures may be added in future. - int resultCode = success ? Callback.SUCCESS - : Callback.ERROR_UNKNOWN_FAILURE; + int uninstallResult = mInstaller.stageUninstall(); + packageTrackerStatus = (uninstallResult == TimeZoneDistroInstaller.UNINSTALL_SUCCESS + || uninstallResult == TimeZoneDistroInstaller.UNINSTALL_NOTHING_INSTALLED); + + // Right now we just have Callback.SUCCESS / Callback.ERROR_UNKNOWN_FAILURE for + // uninstall. All clients should be checking against SUCCESS. More granular failures + // may be added in future. + int callbackResultCode = + packageTrackerStatus ? Callback.SUCCESS : Callback.ERROR_UNKNOWN_FAILURE; EventLogTags.writeTimezoneUninstallComplete( - toStringOrNull(mCheckToken), resultCode); - sendFinishedStatus(mCallback, resultCode); + toStringOrNull(mCheckToken), callbackResultCode); + sendFinishedStatus(mCallback, callbackResultCode); } catch (Exception e) { EventLogTags.writeTimezoneUninstallComplete( toStringOrNull(mCheckToken), Callback.ERROR_UNKNOWN_FAILURE); @@ -360,7 +364,7 @@ public final class RulesManagerService extends IRulesManager.Stub { sendFinishedStatus(mCallback, Callback.ERROR_UNKNOWN_FAILURE); } finally { // Notify the package tracker that the operation is now complete. - mPackageTracker.recordCheckResult(mCheckToken, success); + mPackageTracker.recordCheckResult(mCheckToken, packageTrackerStatus); mOperationInProgress.set(false); } diff --git a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java index 2887e3bb520f..d09d0c8d9e5c 100644 --- a/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timezone/RulesManagerServiceTest.java @@ -585,7 +585,39 @@ public class RulesManagerServiceTest { verifyNoPackageTrackerCallsMade(); // Set up the installer. - configureStageUninstallExpectation(true /* success */); + configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_SUCCESS); + + // Simulate the async execution. + mFakeExecutor.simulateAsyncExecutionOfLastCommand(); + + // Verify the expected calls were made to other components. + verifyStageUninstallCalled(); + verifyPackageTrackerCalled(token, true /* success */); + + // Check the callback was called. + callback.assertResultReceived(Callback.SUCCESS); + } + + @Test + public void requestUninstall_asyncNothingInstalled() throws Exception { + configureCallerHasPermission(); + + CheckToken token = createArbitraryToken(); + byte[] tokenBytes = token.toByteArray(); + + TestCallback callback = new TestCallback(); + + // Request the uninstall. + assertEquals(RulesManager.SUCCESS, + mRulesManagerService.requestUninstall(tokenBytes, callback)); + + // Assert nothing has happened yet. + callback.assertNoResultReceived(); + verifyNoInstallerCallsMade(); + verifyNoPackageTrackerCallsMade(); + + // Set up the installer. + configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_NOTHING_INSTALLED); // Simulate the async execution. mFakeExecutor.simulateAsyncExecutionOfLastCommand(); @@ -613,7 +645,7 @@ public class RulesManagerServiceTest { callback.assertNoResultReceived(); // Set up the installer. - configureStageUninstallExpectation(true /* success */); + configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_SUCCESS); // Simulate the async execution. mFakeExecutor.simulateAsyncExecutionOfLastCommand(); @@ -644,7 +676,7 @@ public class RulesManagerServiceTest { callback.assertNoResultReceived(); // Set up the installer. - configureStageUninstallExpectation(false /* success */); + configureStageUninstallExpectation(TimeZoneDistroInstaller.UNINSTALL_FAIL); // Simulate the async execution. mFakeExecutor.simulateAsyncExecutionOfLastCommand(); @@ -849,8 +881,8 @@ public class RulesManagerServiceTest { .thenReturn(resultCode); } - private void configureStageUninstallExpectation(boolean success) throws Exception { - doReturn(success).when(mMockTimeZoneDistroInstaller).stageUninstall(); + private void configureStageUninstallExpectation(int resultCode) throws Exception { + doReturn(resultCode).when(mMockTimeZoneDistroInstaller).stageUninstall(); } private void verifyStageInstallCalled() throws Exception { |