Merge "aconfig: add storage api rust test on the host" into main am: 91ba7d56ea
am: a283b1674f
Original change: https://android-review.googlesource.com/c/platform/build/+/2955288 Change-Id: Ie4d3facdfcbe0ae08ba20020e7188ef3ee364a62 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
11ea4537a3
2 changed files with 192 additions and 0 deletions
18
tools/aconfig/aconfig_storage_file/tests/Android.bp
Normal file
18
tools/aconfig/aconfig_storage_file/tests/Android.bp
Normal file
|
@ -0,0 +1,18 @@
|
|||
rust_test {
|
||||
name: "aconfig_storage.test.rust",
|
||||
srcs: [
|
||||
"storage_lib_rust_test.rs"
|
||||
],
|
||||
rustlibs: [
|
||||
"libanyhow",
|
||||
"libaconfig_storage_file",
|
||||
"libprotobuf",
|
||||
"libtempfile",
|
||||
],
|
||||
data: [
|
||||
":ro.package.map",
|
||||
":ro.flag.map",
|
||||
":ro.flag.val",
|
||||
],
|
||||
test_suites: ["general-tests"],
|
||||
}
|
|
@ -0,0 +1,174 @@
|
|||
#[cfg(not(feature = "cargo"))]
|
||||
mod aconfig_storage_rust_test {
|
||||
use aconfig_storage_file::{
|
||||
get_boolean_flag_value_impl, get_flag_offset_impl, get_package_offset_impl, PackageOffset,
|
||||
ProtoStorageFiles,
|
||||
};
|
||||
use protobuf::Message;
|
||||
use std::io::Write;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
fn write_storage_location_file() -> NamedTempFile {
|
||||
let text_proto = r#"
|
||||
files {
|
||||
version: 0
|
||||
container: "system"
|
||||
package_map: "./tests/tmp.ro.package.map"
|
||||
flag_map: "./tests/tmp.ro.flag.map"
|
||||
flag_val: "./tests/tmp.ro.flag.val"
|
||||
timestamp: 12345
|
||||
}
|
||||
"#;
|
||||
let storage_files: ProtoStorageFiles =
|
||||
protobuf::text_format::parse_from_str(text_proto).unwrap();
|
||||
let mut binary_proto_bytes = Vec::new();
|
||||
storage_files.write_to_vec(&mut binary_proto_bytes).unwrap();
|
||||
let mut file = NamedTempFile::new().unwrap();
|
||||
file.write_all(&binary_proto_bytes).unwrap();
|
||||
file
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_package_offset_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let package_offset = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"system",
|
||||
"com.android.aconfig.storage.test_1",
|
||||
)
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
let expected_package_offset = PackageOffset { package_id: 0, boolean_offset: 0 };
|
||||
assert_eq!(package_offset, expected_package_offset);
|
||||
|
||||
let package_offset = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"system",
|
||||
"com.android.aconfig.storage.test_2",
|
||||
)
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
let expected_package_offset = PackageOffset { package_id: 1, boolean_offset: 3 };
|
||||
assert_eq!(package_offset, expected_package_offset);
|
||||
|
||||
let package_offset = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"system",
|
||||
"com.android.aconfig.storage.test_4",
|
||||
)
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
let expected_package_offset = PackageOffset { package_id: 2, boolean_offset: 6 };
|
||||
assert_eq!(package_offset, expected_package_offset);
|
||||
|
||||
let package_offset = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"system",
|
||||
"com.android.aconfig.storage.test_3",
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(package_offset, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_invalid_package_offset_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let package_offset_option = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"system",
|
||||
"com.android.aconfig.storage.test_3",
|
||||
)
|
||||
.unwrap();
|
||||
assert_eq!(package_offset_option, None);
|
||||
|
||||
let err = get_package_offset_impl(
|
||||
&file_full_path,
|
||||
"vendor",
|
||||
"com.android.aconfig.storage.test_1",
|
||||
)
|
||||
.unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{:?}", err),
|
||||
"StorageFileNotFound(Storage file does not exist for vendor)"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_flag_offset_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let baseline = vec![
|
||||
(0, "enabled_ro", 1u16),
|
||||
(0, "enabled_rw", 2u16),
|
||||
(1, "disabled_ro", 0u16),
|
||||
(2, "enabled_ro", 1u16),
|
||||
(1, "enabled_fixed_ro", 1u16),
|
||||
(1, "enabled_ro", 2u16),
|
||||
(2, "enabled_fixed_ro", 0u16),
|
||||
(0, "disabled_rw", 0u16),
|
||||
];
|
||||
for (package_id, flag_name, expected_offset) in baseline.into_iter() {
|
||||
let flag_offset =
|
||||
get_flag_offset_impl(&file_full_path, "system", package_id, flag_name)
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
assert_eq!(flag_offset, expected_offset);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_invalid_flag_offset_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let flag_offset_option =
|
||||
get_flag_offset_impl(&file_full_path, "system", 0, "none_exist").unwrap();
|
||||
assert_eq!(flag_offset_option, None);
|
||||
|
||||
let flag_offset_option =
|
||||
get_flag_offset_impl(&file_full_path, "system", 3, "enabled_ro").unwrap();
|
||||
assert_eq!(flag_offset_option, None);
|
||||
|
||||
let err = get_flag_offset_impl(&file_full_path, "vendor", 0, "enabled_ro").unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{:?}", err),
|
||||
"StorageFileNotFound(Storage file does not exist for vendor)"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_boolean_flag_value_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let baseline: Vec<bool> = vec![false; 8];
|
||||
for (offset, expected_value) in baseline.into_iter().enumerate() {
|
||||
let flag_value =
|
||||
get_boolean_flag_value_impl(&file_full_path, "system", offset as u32).unwrap();
|
||||
assert_eq!(flag_value, expected_value);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_invalid_boolean_flag_value_query() {
|
||||
let file = write_storage_location_file();
|
||||
let file_full_path = file.path().display().to_string();
|
||||
|
||||
let err = get_boolean_flag_value_impl(&file_full_path, "vendor", 0u32).unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{:?}", err),
|
||||
"StorageFileNotFound(Storage file does not exist for vendor)"
|
||||
);
|
||||
|
||||
let err = get_boolean_flag_value_impl(&file_full_path, "system", 8u32).unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{:?}", err),
|
||||
"InvalidStorageFileOffset(Flag value offset goes beyond the end of the file.)"
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue