diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-24 04:48:12 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-06-24 04:48:12 +0000 |
commit | 750f77c2df1544b9df6145c163b1cdf58b3cba35 (patch) | |
tree | 532b4432ccf2b0e2c7feed3ca7ab70233f0a099f | |
parent | 09509b6859dcb32e85710a6eb9ed635e0f4914ac (diff) | |
parent | 1240a4592958c420fa7d359324ab2d8ef5a15f60 (diff) | |
download | Gki-750f77c2df1544b9df6145c163b1cdf58b3cba35.tar.gz |
Snap for 7487883 from 1240a4592958c420fa7d359324ab2d8ef5a15f60 to sdk-releaseplatform-tools-31.0.3
Change-Id: I7aecce5383e8d7fc868d16d48b28bbd09fad70c4
-rw-r--r-- | Android.bp | 32 | ||||
-rw-r--r-- | OWNERS | 2 | ||||
-rw-r--r-- | build/kmi.go | 2 | ||||
-rw-r--r-- | build_gki_apex_manifest.cpp | 30 | ||||
-rw-r--r-- | test/src/com/android/gki/tests/GkiInstallTest.java | 44 |
5 files changed, 85 insertions, 25 deletions
@@ -108,39 +108,39 @@ cc_binary_host { ], } -// Build GKI APEX 5.4-android12-0 from $(PRODUCT_OUT)/boot.img. +// Build GKI APEX 5.4-android12-unstable from $(PRODUCT_OUT)/boot.img. // Also generate test packages. gki_apex { - name: "com.android.gki.kmi_5_4_android12_0", + name: "com.android.gki.kmi_5_4_android12_unstable", installable: true, - kmi_version: "5.4-android12-0", + kmi_version: "5.4-android12-unstable", product_out_path: "boot.img", gen_test: true, } -// Build GKI APEX 5.10-android12-0 from $(PRODUCT_OUT)/boot.img. +// Build GKI APEX 5.10-android12-unstable from $(PRODUCT_OUT)/boot.img. // Also generate test packages. gki_apex { - name: "com.android.gki.kmi_5_10_android12_0", + name: "com.android.gki.kmi_5_10_android12_unstable", installable: true, - kmi_version: "5.10-android12-0", + kmi_version: "5.10-android12-unstable", product_out_path: "boot.img", gen_test: true, } -// Build GKI APEX 5.4-android12-0 from $(PRODUCT_OUT)/boot-5.4.img +// Build GKI APEX 5.4-android12-unstable from $(PRODUCT_OUT)/boot-5.4.img gki_apex { - name: "com.android.gki.kmi_5_4_android12_0_boot-5.4", + name: "com.android.gki.kmi_5_4_android12_unstable_boot-5.4", installable: false, - kmi_version: "5.4-android12-0", + kmi_version: "5.4-android12-unstable", product_out_path: "boot-5.4.img", } -// Build GKI APEX 5.4-android12-0 from $(PRODUCT_OUT)/boot-5.10.img +// Build GKI APEX 5.10-android12-unstable from $(PRODUCT_OUT)/boot-5.10.img gki_apex { - name: "com.android.gki.kmi_5_10_android12_0_boot-5.10", + name: "com.android.gki.kmi_5_10_android12_unstable_boot-5.10", installable: false, - kmi_version: "5.10-android12-0", + kmi_version: "5.10-android12-unstable", product_out_path: "boot-5.10.img", } @@ -149,9 +149,9 @@ gki_apex { filegroup { name: "gki_install_test_files", srcs: [ - ":com.android.gki.kmi_5_4_android12_0_test_high", - ":com.android.gki.kmi_5_4_android12_0_test_low", - ":com.android.gki.kmi_5_10_android12_0_test_high", - ":com.android.gki.kmi_5_10_android12_0_test_low", + ":com.android.gki.kmi_5_4_android12_unstable_test_high", + ":com.android.gki.kmi_5_4_android12_unstable_test_low", + ":com.android.gki.kmi_5_10_android12_unstable_test_high", + ":com.android.gki.kmi_5_10_android12_unstable_test_low", ], } @@ -3,3 +3,5 @@ sspatil@google.com tkjos@google.com per-file ota_from_raw_image.py=xunchang@google.com + +include platform/packages/modules/common:/MODULES_OWNERS # see go/mainline-owners-policy diff --git a/build/kmi.go b/build/kmi.go index 27b00bf..cf03cb2 100644 --- a/build/kmi.go +++ b/build/kmi.go @@ -22,7 +22,7 @@ import ( ) var digits = "([0-9]+)" -var reKmi = regexp.MustCompile("^([0-9]+)[.]([0-9]+)-(android[0-9]+)-([0-9]+)$") +var reKmi = regexp.MustCompile("^([0-9]+)[.]([0-9]+)-(android[0-9]+)-([0-9]+|unstable)$") // Input is a valid KMI version, e.g. 5.4-android12-0. // Return a sanitized string to be used as a suffix of APEX package name diff --git a/build_gki_apex_manifest.cpp b/build_gki_apex_manifest.cpp index 016c216..3e6a878 100644 --- a/build_gki_apex_manifest.cpp +++ b/build_gki_apex_manifest.cpp @@ -18,6 +18,7 @@ #include <android-base/file.h> #include <android-base/logging.h> +#include <android-base/strings.h> #include <gflags/gflags.h> #include <json/json.h> #include <kver/kernel_release.h> @@ -28,16 +29,26 @@ using android::kver::GetFactoryApexVersion; using android::kver::KernelRelease; using android::kver::KmiVersion; +static constexpr uint64_t UNSTABLE_GENERATION = UINT64_MAX; + namespace { int CheckKmi(const KernelRelease& kernel_release, const KmiVersion& kmi_version) { const auto& actual_kmi_version = kernel_release.kmi_version(); - if (actual_kmi_version != kmi_version) { - LOG(ERROR) << "KMI version does not match. Actual: " << actual_kmi_version.string() - << ", expected: " << kmi_version.string(); - return EX_SOFTWARE; + if (actual_kmi_version == kmi_version) { + return EX_OK; } - return EX_OK; + if (kmi_version.generation() == UNSTABLE_GENERATION && + kmi_version.version() == actual_kmi_version.version() && + kmi_version.patch_level() == actual_kmi_version.patch_level() && + kmi_version.android_release() == actual_kmi_version.android_release()) { + LOG(WARNING) << "Actual KMI version " << actual_kmi_version.string() + << " matches unstable KMI version"; + return EX_OK; + } + LOG(ERROR) << "KMI version does not match. Actual: " << actual_kmi_version.string() + << ", expected: " << kmi_version.string(); + return EX_SOFTWARE; } int WriteApexManifest(const std::string& apex_name, Json::UInt64 apex_version, @@ -75,7 +86,14 @@ int main(int argc, char** argv) { LOG(ERROR) << "--kmi_version must be set."; return EX_SOFTWARE; } - auto kmi_version = KmiVersion::Parse(FLAGS_kmi_version); + std::string_view kmi_version_sv(FLAGS_kmi_version); + std::string kmi_version_string; + if (android::base::ConsumeSuffix(&kmi_version_sv, "unstable")) { + kmi_version_string = std::string(kmi_version_sv) + std::to_string(UNSTABLE_GENERATION); + } else { + kmi_version_string = kmi_version_sv; + } + auto kmi_version = KmiVersion::Parse(kmi_version_string); if (!kmi_version.has_value()) { LOG(ERROR) << "--kmi_version is not a valid KMI version."; return EX_SOFTWARE; diff --git a/test/src/com/android/gki/tests/GkiInstallTest.java b/test/src/com/android/gki/tests/GkiInstallTest.java index 8ca5272..0b00ba6 100644 --- a/test/src/com/android/gki/tests/GkiInstallTest.java +++ b/test/src/com/android/gki/tests/GkiInstallTest.java @@ -16,11 +16,11 @@ package com.android.gki.tests; +import static org.hamcrest.Matchers.anyOf; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.either; import static org.hamcrest.Matchers.everyItem; import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.isIn; import static org.hamcrest.Matchers.notNullValue; @@ -31,6 +31,7 @@ import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeThat; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; import static java.util.stream.Collectors.toList; @@ -59,7 +60,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Scanner; -import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; @RunWith(DeviceJUnit4Parameterized.class) @UseParametersRunnerFactory(DeviceJUnit4ClassRunnerWithParameters.RunnerFactory.class) @@ -98,6 +100,7 @@ public class GkiInstallTest extends BaseHostJUnit4Test { public void setUp() throws Exception { inferPackageName(); skipTestIfPackageNotInstalled(); + skipTestIfWrongKernelVersion(); findTestApexFile(); prepareOverlayfs(); } @@ -128,6 +131,43 @@ public class GkiInstallTest extends BaseHostJUnit4Test { assumeThat(oldApexInfo.name, is(mPackageName)); } + /** + * Skip the test if APEX package name does not match kernel version. + * + * Due to b/186566367, on mixed builds, the wrong GKI APEX may be installed. In that case, just + * skip the test. + * + * As an exception, the package may contain "unstable" as the generation. When this is the + * case, any generation number in kernel release is considered a match. + * + * @throws Exception + */ + private void skipTestIfWrongKernelVersion() throws Exception { + Pattern packagePattern = Pattern.compile( + "^com\\.android\\.gki\\.kmi_(?<w>\\d+)_(?<x>\\d+)_(?<z>android\\d+)_" + + "(?<k>\\d+|unstable)$"); + Matcher packageMatcher = packagePattern.matcher(mPackageName); + assertTrue(packageMatcher.matches()); + + Pattern kernelPattern = Pattern.compile( + "^Linux version (?<fullrel>(?<w>\\d+)\\.(?<x>\\d+)\\.(?<y>\\d+)-(?<z>android\\d+)" + + "-(?<k>\\d+))"); + String kernel = getDevice().executeShellCommand("cat /proc/version"); + Matcher kernelMatcher = kernelPattern.matcher(kernel); + assumeTrue("Not GKI: " + kernel, kernelMatcher.find()); + + String desc = String.format("package %s vs kernel release %s", mPackageName, + kernelMatcher.group("fullrel")); + + CLog.i("Checking: %s", desc); + + assumeThat(desc, packageMatcher.group("w"), is(kernelMatcher.group("w"))); + assumeThat(desc, packageMatcher.group("x"), is(kernelMatcher.group("x"))); + assumeThat(desc, packageMatcher.group("z"), is(kernelMatcher.group("z"))); + assumeThat(desc, packageMatcher.group("k"), + anyOf(is("unstable"), is(kernelMatcher.group("k")))); + } + /** Find the corresponding APEX test file with mFileName. */ private void findTestApexFile() throws Exception { // Find the APEX file. |