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

Commit bfbf9608 authored by Mohammad Samiul Islam's avatar Mohammad Samiul Islam
Browse files

Delete orphaned staging directories for staged session on reboot

Bug: 173132101
Test: StagedInstallInternalTest#testOrphanedStagingDirectoryGetsCleanedUpOnReboot
Change-Id: If840f35245c2d049401d0d2f6539fe8c4625151e
parent b6dde00d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -322,6 +322,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        final ArraySet<File> unclaimedStages = newArraySet(
                stagingDir.listFiles(sStageFilter));

        // We also need to clean up orphaned staging directory for staged sessions
        final File stagedSessionStagingDir = Environment.getDataStagingDirectory(volumeUuid);
        unclaimedStages.addAll(newArraySet(stagedSessionStagingDir.listFiles()));

        // Ignore stages claimed by active sessions
        for (int i = 0; i < mSessions.size(); i++) {
            final PackageInstallerSession session = mSessions.valueAt(i);
+13 −0
Original line number Diff line number Diff line
@@ -268,6 +268,19 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test {
        assertThat(after).isEqualTo(before);
    }

    @Test
    public void testOrphanedStagingDirectoryGetsCleanedUpOnReboot() throws Exception {
        //create random directories in /data/app-staging folder
        getDevice().enableAdbRoot();
        getDevice().executeShellCommand("mkdir /data/app-staging/session_123");
        getDevice().executeShellCommand("mkdir /data/app-staging/random_name");
        getDevice().disableAdbRoot();

        assertThat(getStagingDirectories()).isNotEmpty();
        getDevice().reboot();
        assertThat(getStagingDirectories()).isEmpty();
    }

    private List<String> getStagingDirectories() throws DeviceNotAvailableException {
        String baseDir = "/data/app-staging";
        try {