Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad3e1331 authored by Neil Fuller's avatar Neil Fuller
Browse files

Improve dumpsys for installed distros

The RuleManagerService would previously refuse to return
the current distro install status if there was a staging
operation in progress. Since a staging operation only affects
what is staged, not what is actually installed, this
restriction can be relaxed. This should make tests that
were previously getting "Unknown" state more reliable.

Test: PTS: run pts -m PtsTimeZoneTestCases
Test: atest FrameworksServicesTests
Change-Id: I06449bc8dad6d96adf7e9edceee69cfaf24facb0
parent c5ec8934
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -126,9 +126,6 @@ public final class RulesState implements Parcelable {
                mStagedOperationType == STAGED_OPERATION_INSTALL /* requireNotNull */,
                "stagedDistroRulesVersion", stagedDistroRulesVersion);

        if (operationInProgress && distroStatus != DISTRO_STATUS_UNKNOWN) {
            throw new IllegalArgumentException("distroInstalled != DISTRO_STATUS_UNKNOWN");
        }
        this.mDistroStatus = validateDistroStatus(distroStatus);
        this.mInstalledDistroRulesVersion = validateConditionalNull(
                mDistroStatus == DISTRO_STATUS_INSTALLED/* requireNotNull */,
+20 −21
Original line number Diff line number Diff line
@@ -143,6 +143,26 @@ public final class RulesManagerService extends IRulesManager.Stub {
                return null;
            }

            // Determine the installed distro state. This should be possible regardless of whether
            // there's an operation in progress.
            DistroVersion installedDistroVersion;
            int distroStatus = DISTRO_STATUS_UNKNOWN;
            DistroRulesVersion installedDistroRulesVersion = null;
            try {
                installedDistroVersion = mInstaller.getInstalledDistroVersion();
                if (installedDistroVersion == null) {
                    distroStatus = DISTRO_STATUS_NONE;
                    installedDistroRulesVersion = null;
                } else {
                    distroStatus = DISTRO_STATUS_INSTALLED;
                    installedDistroRulesVersion = new DistroRulesVersion(
                            installedDistroVersion.rulesVersion,
                            installedDistroVersion.revision);
                }
            } catch (DistroException | IOException e) {
                Slog.w(TAG, "Failed to read installed distro.", e);
            }

            boolean operationInProgress = this.mOperationInProgress.get();

            // Determine the staged operation status, if possible.
@@ -168,27 +188,6 @@ public final class RulesManagerService extends IRulesManager.Stub {
                    Slog.w(TAG, "Failed to read staged distro.", e);
                }
            }

            // Determine the installed distro state, if possible.
            DistroVersion installedDistroVersion;
            int distroStatus = DISTRO_STATUS_UNKNOWN;
            DistroRulesVersion installedDistroRulesVersion = null;
            if (!operationInProgress) {
                try {
                    installedDistroVersion = mInstaller.getInstalledDistroVersion();
                    if (installedDistroVersion == null) {
                        distroStatus = DISTRO_STATUS_NONE;
                        installedDistroRulesVersion = null;
                    } else {
                        distroStatus = DISTRO_STATUS_INSTALLED;
                        installedDistroRulesVersion = new DistroRulesVersion(
                                installedDistroVersion.rulesVersion,
                                installedDistroVersion.revision);
                    }
                } catch (DistroException | IOException e) {
                    Slog.w(TAG, "Failed to read installed distro.", e);
                }
            }
            return new RulesState(systemRulesVersion, DISTRO_FORMAT_VERSION_SUPPORTED,
                    operationInProgress, stagedOperationStatus, stagedDistroRulesVersion,
                    distroStatus, installedDistroRulesVersion);
+3 −1
Original line number Diff line number Diff line
@@ -289,11 +289,13 @@ public class RulesManagerServiceTest {

        // Request the rules state while the async operation is "happening".
        RulesState actualRulesState = mRulesManagerService.getRulesState();
        DistroRulesVersion expectedInstalledDistroRulesVersion =
                new DistroRulesVersion(installedRulesVersion, revision);
        RulesState expectedRuleState = new RulesState(
                systemRulesVersion, RulesManagerService.DISTRO_FORMAT_VERSION_SUPPORTED,
                true /* operationInProgress */,
                RulesState.STAGED_OPERATION_UNKNOWN, null /* stagedDistroRulesVersion */,
                RulesState.DISTRO_STATUS_UNKNOWN, null /* installedDistroRulesVersion */);
                RulesState.DISTRO_STATUS_INSTALLED, expectedInstalledDistroRulesVersion);
        assertEquals(expectedRuleState, actualRulesState);
    }