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

Commit ae7c247a authored by TYM Tsai's avatar TYM Tsai
Browse files

Add test case for hidden APIs allowlist

Bug: 331671107
Flag: EXEMPT only test
Test: atest PackageManagerServiceServerTests
Change-Id: I2cbfb7ad16430f7e0a2f0b4800738f59c5ab656b
parent 8be27550
Loading
Loading
Loading
Loading
+49 −20
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.content.UriRelativeFilter.QUERY;
import static android.content.UriRelativeFilter.FRAGMENT;
import static android.content.UriRelativeFilter.FRAGMENT;
import static android.content.UriRelativeFilterGroup.ACTION_ALLOW;
import static android.content.UriRelativeFilterGroup.ACTION_ALLOW;
import static android.content.UriRelativeFilterGroup.ACTION_BLOCK;
import static android.content.UriRelativeFilterGroup.ACTION_BLOCK;
import static android.content.pm.ApplicationInfo.PRIVATE_FLAG_EXT_ALLOWLISTED_FOR_HIDDEN_APIS;
import static android.os.PatternMatcher.PATTERN_ADVANCED_GLOB;
import static android.os.PatternMatcher.PATTERN_ADVANCED_GLOB;
import static android.os.PatternMatcher.PATTERN_LITERAL;
import static android.os.PatternMatcher.PATTERN_LITERAL;
import static android.os.PatternMatcher.PATTERN_PREFIX;
import static android.os.PatternMatcher.PATTERN_PREFIX;
@@ -111,6 +112,8 @@ import com.android.server.pm.parsing.pkg.AndroidPackageUtils;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageUserStateInternal;
import com.android.server.pm.pkg.PackageUserStateInternal;


import com.google.android.collect.Sets;

import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
@@ -211,6 +214,30 @@ public class PackageParserTest {
        assertEquals("android", pkg.getPackageName());
        assertEquals("android", pkg.getPackageName());
    }
    }


    @Test
    public void testParse_withCache_hiddenApiAllowlist() throws Exception {
        CachePackageNameParser pp = new CachePackageNameParser(null);

        pp.setCacheDir(mTmpDir);
        // The first parse will write this package to the cache.
        pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, true /* useCaches */);

        // Now attempt to parse the package again, should return the
        // cached result.
        ParsedPackage pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */,
                true /* useCaches */);
        assertEquals("cache_android", pkg.getPackageName());

        // Create application info
        pkg.hideAsFinal();
        ApplicationInfo aInfo = PackageInfoUtils.generateApplicationInfo(pkg, 0,
                PackageUserStateInternal.DEFAULT, 0, mockPkgSetting(pkg));

        // verify ext flag for hidden APIs allowlist
        assertEquals(PRIVATE_FLAG_EXT_ALLOWLISTED_FOR_HIDDEN_APIS,
                aInfo.privateFlagsExt & PRIVATE_FLAG_EXT_ALLOWLISTED_FOR_HIDDEN_APIS);
    }

    @Test
    @Test
    public void test_serializePackage() throws Exception {
    public void test_serializePackage() throws Exception {
        try (PackageParser2 pp = PackageParserUtils.forParsingFileWithDefaults()) {
        try (PackageParser2 pp = PackageParserUtils.forParsingFileWithDefaults()) {
@@ -856,8 +883,7 @@ public class PackageParserTest {
     */
     */
    public static class CachePackageNameParser extends PackageParser2 {
    public static class CachePackageNameParser extends PackageParser2 {


        CachePackageNameParser(@Nullable File cacheDir) {
        private static final Callback CALLBACK = new Callback() {
            super(null, null, null, new Callback() {
            @Override
            @Override
            public boolean isChangeEnabled(long changeId, @NonNull ApplicationInfo appInfo) {
            public boolean isChangeEnabled(long changeId, @NonNull ApplicationInfo appInfo) {
                return true;
                return true;
@@ -870,21 +896,24 @@ public class PackageParserTest {


            @Override
            @Override
            public Set<String> getHiddenApiWhitelistedApps() {
            public Set<String> getHiddenApiWhitelistedApps() {
                    return new ArraySet<>();
                return Sets.newArraySet("cache_android");
            }
            }


            @Override
            @Override
            public Set<String> getInstallConstraintsAllowlist() {
            public Set<String> getInstallConstraintsAllowlist() {
                return new ArraySet<>();
                return new ArraySet<>();
            }
            }
            });
        };

        CachePackageNameParser(@Nullable File cacheDir) {
            super(null, null, null, CALLBACK);
            if (cacheDir != null) {
            if (cacheDir != null) {
                setCacheDir(cacheDir);
                setCacheDir(cacheDir);
            }
            }
        }
        }


        void setCacheDir(@NonNull File cacheDir) {
        void setCacheDir(@NonNull File cacheDir) {
            this.mCacher = new PackageCacher(cacheDir) {
            this.mCacher = new PackageCacher(cacheDir, CALLBACK) {
                @Override
                @Override
                public ParsedPackage fromCacheEntry(byte[] cacheEntry) {
                public ParsedPackage fromCacheEntry(byte[] cacheEntry) {
                    ParsedPackage parsed = super.fromCacheEntry(cacheEntry);
                    ParsedPackage parsed = super.fromCacheEntry(cacheEntry);