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

Commit 4eeaa636 authored by Mark Punzalan's avatar Mark Punzalan
Browse files

Allow testing of AconfigFlags with new storage

The tests were failing because the values passed in addFlagValuesForTesting() were not being used when use_new_aconfig_storage is enabled.

Bug: 395998113
Bug: 352348353
Change-Id: I852344871b7f0da9bb26da16b70a6a6a7bbf9e7e
Flag: android.content.res.use_new_aconfig_storage
Test: atest PackageParserTest
parent 4fcb5ab5
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -226,6 +226,21 @@ public class AconfigFlags {
    }

    private Boolean getFlagValueFromNewStorage(String flagPackageAndName) {
        // We still need to check mFlagValues in case addFlagValuesForTesting() was called for
        // testing purposes.
        if (!mFlagValues.isEmpty() && mFlagValues.containsKey(flagPackageAndName)) {
            Boolean value = mFlagValues.get(flagPackageAndName);
            if (DEBUG) {
                Slog.v(
                        LOG_TAG,
                        "Aconfig flag value (FOR TESTING) for "
                                + flagPackageAndName
                                + " = "
                                + value);
            }
            return value;
        }

        int index = flagPackageAndName.lastIndexOf('.');
        if (index < 0) {
            Slog.e(LOG_TAG, "Unable to parse package name from " + flagPackageAndName);
+42 −1
Original line number Diff line number Diff line
@@ -65,10 +65,13 @@ import android.content.pm.SigningDetails;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.ArraySet;

import androidx.annotation.Nullable;
@@ -150,6 +153,9 @@ public class PackageParserTest {
    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private File mTmpDir;
    private static final File FRAMEWORK = new File("/system/framework/framework-res.apk");
    private static final String TEST_APP1_APK = "PackageParserTestApp1.apk";
@@ -846,7 +852,42 @@ public class PackageParserTest {

    @Test
    @RequiresFlagsEnabled(android.content.res.Flags.FLAG_MANIFEST_FLAGGING)
    public void testParseWithFeatureFlagAttributes() throws Exception {
    @DisableFlags(android.content.res.Flags.FLAG_USE_NEW_ACONFIG_STORAGE)
    public void testParseWithFeatureFlagAttributes_oldStorage() throws Exception {
        final File testFile = extractFile(TEST_APP8_APK);
        try (PackageParser2 parser = new TestPackageParser2()) {
            Map<String, Boolean> flagValues = new HashMap<>();
            flagValues.put("my.flag1", true);
            flagValues.put("my.flag2", false);
            flagValues.put("my.flag3", false);
            flagValues.put("my.flag4", true);
            ParsingPackageUtils.getAconfigFlags().addFlagValuesForTesting(flagValues);

            // The manifest has:
            //    <permission android:name="PERM1" android:featureFlag="my.flag1 " />
            //    <permission android:name="PERM2" android:featureFlag=" !my.flag2" />
            //    <permission android:name="PERM3" android:featureFlag="my.flag3" />
            //    <permission android:name="PERM4" android:featureFlag="!my.flag4" />
            //    <permission android:name="PERM5" android:featureFlag="unknown.flag" />
            // Therefore with the above flag values, only PERM1 and PERM2 should be present.

            final ParsedPackage pkg = parser.parsePackage(testFile, 0, false);
            List<String> permissionNames =
                    pkg.getPermissions().stream().map(ParsedComponent::getName).toList();
            assertThat(permissionNames).contains(PACKAGE_NAME + ".PERM1");
            assertThat(permissionNames).contains(PACKAGE_NAME + ".PERM2");
            assertThat(permissionNames).doesNotContain(PACKAGE_NAME + ".PERM3");
            assertThat(permissionNames).doesNotContain(PACKAGE_NAME + ".PERM4");
            assertThat(permissionNames).doesNotContain(PACKAGE_NAME + ".PERM5");
        } finally {
            testFile.delete();
        }
    }

    @Test
    @RequiresFlagsEnabled(android.content.res.Flags.FLAG_MANIFEST_FLAGGING)
    @EnableFlags(android.content.res.Flags.FLAG_USE_NEW_ACONFIG_STORAGE)
    public void testParseWithFeatureFlagAttributes_newStorage() throws Exception {
        final File testFile = extractFile(TEST_APP8_APK);
        try (PackageParser2 parser = new TestPackageParser2()) {
            Map<String, Boolean> flagValues = new HashMap<>();