Merge "Add more test-cases for <extension-sdk>" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f288c41d52
@@ -181,9 +181,12 @@ java_genrule {
|
|||||||
":FrameworksServicesTests_install_split_feature_a",
|
":FrameworksServicesTests_install_split_feature_a",
|
||||||
":FrameworksServicesTests_install_uses_sdk_0",
|
":FrameworksServicesTests_install_uses_sdk_0",
|
||||||
":FrameworksServicesTests_install_uses_sdk_q0",
|
":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_r0",
|
||||||
":FrameworksServicesTests_install_uses_sdk_r5",
|
":FrameworksServicesTests_install_uses_sdk_r5",
|
||||||
|
":FrameworksServicesTests_install_uses_sdk_r0_s0",
|
||||||
|
":FrameworksServicesTests_install_uses_sdk_r0_s5",
|
||||||
],
|
],
|
||||||
out: ["FrameworkServicesTests_apks_as_resources.res.zip"],
|
out: ["FrameworkServicesTests_apks_as_resources.res.zip"],
|
||||||
tools: ["soong_zip"],
|
tools: ["soong_zip"],
|
||||||
|
|||||||
@@ -7,42 +7,50 @@ package {
|
|||||||
default_applicable_licenses: ["frameworks_base_license"],
|
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 {
|
android_test_helper_app {
|
||||||
name: "FrameworksServicesTests_install_uses_sdk_r0",
|
name: "FrameworksServicesTests_install_uses_sdk_r0",
|
||||||
defaults: ["FrameworksServicesTests_apks_defaults"],
|
defaults: ["FrameworksServicesTests_apks_defaults"],
|
||||||
manifest: "AndroidManifest-r0.xml",
|
manifest: "AndroidManifest-r0.xml",
|
||||||
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android_test_helper_app {
|
android_test_helper_app {
|
||||||
name: "FrameworksServicesTests_install_uses_sdk_r5",
|
name: "FrameworksServicesTests_install_uses_sdk_r5",
|
||||||
defaults: ["FrameworksServicesTests_apks_defaults"],
|
defaults: ["FrameworksServicesTests_apks_defaults"],
|
||||||
manifest: "AndroidManifest-r5.xml",
|
manifest: "AndroidManifest-r5.xml",
|
||||||
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android_test_helper_app {
|
android_test_helper_app {
|
||||||
name: "FrameworksServicesTests_install_uses_sdk_q0",
|
name: "FrameworksServicesTests_install_uses_sdk_r0_s0",
|
||||||
defaults: ["FrameworksServicesTests_apks_defaults"],
|
defaults: ["FrameworksServicesTests_apks_defaults"],
|
||||||
manifest: "AndroidManifest-q0.xml",
|
manifest: "AndroidManifest-r0-s0.xml",
|
||||||
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android_test_helper_app {
|
android_test_helper_app {
|
||||||
name: "FrameworksServicesTests_install_uses_sdk_r",
|
name: "FrameworksServicesTests_install_uses_sdk_r0_s5",
|
||||||
defaults: ["FrameworksServicesTests_apks_defaults"],
|
defaults: ["FrameworksServicesTests_apks_defaults"],
|
||||||
manifest: "AndroidManifest-r.xml",
|
manifest: "AndroidManifest-r0-s5.xml",
|
||||||
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android_test_helper_app {
|
android_test_helper_app {
|
||||||
name: "FrameworksServicesTests_install_uses_sdk_0",
|
name: "FrameworksServicesTests_install_uses_sdk_0",
|
||||||
defaults: ["FrameworksServicesTests_apks_defaults"],
|
defaults: ["FrameworksServicesTests_apks_defaults"],
|
||||||
manifest: "AndroidManifest-0.xml",
|
manifest: "AndroidManifest-0.xml",
|
||||||
|
|
||||||
srcs: ["**/*.java"],
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
<!-- This is invalid, because there is no sdk version specified -->
|
<!-- This is invalid, because there is no sdk version specified -->
|
||||||
<extension-sdk android:minExtensionVersion="5" />
|
<extension-sdk android:minExtensionVersion="0" />
|
||||||
</uses-sdk>
|
</uses-sdk>
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.android.frameworks.servicestests.install_uses_sdk">
|
||||||
|
|
||||||
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
|
<!-- 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>
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
<!-- This is invalid, because there is no minimum extension version specified -->
|
<!-- This is invalid, because there is no minimum extension version specified -->
|
||||||
<extension-sdk android:sdkVersion="10000" />
|
<extension-sdk android:sdkVersion="30" />
|
||||||
</uses-sdk>
|
</uses-sdk>
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.android.frameworks.servicestests.install_uses_sdk">
|
||||||
|
|
||||||
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
|
<extension-sdk android:sdkVersion="30" android:minExtensionVersion="0" />
|
||||||
|
<extension-sdk android:sdkVersion="31" android:minExtensionVersion="0" />
|
||||||
|
</uses-sdk>
|
||||||
|
|
||||||
|
<application>
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2010 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
package="com.android.frameworks.servicestests.install_uses_sdk">
|
||||||
|
|
||||||
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
|
<!-- 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>
|
||||||
|
</application>
|
||||||
|
</manifest>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
package="com.android.frameworks.servicestests.install_uses_sdk">
|
package="com.android.frameworks.servicestests.install_uses_sdk">
|
||||||
|
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
<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>
|
</uses-sdk>
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="29">
|
||||||
<!-- This will fail to install, because minExtensionVersion is not met -->
|
<!-- 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>
|
</uses-sdk>
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
|
|||||||
@@ -17,10 +17,10 @@
|
|||||||
package com.android.server.pm.parsing;
|
package com.android.server.pm.parsing;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import android.apex.ApexInfo;
|
import android.apex.ApexInfo;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -39,6 +39,7 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.FileUtils;
|
import android.os.FileUtils;
|
||||||
import android.platform.test.annotations.Presubmit;
|
import android.platform.test.annotations.Presubmit;
|
||||||
|
import android.util.Pair;
|
||||||
import android.util.SparseIntArray;
|
import android.util.SparseIntArray;
|
||||||
|
|
||||||
import androidx.test.InstrumentationRegistry;
|
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.AndroidPackage;
|
||||||
import com.android.server.pm.parsing.pkg.ParsedPackage;
|
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.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,6 +95,8 @@ public class PackageParserLegacyCoreTest {
|
|||||||
private static final int PLATFORM_VERSION = 20;
|
private static final int PLATFORM_VERSION = 20;
|
||||||
private static final int NEWER_VERSION = 30;
|
private static final int NEWER_VERSION = 30;
|
||||||
|
|
||||||
|
@Rule public final Expect expect = Expect.create();
|
||||||
|
|
||||||
private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
|
private void verifyComputeMinSdkVersion(int minSdkVersion, String minSdkCodename,
|
||||||
boolean isPlatformReleased, int expectedMinSdk) {
|
boolean isPlatformReleased, int expectedMinSdk) {
|
||||||
final String[] outError = new String[1];
|
final String[] outError = new String[1];
|
||||||
@@ -553,36 +561,44 @@ public class PackageParserLegacyCoreTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUsesSdk() throws Exception {
|
public void testUsesSdk() throws Exception {
|
||||||
ParsedPackage pkg =
|
ParsedPackage pkg;
|
||||||
parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
|
SparseIntArray minExtVers;
|
||||||
SparseIntArray minExtVers = pkg.getMinExtensionVersions();
|
pkg = parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
|
||||||
|
minExtVers = pkg.getMinExtensionVersions();
|
||||||
assertEquals(1, minExtVers.size());
|
assertEquals(1, minExtVers.size());
|
||||||
assertEquals(0, minExtVers.get(10000, -1));
|
assertEquals(0, minExtVers.get(30, -1));
|
||||||
|
|
||||||
try {
|
pkg = parsePackage("install_uses_sdk.apk_r0_s0", R.raw.install_uses_sdk_r0_s0, x -> x);
|
||||||
parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
|
minExtVers = pkg.getMinExtensionVersions();
|
||||||
fail("Expected parsing exception due to incompatible extension SDK version");
|
assertEquals(2, minExtVers.size());
|
||||||
} catch (PackageParser.PackageParserException expected) {
|
assertEquals(0, minExtVers.get(30, -1));
|
||||||
assertEquals(PackageManager.INSTALL_FAILED_OLDER_SDK, expected.error);
|
assertEquals(0, minExtVers.get(31, -1));
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user