From 7db3ca2a198a5eedac0df70940e4930b61f367d7 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Wed, 24 Feb 2021 12:57:26 +0000 Subject: [PATCH] Add more test-cases for Add a few tests with multiple requirements, and a few more unsatisfied requirements Bug: 149815613 Test: atest PackageParserLegacyCoreTest Change-Id: Ia21a24659a39f11bf3984c7ab114c5e202d1ca1f --- services/tests/servicestests/Android.bp | 5 +- .../apks/install_uses_sdk/Android.bp | 36 +++++---- .../install_uses_sdk/AndroidManifest-0.xml | 2 +- .../AndroidManifest-q0-r0.xml | 27 +++++++ ...ifest-r.xml => AndroidManifest-r-none.xml} | 2 +- .../AndroidManifest-r0-s0.xml | 26 +++++++ .../AndroidManifest-r0-s5.xml | 27 +++++++ .../install_uses_sdk/AndroidManifest-r0.xml | 2 +- .../install_uses_sdk/AndroidManifest-r5.xml | 2 +- .../parsing/PackageParserLegacyCoreTest.java | 74 +++++++++++-------- 10 files changed, 155 insertions(+), 48 deletions(-) create mode 100644 services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml rename services/tests/servicestests/apks/install_uses_sdk/{AndroidManifest-r.xml => AndroidManifest-r-none.xml} (95%) create mode 100644 services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml create mode 100644 services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp index bea4ae3af1fd7..68f547979ce0e 100644 --- a/services/tests/servicestests/Android.bp +++ b/services/tests/servicestests/Android.bp @@ -181,9 +181,12 @@ java_genrule { ":FrameworksServicesTests_install_split_feature_a", ":FrameworksServicesTests_install_uses_sdk_0", ":FrameworksServicesTests_install_uses_sdk_q0", - ":FrameworksServicesTests_install_uses_sdk_r", + ":FrameworksServicesTests_install_uses_sdk_q0_r0", + ":FrameworksServicesTests_install_uses_sdk_r_none", ":FrameworksServicesTests_install_uses_sdk_r0", ":FrameworksServicesTests_install_uses_sdk_r5", + ":FrameworksServicesTests_install_uses_sdk_r0_s0", + ":FrameworksServicesTests_install_uses_sdk_r0_s5", ], out: ["FrameworkServicesTests_apks_as_resources.res.zip"], tools: ["soong_zip"], diff --git a/services/tests/servicestests/apks/install_uses_sdk/Android.bp b/services/tests/servicestests/apks/install_uses_sdk/Android.bp index feb152c49eb39..a51293dc19974 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/Android.bp +++ b/services/tests/servicestests/apks/install_uses_sdk/Android.bp @@ -7,42 +7,50 @@ package { default_applicable_licenses: ["frameworks_base_license"], } +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_sdk_q0", + defaults: ["FrameworksServicesTests_apks_defaults"], + manifest: "AndroidManifest-q0.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_sdk_q0_r0", + defaults: ["FrameworksServicesTests_apks_defaults"], + manifest: "AndroidManifest-q0-r0.xml", +} + +android_test_helper_app { + name: "FrameworksServicesTests_install_uses_sdk_r_none", + defaults: ["FrameworksServicesTests_apks_defaults"], + manifest: "AndroidManifest-r-none.xml", +} + android_test_helper_app { name: "FrameworksServicesTests_install_uses_sdk_r0", defaults: ["FrameworksServicesTests_apks_defaults"], manifest: "AndroidManifest-r0.xml", - - srcs: ["**/*.java"], } android_test_helper_app { name: "FrameworksServicesTests_install_uses_sdk_r5", defaults: ["FrameworksServicesTests_apks_defaults"], manifest: "AndroidManifest-r5.xml", - - srcs: ["**/*.java"], } android_test_helper_app { - name: "FrameworksServicesTests_install_uses_sdk_q0", + name: "FrameworksServicesTests_install_uses_sdk_r0_s0", defaults: ["FrameworksServicesTests_apks_defaults"], - manifest: "AndroidManifest-q0.xml", - - srcs: ["**/*.java"], + manifest: "AndroidManifest-r0-s0.xml", } android_test_helper_app { - name: "FrameworksServicesTests_install_uses_sdk_r", + name: "FrameworksServicesTests_install_uses_sdk_r0_s5", defaults: ["FrameworksServicesTests_apks_defaults"], - manifest: "AndroidManifest-r.xml", - - srcs: ["**/*.java"], + manifest: "AndroidManifest-r0-s5.xml", } android_test_helper_app { name: "FrameworksServicesTests_install_uses_sdk_0", defaults: ["FrameworksServicesTests_apks_defaults"], manifest: "AndroidManifest-0.xml", - - srcs: ["**/*.java"], } diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml index 215384b2831c8..90b13d45fc05e 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-0.xml @@ -18,7 +18,7 @@ - + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml new file mode 100644 index 0000000000000..2a32276606862 --- /dev/null +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml similarity index 95% rename from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml rename to services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml index 5d22577d118a4..c79c61c3dc324 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r-none.xml @@ -18,7 +18,7 @@ - + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml new file mode 100644 index 0000000000000..af30915b4f0bb --- /dev/null +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml new file mode 100644 index 0000000000000..bafe4c4faa3f6 --- /dev/null +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml index c1244f2463553..2920b86415862 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0.xml @@ -17,7 +17,7 @@ package="com.android.frameworks.servicestests.install_uses_sdk"> - + diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml index 3410938b3c2d4..7723d051a0418 100644 --- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml +++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r5.xml @@ -18,7 +18,7 @@ - + diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java index fb13d8707a44c..c2b385889802b 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/PackageParserLegacyCoreTest.java @@ -17,10 +17,10 @@ package com.android.server.pm.parsing; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import android.apex.ApexInfo; import android.content.Context; @@ -39,6 +39,7 @@ import android.os.Build; import android.os.Bundle; import android.os.FileUtils; import android.platform.test.annotations.Presubmit; +import android.util.Pair; import android.util.SparseIntArray; import androidx.test.InstrumentationRegistry; @@ -50,12 +51,17 @@ import com.android.internal.util.ArrayUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.parsing.pkg.ParsedPackage; +import com.google.common.truth.Expect; + +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import java.io.File; import java.io.InputStream; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.function.Function; /** @@ -89,6 +95,8 @@ public class PackageParserLegacyCoreTest { private static final int PLATFORM_VERSION = 20; private static final int NEWER_VERSION = 30; + @Rule public final Expect expect = Expect.create(); + private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename, boolean isPlatformReleased, int expectedMinSdk) { final String[] outError = new String[1]; @@ -553,36 +561,44 @@ public class PackageParserLegacyCoreTest { @Test public void testUsesSdk() throws Exception { - ParsedPackage pkg = - parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x); - SparseIntArray minExtVers = pkg.getMinExtensionVersions(); + ParsedPackage pkg; + SparseIntArray minExtVers; + pkg = parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x); + minExtVers = pkg.getMinExtensionVersions(); assertEquals(1, minExtVers.size()); - assertEquals(0, minExtVers.get(10000, -1)); + assertEquals(0, minExtVers.get(30, -1)); - try { - parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x); - fail("Expected parsing exception due to incompatible extension SDK version"); - } catch (PackageParser.PackageParserException expected) { - assertEquals(PackageManager.INSTALL_FAILED_OLDER_SDK, expected.error); - } - try { - parsePackage("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0, x -> x); - fail("Expected parsing exception due to non-existent extension SDK"); - } catch (PackageParser.PackageParserException expected) { - assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error); - } - try { - parsePackage("install_uses_sdk.apk_r", R.raw.install_uses_sdk_r, x -> x); - fail("Expected parsing exception due to unspecified extension SDK version"); - } catch (PackageParser.PackageParserException expected) { - assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error); - } - try { - parsePackage("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0, x -> x); - fail("Expected parsing exception due to unspecified extension SDK"); - } catch (PackageParser.PackageParserException expected) { - assertEquals(PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED, expected.error); - } + pkg = parsePackage("install_uses_sdk.apk_r0_s0", R.raw.install_uses_sdk_r0_s0, x -> x); + minExtVers = pkg.getMinExtensionVersions(); + assertEquals(2, minExtVers.size()); + assertEquals(0, minExtVers.get(30, -1)); + assertEquals(0, minExtVers.get(31, -1)); + Map, Integer> appToError = new HashMap<>(); + appToError.put(Pair.create("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5), + PackageManager.INSTALL_FAILED_OLDER_SDK); + appToError.put(Pair.create("install_uses_sdk.apk_r0_s5", R.raw.install_uses_sdk_r0_s5), + PackageManager.INSTALL_FAILED_OLDER_SDK); + + appToError.put(Pair.create("install_uses_sdk.apk_q0", R.raw.install_uses_sdk_q0), + PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED); + appToError.put(Pair.create("install_uses_sdk.apk_q0_r0", R.raw.install_uses_sdk_q0_r0), + PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED); + appToError.put(Pair.create("install_uses_sdk.apk_r_none", R.raw.install_uses_sdk_r_none), + PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED); + appToError.put(Pair.create("install_uses_sdk.apk_0", R.raw.install_uses_sdk_0), + PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED); + + for (Map.Entry, Integer> entry : appToError.entrySet()) { + String filename = entry.getKey().first; + int resId = entry.getKey().second; + int result = entry.getValue(); + try { + parsePackage(filename, resId, x -> x); + expect.withMessage("Expected parsing error %d from %s", result, filename).fail(); + } catch (PackageParser.PackageParserException expected) { + expect.that(expected.error).isEqualTo(result); + } + } } }