diff options
Diffstat (limited to 'tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs')
-rw-r--r-- | tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs | 109 |
1 files changed, 47 insertions, 62 deletions
diff --git a/tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs b/tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs index ce9c0186dd..afc44d4d70 100644 --- a/tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs +++ b/tools/aconfig/aconfig_storage_read_api/tests/storage_read_api_test.rs @@ -1,71 +1,63 @@ #[cfg(not(feature = "cargo"))] mod aconfig_storage_rust_test { - use aconfig_storage_file::protos::storage_record_pb::write_proto_to_temp_file; use aconfig_storage_file::{FlagInfoBit, FlagValueType, StorageFileType, StoredFlagType}; use aconfig_storage_read_api::{ get_boolean_flag_value, get_flag_attribute, get_flag_read_context, get_package_read_context, get_storage_file_version, mapped_file::get_mapped_file, PackageReadContext, }; + use rand::Rng; use std::fs; - use tempfile::NamedTempFile; - pub fn copy_to_temp_file(source_file: &str) -> NamedTempFile { - let file = NamedTempFile::new().unwrap(); - fs::copy(source_file, file.path()).unwrap(); - file - } - - fn create_test_storage_files() -> [NamedTempFile; 5] { - let package_map = copy_to_temp_file("./package.map"); - let flag_map = copy_to_temp_file("./flag.map"); - let flag_val = copy_to_temp_file("./flag.val"); - let flag_info = copy_to_temp_file("./flag.info"); - - 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] + 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("./package.map", package_map).unwrap(); + fs::copy("./flag.map", flag_map).unwrap(); + fs::copy("./flag.val", flag_val).unwrap(); + fs::copy("./flag.info", flag_info).unwrap(); + + storage_dir } #[test] fn test_unavailable_stoarge() { - 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(); // SAFETY: // The safety here is ensured as the test process will not write to temp storage file let err = unsafe { - get_mapped_file(&pb_file_path, "vendor", StorageFileType::PackageMap).unwrap_err() + get_mapped_file(&storage_dir, "vendor", StorageFileType::PackageMap).unwrap_err() }; assert_eq!( format!("{:?}", err), - "StorageFileNotFound(Storage file does not exist for vendor)" + format!( + "StorageFileNotFound(storage file {}/maps/vendor.package.map does not exist)", + storage_dir + ) ); } #[test] 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(); // 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, "mockup", StorageFileType::PackageMap).unwrap() + get_mapped_file(&storage_dir, "mockup", StorageFileType::PackageMap).unwrap() }; let package_context = @@ -92,12 +84,11 @@ files {{ #[test] fn test_none_exist_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(); // 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, "mockup", StorageFileType::PackageMap).unwrap() + get_mapped_file(&storage_dir, "mockup", StorageFileType::PackageMap).unwrap() }; let package_context_option = @@ -108,12 +99,11 @@ files {{ #[test] 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(); // 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, "mockup", StorageFileType::FlagMap).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagMap).unwrap() }; let baseline = vec![ (0, "enabled_ro", StoredFlagType::ReadOnlyBoolean, 1u16), @@ -135,12 +125,11 @@ files {{ #[test] fn test_none_exist_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(); // 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, "mockup", StorageFileType::FlagMap).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagMap).unwrap() }; let flag_context_option = get_flag_read_context(&flag_mapped_file, 0, "none_exist").unwrap(); assert_eq!(flag_context_option, None); @@ -152,12 +141,11 @@ files {{ #[test] fn test_boolean_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(); // 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, "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(); @@ -167,12 +155,11 @@ files {{ #[test] fn test_invalid_boolean_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(); // 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, "mockup", StorageFileType::FlagVal).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagVal).unwrap() }; let err = get_boolean_flag_value(&flag_value_file, 8u32).unwrap_err(); assert_eq!( format!("{:?}", err), @@ -182,13 +169,12 @@ files {{ #[test] 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(); // SAFETY: // The safety here is ensured as the test process will not write to temp storage file 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(); @@ -200,12 +186,11 @@ files {{ #[test] fn test_invalid_boolean_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(); // SAFETY: // The safety here is ensured as the test process will not write to temp storage file let flag_info_file = - unsafe { get_mapped_file(&pb_file_path, "mockup", StorageFileType::FlagInfo).unwrap() }; + unsafe { get_mapped_file(&storage_dir, "mockup", StorageFileType::FlagInfo).unwrap() }; let err = get_flag_attribute(&flag_info_file, FlagValueType::Boolean, 8u32).unwrap_err(); assert_eq!( format!("{:?}", err), |