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

Commit bdef1f1f authored by Marybeth Fair's avatar Marybeth Fair
Browse files

Fix bug in write fingerprint logic.

We want to write the fingerprint in v2. Added a test case that would
have caught this.

Test: atest
Bug: 316357686
Change-Id: I81656ed9172a89fde1f24f1130156d8c5014a6d3
parent d33ef697
Loading
Loading
Loading
Loading
+47 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ where
        p.boolean_start_index = boolean_start_index;
        boolean_start_index += p.boolean_flags.len() as u32;

        if version > 2 {
        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);
@@ -202,6 +202,7 @@ mod tests {
        assert!(packages[0].flag_names.contains("disabled_rw"));
        assert!(packages[0].flag_names.contains("enabled_ro"));
        assert_eq!(packages[0].boolean_start_index, 0);
        assert_eq!(packages[0].fingerprint, 0);

        assert_eq!(packages[1].package_name, "com.android.aconfig.storage.test_2");
        assert_eq!(packages[1].package_id, 1);
@@ -210,6 +211,7 @@ mod tests {
        assert!(packages[1].flag_names.contains("disabled_rw"));
        assert!(packages[1].flag_names.contains("enabled_fixed_ro"));
        assert_eq!(packages[1].boolean_start_index, 3);
        assert_eq!(packages[0].fingerprint, 0);

        assert_eq!(packages[2].package_name, "com.android.aconfig.storage.test_4");
        assert_eq!(packages[2].package_id, 2);
@@ -217,5 +219,49 @@ mod tests {
        assert!(packages[2].flag_names.contains("enabled_rw"));
        assert!(packages[2].flag_names.contains("enabled_fixed_ro"));
        assert_eq!(packages[2].boolean_start_index, 6);
        assert_eq!(packages[2].fingerprint, 0);
    }

    #[test]
    fn test_flag_package_with_fingerprint() {
        let caches = parse_all_test_flags();
        let packages = group_flags_by_package(caches.iter(), 2);

        for pkg in packages.iter() {
            let pkg_name = pkg.package_name;
            assert_eq!(pkg.flag_names.len(), pkg.boolean_flags.len());
            for pf in pkg.boolean_flags.iter() {
                assert!(pkg.flag_names.contains(pf.name()));
                assert_eq!(pf.package(), pkg_name);
            }
        }

        assert_eq!(packages.len(), 3);

        assert_eq!(packages[0].package_name, "com.android.aconfig.storage.test_1");
        assert_eq!(packages[0].package_id, 0);
        assert_eq!(packages[0].flag_names.len(), 3);
        assert!(packages[0].flag_names.contains("enabled_rw"));
        assert!(packages[0].flag_names.contains("disabled_rw"));
        assert!(packages[0].flag_names.contains("enabled_ro"));
        assert_eq!(packages[0].boolean_start_index, 0);
        assert_eq!(packages[0].fingerprint, 15248948510590158086u64);

        assert_eq!(packages[1].package_name, "com.android.aconfig.storage.test_2");
        assert_eq!(packages[1].package_id, 1);
        assert_eq!(packages[1].flag_names.len(), 3);
        assert!(packages[1].flag_names.contains("enabled_ro"));
        assert!(packages[1].flag_names.contains("disabled_rw"));
        assert!(packages[1].flag_names.contains("enabled_fixed_ro"));
        assert_eq!(packages[1].boolean_start_index, 3);
        assert_eq!(packages[1].fingerprint, 4431940502274857964u64);

        assert_eq!(packages[2].package_name, "com.android.aconfig.storage.test_4");
        assert_eq!(packages[2].package_id, 2);
        assert_eq!(packages[2].flag_names.len(), 2);
        assert!(packages[2].flag_names.contains("enabled_rw"));
        assert!(packages[2].flag_names.contains("enabled_fixed_ro"));
        assert_eq!(packages[2].boolean_start_index, 6);
        assert_eq!(packages[2].fingerprint, 16233229917711622375u64);
    }
}