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

Commit 593df2ce authored by Winson's avatar Winson
Browse files

Add parsing class parcelling tests

Uses reflection to read all of the getters for each of the data classes
and finds their setters to input test data, serialize it, deserialize
it, and compare the before and after values.

Also records all of the methods available in the class, to ensure that
any new fields/methods are caught by the test.

Bug: 178852754

Test: atest com.android.server.pm.test.parsing.parcelling

Change-Id: I642fd43a3ff2e5675129f0f4ad3646c97e3f0e22
parent bf649b32
Loading
Loading
Loading
Loading
+4 −62
Original line number Original line Diff line number Diff line
@@ -55,6 +55,8 @@ import android.content.ComponentName;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.overlay.OverlayPaths;
import android.content.pm.overlay.OverlayPaths;
import android.content.pm.parsing.ParsingPackageUtils;
import android.content.pm.split.SplitAssetLoader;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseResult;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.content.pm.parsing.result.ParseTypeImpl;
import android.content.res.ApkAssets;
import android.content.res.ApkAssets;
@@ -7425,7 +7427,7 @@ public class PackageParser {
            mCompileSdkVersionCodename = dest.readString();
            mCompileSdkVersionCodename = dest.readString();
            mUpgradeKeySets = (ArraySet<String>) dest.readArraySet(boot);
            mUpgradeKeySets = (ArraySet<String>) dest.readArraySet(boot);


            mKeySetMapping = readKeySetMapping(dest);
            mKeySetMapping = ParsingPackageUtils.readKeySetMapping(dest);


            cpuAbiOverride = dest.readString();
            cpuAbiOverride = dest.readString();
            use32bitAbi = (dest.readInt() == 1);
            use32bitAbi = (dest.readInt() == 1);
@@ -7551,73 +7553,13 @@ public class PackageParser {
            dest.writeInt(mCompileSdkVersion);
            dest.writeInt(mCompileSdkVersion);
            dest.writeString(mCompileSdkVersionCodename);
            dest.writeString(mCompileSdkVersionCodename);
            dest.writeArraySet(mUpgradeKeySets);
            dest.writeArraySet(mUpgradeKeySets);
            writeKeySetMapping(dest, mKeySetMapping);
            ParsingPackageUtils.writeKeySetMapping(dest, mKeySetMapping);
            dest.writeString(cpuAbiOverride);
            dest.writeString(cpuAbiOverride);
            dest.writeInt(use32bitAbi ? 1 : 0);
            dest.writeInt(use32bitAbi ? 1 : 0);
            dest.writeByteArray(restrictUpdateHash);
            dest.writeByteArray(restrictUpdateHash);
            dest.writeInt(visibleToInstantApps ? 1 : 0);
            dest.writeInt(visibleToInstantApps ? 1 : 0);
        }
        }


        /**
         * Writes the keyset mapping to the provided package. {@code null} mappings are permitted.
         */
        private static void writeKeySetMapping(
                Parcel dest, ArrayMap<String, ArraySet<PublicKey>> keySetMapping) {
            if (keySetMapping == null) {
                dest.writeInt(-1);
                return;
            }

            final int N = keySetMapping.size();
            dest.writeInt(N);

            for (int i = 0; i < N; i++) {
                dest.writeString(keySetMapping.keyAt(i));
                ArraySet<PublicKey> keys = keySetMapping.valueAt(i);
                if (keys == null) {
                    dest.writeInt(-1);
                    continue;
                }

                final int M = keys.size();
                dest.writeInt(M);
                for (int j = 0; j < M; j++) {
                    dest.writeSerializable(keys.valueAt(j));
                }
            }
        }

        /**
         * Reads a keyset mapping from the given parcel at the given data position. May return
         * {@code null} if the serialized mapping was {@code null}.
         */
        private static ArrayMap<String, ArraySet<PublicKey>> readKeySetMapping(Parcel in) {
            final int N = in.readInt();
            if (N == -1) {
                return null;
            }

            ArrayMap<String, ArraySet<PublicKey>> keySetMapping = new ArrayMap<>();
            for (int i = 0; i < N; ++i) {
                String key = in.readString();
                final int M = in.readInt();
                if (M == -1) {
                    keySetMapping.put(key, null);
                    continue;
                }

                ArraySet<PublicKey> keys = new ArraySet<>(M);
                for (int j = 0; j < M; ++j) {
                    PublicKey pk = (PublicKey) in.readSerializable();
                    keys.add(pk);
                }

                keySetMapping.put(key, keys);
            }

            return keySetMapping;
        }

        public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Package>() {
        public static final Parcelable.Creator CREATOR = new Parcelable.Creator<Package>() {
            public Package createFromParcel(Parcel in) {
            public Package createFromParcel(Parcel in) {
                return new Package(in);
                return new Package(in);
+1 −1
Original line number Original line Diff line number Diff line
@@ -535,7 +535,7 @@ public class PackageInfoWithoutStateUtils {
        ai.setMaxAspectRatio(maxAspectRatio != null ? maxAspectRatio : 0f);
        ai.setMaxAspectRatio(maxAspectRatio != null ? maxAspectRatio : 0f);
        Float minAspectRatio = a.getMinAspectRatio();
        Float minAspectRatio = a.getMinAspectRatio();
        ai.setMinAspectRatio(minAspectRatio != null ? minAspectRatio : 0f);
        ai.setMinAspectRatio(minAspectRatio != null ? minAspectRatio : 0f);
        ai.supportsSizeChanges = a.getSupportsSizeChanges();
        ai.supportsSizeChanges = a.isSupportsSizeChanges();
        ai.requestedVrComponent = a.getRequestedVrComponent();
        ai.requestedVrComponent = a.getRequestedVrComponent();
        ai.rotationAnimation = a.getRotationAnimation();
        ai.rotationAnimation = a.getRotationAnimation();
        ai.colorMode = a.getColorMode();
        ai.colorMode = a.getColorMode();
+1 −1
Original line number Original line Diff line number Diff line
@@ -360,7 +360,7 @@ public interface ParsingPackage extends ParsingPackageRead {


    ParsingPackage setCompileSdkVersion(int compileSdkVersion);
    ParsingPackage setCompileSdkVersion(int compileSdkVersion);


    ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename);
    ParsingPackage setCompileSdkVersionCodeName(String compileSdkVersionCodeName);


    ParsingPackage setAttributionsAreUserVisible(boolean attributionsAreUserVisible);
    ParsingPackage setAttributionsAreUserVisible(boolean attributionsAreUserVisible);


+3 −3
Original line number Original line Diff line number Diff line
@@ -553,7 +553,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {


            setCompileSdkVersion(manifestArray.getInteger(
            setCompileSdkVersion(manifestArray.getInteger(
                    R.styleable.AndroidManifest_compileSdkVersion, 0));
                    R.styleable.AndroidManifest_compileSdkVersion, 0));
            setCompileSdkVersionCodename(manifestArray.getNonConfigurationString(
            setCompileSdkVersionCodeName(manifestArray.getNonConfigurationString(
                    R.styleable.AndroidManifest_compileSdkVersionCodename, 0));
                    R.styleable.AndroidManifest_compileSdkVersionCodename, 0));


            setIsolatedSplitLoading(manifestArray.getBoolean(
            setIsolatedSplitLoading(manifestArray.getBoolean(
@@ -2686,8 +2686,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
    }
    }


    @Override
    @Override
    public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) {
    public ParsingPackage setCompileSdkVersionCodeName(String compileSdkVersionCodeName) {
        this.compileSdkVersionCodeName = compileSdkVersionCodename;
        this.compileSdkVersionCodeName = compileSdkVersionCodeName;
        return this;
        return this;
    }
    }


+2 −4
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;
import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;
import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED;


import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityTaskManager;
import android.app.ActivityTaskManager;
import android.content.ComponentName;
import android.content.ComponentName;
@@ -423,6 +424,7 @@ public class ParsedActivity extends ParsedMainComponent {
        }
        }
    }
    }


    @NonNull
    public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
    public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() {
        @Override
        @Override
        public ParsedActivity createFromParcel(Parcel source) {
        public ParsedActivity createFromParcel(Parcel source) {
@@ -513,10 +515,6 @@ public class ParsedActivity extends ParsedMainComponent {
        return minAspectRatio;
        return minAspectRatio;
    }
    }


    public boolean getSupportsSizeChanges() {
        return supportsSizeChanges;
    }

    @Nullable
    @Nullable
    public String getRequestedVrComponent() {
    public String getRequestedVrComponent() {
        return requestedVrComponent;
        return requestedVrComponent;
Loading