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

Commit e46861ea authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add test case for hidden APIs allowlist" into main

parents c39a2a49 ae7c247a
Loading
Loading
Loading
Loading
+49 −20
Original line number 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.UriRelativeFilterGroup.ACTION_ALLOW;
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_LITERAL;
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.PackageUserStateInternal;

import com.google.android.collect.Sets;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -211,6 +214,30 @@ public class PackageParserTest {
        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
    public void test_serializePackage() throws Exception {
        try (PackageParser2 pp = PackageParserUtils.forParsingFileWithDefaults()) {
@@ -856,8 +883,7 @@ public class PackageParserTest {
     */
    public static class CachePackageNameParser extends PackageParser2 {

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

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

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

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

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