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_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"],
|
||||
|
||||
@@ -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"],
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
<!-- This is invalid, because there is no minimum extension version specified -->
|
||||
<extension-sdk android:sdkVersion="10000" />
|
||||
<extension-sdk android:sdkVersion="30" />
|
||||
</uses-sdk>
|
||||
|
||||
<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">
|
||||
|
||||
<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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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<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