Add more test-cases for <extension-sdk>
Add a few tests with multiple requirements, and a few more
unsatisfied requirements
Bug: 149815613
Test: atest PackageParserLegacyCoreTest
Change-Id: Ia21a24659a39f11bf3984c7ab114c5e202d1ca1f
diff --git a/services/tests/servicestests/Android.bp b/services/tests/servicestests/Android.bp
index bea4ae3..68f5479 100644
--- a/services/tests/servicestests/Android.bp
+++ b/services/tests/servicestests/Android.bp
@@ -181,9 +181,12 @@
":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 feb152c..a51293d 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/Android.bp
+++ b/services/tests/servicestests/apks/install_uses_sdk/Android.bp
@@ -8,41 +8,49 @@
}
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 215384b..90b13d4 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 @@
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
<!-- This is invalid, because there is no sdk version specified -->
- <extension-sdk android:minExtensionVersion="5" />
+ <extension-sdk android:minExtensionVersion="0" />
</uses-sdk>
<application>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml
similarity index 80%
copy from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
copy to services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml
index 5d22577..2a32276 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-q0-r0.xml
@@ -17,8 +17,9 @@
package="com.android.frameworks.servicestests.install_uses_sdk">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
- <!-- This is invalid, because there is no minimum extension version specified -->
- <extension-sdk android:sdkVersion="10000" />
+ <!-- This fails because 29 doesn't have an extension sdk -->
+ <extension-sdk android:sdkVersion="29" android:minExtensionVersion="0" />
+ <extension-sdk android:sdkVersion="30" android:minExtensionVersion="0" />
</uses-sdk>
<application>
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 94%
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 5d22577..c79c61c 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 @@
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
<!-- This is invalid, because there is no minimum extension version specified -->
- <extension-sdk android:sdkVersion="10000" />
+ <extension-sdk android:sdkVersion="30" />
</uses-sdk>
<application>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml
similarity index 84%
copy from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
copy to services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml
index 5d22577..af30915 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s0.xml
@@ -17,8 +17,8 @@
package="com.android.frameworks.servicestests.install_uses_sdk">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
- <!-- This is invalid, because there is no minimum extension version specified -->
- <extension-sdk android:sdkVersion="10000" />
+ <extension-sdk android:sdkVersion="30" android:minExtensionVersion="0" />
+ <extension-sdk android:sdkVersion="31" android:minExtensionVersion="0" />
</uses-sdk>
<application>
diff --git a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml
similarity index 80%
copy from services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
copy to services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml
index 5d22577..bafe4c4 100644
--- a/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r.xml
+++ b/services/tests/servicestests/apks/install_uses_sdk/AndroidManifest-r0-s5.xml
@@ -17,8 +17,9 @@
package="com.android.frameworks.servicestests.install_uses_sdk">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
- <!-- This is invalid, because there is no minimum extension version specified -->
- <extension-sdk android:sdkVersion="10000" />
+ <!-- This fails because 31 is not version 5 -->
+ <extension-sdk android:sdkVersion="30" android:minExtensionVersion="0" />
+ <extension-sdk android:sdkVersion="31" android:minExtensionVersion="5" />
</uses-sdk>
<application>
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 c1244f2..2920b86 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">
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
- <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="0" />
+ <extension-sdk android:sdkVersion="30" android:minExtensionVersion="0" />
</uses-sdk>
<application>
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 3410938..7723d05 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 @@
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
<!-- This will fail to install, because minExtensionVersion is not met -->
- <extension-sdk android:sdkVersion="10000" android:minExtensionVersion="5" />
+ <extension-sdk android:sdkVersion="30" android:minExtensionVersion="5" />
</uses-sdk>
<application>
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 fb13d87..c2b3858 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.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.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 @@
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 @@
@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<Pair<String, Integer>, 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<Pair<String, Integer>, 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);
+ }
+ }
}
}