Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9b9573d authored by Dennis Shen's avatar Dennis Shen
Browse files

aconfig: add storage file type into storage file serialization

1, add storage file type into storage files serialization
2, update aconfig_storage_read_api integration tests to not rely on
soong to produce read only storage files. Instead, have the test process
create temp read only storage file copies.

Bug: b/312444587
Test: atest aconfig.test; atest.aconfig_storage_file.test
Change-Id: I1607fb000b48e8acffc966b16a5136578911ab3e
parent 672af952
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ use aconfig_protos::{
    ParsedFlagExt, ProtoFlagMetadata, ProtoFlagPermission, ProtoFlagState, ProtoParsedFlag,
    ProtoParsedFlags, ProtoTracepoint,
};
use aconfig_storage_file::StorageFileSelection;
use aconfig_storage_file::StorageFileType;

pub struct Input {
    pub source: String,
@@ -237,7 +237,7 @@ pub fn create_rust_lib(mut input: Input, codegen_mode: CodegenMode) -> Result<Ou
pub fn create_storage(
    caches: Vec<Input>,
    container: &str,
    file: &StorageFileSelection,
    file: &StorageFileType,
) -> Result<Vec<u8>> {
    let parsed_flags_vec: Vec<ProtoParsedFlags> = caches
        .into_iter()
+3 −3
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ mod commands;
mod dump;
mod storage;

use aconfig_storage_file::StorageFileSelection;
use aconfig_storage_file::StorageFileType;
use codegen::CodegenMode;
use dump::DumpFormat;

@@ -138,7 +138,7 @@ fn cli() -> Command {
                .arg(
                    Arg::new("file")
                        .long("file")
                        .value_parser(|s: &str| StorageFileSelection::try_from(s)),
                        .value_parser(|s: &str| StorageFileType::try_from(s)),
                )
                .arg(Arg::new("cache").long("cache").action(ArgAction::Append).required(true))
                .arg(Arg::new("out").long("out").required(true)),
@@ -285,7 +285,7 @@ fn main() -> Result<()> {
            write_output_to_file_or_stdout(path, &output)?;
        }
        Some(("create-storage", sub_matches)) => {
            let file = get_required_arg::<StorageFileSelection>(sub_matches, "file")
            let file = get_required_arg::<StorageFileType>(sub_matches, "file")
                .context("Invalid storage file selection")?;
            let cache = open_zero_or_more_files(sub_matches, "cache")?;
            let container = get_required_arg::<String>(sub_matches, "container")?;
+14 −12
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
use crate::commands::assign_flag_ids;
use crate::storage::FlagPackage;
use aconfig_storage_file::{
    get_table_size, FlagTable, FlagTableHeader, FlagTableNode, FILE_VERSION,
    get_table_size, FlagTable, FlagTableHeader, FlagTableNode, FILE_VERSION, StorageFileType
};
use anyhow::{anyhow, Result};

@@ -25,6 +25,7 @@ fn new_header(container: &str, num_flags: u32) -> FlagTableHeader {
    FlagTableHeader {
        version: FILE_VERSION,
        container: String::from(container),
        file_type: StorageFileType::FlagMap as u8,
        file_size: 0,
        num_flags,
        bucket_offset: 0,
@@ -168,31 +169,32 @@ mod tests {
        let expected_header = FlagTableHeader {
            version: FILE_VERSION,
            container: String::from("system"),
            file_size: 320,
            file_type: StorageFileType::FlagMap as u8,
            file_size: 321,
            num_flags: 8,
            bucket_offset: 30,
            node_offset: 98,
            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(98),
            Some(124),
            Some(99),
            Some(125),
            None,
            None,
            None,
            Some(177),
            Some(178),
            None,
            Some(203),
            Some(204),
            None,
            Some(261),
            Some(262),
            None,
            None,
            None,
            None,
            None,
            Some(293),
            Some(294),
            None,
        ];
        assert_eq!(buckets, &expected_bucket);
@@ -201,10 +203,10 @@ mod tests {
        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", 1, 2, Some(150)));
        assert_eq!(nodes[1], new_expected_node(0, "enabled_rw", 1, 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", 1, 1, Some(235)));
        assert_eq!(nodes[4], new_expected_node(1, "enabled_fixed_ro", 1, 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", 1, 0, None));
        assert_eq!(nodes[7], new_expected_node(0, "disabled_rw", 1, 0, None));
+5 −3
Original line number Diff line number Diff line
@@ -17,13 +17,14 @@
use crate::commands::assign_flag_ids;
use crate::storage::FlagPackage;
use aconfig_protos::ProtoFlagState;
use aconfig_storage_file::{FlagValueHeader, FlagValueList, FILE_VERSION};
use aconfig_storage_file::{FlagValueHeader, FlagValueList, FILE_VERSION, StorageFileType};
use anyhow::{anyhow, Result};

fn new_header(container: &str, num_flags: u32) -> FlagValueHeader {
    FlagValueHeader {
        version: FILE_VERSION,
        container: String::from(container),
        file_type: StorageFileType::FlagVal as u8,
        file_size: 0,
        num_flags,
        boolean_value_offset: 0,
@@ -79,9 +80,10 @@ mod tests {
        let expected_header = FlagValueHeader {
            version: FILE_VERSION,
            container: String::from("system"),
            file_size: 34,
            file_type: StorageFileType::FlagVal as u8,
            file_size: 35,
            num_flags: 8,
            boolean_value_offset: 26,
            boolean_value_offset: 27,
        };
        assert_eq!(header, &expected_header);

+5 −5
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ use crate::storage::{
    package_table::create_package_table,
};
use aconfig_protos::{ProtoParsedFlag, ProtoParsedFlags};
use aconfig_storage_file::StorageFileSelection;
use aconfig_storage_file::StorageFileType;

pub struct FlagPackage<'a> {
    pub package_name: &'a str,
@@ -87,7 +87,7 @@ where
pub fn generate_storage_file<'a, I>(
    container: &str,
    parsed_flags_vec_iter: I,
    file: &StorageFileSelection,
    file: &StorageFileType,
) -> Result<Vec<u8>>
where
    I: Iterator<Item = &'a ProtoParsedFlags>,
@@ -95,15 +95,15 @@ where
    let packages = group_flags_by_package(parsed_flags_vec_iter);

    match file {
        StorageFileSelection::PackageMap => {
        StorageFileType::PackageMap => {
            let package_table = create_package_table(container, &packages)?;
            Ok(package_table.as_bytes())
        }
        StorageFileSelection::FlagMap => {
        StorageFileType::FlagMap => {
            let flag_table = create_flag_table(container, &packages)?;
            Ok(flag_table.as_bytes())
        }
        StorageFileSelection::FlagVal => {
        StorageFileType::FlagVal => {
            let flag_value = create_flag_value(container, &packages)?;
            Ok(flag_value.as_bytes())
        }
Loading