Loading tools/aconfig/aconfig/src/storage/flag_table.rs +8 −14 Original line number Diff line number Diff line Loading @@ -74,13 +74,7 @@ impl FlagTableNodeWrapper { // should come from the parsed flag, and we will set the flag_type bit // mask properly. let flag_type = 1; Ok(Self::new( package.package_id, pf.name(), flag_type, *fid, num_buckets, )) Ok(Self::new(package.package_id, pf.name(), flag_type, *fid, num_buckets)) }) .collect::<Result<Vec<_>>>() } Loading Loading @@ -112,8 +106,11 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl let mut offset = header.node_offset; for i in 0..node_wrappers.len() { let node_bucket_idx = node_wrappers[i].bucket_index; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; if buckets[node_bucket_idx as usize].is_none() { buckets[node_bucket_idx as usize] = Some(offset); Loading @@ -127,11 +124,8 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl } } let table = FlagTable { header, buckets, nodes: node_wrappers.into_iter().map(|nw| nw.node).collect(), }; let table = FlagTable { header, buckets, nodes: node_wrappers.into_iter().map(|nw| nw.node).collect() }; Ok(table) } Loading tools/aconfig/aconfig/src/storage/package_table.rs +8 −8 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ use anyhow::Result; use aconfig_storage_file::{ get_table_size, PackageTable, PackageTableHeader, PackageTableNode, FILE_VERSION, get_table_size, PackageTable, PackageTableHeader, PackageTableNode, FILE_VERSION, }; use crate::storage::FlagPackage; Loading Loading @@ -61,10 +60,8 @@ pub fn create_package_table(container: &str, packages: &[FlagPackage]) -> Result let num_buckets = get_table_size(num_packages)?; let mut header = new_header(container, num_packages); let mut buckets = vec![None; num_buckets as usize]; let mut node_wrappers: Vec<_> = packages .iter() .map(|pkg| PackageTableNodeWrapper::new(pkg, num_buckets)) .collect(); let mut node_wrappers: Vec<_> = packages.iter().map(|pkg| PackageTableNodeWrapper::new(pkg, num_buckets)).collect(); // initialize all header fields header.bucket_offset = header.as_bytes().len() as u32; Loading @@ -79,8 +76,11 @@ pub fn create_package_table(container: &str, packages: &[FlagPackage]) -> Result let mut offset = header.node_offset; for i in 0..node_wrappers.len() { let node_bucket_idx = node_wrappers[i].bucket_index; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; if buckets[node_bucket_idx as usize].is_none() { buckets[node_bucket_idx as usize] = Some(offset); Loading tools/aconfig/aconfig_protos/src/lib.rs +2 −8 Original line number Diff line number Diff line Loading @@ -150,10 +150,7 @@ pub mod flag_declarations { ensure_required_fields!("flag declarations", pdf, "package"); // TODO(b/312769710): Make the container field required. ensure!( is_valid_package_ident(pdf.package()), "bad flag declarations: bad package" ); ensure!(is_valid_package_ident(pdf.package()), "bad flag declarations: bad package"); ensure!( !pdf.has_container() || is_valid_container_ident(pdf.container()), "bad flag declarations: bad container" Loading Loading @@ -898,10 +895,7 @@ parsed_flag { "#; let parsed_flags = try_from_binary_proto_from_text_proto(text_proto).unwrap(); let parsed_flag = &parsed_flags.parsed_flag[0]; assert_eq!( crate::parsed_flag::path_to_declaration(parsed_flag), "flags.declarations" ); assert_eq!(crate::parsed_flag::path_to_declaration(parsed_flag), "flags.declarations"); } #[test] Loading tools/aconfig/aconfig_storage_file/src/flag_table.rs +7 −20 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ //! flag table module defines the flag table file format and methods for serialization //! and deserialization use crate::{read_str_from_bytes, read_u16_from_bytes, read_u32_from_bytes, get_bucket_index}; use crate::{get_bucket_index, read_str_from_bytes, read_u16_from_bytes, read_u32_from_bytes}; use anyhow::{anyhow, Result}; /// Flag table header struct Loading Loading @@ -175,8 +175,7 @@ pub fn find_flag_offset(buf: &[u8], package_id: u32, flag: &str) -> Result<Optio loop { let interpreted_node = FlagTableNode::from_bytes(&buf[flag_node_offset..])?; if interpreted_node.package_id == package_id && interpreted_node.flag_name == flag { if interpreted_node.package_id == package_id && interpreted_node.flag_name == flag { return Ok(Some(interpreted_node.flag_id)); } match interpreted_node.next_offset { Loading @@ -184,7 +183,6 @@ pub fn find_flag_offset(buf: &[u8], package_id: u32, flag: &str) -> Result<Optio None => return Ok(None), } } } #[cfg(test)] Loading @@ -200,13 +198,7 @@ mod tests { flag_id: u16, next_offset: Option<u32>, ) -> Self { Self { package_id, flag_name: flag_name.to_string(), flag_type, flag_id, next_offset, } Self { package_id, flag_name: flag_name.to_string(), flag_type, flag_id, next_offset } } } Loading Loading @@ -288,9 +280,7 @@ mod tests { ]; for (package_id, flag_name, expected_offset) in baseline.into_iter() { let flag_offset = find_flag_offset(&flag_table[..], package_id, flag_name) .unwrap() .unwrap(); find_flag_offset(&flag_table[..], package_id, flag_name).unwrap().unwrap(); assert_eq!(flag_offset, expected_offset); } } Loading @@ -299,11 +289,9 @@ mod tests { // this test point locks down table query of a non exist flag fn test_not_existed_flag_query() { let flag_table = create_test_flag_table().unwrap().as_bytes(); let flag_offset = find_flag_offset(&flag_table[..], 1, "disabled_fixed_ro").unwrap(); let flag_offset = find_flag_offset(&flag_table[..], 1, "disabled_fixed_ro").unwrap(); assert_eq!(flag_offset, None); let flag_offset = find_flag_offset(&flag_table[..], 2, "disabled_rw").unwrap(); let flag_offset = find_flag_offset(&flag_table[..], 2, "disabled_rw").unwrap(); assert_eq!(flag_offset, None); } Loading @@ -313,8 +301,7 @@ mod tests { let mut table = create_test_flag_table().unwrap(); table.header.version = crate::FILE_VERSION + 1; let flag_table = table.as_bytes(); let error = find_flag_offset(&flag_table[..], 0, "enabled_ro") .unwrap_err(); let error = find_flag_offset(&flag_table[..], 0, "enabled_ro").unwrap_err(); assert_eq!( format!("{:?}", error), format!( Loading tools/aconfig/aconfig_storage_file/src/flag_value.rs +4 −11 Original line number Diff line number Diff line Loading @@ -146,9 +146,7 @@ mod tests { let flag_value_list = create_test_flag_value_list().unwrap().as_bytes(); let baseline: Vec<bool> = vec![false, true, false, false, true, true, false, true]; for (offset, expected_value) in baseline.into_iter().enumerate() { let flag_value = get_boolean_flag_value(&flag_value_list[..], offset as u32) .unwrap(); let flag_value = get_boolean_flag_value(&flag_value_list[..], offset as u32).unwrap(); assert_eq!(flag_value, expected_value); } } Loading @@ -157,12 +155,8 @@ mod tests { // this test point locks down query beyond the end of boolean section fn test_boolean_out_of_range() { let flag_value_list = create_test_flag_value_list().unwrap().as_bytes(); let error = get_boolean_flag_value(&flag_value_list[..], 8) .unwrap_err(); assert_eq!( format!("{:?}", error), "Flag value offset goes beyond the end of the file." ); let error = get_boolean_flag_value(&flag_value_list[..], 8).unwrap_err(); assert_eq!(format!("{:?}", error), "Flag value offset goes beyond the end of the file."); } #[test] Loading @@ -171,8 +165,7 @@ mod tests { let mut value_list = create_test_flag_value_list().unwrap(); value_list.header.version = crate::FILE_VERSION + 1; let flag_value = value_list.as_bytes(); let error = get_boolean_flag_value(&flag_value[..], 4) .unwrap_err(); let error = get_boolean_flag_value(&flag_value[..], 4).unwrap_err(); assert_eq!( format!("{:?}", error), format!( Loading Loading
tools/aconfig/aconfig/src/storage/flag_table.rs +8 −14 Original line number Diff line number Diff line Loading @@ -74,13 +74,7 @@ impl FlagTableNodeWrapper { // should come from the parsed flag, and we will set the flag_type bit // mask properly. let flag_type = 1; Ok(Self::new( package.package_id, pf.name(), flag_type, *fid, num_buckets, )) Ok(Self::new(package.package_id, pf.name(), flag_type, *fid, num_buckets)) }) .collect::<Result<Vec<_>>>() } Loading Loading @@ -112,8 +106,11 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl let mut offset = header.node_offset; for i in 0..node_wrappers.len() { let node_bucket_idx = node_wrappers[i].bucket_index; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; if buckets[node_bucket_idx as usize].is_none() { buckets[node_bucket_idx as usize] = Some(offset); Loading @@ -127,11 +124,8 @@ pub fn create_flag_table(container: &str, packages: &[FlagPackage]) -> Result<Fl } } let table = FlagTable { header, buckets, nodes: node_wrappers.into_iter().map(|nw| nw.node).collect(), }; let table = FlagTable { header, buckets, nodes: node_wrappers.into_iter().map(|nw| nw.node).collect() }; Ok(table) } Loading
tools/aconfig/aconfig/src/storage/package_table.rs +8 −8 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ use anyhow::Result; use aconfig_storage_file::{ get_table_size, PackageTable, PackageTableHeader, PackageTableNode, FILE_VERSION, get_table_size, PackageTable, PackageTableHeader, PackageTableNode, FILE_VERSION, }; use crate::storage::FlagPackage; Loading Loading @@ -61,10 +60,8 @@ pub fn create_package_table(container: &str, packages: &[FlagPackage]) -> Result let num_buckets = get_table_size(num_packages)?; let mut header = new_header(container, num_packages); let mut buckets = vec![None; num_buckets as usize]; let mut node_wrappers: Vec<_> = packages .iter() .map(|pkg| PackageTableNodeWrapper::new(pkg, num_buckets)) .collect(); let mut node_wrappers: Vec<_> = packages.iter().map(|pkg| PackageTableNodeWrapper::new(pkg, num_buckets)).collect(); // initialize all header fields header.bucket_offset = header.as_bytes().len() as u32; Loading @@ -79,8 +76,11 @@ pub fn create_package_table(container: &str, packages: &[FlagPackage]) -> Result let mut offset = header.node_offset; for i in 0..node_wrappers.len() { let node_bucket_idx = node_wrappers[i].bucket_index; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; let next_node_bucket_idx = if i + 1 < node_wrappers.len() { Some(node_wrappers[i + 1].bucket_index) } else { None }; if buckets[node_bucket_idx as usize].is_none() { buckets[node_bucket_idx as usize] = Some(offset); Loading
tools/aconfig/aconfig_protos/src/lib.rs +2 −8 Original line number Diff line number Diff line Loading @@ -150,10 +150,7 @@ pub mod flag_declarations { ensure_required_fields!("flag declarations", pdf, "package"); // TODO(b/312769710): Make the container field required. ensure!( is_valid_package_ident(pdf.package()), "bad flag declarations: bad package" ); ensure!(is_valid_package_ident(pdf.package()), "bad flag declarations: bad package"); ensure!( !pdf.has_container() || is_valid_container_ident(pdf.container()), "bad flag declarations: bad container" Loading Loading @@ -898,10 +895,7 @@ parsed_flag { "#; let parsed_flags = try_from_binary_proto_from_text_proto(text_proto).unwrap(); let parsed_flag = &parsed_flags.parsed_flag[0]; assert_eq!( crate::parsed_flag::path_to_declaration(parsed_flag), "flags.declarations" ); assert_eq!(crate::parsed_flag::path_to_declaration(parsed_flag), "flags.declarations"); } #[test] Loading
tools/aconfig/aconfig_storage_file/src/flag_table.rs +7 −20 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ //! flag table module defines the flag table file format and methods for serialization //! and deserialization use crate::{read_str_from_bytes, read_u16_from_bytes, read_u32_from_bytes, get_bucket_index}; use crate::{get_bucket_index, read_str_from_bytes, read_u16_from_bytes, read_u32_from_bytes}; use anyhow::{anyhow, Result}; /// Flag table header struct Loading Loading @@ -175,8 +175,7 @@ pub fn find_flag_offset(buf: &[u8], package_id: u32, flag: &str) -> Result<Optio loop { let interpreted_node = FlagTableNode::from_bytes(&buf[flag_node_offset..])?; if interpreted_node.package_id == package_id && interpreted_node.flag_name == flag { if interpreted_node.package_id == package_id && interpreted_node.flag_name == flag { return Ok(Some(interpreted_node.flag_id)); } match interpreted_node.next_offset { Loading @@ -184,7 +183,6 @@ pub fn find_flag_offset(buf: &[u8], package_id: u32, flag: &str) -> Result<Optio None => return Ok(None), } } } #[cfg(test)] Loading @@ -200,13 +198,7 @@ mod tests { flag_id: u16, next_offset: Option<u32>, ) -> Self { Self { package_id, flag_name: flag_name.to_string(), flag_type, flag_id, next_offset, } Self { package_id, flag_name: flag_name.to_string(), flag_type, flag_id, next_offset } } } Loading Loading @@ -288,9 +280,7 @@ mod tests { ]; for (package_id, flag_name, expected_offset) in baseline.into_iter() { let flag_offset = find_flag_offset(&flag_table[..], package_id, flag_name) .unwrap() .unwrap(); find_flag_offset(&flag_table[..], package_id, flag_name).unwrap().unwrap(); assert_eq!(flag_offset, expected_offset); } } Loading @@ -299,11 +289,9 @@ mod tests { // this test point locks down table query of a non exist flag fn test_not_existed_flag_query() { let flag_table = create_test_flag_table().unwrap().as_bytes(); let flag_offset = find_flag_offset(&flag_table[..], 1, "disabled_fixed_ro").unwrap(); let flag_offset = find_flag_offset(&flag_table[..], 1, "disabled_fixed_ro").unwrap(); assert_eq!(flag_offset, None); let flag_offset = find_flag_offset(&flag_table[..], 2, "disabled_rw").unwrap(); let flag_offset = find_flag_offset(&flag_table[..], 2, "disabled_rw").unwrap(); assert_eq!(flag_offset, None); } Loading @@ -313,8 +301,7 @@ mod tests { let mut table = create_test_flag_table().unwrap(); table.header.version = crate::FILE_VERSION + 1; let flag_table = table.as_bytes(); let error = find_flag_offset(&flag_table[..], 0, "enabled_ro") .unwrap_err(); let error = find_flag_offset(&flag_table[..], 0, "enabled_ro").unwrap_err(); assert_eq!( format!("{:?}", error), format!( Loading
tools/aconfig/aconfig_storage_file/src/flag_value.rs +4 −11 Original line number Diff line number Diff line Loading @@ -146,9 +146,7 @@ mod tests { let flag_value_list = create_test_flag_value_list().unwrap().as_bytes(); let baseline: Vec<bool> = vec![false, true, false, false, true, true, false, true]; for (offset, expected_value) in baseline.into_iter().enumerate() { let flag_value = get_boolean_flag_value(&flag_value_list[..], offset as u32) .unwrap(); let flag_value = get_boolean_flag_value(&flag_value_list[..], offset as u32).unwrap(); assert_eq!(flag_value, expected_value); } } Loading @@ -157,12 +155,8 @@ mod tests { // this test point locks down query beyond the end of boolean section fn test_boolean_out_of_range() { let flag_value_list = create_test_flag_value_list().unwrap().as_bytes(); let error = get_boolean_flag_value(&flag_value_list[..], 8) .unwrap_err(); assert_eq!( format!("{:?}", error), "Flag value offset goes beyond the end of the file." ); let error = get_boolean_flag_value(&flag_value_list[..], 8).unwrap_err(); assert_eq!(format!("{:?}", error), "Flag value offset goes beyond the end of the file."); } #[test] Loading @@ -171,8 +165,7 @@ mod tests { let mut value_list = create_test_flag_value_list().unwrap(); value_list.header.version = crate::FILE_VERSION + 1; let flag_value = value_list.as_bytes(); let error = get_boolean_flag_value(&flag_value[..], 4) .unwrap_err(); let error = get_boolean_flag_value(&flag_value[..], 4).unwrap_err(); assert_eq!( format!("{:?}", error), format!( Loading