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

Commit ce42fb15 authored by Marybeth Fair's avatar Marybeth Fair Committed by Gerrit Code Review
Browse files

Merge "Write fingerprint to package map." into main

parents daffa52a 3dbe3117
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -438,14 +438,14 @@ where
                    // protect hardcoded offset reads.
                    // Creates a fingerprint of the flag names (which requires sorting the vector).
                    // Fingerprint is used by both codegen and storage files.
pub fn compute_flags_fingerprint(flag_names: &mut Vec<String>) -> Result<u64> {
pub fn compute_flags_fingerprint(flag_names: &mut Vec<String>) -> u64 {
    flag_names.sort();

    let mut hasher = SipHasher13::new();
    for flag in flag_names {
        hasher.write(flag.as_bytes());
    }
    Ok(hasher.finish())
    hasher.finish()
}

#[allow(dead_code)] // TODO: b/316357686 - Use fingerprint in codegen to
@@ -477,7 +477,7 @@ mod tests {
        let mut extracted_flags = extract_flag_names(parsed_flags).unwrap();
        let hash_result = compute_flags_fingerprint(&mut extracted_flags);

        assert_eq!(hash_result.unwrap(), expected_fingerprint);
        assert_eq!(hash_result, expected_fingerprint);
    }

    #[test]
@@ -498,7 +498,7 @@ mod tests {
        let result_from_names = compute_flags_fingerprint(&mut flag_names_vec);

        // Assert the same hash is generated for each case.
        assert_eq!(result_from_parsed_flags.unwrap(), result_from_names.unwrap());
        assert_eq!(result_from_parsed_flags, result_from_names);
    }

    #[test]
@@ -508,9 +508,9 @@ mod tests {
        let second_parsed_flags = crate::test::parse_second_package_flags();

        let mut extracted_flags = extract_flag_names(parsed_flags).unwrap();
        let result_from_parsed_flags = compute_flags_fingerprint(&mut extracted_flags).unwrap();
        let result_from_parsed_flags = compute_flags_fingerprint(&mut extracted_flags);
        let mut second_extracted_flags = extract_flag_names(second_parsed_flags).unwrap();
        let second_result = compute_flags_fingerprint(&mut second_extracted_flags).unwrap();
        let second_result = compute_flags_fingerprint(&mut second_extracted_flags);

        // Different flags should have a different fingerprint.
        assert_ne!(result_from_parsed_flags, second_result);
+1 −1
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ mod tests {

    pub fn create_test_flag_info_list_from_source() -> Result<FlagInfoList> {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_info("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+1 −1
Original line number Diff line number Diff line
@@ -148,7 +148,7 @@ mod tests {

    fn create_test_flag_table_from_source() -> Result<FlagTable> {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_table("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ mod tests {

    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());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);
        create_flag_value("mockup", &packages, DEFAULT_FILE_VERSION)
    }

+13 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ pub mod package_table;
use anyhow::Result;
use std::collections::{HashMap, HashSet};

use crate::commands::compute_flags_fingerprint;
use crate::storage::{
    flag_info::create_flag_info, flag_table::create_flag_table, flag_value::create_flag_value,
    package_table::create_package_table,
@@ -59,7 +60,7 @@ impl<'a> FlagPackage<'a> {
    }
}

pub fn group_flags_by_package<'a, I>(parsed_flags_vec_iter: I) -> Vec<FlagPackage<'a>>
pub fn group_flags_by_package<'a, I>(parsed_flags_vec_iter: I, version: u32) -> Vec<FlagPackage<'a>>
where
    I: Iterator<Item = &'a ProtoParsedFlags>,
{
@@ -76,13 +77,18 @@ where
        }
    }

    // cacluate boolean flag start index for each package
    // Calculate boolean flag start index for each package
    let mut boolean_start_index = 0;
    for p in packages.iter_mut() {
        p.boolean_start_index = boolean_start_index;
        boolean_start_index += p.boolean_flags.len() as u32;

        // TODO: b/316357686 - Calculate fingerprint and add to package.
        if version > 2 {
            let mut flag_names_vec =
                p.flag_names.clone().into_iter().map(String::from).collect::<Vec<_>>();
            let fingerprint = compute_flags_fingerprint(&mut flag_names_vec);
            p.fingerprint = fingerprint;
        }
    }

    packages
@@ -97,7 +103,7 @@ pub fn generate_storage_file<'a, I>(
where
    I: Iterator<Item = &'a ProtoParsedFlags>,
{
    let packages = group_flags_by_package(parsed_flags_vec_iter);
    let packages = group_flags_by_package(parsed_flags_vec_iter, version);

    match file {
        StorageFileType::PackageMap => {
@@ -121,6 +127,8 @@ where

#[cfg(test)]
mod tests {
    use aconfig_storage_file::DEFAULT_FILE_VERSION;

    use super::*;
    use crate::Input;

@@ -174,7 +182,7 @@ mod tests {
    #[test]
    fn test_flag_package() {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter());
        let packages = group_flags_by_package(caches.iter(), DEFAULT_FILE_VERSION);

        for pkg in packages.iter() {
            let pkg_name = pkg.package_name;
Loading