aconfigd: allow test to run as root and added test points
Bug: 378079539
Change-Id: Id216959dac49a55db6fa735701b2dc60047e6402
diff --git a/aconfigd/Android.bp b/aconfigd/Android.bp
index 0f06088..b73d9c4 100644
--- a/aconfigd/Android.bp
+++ b/aconfigd/Android.bp
@@ -57,7 +57,9 @@
rust_test {
name: "libaconfigd_rust.test",
team: "trendy_team_android_core_experiments",
- test_suites: ["general-tests"],
+ test_suites: [
+ "general-tests",
+ ],
defaults: ["aconfigd_rust.defaults"],
srcs: ["src/lib.rs"],
rustlibs: [
@@ -73,4 +75,5 @@
"./tests/data/container_with_more_flags.flag.val",
"./tests/data/container_with_more_flags.flag.info",
],
+ require_root: true
}
diff --git a/aconfigd/src/aconfigd.rs b/aconfigd/src/aconfigd.rs
index 2935dc6..d2b8d94 100644
--- a/aconfigd/src/aconfigd.rs
+++ b/aconfigd/src/aconfigd.rs
@@ -23,7 +23,7 @@
ProtoOTAFlagStagingMessage, ProtoPersistStorageRecords, ProtoRemoveLocalOverrideMessage,
ProtoStorageRequestMessage, ProtoStorageRequestMessageMsg, ProtoStorageReturnMessage,
};
-use log::{error, warn};
+use log::{debug, error, warn};
use std::io::{Read, Write};
use std::os::unix::net::UnixStream;
use std::path::{Path, PathBuf};
@@ -71,10 +71,11 @@
let default_flag_info = aconfig_dir.join("flag.info");
if !default_package_map.exists()
- || !default_flag_val.exists()
- || !default_flag_val.exists()
|| !default_flag_map.exists()
+ || !default_flag_val.exists()
+ || !default_flag_info.exists()
{
+ debug!("skip {} initialization due to missing storage files", container);
continue;
}
@@ -86,6 +87,7 @@
.len()
== 0
{
+ debug!("skip {} initialization due to zero sized storage files", container);
continue;
}
@@ -1015,4 +1017,69 @@
assert_eq!("fail to parse to protobuf from bytes for socket request: Error(WireError(UnexpectedWireType(EndGroup)))", format!("{}", errmsg));
}
}
+
+ #[test]
+ fn test_initialize_platform_storage_fresh_install() {
+ let root_dir = StorageRootDirMock::new();
+ let mut aconfigd = create_mock_aconfigd(&root_dir);
+ aconfigd.initialize_platform_storage().unwrap();
+ assert!(aconfigd.persist_storage_records.exists());
+ let pb = read_pb_from_file::<ProtoPersistStorageRecords>(&aconfigd.persist_storage_records)
+ .unwrap();
+ assert_eq!(pb.records.len(), 3);
+
+ for container in ["system", "product", "vendor"] {
+ let aconfig_dir = PathBuf::from("/".to_string() + container + "/etc/aconfig");
+ let default_package_map = aconfig_dir.join("package.map");
+ let default_flag_map = aconfig_dir.join("flag.map");
+ let default_flag_val = aconfig_dir.join("flag.val");
+ let default_flag_info = aconfig_dir.join("flag.info");
+
+ let persist_package_map =
+ root_dir.maps_dir.join(container.to_string() + ".package.map");
+ let persist_flag_map = root_dir.maps_dir.join(container.to_string() + ".flag.map");
+ let persist_flag_val = root_dir.flags_dir.join(container.to_string() + ".val");
+ let persist_flag_info = root_dir.flags_dir.join(container.to_string() + ".info");
+ let boot_flag_val = root_dir.boot_dir.join(container.to_string() + ".val");
+ let boot_flag_info = root_dir.boot_dir.join(container.to_string() + ".info");
+ let local_overrides =
+ root_dir.flags_dir.join(container.to_string() + "_local_overrides.pb");
+
+ assert!(has_same_content(&persist_package_map, &default_package_map));
+ assert!(has_same_content(&persist_flag_map, &default_flag_map));
+ assert!(has_same_content(&persist_flag_val, &default_flag_val));
+ assert!(has_same_content(&persist_flag_info, &default_flag_info));
+ assert!(has_same_content(&boot_flag_val, &default_flag_val));
+ assert!(has_same_content(&boot_flag_info, &default_flag_info));
+ assert!(local_overrides.exists());
+
+ let mut entry = ProtoPersistStorageRecord::new();
+ entry.set_version(1);
+ entry.set_container(container.to_string());
+ entry.set_package_map(default_package_map.display().to_string());
+ entry.set_flag_map(default_flag_map.display().to_string());
+ entry.set_flag_val(default_flag_val.display().to_string());
+ entry.set_flag_info(default_flag_info.display().to_string());
+ let digest = get_files_digest(
+ &[
+ default_package_map.as_path(),
+ default_flag_map.as_path(),
+ default_flag_val.as_path(),
+ default_flag_info.as_path(),
+ ][..],
+ )
+ .unwrap();
+ entry.set_digest(digest);
+ assert!(pb.records.iter().any(|x| *x == entry));
+ }
+ }
+
+ #[test]
+ fn test_initialize_mainline_storage() {
+ let root_dir = StorageRootDirMock::new();
+ let mut aconfigd = create_mock_aconfigd(&root_dir);
+ aconfigd.initialize_mainline_storage().unwrap();
+ let entries: Vec<_> = std::fs::read_dir(&root_dir.flags_dir).into_iter().collect();
+ assert!(entries.len() > 0);
+ }
}