diff options
| author | Winson <chiuwinson@google.com> | 2021-06-18 12:35:40 -0700 |
|---|---|---|
| committer | Winson <chiuwinson@google.com> | 2021-08-05 10:41:19 -0700 |
| commit | 593df2ce1ed128a61c6146bd3e98a049986d67d5 (patch) | |
| tree | df938a07c5d721023edadab16c24b215c440cae1 /core/java | |
| parent | bf649b323a0f2dcbf3f2bb1d4dc6f3eb80b3f2a9 (diff) | |
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
Diffstat (limited to 'core/java')
12 files changed, 22 insertions, 74 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index bed03835707f..29ce3971e83a 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -55,6 +55,8 @@ import android.content.ComponentName; import android.content.Intent; import android.content.IntentFilter; 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.ParseTypeImpl; import android.content.res.ApkAssets; @@ -7425,7 +7427,7 @@ public class PackageParser { mCompileSdkVersionCodename = dest.readString(); mUpgradeKeySets = (ArraySet<String>) dest.readArraySet(boot); - mKeySetMapping = readKeySetMapping(dest); + mKeySetMapping = ParsingPackageUtils.readKeySetMapping(dest); cpuAbiOverride = dest.readString(); use32bitAbi = (dest.readInt() == 1); @@ -7551,73 +7553,13 @@ public class PackageParser { dest.writeInt(mCompileSdkVersion); dest.writeString(mCompileSdkVersionCodename); dest.writeArraySet(mUpgradeKeySets); - writeKeySetMapping(dest, mKeySetMapping); + ParsingPackageUtils.writeKeySetMapping(dest, mKeySetMapping); dest.writeString(cpuAbiOverride); dest.writeInt(use32bitAbi ? 1 : 0); dest.writeByteArray(restrictUpdateHash); 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 Package createFromParcel(Parcel in) { return new Package(in); diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java index 9fee7bb92490..f2a6a5c9382f 100644 --- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java +++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java @@ -535,7 +535,7 @@ public class PackageInfoWithoutStateUtils { ai.setMaxAspectRatio(maxAspectRatio != null ? maxAspectRatio : 0f); Float minAspectRatio = a.getMinAspectRatio(); ai.setMinAspectRatio(minAspectRatio != null ? minAspectRatio : 0f); - ai.supportsSizeChanges = a.getSupportsSizeChanges(); + ai.supportsSizeChanges = a.isSupportsSizeChanges(); ai.requestedVrComponent = a.getRequestedVrComponent(); ai.rotationAnimation = a.getRotationAnimation(); ai.colorMode = a.getColorMode(); diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java index 72cc9299376a..d6e1ac903c42 100644 --- a/core/java/android/content/pm/parsing/ParsingPackage.java +++ b/core/java/android/content/pm/parsing/ParsingPackage.java @@ -360,7 +360,7 @@ public interface ParsingPackage extends ParsingPackageRead { ParsingPackage setCompileSdkVersion(int compileSdkVersion); - ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename); + ParsingPackage setCompileSdkVersionCodeName(String compileSdkVersionCodeName); ParsingPackage setAttributionsAreUserVisible(boolean attributionsAreUserVisible); diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index 0db65467c686..f0d95d97263a 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -553,7 +553,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { setCompileSdkVersion(manifestArray.getInteger( R.styleable.AndroidManifest_compileSdkVersion, 0)); - setCompileSdkVersionCodename(manifestArray.getNonConfigurationString( + setCompileSdkVersionCodeName(manifestArray.getNonConfigurationString( R.styleable.AndroidManifest_compileSdkVersionCodename, 0)); setIsolatedSplitLoading(manifestArray.getBoolean( @@ -2686,8 +2686,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { } @Override - public ParsingPackage setCompileSdkVersionCodename(String compileSdkVersionCodename) { - this.compileSdkVersionCodeName = compileSdkVersionCodename; + public ParsingPackage setCompileSdkVersionCodeName(String compileSdkVersionCodeName) { + this.compileSdkVersionCodeName = compileSdkVersionCodeName; return this; } diff --git a/core/java/android/content/pm/parsing/component/ParsedActivity.java b/core/java/android/content/pm/parsing/component/ParsedActivity.java index 73ee13212e90..adb6b76473eb 100644 --- a/core/java/android/content/pm/parsing/component/ParsedActivity.java +++ b/core/java/android/content/pm/parsing/component/ParsedActivity.java @@ -23,6 +23,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED; import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_UNSPECIFIED; +import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityTaskManager; import android.content.ComponentName; @@ -423,6 +424,7 @@ public class ParsedActivity extends ParsedMainComponent { } } + @NonNull public static final Parcelable.Creator<ParsedActivity> CREATOR = new Creator<ParsedActivity>() { @Override public ParsedActivity createFromParcel(Parcel source) { @@ -513,10 +515,6 @@ public class ParsedActivity extends ParsedMainComponent { return minAspectRatio; } - public boolean getSupportsSizeChanges() { - return supportsSizeChanges; - } - @Nullable public String getRequestedVrComponent() { return requestedVrComponent; diff --git a/core/java/android/content/pm/parsing/component/ParsedComponent.java b/core/java/android/content/pm/parsing/component/ParsedComponent.java index 3c0f097285ca..838adfd3215e 100644 --- a/core/java/android/content/pm/parsing/component/ParsedComponent.java +++ b/core/java/android/content/pm/parsing/component/ParsedComponent.java @@ -43,8 +43,8 @@ import java.util.Map; /** @hide */ public abstract class ParsedComponent implements Parcelable { - private static ParsedIntentInfo.ListParceler sForIntentInfos = Parcelling.Cache.getOrCreate( - ParsedIntentInfo.ListParceler.class); + private static final ParsedIntentInfo.ListParceler sForIntentInfos = + Parcelling.Cache.getOrCreate(ParsedIntentInfo.ListParceler.class); @NonNull @DataClass.ParcelWith(ForInternedString.class) diff --git a/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java b/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java index 65ff4720063b..41789204a76d 100644 --- a/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java +++ b/core/java/android/content/pm/parsing/component/ParsedInstrumentation.java @@ -18,6 +18,7 @@ package android.content.pm.parsing.component; import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.os.Parcel; @@ -94,6 +95,7 @@ public class ParsedInstrumentation extends ParsedComponent { this.functionalTest = in.readByte() != 0; } + @NonNull public static final Parcelable.Creator<ParsedInstrumentation> CREATOR = new Parcelable.Creator<ParsedInstrumentation>() { @Override diff --git a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java index 01ee0f4828f9..59d4a95edb0a 100644 --- a/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java +++ b/core/java/android/content/pm/parsing/component/ParsedIntentInfo.java @@ -16,6 +16,7 @@ package android.content.pm.parsing.component; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.IntentFilter; import android.os.Parcel; @@ -58,6 +59,7 @@ public final class ParsedIntentInfo extends IntentFilter { item.writeIntentInfoToParcel(dest, parcelFlags); } + @NonNull @Override public ParsedIntentInfo unparcel(Parcel source) { return new ParsedIntentInfo(source); diff --git a/core/java/android/content/pm/parsing/component/ParsedPermission.java b/core/java/android/content/pm/parsing/component/ParsedPermission.java index 50bc3d98fb2a..0f82941f92b1 100644 --- a/core/java/android/content/pm/parsing/component/ParsedPermission.java +++ b/core/java/android/content/pm/parsing/component/ParsedPermission.java @@ -16,6 +16,7 @@ package android.content.pm.parsing.component; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PermissionInfo; import android.os.Parcel; @@ -167,6 +168,7 @@ public class ParsedPermission extends ParsedComponent { this.knownCerts = sForStringSet.unparcel(in); } + @NonNull public static final Parcelable.Creator<ParsedPermission> CREATOR = new Parcelable.Creator<ParsedPermission>() { @Override diff --git a/core/java/android/content/pm/parsing/component/ParsedProcess.java b/core/java/android/content/pm/parsing/component/ParsedProcess.java index c39d6b1d3250..fe102252931e 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProcess.java +++ b/core/java/android/content/pm/parsing/component/ParsedProcess.java @@ -19,7 +19,6 @@ package android.content.pm.parsing.component; import static java.util.Collections.emptySet; import android.annotation.NonNull; -import android.annotation.Nullable; import android.content.pm.ApplicationInfo; import android.os.Parcel; import android.os.Parcelable; diff --git a/core/java/android/content/pm/parsing/component/ParsedProvider.java b/core/java/android/content/pm/parsing/component/ParsedProvider.java index ebf85f71d282..9a12b48cffb0 100644 --- a/core/java/android/content/pm/parsing/component/ParsedProvider.java +++ b/core/java/android/content/pm/parsing/component/ParsedProvider.java @@ -169,6 +169,7 @@ public class ParsedProvider extends ParsedMainComponent { this.pathPermissions = in.createTypedArray(PathPermission.CREATOR); } + @NonNull public static final Parcelable.Creator<ParsedProvider> CREATOR = new Creator<ParsedProvider>() { @Override public ParsedProvider createFromParcel(Parcel source) { diff --git a/core/java/android/content/pm/parsing/component/ParsedService.java b/core/java/android/content/pm/parsing/component/ParsedService.java index 471d3468a084..5499a130a4ad 100644 --- a/core/java/android/content/pm/parsing/component/ParsedService.java +++ b/core/java/android/content/pm/parsing/component/ParsedService.java @@ -18,6 +18,7 @@ package android.content.pm.parsing.component; import static android.content.pm.parsing.ParsingPackageImpl.sForInternedString; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ComponentName; import android.os.Parcel; @@ -83,6 +84,7 @@ public class ParsedService extends ParsedMainComponent { this.permission = sForInternedString.unparcel(in); } + @NonNull public static final Parcelable.Creator<ParsedService> CREATOR = new Creator<ParsedService>() { @Override public ParsedService createFromParcel(Parcel source) { |
