aconfig: test updates
Previously, three seperate crates create their own test baseline which are nearly identical. This is inconvinent when updating the baselines. All three locations needs to be touched. This cl merges functions to create test storage file base struct into aconfig_storage_file crate Bug: b/321077378 Test: atest aconfig.test Change-Id: Ic97437f856763347a11de8b449592292014bcce3
This commit is contained in:
@@ -141,79 +141,18 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::storage::{group_flags_by_package, tests::parse_all_test_flags};
|
||||
|
||||
// create test baseline, syntactic sugar
|
||||
fn new_expected_node(
|
||||
package_id: u32,
|
||||
flag_name: &str,
|
||||
flag_type: u16,
|
||||
flag_id: u16,
|
||||
next_offset: Option<u32>,
|
||||
) -> FlagTableNode {
|
||||
FlagTableNode {
|
||||
package_id,
|
||||
flag_name: flag_name.to_string(),
|
||||
flag_type: StoredFlagType::try_from(flag_type).unwrap(),
|
||||
flag_id,
|
||||
next_offset,
|
||||
}
|
||||
}
|
||||
|
||||
fn create_test_flag_table() -> Result<FlagTable> {
|
||||
fn create_test_flag_table_from_source() -> Result<FlagTable> {
|
||||
let caches = parse_all_test_flags();
|
||||
let packages = group_flags_by_package(caches.iter());
|
||||
create_flag_table("system", &packages)
|
||||
create_flag_table("mockup", &packages)
|
||||
}
|
||||
|
||||
#[test]
|
||||
// this test point locks down the table creation and each field
|
||||
fn test_table_contents() {
|
||||
let flag_table = create_test_flag_table();
|
||||
let flag_table = create_test_flag_table_from_source();
|
||||
assert!(flag_table.is_ok());
|
||||
|
||||
let header: &FlagTableHeader = &flag_table.as_ref().unwrap().header;
|
||||
let expected_header = FlagTableHeader {
|
||||
version: FILE_VERSION,
|
||||
container: String::from("system"),
|
||||
file_type: StorageFileType::FlagMap as u8,
|
||||
file_size: 321,
|
||||
num_flags: 8,
|
||||
bucket_offset: 31,
|
||||
node_offset: 99,
|
||||
};
|
||||
assert_eq!(header, &expected_header);
|
||||
|
||||
let buckets: &Vec<Option<u32>> = &flag_table.as_ref().unwrap().buckets;
|
||||
let expected_bucket: Vec<Option<u32>> = vec![
|
||||
Some(99),
|
||||
Some(125),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some(178),
|
||||
None,
|
||||
Some(204),
|
||||
None,
|
||||
Some(262),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some(294),
|
||||
None,
|
||||
];
|
||||
assert_eq!(buckets, &expected_bucket);
|
||||
|
||||
let nodes: &Vec<FlagTableNode> = &flag_table.as_ref().unwrap().nodes;
|
||||
assert_eq!(nodes.len(), 8);
|
||||
|
||||
assert_eq!(nodes[0], new_expected_node(0, "enabled_ro", 1, 1, None));
|
||||
assert_eq!(nodes[1], new_expected_node(0, "enabled_rw", 0, 2, Some(151)));
|
||||
assert_eq!(nodes[2], new_expected_node(1, "disabled_ro", 1, 0, None));
|
||||
assert_eq!(nodes[3], new_expected_node(2, "enabled_ro", 1, 1, None));
|
||||
assert_eq!(nodes[4], new_expected_node(1, "enabled_fixed_ro", 2, 1, Some(236)));
|
||||
assert_eq!(nodes[5], new_expected_node(1, "enabled_ro", 1, 2, None));
|
||||
assert_eq!(nodes[6], new_expected_node(2, "enabled_fixed_ro", 2, 0, None));
|
||||
assert_eq!(nodes[7], new_expected_node(0, "disabled_rw", 0, 0, None));
|
||||
let expected_flag_table = aconfig_storage_file::test_utils::create_test_flag_table();
|
||||
assert_eq!(flag_table.unwrap(), expected_flag_table);
|
||||
}
|
||||
}
|
||||
|
@@ -64,31 +64,19 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::storage::{group_flags_by_package, tests::parse_all_test_flags};
|
||||
|
||||
pub fn create_test_flag_value_list() -> Result<FlagValueList> {
|
||||
pub fn create_test_flag_value_list_from_source() -> Result<FlagValueList> {
|
||||
let caches = parse_all_test_flags();
|
||||
let packages = group_flags_by_package(caches.iter());
|
||||
create_flag_value("system", &packages)
|
||||
create_flag_value("mockup", &packages)
|
||||
}
|
||||
|
||||
#[test]
|
||||
// this test point locks down the flag value creation and each field
|
||||
fn test_list_contents() {
|
||||
let flag_value_list = create_test_flag_value_list();
|
||||
let flag_value_list = create_test_flag_value_list_from_source();
|
||||
assert!(flag_value_list.is_ok());
|
||||
|
||||
let header: &FlagValueHeader = &flag_value_list.as_ref().unwrap().header;
|
||||
let expected_header = FlagValueHeader {
|
||||
version: FILE_VERSION,
|
||||
container: String::from("system"),
|
||||
file_type: StorageFileType::FlagVal as u8,
|
||||
file_size: 35,
|
||||
num_flags: 8,
|
||||
boolean_value_offset: 27,
|
||||
};
|
||||
assert_eq!(header, &expected_header);
|
||||
|
||||
let booleans: &Vec<bool> = &flag_value_list.as_ref().unwrap().booleans;
|
||||
let expected_booleans: Vec<bool> = vec![false, true, true, false, true, true, true, true];
|
||||
assert_eq!(booleans, &expected_booleans);
|
||||
let expected_flag_value_list =
|
||||
aconfig_storage_file::test_utils::create_test_flag_value_list();
|
||||
assert_eq!(flag_value_list.unwrap(), expected_flag_value_list);
|
||||
}
|
||||
}
|
||||
|
@@ -109,56 +109,18 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::storage::{group_flags_by_package, tests::parse_all_test_flags};
|
||||
|
||||
pub fn create_test_package_table() -> Result<PackageTable> {
|
||||
pub fn create_test_package_table_from_source() -> Result<PackageTable> {
|
||||
let caches = parse_all_test_flags();
|
||||
let packages = group_flags_by_package(caches.iter());
|
||||
create_package_table("system", &packages)
|
||||
create_package_table("mockup", &packages)
|
||||
}
|
||||
|
||||
#[test]
|
||||
// this test point locks down the table creation and each field
|
||||
fn test_table_contents() {
|
||||
let package_table = create_test_package_table();
|
||||
let package_table = create_test_package_table_from_source();
|
||||
assert!(package_table.is_ok());
|
||||
|
||||
let header: &PackageTableHeader = &package_table.as_ref().unwrap().header;
|
||||
let expected_header = PackageTableHeader {
|
||||
version: FILE_VERSION,
|
||||
container: String::from("system"),
|
||||
file_type: StorageFileType::PackageMap as u8,
|
||||
file_size: 209,
|
||||
num_packages: 3,
|
||||
bucket_offset: 31,
|
||||
node_offset: 59,
|
||||
};
|
||||
assert_eq!(header, &expected_header);
|
||||
|
||||
let buckets: &Vec<Option<u32>> = &package_table.as_ref().unwrap().buckets;
|
||||
let expected: Vec<Option<u32>> = vec![Some(59), None, None, Some(109), None, None, None];
|
||||
assert_eq!(buckets, &expected);
|
||||
|
||||
let nodes: &Vec<PackageTableNode> = &package_table.as_ref().unwrap().nodes;
|
||||
assert_eq!(nodes.len(), 3);
|
||||
let first_node_expected = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_2"),
|
||||
package_id: 1,
|
||||
boolean_offset: 3,
|
||||
next_offset: None,
|
||||
};
|
||||
assert_eq!(nodes[0], first_node_expected);
|
||||
let second_node_expected = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_1"),
|
||||
package_id: 0,
|
||||
boolean_offset: 0,
|
||||
next_offset: Some(159),
|
||||
};
|
||||
assert_eq!(nodes[1], second_node_expected);
|
||||
let third_node_expected = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_4"),
|
||||
package_id: 2,
|
||||
boolean_offset: 6,
|
||||
next_offset: None,
|
||||
};
|
||||
assert_eq!(nodes[2], third_node_expected);
|
||||
let expected_package_table = aconfig_storage_file::test_utils::create_test_package_table();
|
||||
assert_eq!(package_table.unwrap(), expected_package_table);
|
||||
}
|
||||
}
|
||||
|
@@ -251,7 +251,7 @@ mod tests {
|
||||
let bytes = &flag_table.into_bytes();
|
||||
let mut head = 0;
|
||||
let version = read_u32_from_bytes(bytes, &mut head).unwrap();
|
||||
assert_eq!(version, 1234)
|
||||
assert_eq!(version, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@@ -158,7 +158,7 @@ mod tests {
|
||||
let bytes = &flag_value_list.into_bytes();
|
||||
let mut head = 0;
|
||||
let version = read_u32_from_bytes(bytes, &mut head).unwrap();
|
||||
assert_eq!(version, 1234)
|
||||
assert_eq!(version, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@@ -37,9 +37,7 @@ pub mod flag_table;
|
||||
pub mod flag_value;
|
||||
pub mod package_table;
|
||||
pub mod protos;
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_utils;
|
||||
pub mod test_utils;
|
||||
|
||||
use anyhow::anyhow;
|
||||
use std::collections::hash_map::DefaultHasher;
|
||||
@@ -295,7 +293,7 @@ mod tests {
|
||||
list_flags(&package_table_path, &flag_table_path, &flag_value_list_path).unwrap();
|
||||
let expected = [
|
||||
(String::from("com.android.aconfig.storage.test_1"), String::from("enabled_ro"), true),
|
||||
(String::from("com.android.aconfig.storage.test_1"), String::from("enabled_rw"), false),
|
||||
(String::from("com.android.aconfig.storage.test_1"), String::from("enabled_rw"), true),
|
||||
(
|
||||
String::from("com.android.aconfig.storage.test_1"),
|
||||
String::from("disabled_rw"),
|
||||
@@ -316,7 +314,7 @@ mod tests {
|
||||
(
|
||||
String::from("com.android.aconfig.storage.test_4"),
|
||||
String::from("enabled_fixed_ro"),
|
||||
false,
|
||||
true,
|
||||
),
|
||||
];
|
||||
assert_eq!(flags, expected);
|
||||
|
@@ -250,7 +250,7 @@ mod tests {
|
||||
let bytes = &package_table.into_bytes();
|
||||
let mut head = 0;
|
||||
let version = read_u32_from_bytes(bytes, &mut head).unwrap();
|
||||
assert_eq!(version, 1234)
|
||||
assert_eq!(version, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@@ -24,10 +24,10 @@ use anyhow::anyhow;
|
||||
use std::io::Write;
|
||||
use tempfile::NamedTempFile;
|
||||
|
||||
pub(crate) fn create_test_package_table() -> PackageTable {
|
||||
pub fn create_test_package_table() -> PackageTable {
|
||||
let header = PackageTableHeader {
|
||||
version: 1234,
|
||||
container: String::from("system"),
|
||||
version: 1,
|
||||
container: String::from("mockup"),
|
||||
file_type: StorageFileType::PackageMap as u8,
|
||||
file_size: 209,
|
||||
num_packages: 3,
|
||||
@@ -76,10 +76,10 @@ impl FlagTableNode {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn create_test_flag_table() -> FlagTable {
|
||||
pub fn create_test_flag_table() -> FlagTable {
|
||||
let header = FlagTableHeader {
|
||||
version: 1234,
|
||||
container: String::from("system"),
|
||||
version: 1,
|
||||
container: String::from("mockup"),
|
||||
file_type: StorageFileType::FlagMap as u8,
|
||||
file_size: 321,
|
||||
num_flags: 8,
|
||||
@@ -107,34 +107,34 @@ pub(crate) fn create_test_flag_table() -> FlagTable {
|
||||
];
|
||||
let nodes = vec![
|
||||
FlagTableNode::new_expected(0, "enabled_ro", 1, 1, None),
|
||||
FlagTableNode::new_expected(0, "enabled_rw", 1, 2, Some(151)),
|
||||
FlagTableNode::new_expected(0, "enabled_rw", 0, 2, Some(151)),
|
||||
FlagTableNode::new_expected(1, "disabled_ro", 1, 0, None),
|
||||
FlagTableNode::new_expected(2, "enabled_ro", 1, 1, None),
|
||||
FlagTableNode::new_expected(1, "enabled_fixed_ro", 1, 1, Some(236)),
|
||||
FlagTableNode::new_expected(1, "enabled_fixed_ro", 2, 1, Some(236)),
|
||||
FlagTableNode::new_expected(1, "enabled_ro", 1, 2, None),
|
||||
FlagTableNode::new_expected(2, "enabled_fixed_ro", 1, 0, None),
|
||||
FlagTableNode::new_expected(0, "disabled_rw", 1, 0, None),
|
||||
FlagTableNode::new_expected(2, "enabled_fixed_ro", 2, 0, None),
|
||||
FlagTableNode::new_expected(0, "disabled_rw", 0, 0, None),
|
||||
];
|
||||
FlagTable { header, buckets, nodes }
|
||||
}
|
||||
|
||||
pub(crate) fn create_test_flag_value_list() -> FlagValueList {
|
||||
pub fn create_test_flag_value_list() -> FlagValueList {
|
||||
let header = FlagValueHeader {
|
||||
version: 1234,
|
||||
container: String::from("system"),
|
||||
version: 1,
|
||||
container: String::from("mockup"),
|
||||
file_type: StorageFileType::FlagVal as u8,
|
||||
file_size: 35,
|
||||
num_flags: 8,
|
||||
boolean_value_offset: 27,
|
||||
};
|
||||
let booleans: Vec<bool> = vec![false, true, false, false, true, true, false, true];
|
||||
let booleans: Vec<bool> = vec![false, true, true, false, true, true, true, true];
|
||||
FlagValueList { header, booleans }
|
||||
}
|
||||
|
||||
pub(crate) fn create_test_flag_info_list() -> FlagInfoList {
|
||||
pub fn create_test_flag_info_list() -> FlagInfoList {
|
||||
let header = FlagInfoHeader {
|
||||
version: 1234,
|
||||
container: String::from("system"),
|
||||
container: String::from("mockup"),
|
||||
file_type: StorageFileType::FlagInfo as u8,
|
||||
file_size: 35,
|
||||
num_flags: 8,
|
||||
@@ -144,7 +144,7 @@ pub(crate) fn create_test_flag_info_list() -> FlagInfoList {
|
||||
FlagInfoList { header, nodes }
|
||||
}
|
||||
|
||||
pub(crate) fn write_bytes_to_temp_file(bytes: &[u8]) -> Result<NamedTempFile, AconfigStorageError> {
|
||||
pub fn write_bytes_to_temp_file(bytes: &[u8]) -> Result<NamedTempFile, AconfigStorageError> {
|
||||
let mut file = NamedTempFile::new().map_err(|_| {
|
||||
AconfigStorageError::FileCreationFail(anyhow!("Failed to create temp file"))
|
||||
})?;
|
||||
|
@@ -65,66 +65,7 @@ pub fn find_flag_offset(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use aconfig_storage_file::{FlagTable, StorageFileType, StoredFlagType};
|
||||
|
||||
// create test baseline, syntactic sugar
|
||||
fn new_expected_node(
|
||||
package_id: u32,
|
||||
flag_name: &str,
|
||||
flag_type: u16,
|
||||
flag_id: u16,
|
||||
next_offset: Option<u32>,
|
||||
) -> FlagTableNode {
|
||||
FlagTableNode {
|
||||
package_id,
|
||||
flag_name: flag_name.to_string(),
|
||||
flag_type: StoredFlagType::try_from(flag_type).unwrap(),
|
||||
flag_id,
|
||||
next_offset,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_test_flag_table() -> FlagTable {
|
||||
let header = FlagTableHeader {
|
||||
version: crate::FILE_VERSION,
|
||||
container: String::from("system"),
|
||||
file_type: StorageFileType::FlagMap as u8,
|
||||
file_size: 321,
|
||||
num_flags: 8,
|
||||
bucket_offset: 31,
|
||||
node_offset: 99,
|
||||
};
|
||||
let buckets: Vec<Option<u32>> = vec![
|
||||
Some(99),
|
||||
Some(125),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some(178),
|
||||
None,
|
||||
Some(204),
|
||||
None,
|
||||
Some(262),
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
Some(294),
|
||||
None,
|
||||
];
|
||||
let nodes = vec![
|
||||
new_expected_node(0, "enabled_ro", 1, 1, None),
|
||||
new_expected_node(0, "enabled_rw", 1, 2, Some(151)),
|
||||
new_expected_node(1, "disabled_ro", 1, 0, None),
|
||||
new_expected_node(2, "enabled_ro", 1, 1, None),
|
||||
new_expected_node(1, "enabled_fixed_ro", 1, 1, Some(236)),
|
||||
new_expected_node(1, "enabled_ro", 1, 2, None),
|
||||
new_expected_node(2, "enabled_fixed_ro", 1, 0, None),
|
||||
new_expected_node(0, "disabled_rw", 1, 0, None),
|
||||
];
|
||||
FlagTable { header, buckets, nodes }
|
||||
}
|
||||
use aconfig_storage_file::test_utils::create_test_flag_table;
|
||||
|
||||
#[test]
|
||||
// this test point locks down table query
|
||||
|
@@ -326,7 +326,7 @@ mod tests {
|
||||
r#"
|
||||
files {{
|
||||
version: 0
|
||||
container: "system"
|
||||
container: "mockup"
|
||||
package_map: "{}"
|
||||
flag_map: "{}"
|
||||
flag_val: "{}"
|
||||
@@ -347,7 +347,7 @@ files {{
|
||||
let [_package_map, _flag_map, _flag_val, pb_file] = create_test_storage_files();
|
||||
let pb_file_path = pb_file.path().display().to_string();
|
||||
let package_mapped_file = unsafe {
|
||||
get_mapped_file(&pb_file_path, "system", StorageFileType::PackageMap).unwrap()
|
||||
get_mapped_file(&pb_file_path, "mockup", StorageFileType::PackageMap).unwrap()
|
||||
};
|
||||
|
||||
let package_offset =
|
||||
@@ -378,7 +378,7 @@ files {{
|
||||
let [_package_map, _flag_map, _flag_val, pb_file] = create_test_storage_files();
|
||||
let pb_file_path = pb_file.path().display().to_string();
|
||||
let flag_mapped_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagMap).unwrap() };
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagMap).unwrap() };
|
||||
|
||||
let baseline = vec![
|
||||
(0, "enabled_ro", 1u16),
|
||||
@@ -403,8 +403,8 @@ files {{
|
||||
let [_package_map, _flag_map, _flag_val, pb_file] = create_test_storage_files();
|
||||
let pb_file_path = pb_file.path().display().to_string();
|
||||
let flag_value_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagVal).unwrap() };
|
||||
let baseline: Vec<bool> = vec![false; 8];
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagVal).unwrap() };
|
||||
let baseline: Vec<bool> = vec![false, true, true, false, true, true, true, true];
|
||||
for (offset, expected_value) in baseline.into_iter().enumerate() {
|
||||
let flag_value = get_boolean_flag_value(&flag_value_file, offset as u32).unwrap();
|
||||
assert_eq!(flag_value, expected_value);
|
||||
|
@@ -72,40 +72,7 @@ pub fn find_package_offset(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use aconfig_storage_file::{PackageTable, StorageFileType};
|
||||
|
||||
pub fn create_test_package_table() -> PackageTable {
|
||||
let header = PackageTableHeader {
|
||||
version: crate::FILE_VERSION,
|
||||
container: String::from("system"),
|
||||
file_type: StorageFileType::PackageMap as u8,
|
||||
file_size: 209,
|
||||
num_packages: 3,
|
||||
bucket_offset: 31,
|
||||
node_offset: 59,
|
||||
};
|
||||
let buckets: Vec<Option<u32>> = vec![Some(59), None, None, Some(109), None, None, None];
|
||||
let first_node = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_2"),
|
||||
package_id: 1,
|
||||
boolean_offset: 3,
|
||||
next_offset: None,
|
||||
};
|
||||
let second_node = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_1"),
|
||||
package_id: 0,
|
||||
boolean_offset: 0,
|
||||
next_offset: Some(159),
|
||||
};
|
||||
let third_node = PackageTableNode {
|
||||
package_name: String::from("com.android.aconfig.storage.test_4"),
|
||||
package_id: 2,
|
||||
boolean_offset: 6,
|
||||
next_offset: None,
|
||||
};
|
||||
let nodes = vec![first_node, second_node, third_node];
|
||||
PackageTable { header, buckets, nodes }
|
||||
}
|
||||
use aconfig_storage_file::test_utils::create_test_package_table;
|
||||
|
||||
#[test]
|
||||
// this test point locks down table query
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -52,7 +52,7 @@ class AconfigStorageTest : public ::testing::Test {
|
||||
auto proto = storage_files();
|
||||
auto* info = proto.add_files();
|
||||
info->set_version(0);
|
||||
info->set_container("system");
|
||||
info->set_container("mockup");
|
||||
info->set_package_map(package_map);
|
||||
info->set_flag_map(flag_map);
|
||||
info->set_flag_val(flag_val);
|
||||
@@ -113,7 +113,7 @@ TEST_F(AconfigStorageTest, test_none_exist_storage_file_mapping) {
|
||||
/// Test to lock down storage package offset query api
|
||||
TEST_F(AconfigStorageTest, test_package_offset_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::package_map);
|
||||
storage_record_pb, "mockup", api::StorageFileType::package_map);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto offset = api::get_package_offset(
|
||||
@@ -141,7 +141,7 @@ TEST_F(AconfigStorageTest, test_package_offset_query) {
|
||||
/// Test to lock down when querying none exist package
|
||||
TEST_F(AconfigStorageTest, test_none_existent_package_offset_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::package_map);
|
||||
storage_record_pb, "mockup", api::StorageFileType::package_map);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto offset = api::get_package_offset(
|
||||
@@ -153,7 +153,7 @@ TEST_F(AconfigStorageTest, test_none_existent_package_offset_query) {
|
||||
/// Test to lock down storage flag offset query api
|
||||
TEST_F(AconfigStorageTest, test_flag_offset_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::flag_map);
|
||||
storage_record_pb, "mockup", api::StorageFileType::flag_map);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto baseline = std::vector<std::tuple<int, std::string, int>>{
|
||||
@@ -177,7 +177,7 @@ TEST_F(AconfigStorageTest, test_flag_offset_query) {
|
||||
/// Test to lock down when querying none exist flag
|
||||
TEST_F(AconfigStorageTest, test_none_existent_flag_offset_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::flag_map);
|
||||
storage_record_pb, "mockup", api::StorageFileType::flag_map);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto offset = api::get_flag_offset(*mapped_file, 0, "none_exist");
|
||||
@@ -192,20 +192,22 @@ TEST_F(AconfigStorageTest, test_none_existent_flag_offset_query) {
|
||||
/// Test to lock down storage flag value query api
|
||||
TEST_F(AconfigStorageTest, test_boolean_flag_value_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::flag_val);
|
||||
storage_record_pb, "mockup", api::StorageFileType::flag_val);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto expected_value = std::vector<bool>{
|
||||
false, true, true, false, true, true, true, true};
|
||||
for (int offset = 0; offset < 8; ++offset) {
|
||||
auto value = api::get_boolean_flag_value(*mapped_file, offset);
|
||||
ASSERT_TRUE(value.ok());
|
||||
ASSERT_FALSE(*value);
|
||||
ASSERT_EQ(*value, expected_value[offset]);
|
||||
}
|
||||
}
|
||||
|
||||
/// Negative test to lock down the error when querying flag value out of range
|
||||
TEST_F(AconfigStorageTest, test_invalid_boolean_flag_value_query) {
|
||||
auto mapped_file = private_api::get_mapped_file_impl(
|
||||
storage_record_pb, "system", api::StorageFileType::flag_val);
|
||||
storage_record_pb, "mockup", api::StorageFileType::flag_val);
|
||||
ASSERT_TRUE(mapped_file.ok());
|
||||
|
||||
auto value = api::get_boolean_flag_value(*mapped_file, 8);
|
||||
|
@@ -24,7 +24,7 @@ mod aconfig_storage_rust_test {
|
||||
r#"
|
||||
files {{
|
||||
version: 0
|
||||
container: "system"
|
||||
container: "mockup"
|
||||
package_map: "{}"
|
||||
flag_map: "{}"
|
||||
flag_val: "{}"
|
||||
@@ -61,7 +61,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let package_mapped_file = unsafe {
|
||||
get_mapped_file(&pb_file_path, "system", StorageFileType::PackageMap).unwrap()
|
||||
get_mapped_file(&pb_file_path, "mockup", StorageFileType::PackageMap).unwrap()
|
||||
};
|
||||
|
||||
let package_offset =
|
||||
@@ -93,7 +93,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let package_mapped_file = unsafe {
|
||||
get_mapped_file(&pb_file_path, "system", StorageFileType::PackageMap).unwrap()
|
||||
get_mapped_file(&pb_file_path, "mockup", StorageFileType::PackageMap).unwrap()
|
||||
};
|
||||
|
||||
let package_offset_option =
|
||||
@@ -108,7 +108,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let flag_mapped_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagMap).unwrap() };
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagMap).unwrap() };
|
||||
|
||||
let baseline = vec![
|
||||
(0, "enabled_ro", 1u16),
|
||||
@@ -134,7 +134,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let flag_mapped_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagMap).unwrap() };
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagMap).unwrap() };
|
||||
let flag_offset_option = get_flag_offset(&flag_mapped_file, 0, "none_exist").unwrap();
|
||||
assert_eq!(flag_offset_option, None);
|
||||
|
||||
@@ -149,8 +149,8 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let flag_value_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagVal).unwrap() };
|
||||
let baseline: Vec<bool> = vec![false; 8];
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagVal).unwrap() };
|
||||
let baseline: Vec<bool> = vec![false, true, true, false, true, true, true, true];
|
||||
for (offset, expected_value) in baseline.into_iter().enumerate() {
|
||||
let flag_value = get_boolean_flag_value(&flag_value_file, offset as u32).unwrap();
|
||||
assert_eq!(flag_value, expected_value);
|
||||
@@ -164,7 +164,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as the test process will not write to temp storage file
|
||||
let flag_value_file =
|
||||
unsafe { get_mapped_file(&pb_file_path, "system", StorageFileType::FlagVal).unwrap() };
|
||||
unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagVal).unwrap() };
|
||||
let err = get_boolean_flag_value(&flag_value_file, 8u32).unwrap_err();
|
||||
assert_eq!(
|
||||
format!("{:?}", err),
|
||||
|
@@ -62,7 +62,7 @@ static Result<MappedFlagValueFile> map_storage_file(std::string const& file) {
|
||||
}
|
||||
|
||||
if ((file_stat.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)) == 0) {
|
||||
return ErrnoError() << "cannot map nonwriteable file";
|
||||
return Error() << "cannot map nonwriteable file";
|
||||
}
|
||||
|
||||
size_t file_size = file_stat.st_size;
|
||||
|
Binary file not shown.
@@ -55,7 +55,7 @@ class AconfigStorageTest : public ::testing::Test {
|
||||
auto proto = storage_files();
|
||||
auto* info = proto.add_files();
|
||||
info->set_version(0);
|
||||
info->set_container("system");
|
||||
info->set_container("mockup");
|
||||
info->set_package_map("some_package.map");
|
||||
info->set_flag_map("some_flag.map");
|
||||
info->set_flag_val(flag_val);
|
||||
@@ -97,15 +97,16 @@ TEST_F(AconfigStorageTest, test_none_exist_storage_file_mapping) {
|
||||
TEST_F(AconfigStorageTest, test_non_writable_storage_file_mapping) {
|
||||
ASSERT_TRUE(chmod(flag_val.c_str(), S_IRUSR | S_IRGRP | S_IROTH) != -1);
|
||||
auto mapped_file_result = private_api::get_mapped_flag_value_file_impl(
|
||||
storage_record_pb, "system");
|
||||
storage_record_pb, "mockup");
|
||||
ASSERT_FALSE(mapped_file_result.ok());
|
||||
ASSERT_EQ(mapped_file_result.error().message(), "cannot map nonwriteable file");
|
||||
auto it = mapped_file_result.error().message().find("cannot map nonwriteable file");
|
||||
ASSERT_TRUE(it != std::string::npos) << mapped_file_result.error().message();
|
||||
}
|
||||
|
||||
/// Test to lock down storage flag value update api
|
||||
TEST_F(AconfigStorageTest, test_boolean_flag_value_update) {
|
||||
auto mapped_file_result = private_api::get_mapped_flag_value_file_impl(
|
||||
storage_record_pb, "system");
|
||||
storage_record_pb, "mockup");
|
||||
ASSERT_TRUE(mapped_file_result.ok());
|
||||
auto mapped_file = *mapped_file_result;
|
||||
|
||||
@@ -124,7 +125,7 @@ TEST_F(AconfigStorageTest, test_boolean_flag_value_update) {
|
||||
/// Negative test to lock down the error when querying flag value out of range
|
||||
TEST_F(AconfigStorageTest, test_invalid_boolean_flag_value_update) {
|
||||
auto mapped_file_result = private_api::get_mapped_flag_value_file_impl(
|
||||
storage_record_pb, "system");
|
||||
storage_record_pb, "mockup");
|
||||
ASSERT_TRUE(mapped_file_result.ok());
|
||||
auto mapped_file = *mapped_file_result;
|
||||
auto update_result = api::set_boolean_flag_value(mapped_file, 8, true);
|
||||
|
@@ -15,7 +15,7 @@ mod aconfig_storage_write_api_test {
|
||||
r#"
|
||||
files {{
|
||||
version: 0
|
||||
container: "system"
|
||||
container: "mockup"
|
||||
package_map: "some_package_map"
|
||||
flag_map: "some_flag_map"
|
||||
flag_val: "{}"
|
||||
@@ -59,7 +59,7 @@ files {{
|
||||
// SAFETY:
|
||||
// The safety here is ensured as only this single threaded test process will
|
||||
// write to this file
|
||||
let mut file = unsafe { get_mapped_file(&record_pb_path, "system").unwrap() };
|
||||
let mut file = unsafe { get_mapped_file(&record_pb_path, "mockup").unwrap() };
|
||||
for i in 0..8 {
|
||||
set_boolean_flag_value(&mut file, i, true).unwrap();
|
||||
let value = get_boolean_flag_value_at_offset(&flag_value_path, i);
|
||||
|
Reference in New Issue
Block a user