summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-06-24 04:48:12 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-06-24 04:48:12 +0000
commit750f77c2df1544b9df6145c163b1cdf58b3cba35 (patch)
tree532b4432ccf2b0e2c7feed3ca7ab70233f0a099f
parent09509b6859dcb32e85710a6eb9ed635e0f4914ac (diff)
parent1240a4592958c420fa7d359324ab2d8ef5a15f60 (diff)
downloadGki-750f77c2df1544b9df6145c163b1cdf58b3cba35.tar.gz
Snap for 7487883 from 1240a4592958c420fa7d359324ab2d8ef5a15f60 to sdk-releaseplatform-tools-31.0.3
Change-Id: I7aecce5383e8d7fc868d16d48b28bbd09fad70c4
-rw-r--r--Android.bp32
-rw-r--r--OWNERS2
-rw-r--r--build/kmi.go2
-rw-r--r--build_gki_apex_manifest.cpp30
-rw-r--r--test/src/com/android/gki/tests/GkiInstallTest.java44
5 files changed, 85 insertions, 25 deletions
diff --git a/Android.bp b/Android.bp
index ab838c5..eb7729b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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",
],
}
diff --git a/OWNERS b/OWNERS
index 554504b..86970fa 100644
--- a/OWNERS
+++ b/OWNERS
@@ -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.