diff options
Diffstat (limited to 'tools/aconfig/aconfig_storage_read_api/src/lib.rs')
-rw-r--r-- | tools/aconfig/aconfig_storage_read_api/src/lib.rs | 86 |
1 files changed, 38 insertions, 48 deletions
diff --git a/tools/aconfig/aconfig_storage_read_api/src/lib.rs b/tools/aconfig/aconfig_storage_read_api/src/lib.rs index e65dcfbc69..61f9e96f84 100644 --- a/tools/aconfig/aconfig_storage_read_api/src/lib.rs +++ b/tools/aconfig/aconfig_storage_read_api/src/lib.rs @@ -42,9 +42,6 @@ pub mod flag_value_query; pub mod mapped_file; pub mod package_table_query; -#[cfg(test)] -mod test_utils; - pub use aconfig_storage_file::{AconfigStorageError, FlagValueType, StorageFileType}; pub use flag_table_query::FlagReadContext; pub use package_table_query::PackageReadContext; @@ -60,8 +57,8 @@ use memmap2::Mmap; use std::fs::File; use std::io::Read; -/// Storage file location pb file -pub const STORAGE_LOCATION_FILE: &str = "/metadata/aconfig/boot/available_storage_file_records.pb"; +/// Storage file location +pub const STORAGE_LOCATION: &str = "/metadata/aconfig"; /// Get read only mapped storage files. /// @@ -78,7 +75,7 @@ pub unsafe fn get_mapped_storage_file( container: &str, file_type: StorageFileType, ) -> Result<Mmap, AconfigStorageError> { - unsafe { crate::mapped_file::get_mapped_file(STORAGE_LOCATION_FILE, container, file_type) } + unsafe { crate::mapped_file::get_mapped_file(STORAGE_LOCATION, container, file_type) } } /// Get package read context for a specific package. @@ -394,45 +391,41 @@ pub fn get_storage_file_version_cxx(file_path: &str) -> ffi::VersionNumberQueryC mod tests { use super::*; use crate::mapped_file::get_mapped_file; - use crate::test_utils::copy_to_temp_file; - use aconfig_storage_file::protos::storage_record_pb::write_proto_to_temp_file; use aconfig_storage_file::{FlagInfoBit, StoredFlagType}; - use tempfile::NamedTempFile; - - fn create_test_storage_files() -> [NamedTempFile; 5] { - let package_map = copy_to_temp_file("./tests/package.map").unwrap(); - let flag_map = copy_to_temp_file("./tests/flag.map").unwrap(); - let flag_val = copy_to_temp_file("./tests/flag.val").unwrap(); - let flag_info = copy_to_temp_file("./tests/flag.info").unwrap(); - - let text_proto = format!( - r#" -files {{ - version: 0 - container: "mockup" - package_map: "{}" - flag_map: "{}" - flag_val: "{}" - flag_info: "{}" - timestamp: 12345 -}} -"#, - package_map.path().display(), - flag_map.path().display(), - flag_val.path().display(), - flag_info.path().display() - ); - let pb_file = write_proto_to_temp_file(&text_proto).unwrap(); - [package_map, flag_map, flag_val, flag_info, pb_file] + use rand::Rng; + use std::fs; + + fn create_test_storage_files() -> String { + let mut rng = rand::thread_rng(); + let number: u32 = rng.gen(); + let storage_dir = String::from("/tmp/") + &number.to_string(); + if std::fs::metadata(&storage_dir).is_ok() { + fs::remove_dir_all(&storage_dir).unwrap(); + } + let maps_dir = storage_dir.clone() + "/maps"; + let boot_dir = storage_dir.clone() + "/boot"; + fs::create_dir(&storage_dir).unwrap(); + fs::create_dir(&maps_dir).unwrap(); + fs::create_dir(&boot_dir).unwrap(); + + let package_map = storage_dir.clone() + "/maps/mockup.package.map"; + let flag_map = storage_dir.clone() + "/maps/mockup.flag.map"; + let flag_val = storage_dir.clone() + "/boot/mockup.val"; + let flag_info = storage_dir.clone() + "/boot/mockup.info"; + fs::copy("./tests/package.map", &package_map).unwrap(); + fs::copy("./tests/flag.map", &flag_map).unwrap(); + fs::copy("./tests/flag.val", &flag_val).unwrap(); + fs::copy("./tests/flag.info", &flag_info).unwrap(); + + return storage_dir; } #[test] // this test point locks down flag package read context query fn test_package_context_query() { - let [_package_map, _flag_map, _flag_val, _flag_info, pb_file] = create_test_storage_files(); - let pb_file_path = pb_file.path().display().to_string(); + let storage_dir = create_test_storage_files(); let package_mapped_file = unsafe { - get_mapped_file(&pb_file_path, "mockup", StorageFileType::PackageMap).unwrap() + get_mapped_file(&storage_dir, "mockup", StorageFileType::PackageMap).unwrap() }; let package_context = @@ -460,10 +453,9 @@ files {{ #[test] // this test point locks down flag read context query fn test_flag_context_query() { - let [_package_map, _flag_map, _flag_val, _flag_info, pb_file] = create_test_storage_files(); - let pb_file_path = pb_file.path().display().to_string(); + let storage_dir = create_test_storage_files(); let flag_mapped_file = - unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagMap).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagMap).unwrap() }; let baseline = vec![ (0, "enabled_ro", StoredFlagType::ReadOnlyBoolean, 1u16), @@ -486,10 +478,9 @@ files {{ #[test] // this test point locks down flag value query fn test_flag_value_query() { - let [_package_map, _flag_map, _flag_val, _flag_info, pb_file] = create_test_storage_files(); - let pb_file_path = pb_file.path().display().to_string(); + let storage_dir = create_test_storage_files(); let flag_value_file = - unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagVal).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "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(); @@ -500,11 +491,10 @@ files {{ #[test] // this test point locks donw flag info query fn test_flag_info_query() { - let [_package_map, _flag_map, _flag_val, _flag_info, pb_file] = create_test_storage_files(); - let pb_file_path = pb_file.path().display().to_string(); + let storage_dir = create_test_storage_files(); let flag_info_file = - unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagInfo).unwrap() }; - let is_rw: Vec<bool> = vec![true, false, true, false, false, false, false, false]; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagInfo).unwrap() }; + let is_rw: Vec<bool> = vec![true, false, true, true, false, false, false, true]; for (offset, expected_value) in is_rw.into_iter().enumerate() { let attribute = get_flag_attribute(&flag_info_file, FlagValueType::Boolean, offset as u32).unwrap(); |