Merge "Fix a no-op uninstall being treated as a failure"
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user