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

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

Merge "Allow testing of AconfigFlags with new storage" into main

parents 8e9b6708 4eeaa636
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<>();