Merge "aconfig: fix template bug in exported mode." into main
diff --git a/OWNERS b/OWNERS
index 97fda40..bd049e9 100644
--- a/OWNERS
+++ b/OWNERS
@@ -2,6 +2,6 @@
# Since this file affects all Android developers, lock it down. There is still
# round the world timzeone coverage.
-per-file envsetup.sh = joeo@google.com, jingwen@google.com, lberki@google.com
-per-file shell_utils.sh = joeo@google.com, jingwen@google.com, lberki@google.com
+per-file envsetup.sh = joeo@google.com, jingwen@google.com
+per-file shell_utils.sh = joeo@google.com, jingwen@google.com
diff --git a/tools/aconfig/Android.bp b/tools/aconfig/Android.bp
index 85202bd..82bfa7e 100644
--- a/tools/aconfig/Android.bp
+++ b/tools/aconfig/Android.bp
@@ -80,6 +80,7 @@
rustlibs: [
"libitertools",
],
+ test_suites: ["general-tests"],
}
// integration tests: general
@@ -138,7 +139,7 @@
"androidx.test.rules",
"testng",
],
- test_suites: ["device-tests"],
+ test_suites: ["general-tests"],
}
java_aconfig_library {
@@ -185,6 +186,7 @@
shared_libs: [
"server_configurable_flags",
],
+ test_suites: ["general-tests"],
}
cc_test {
@@ -199,6 +201,7 @@
shared_libs: [
"server_configurable_flags",
],
+ test_suites: ["general-tests"],
}
rust_aconfig_library {
@@ -215,6 +218,7 @@
rustlibs: [
"libaconfig_test_rust_library",
],
+ test_suites: ["general-tests"],
}
rust_aconfig_library {
@@ -232,4 +236,5 @@
rustlibs: [
"libaconfig_test_rust_library_with_test_mode",
],
+ test_suites: ["general-tests"],
}
diff --git a/tools/aconfig/TEST_MAPPING b/tools/aconfig/TEST_MAPPING
index 74ac5ec..e29918f 100644
--- a/tools/aconfig/TEST_MAPPING
+++ b/tools/aconfig/TEST_MAPPING
@@ -17,5 +17,35 @@
// that using the flag macros to do filtering will get affected.
"name": "FlagMacrosTests"
}
+ ],
+ "postsubmit": [
+ {
+ // aconfig unit tests
+ "name": "aconfig.test"
+ },
+ {
+ // aconfig Java integration tests
+ "name": "aconfig.test.java"
+ },
+ {
+ // aconfig C++ integration tests (production mode auto-generated code)
+ "name": "aconfig.test.cpp"
+ },
+ {
+ // aconfig C++ integration tests (test mode auto-generated code)
+ "name": "aconfig.test.cpp.test_mode"
+ },
+ {
+ // aconfig C++ integration tests (production mode auto-generated code)
+ "name": "aconfig.prod_mode.test.rust"
+ },
+ {
+ // aconfig C++ integration tests (test mode auto-generated code)
+ "name": "aconfig.test_mode.test.rust"
+ },
+ {
+ // printflags unit tests
+ "name": "printflags.test"
+ }
]
}
diff --git a/tools/aconfig/printflags/Android.bp b/tools/aconfig/printflags/Android.bp
index da18cdc..d50a77d 100644
--- a/tools/aconfig/printflags/Android.bp
+++ b/tools/aconfig/printflags/Android.bp
@@ -24,4 +24,5 @@
rust_test_host {
name: "printflags.test",
defaults: ["printflags.defaults"],
+ test_suites: ["general-tests"],
}
diff --git a/tools/aconfig/tests/aconfig_test_test_variant.cpp b/tools/aconfig/tests/aconfig_test_test_variant.cpp
index aef6f38..8a745c5 100644
--- a/tools/aconfig/tests/aconfig_test_test_variant.cpp
+++ b/tools/aconfig/tests/aconfig_test_test_variant.cpp
@@ -19,13 +19,20 @@
using namespace com::android::aconfig::test;
-TEST(AconfigTest, TestDisabledReadOnlyFlag) {
+class AconfigTest : public ::testing::Test {
+ protected:
+ void SetUp() override {
+ reset_flags();
+ }
+};
+
+TEST_F(AconfigTest, TestDisabledReadOnlyFlag) {
ASSERT_FALSE(com_android_aconfig_test_disabled_ro());
ASSERT_FALSE(provider_->disabled_ro());
ASSERT_FALSE(disabled_ro());
}
-TEST(AconfigTest, TestEnabledReadOnlyFlag) {
+TEST_F(AconfigTest, TestEnabledReadOnlyFlag) {
// TODO: change to assertTrue(enabledRo()) when the build supports reading tests/*.values
// (currently all flags are assigned the default READ_ONLY + DISABLED)
ASSERT_FALSE(com_android_aconfig_test_enabled_ro());
@@ -33,13 +40,13 @@
ASSERT_FALSE(enabled_ro());
}
-TEST(AconfigTest, TestDisabledReadWriteFlag) {
+TEST_F(AconfigTest, TestDisabledReadWriteFlag) {
ASSERT_FALSE(com_android_aconfig_test_disabled_rw());
ASSERT_FALSE(provider_->disabled_rw());
ASSERT_FALSE(disabled_rw());
}
-TEST(AconfigTest, TestEnabledReadWriteFlag) {
+TEST_F(AconfigTest, TestEnabledReadWriteFlag) {
// TODO: change to assertTrue(enabledRo()) when the build supports reading tests/*.values
// (currently all flags are assigned the default READ_ONLY + DISABLED)
ASSERT_FALSE(com_android_aconfig_test_enabled_rw());
@@ -47,7 +54,7 @@
ASSERT_FALSE(enabled_rw());
}
-TEST(AconfigTest, TestEnabledFixedReadOnlyFlag) {
+TEST_F(AconfigTest, TestEnabledFixedReadOnlyFlag) {
// TODO: change to assertTrue(enabledFixedRo()) when the build supports reading tests/*.values
// (currently all flags are assigned the default READ_ONLY + DISABLED)
ASSERT_FALSE(com_android_aconfig_test_enabled_fixed_ro());
@@ -55,13 +62,13 @@
ASSERT_FALSE(enabled_fixed_ro());
}
-TEST(AconfigTest, OverrideFlagValue) {
+TEST_F(AconfigTest, OverrideFlagValue) {
ASSERT_FALSE(disabled_ro());
disabled_ro(true);
ASSERT_TRUE(disabled_ro());
}
-TEST(AconfigTest, ResetFlagValue) {
+TEST_F(AconfigTest, ResetFlagValue) {
ASSERT_FALSE(disabled_ro());
ASSERT_FALSE(enabled_ro());
disabled_ro(true);
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index fa4ed09..4a5facd 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -256,6 +256,9 @@
--max_threads
Specify max number of threads allowed when generating A/B OTA
+
+ --vabc_cow_version
+ Specify the VABC cow version to be used
"""
from __future__ import print_function
@@ -327,10 +330,12 @@
OPTIONS.vabc_compression_param = None
OPTIONS.security_patch_level = None
OPTIONS.max_threads = None
+OPTIONS.vabc_cow_version = None
POSTINSTALL_CONFIG = 'META/postinstall_config.txt'
DYNAMIC_PARTITION_INFO = 'META/dynamic_partitions_info.txt'
+MISC_INFO = 'META/misc_info.txt'
AB_PARTITIONS = 'META/ab_partitions.txt'
# Files to be unzipped for target diffing purpose.
@@ -357,6 +362,25 @@
oem_dicts.append(common.LoadDictionaryFromFile(oem_file))
return oem_dicts
+def ModifyKeyvalueList(content: str, key: str, value: str):
+ """ Update update the key value list with specified key and value
+ Args:
+ content: The string content of dynamic_partitions_info.txt. Each line
+ should be a key valur pair, where string before the first '=' are keys,
+ remaining parts are values.
+ key: the key of the key value pair to modify
+ value: the new value to replace with
+
+ Returns:
+ Updated content of the key value list
+ """
+ output_list = []
+ for line in content.splitlines():
+ if line.startswith(key+"="):
+ continue
+ output_list.append(line)
+ output_list.append("{}={}".format(key, value))
+ return "\n".join(output_list)
def ModifyVABCCompressionParam(content, algo):
""" Update update VABC Compression Param in dynamic_partitions_info.txt
@@ -367,13 +391,18 @@
Returns:
Updated content of dynamic_partitions_info.txt , with custom compression algo
"""
- output_list = []
- for line in content.splitlines():
- if line.startswith("virtual_ab_compression_method="):
- continue
- output_list.append(line)
- output_list.append("virtual_ab_compression_method="+algo)
- return "\n".join(output_list)
+ return ModifyKeyvalueList(content, "virtual_ab_compression_method", algo)
+
+def SetVABCCowVersion(content, cow_version):
+ """ Update virtual_ab_cow_version in dynamic_partitions_info.txt
+ Args:
+ content: The string content of dynamic_partitions_info.txt
+ algo: The cow version be used for VABC. See
+ https://cs.android.com/android/platform/superproject/main/+/main:system/core/fs_mgr/libsnapshot/include/libsnapshot/cow_format.h;l=36
+ Returns:
+ Updated content of dynamic_partitions_info.txt , updated cow version
+ """
+ return ModifyKeyvalueList(content, "virtual_ab_cow_version", cow_version)
def UpdatesInfoForSpecialUpdates(content, partitions_filter,
@@ -533,8 +562,7 @@
def ParseInfoDict(target_file_path):
return common.LoadInfoDict(target_file_path)
-
-def GetTargetFilesZipForCustomVABCCompression(input_file, vabc_compression_param):
+def ModifyTargetFilesDynamicPartitionInfo(input_file, key, value):
"""Returns a target-files.zip with a custom VABC compression param.
Args:
input_file: The input target-files.zip path
@@ -545,11 +573,11 @@
"""
if os.path.isdir(input_file):
dynamic_partition_info_path = os.path.join(
- input_file, "META", "dynamic_partitions_info.txt")
+ input_file, *DYNAMIC_PARTITION_INFO.split("/"))
with open(dynamic_partition_info_path, "r") as fp:
dynamic_partition_info = fp.read()
- dynamic_partition_info = ModifyVABCCompressionParam(
- dynamic_partition_info, vabc_compression_param)
+ dynamic_partition_info = ModifyKeyvalueList(
+ dynamic_partition_info, key, value)
with open(dynamic_partition_info_path, "w") as fp:
fp.write(dynamic_partition_info)
return input_file
@@ -559,12 +587,23 @@
common.ZipDelete(target_file, DYNAMIC_PARTITION_INFO)
with zipfile.ZipFile(input_file, 'r', allowZip64=True) as zfp:
dynamic_partition_info = zfp.read(DYNAMIC_PARTITION_INFO).decode()
- dynamic_partition_info = ModifyVABCCompressionParam(
- dynamic_partition_info, vabc_compression_param)
+ dynamic_partition_info = ModifyKeyvalueList(
+ dynamic_partition_info, key, value)
with zipfile.ZipFile(target_file, "a", allowZip64=True) as output_zip:
output_zip.writestr(DYNAMIC_PARTITION_INFO, dynamic_partition_info)
return target_file
+def GetTargetFilesZipForCustomVABCCompression(input_file, vabc_compression_param):
+ """Returns a target-files.zip with a custom VABC compression param.
+ Args:
+ input_file: The input target-files.zip path
+ vabc_compression_param: Custom Virtual AB Compression algorithm
+
+ Returns:
+ The path to modified target-files.zip
+ """
+ return ModifyTargetFilesDynamicPartitionInfo(input_file, "virtual_ab_compression_method", vabc_compression_param)
+
def GetTargetFilesZipForPartialUpdates(input_file, ab_partitions):
"""Returns a target-files.zip for partial ota update package generation.
@@ -979,6 +1018,8 @@
if vabc_compression_param != target_info.vabc_compression_param:
target_file = GetTargetFilesZipForCustomVABCCompression(
target_file, vabc_compression_param)
+ if OPTIONS.vabc_cow_version:
+ target_file = ModifyTargetFilesDynamicPartitionInfo(target_file, "virtual_ab_cow_version", OPTIONS.vabc_cow_version)
if OPTIONS.skip_postinstall:
target_file = GetTargetFilesZipWithoutPostinstallConfig(target_file)
# Target_file may have been modified, reparse ab_partitions
@@ -1235,6 +1276,12 @@
else:
raise ValueError("Cannot parse value %r for option %r - only "
"integers are allowed." % (a, o))
+ elif o == "--vabc_cow_version":
+ if a.isdigit():
+ OPTIONS.vabc_cow_version = a
+ else:
+ raise ValueError("Cannot parse value %r for option %r - only "
+ "integers are allowed." % (a, o))
else:
return False
return True
@@ -1283,6 +1330,7 @@
"vabc_compression_param=",
"security_patch_level=",
"max_threads=",
+ "vabc_cow_version=",
], extra_option_handler=[option_handler, payload_signer.signer_options])
common.InitLogging()
diff --git a/tools/sbom/generate-sbom.py b/tools/sbom/generate-sbom.py
index 5eae262..72f896b 100755
--- a/tools/sbom/generate-sbom.py
+++ b/tools/sbom/generate-sbom.py
@@ -347,7 +347,7 @@
sbom_checksum = metadata_proto.third_party.sbom_ref.checksum
upstream_element_id = metadata_proto.third_party.sbom_ref.element_id
if sbom_url and sbom_checksum and upstream_element_id:
- doc_ref_id = f'DocumentRef-{PKG_UPSTREAM}-{encode_for_spdxid(name)}'
+ doc_ref_id = f'DocumentRef-{PKG_UPSTREAM}-{sbom_data.encode_for_spdxid(name)}'
external_doc_ref = sbom_data.DocumentExternalReference(id=doc_ref_id,
uri=sbom_url,
checksum=sbom_checksum)