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

Commit 6e2e4b73 authored by Jeff Sharkey's avatar Jeff Sharkey Committed by android-build-merger
Browse files

Merge "Resurrect dusty PackageManagerTests." into lmp-mr1-dev

automerge: 9a2db6bf

* commit '9a2db6bf':
  Resurrect dusty PackageManagerTests.
parents 1aeab291 9a2db6bf
Loading
Loading
Loading
Loading
+53 −44
Original line number Diff line number Diff line
@@ -16,19 +16,20 @@

package android.content.pm;

import static android.system.OsConstants.*;

import com.android.frameworks.coretests.R;
import com.android.internal.content.PackageHelper;
import static android.system.OsConstants.S_IFDIR;
import static android.system.OsConstants.S_IFMT;
import static android.system.OsConstants.S_IRGRP;
import static android.system.OsConstants.S_IROTH;
import static android.system.OsConstants.S_IRWXU;
import static android.system.OsConstants.S_ISDIR;
import static android.system.OsConstants.S_IXGRP;
import static android.system.OsConstants.S_IXOTH;

import android.app.PackageInstallObserver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.KeySet;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.PackageParser.PackageParserException;
import android.content.res.Resources;
@@ -57,16 +58,17 @@ import android.system.StructStat;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.DisplayMetrics;
import android.util.Log;

import com.android.frameworks.coretests.R;
import com.android.internal.content.PackageHelper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

@@ -79,9 +81,7 @@ public class PackageManagerTests extends AndroidTestCase {

    public final long WAIT_TIME_INCR = 5 * 1000;

    private static final String APP_LIB_DIR_PREFIX = "/data/app-lib/";

    private static final String SECURE_CONTAINERS_PREFIX = "/mnt/asec/";
    private static final String SECURE_CONTAINERS_PREFIX = "/mnt/asec";

    private static final int APP_INSTALL_AUTO = PackageHelper.APP_INSTALL_AUTO;

@@ -128,7 +128,11 @@ public class PackageManagerTests extends AndroidTestCase {

        private boolean doneFlag = false;

        public void packageInstalled(String packageName, Bundle extras, int returnCode) {
        @Override
        public void onPackageInstalled(String basePackageName, int returnCode, String msg,
                Bundle extras) {
            Log.d(TAG, "onPackageInstalled: code=" + returnCode + ", msg=" + msg + ", extras="
                    + extras);
            synchronized (this) {
                this.returnCode = returnCode;
                doneFlag = true;
@@ -410,10 +414,12 @@ public class PackageManagerTests extends AndroidTestCase {
            String appInstallPath = new File(dataDir, "app").getPath();
            String drmInstallPath = new File(dataDir, "app-private").getPath();
            File srcDir = new File(info.sourceDir);
            String srcPath = srcDir.getParent();
            String srcPath = srcDir.getParentFile().getParent();
            File publicSrcDir = new File(info.publicSourceDir);
            String publicSrcPath = publicSrcDir.getParent();
            String publicSrcPath = publicSrcDir.getParentFile().getParent();
            long pkgLen = new File(info.sourceDir).length();
            String expectedLibPath = new File(new File(info.sourceDir).getParentFile(), "lib")
                    .getPath();

            int rLoc = getInstallLoc(flags, expInstallLocation, pkgLen);
            if (rLoc == INSTALL_LOC_INT) {
@@ -436,12 +442,11 @@ public class PackageManagerTests extends AndroidTestCase {
                    }
                } else {
                    assertFalse((info.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0);
                    assertEquals(srcPath, appInstallPath);
                    assertEquals(publicSrcPath, appInstallPath);
                    assertEquals(appInstallPath, srcPath);
                    assertEquals(appInstallPath, publicSrcPath);
                    assertStartsWith("Native library should point to shared lib directory",
                            new File(APP_LIB_DIR_PREFIX, info.packageName).getPath(),
                            info.nativeLibraryDir);
                    assertDirOwnerGroupPerms(
                            expectedLibPath, info.nativeLibraryDir);
                    assertDirOwnerGroupPermsIfExists(
                            "Native library directory should be owned by system:system and 0755",
                            Process.SYSTEM_UID, Process.SYSTEM_UID,
                            S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH,
@@ -451,14 +456,14 @@ public class PackageManagerTests extends AndroidTestCase {

                // Make sure the native library dir is not a symlink
                final File nativeLibDir = new File(info.nativeLibraryDir);
                assertTrue("Native library dir should exist at " + info.nativeLibraryDir,
                        nativeLibDir.exists());
                if (nativeLibDir.exists()) {
                    try {
                        assertEquals("Native library dir should not be a symlink",
                                info.nativeLibraryDir, nativeLibDir.getCanonicalPath());
                    } catch (IOException e) {
                        fail("Can't read " + nativeLibDir.getPath());
                    }
                }
            } else if (rLoc == INSTALL_LOC_SD) {
                if ((flags & PackageManager.INSTALL_FORWARD_LOCK) != 0) {
                    assertTrue("The application should be installed forward locked",
@@ -500,9 +505,13 @@ public class PackageManagerTests extends AndroidTestCase {
        }
    }

    private void assertDirOwnerGroupPerms(String reason, int uid, int gid, int perms, String path) {
        final StructStat stat;
    private void assertDirOwnerGroupPermsIfExists(String reason, int uid, int gid, int perms,
            String path) {
        if (!new File(path).exists()) {
            return;
        }

        final StructStat stat;
        try {
            stat = Os.lstat(path);
        } catch (ErrnoException e) {
@@ -3007,7 +3016,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchNoCerts1() throws Exception {
        replaceCerts(APP1_CERT1_CERT2, APP1_CERT3, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3017,7 +3026,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchNoCerts2() throws Exception {
        replaceCerts(APP1_CERT1_CERT2, APP1_CERT3_CERT4, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3027,7 +3036,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchSomeCerts1() throws Exception {
        replaceCerts(APP1_CERT1_CERT2, APP1_CERT1, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3037,7 +3046,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchSomeCerts2() throws Exception {
        replaceCerts(APP1_CERT1_CERT2, APP1_CERT2, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3047,7 +3056,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchMoreCerts() throws Exception {
        replaceCerts(APP1_CERT1, APP1_CERT1_CERT2, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3058,7 +3067,7 @@ public class PackageManagerTests extends AndroidTestCase {
    @LargeTest
    public void testReplaceMatchMoreCertsReplaceSomeCerts() throws Exception {
        InstallParams ip = replaceCerts(APP1_CERT1, APP1_CERT1_CERT2, false, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
        try {
            int rFlags = PackageManager.INSTALL_REPLACE_EXISTING;
            installFromRawResource("install.apk", APP1_CERT1, rFlags, false,
@@ -3098,7 +3107,7 @@ public class PackageManagerTests extends AndroidTestCase {
     */
    public void testUpgradeKSWithWrongKey() throws Exception {
        replaceCerts(R.raw.keyset_sa_ua, R.raw.keyset_sb_ua, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3107,7 +3116,7 @@ public class PackageManagerTests extends AndroidTestCase {
     */
    public void testUpgradeKSWithWrongSigningKey() throws Exception {
        replaceCerts(R.raw.keyset_sa_ub, R.raw.keyset_sa_ub, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3139,7 +3148,7 @@ public class PackageManagerTests extends AndroidTestCase {
     */
    public void testMultipleUpgradeKSWithSigningKey() throws Exception {
        replaceCerts(R.raw.keyset_sau_ub, R.raw.keyset_sa_ua, true, true,
                PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES);
                PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE);
    }

    /*
@@ -3732,7 +3741,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1_CERT2;
        int rapk1 = SHARED1_CERT1;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3744,7 +3753,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1_CERT2;
        int rapk2 = SHARED2_CERT1;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3756,7 +3765,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1;
        int rapk1 = SHARED1_CERT2;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3768,7 +3777,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1;
        int rapk2 = SHARED2_CERT2;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3780,7 +3789,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1;
        int rapk1 = SHARED1_CERT1_CERT2;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk1, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);
@@ -3792,7 +3801,7 @@ public class PackageManagerTests extends AndroidTestCase {
        int apk2 = SHARED2_CERT1;
        int rapk2 = SHARED2_CERT1_CERT2;
        boolean fail = true;
        int retCode = PackageManager.INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES;
        int retCode = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
        checkSharedSignatures(apk1, apk2, false, false, -1, PackageManager.SIGNATURE_MATCH);
        installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true,
                fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED);