diff options
| -rw-r--r-- | services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java index 5da202f109d4..f5c0de034483 100644 --- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java +++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java @@ -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; @@ -212,6 +215,30 @@ public class PackageParserTest { } @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()) { AndroidPackage pkg = pp.parsePackage(FRAMEWORK, 0 /* parseFlags */, @@ -856,35 +883,37 @@ public class PackageParserTest { */ public static class CachePackageNameParser extends PackageParser2 { - CachePackageNameParser(@Nullable File cacheDir) { - super(null, null, null, new Callback() { - @Override - public boolean isChangeEnabled(long changeId, @NonNull ApplicationInfo appInfo) { - return true; - } + private static final Callback CALLBACK = new Callback() { + @Override + public boolean isChangeEnabled(long changeId, @NonNull ApplicationInfo appInfo) { + return true; + } - @Override - public boolean hasFeature(String feature) { - return false; - } + @Override + public boolean hasFeature(String feature) { + return false; + } - @Override - public Set<String> getHiddenApiWhitelistedApps() { - return new ArraySet<>(); - } + @Override + public Set<String> getHiddenApiWhitelistedApps() { + return Sets.newArraySet("cache_android"); + } - @Override - public Set<String> getInstallConstraintsAllowlist() { - return new ArraySet<>(); - } - }); + @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); |