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

Commit 055f6960 authored by JW Wang's avatar JW Wang
Browse files

Don't fall back to copy during rollback tests (5/n)

1. 'persist.rollback.is_test' is set to 1 during rollback tests
2. don't fall back to copy if hardlink fails during rollback tests
3. This gives us insight into how enable-rollback-by-hardlink works
   and how it fails in the field

Bug: 168562373
Test: atest MultiUserRollbackTest \
            NetworkStagedRollbackTest \
            RollbackTest \
            StagedRollbackTest
Change-Id: If1590fdf96e25105936a930b3ec7225ecec4bf0d
parent d38c0368
Loading
Loading
Loading
Loading
+33 −10
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.PackageRollbackInfo.RestoreInfo;
import android.content.rollback.RollbackInfo;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.system.ErrnoException;
import android.system.Os;
@@ -227,6 +228,15 @@ class RollbackStore {
                packageSessionIds, extensionVersions);
    }

    private static boolean isLinkPossible(File oldFile, File newFile) {
        try {
            return Os.stat(oldFile.getAbsolutePath()).st_dev
                    == Os.stat(newFile.getAbsolutePath()).st_dev;
        } catch (ErrnoException ignore) {
            return false;
        }
    }

    /**
     * Creates a backup copy of an apk or apex for a package.
     * For packages containing splits, this method should be called for each
@@ -239,6 +249,8 @@ class RollbackStore {
        targetDir.mkdirs();
        File targetFile = new File(targetDir, sourceFile.getName());

        boolean fallbackToCopy = !isLinkPossible(sourceFile, targetFile);
        if (!fallbackToCopy) {
            try {
                // Create a hard link to avoid copy
                // TODO(b/168562373)
@@ -248,7 +260,18 @@ class RollbackStore {
                // longer the case when compressed apex rolls out. We have to handle this case in
                // order not to fall back to copy.
                Os.link(sourceFile.getAbsolutePath(), targetFile.getAbsolutePath());
        } catch (ErrnoException ignore) {
            } catch (ErrnoException e) {
                boolean isRollbackTest =
                        SystemProperties.getBoolean("persist.rollback.is_test", false);
                if (isRollbackTest) {
                    throw new IOException(e);
                } else {
                    fallbackToCopy = true;
                }
            }
        }

        if (fallbackToCopy) {
            // Fall back to copy if hardlink can't be created
            Files.copy(sourceFile.toPath(), targetFile.toPath());
        }
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@
        <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="run-command" value="setprop persist.rollback.is_test 1" />
        <option name="teardown-command" value="setprop persist.rollback.is_test 0" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="com.android.tests.rollback.host.MultiUserRollbackTest" />
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
        <option name="run-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es package &quot;com.google.android.gms.platformconfigurator&quot; --es user '\\*' --esa flags &quot;ModuleConfig__versioned_immediate_commit_packages&quot; --esa types &quot;bytes&quot; --esa values &quot;Cm5vdGFwYWNrYWdlOgA=&quot; com.google.android.gms" />
        <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package &quot;com.google.android.gms.platformconfigurator&quot; --es user '\*' --esa flag &quot;ModuleConfig__immediate_commit_packages&quot; com.google.android.gms" />
        <option name="teardown-command" value="am broadcast -a 'com.google.android.gms.phenotype.FLAG_OVERRIDE' --es action delete --es package &quot;com.google.android.gms.platformconfigurator&quot; --es user '\*' --esa flag &quot;ModuleConfig__versioned_immediate_commit_packages&quot; com.google.android.gms" />
        <option name="run-command" value="setprop persist.rollback.is_test 1" />
        <option name="teardown-command" value="setprop persist.rollback.is_test 0" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="com.android.tests.rollback.host.NetworkStagedRollbackTest" />
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@
        <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="run-command" value="setprop persist.rollback.is_test 1" />
        <option name="teardown-command" value="setprop persist.rollback.is_test 0" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="com.android.tests.rollback" />
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
        <option name="run-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.A" />
        <option name="teardown-command" value="pm uninstall com.android.cts.install.lib.testapp.B" />
        <option name="run-command" value="setprop persist.rollback.is_test 1" />
        <option name="teardown-command" value="setprop persist.rollback.is_test 0" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="class" value="com.android.tests.rollback.host.StagedRollbackTest" />