Loading services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java +49 −20 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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; Loading @@ -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); Loading Loading
services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageParserTest.java +49 −20 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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()) { Loading Loading @@ -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; Loading @@ -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); Loading