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

Commit 5401dfbf authored by Dario Freni's avatar Dario Freni Committed by Automerger Merge Worker
Browse files

Merge "Add ability to stage multiple apexs." am: 7bd2a5e4 am: 20d93a70

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1490738

Change-Id: I8fbd4352b3575a9f95ed3e560bd615ba3f981552
parents 6ad890e9 20d93a70
Loading
Loading
Loading
Loading
+38 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.util.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import com.android.tradefed.device.DeviceNotAvailableException;
@@ -114,6 +115,24 @@ public class SystemPreparer extends ExternalResource {
        return this;
    }

    /** Stages multiple APEXs within the host test jar onto the device. */
    public SystemPreparer stageMultiplePackages(String[] resourcePaths, String[] packageNames)
            throws DeviceNotAvailableException, IOException {
        assertEquals(resourcePaths.length, packageNames.length);
        final ITestDevice device = mDeviceProvider.getDevice();
        final String[] adbCommandLine = new String[resourcePaths.length + 2];
        adbCommandLine[0] = "install-multi-package";
        adbCommandLine[1] = "--staged";
        for (int i = 0; i < resourcePaths.length; i++) {
            final File tmpFile = copyResourceToTemp(resourcePaths[i]);
            adbCommandLine[i + 2] = tmpFile.getAbsolutePath();
            mInstalledPackages.add(packageNames[i]);
        }
        final String output = device.executeAdbCommand(adbCommandLine);
        assertTrue(output.contains("Success. Reboot device to apply staged session"));
        return this;
    }

    /** Sets the enable state of an overlay package. */
    public SystemPreparer setOverlayEnabled(String packageName, boolean enabled)
            throws DeviceNotAvailableException {
@@ -182,9 +201,27 @@ public class SystemPreparer extends ExternalResource {
        return this;
    }

    private static @Nullable String getFileExtension(@Nullable String path) {
        if (path == null) {
            return null;
        }
        final int lastDot = path.lastIndexOf('.');
        if (lastDot >= 0) {
            return path.substring(lastDot + 1);
        } else {
            return null;
        }
    }

    /** Copies a file within the host test jar to a temporary file on the host machine. */
    private File copyResourceToTemp(String resourcePath) throws IOException {
        final File tempFile = mHostTempFolder.newFile();
        final String ext = getFileExtension(resourcePath);
        final File tempFile;
        if (ext != null) {
            tempFile = File.createTempFile("junit", "." + ext, mHostTempFolder.getRoot());
        } else {
            tempFile = mHostTempFolder.newFile();
        }
        final ClassLoader classLoader = getClass().getClassLoader();
        try (InputStream assetIs = classLoader.getResourceAsStream(resourcePath);
             FileOutputStream assetOs = new FileOutputStream(tempFile)) {