fsfdt: Add test
Test: atest libfsfdt_test
Change-Id: I154976352c8e7b2fee52798cdcc4beb0908c5d9f
diff --git a/virtualizationmanager/fsfdt/Android.bp b/virtualizationmanager/fsfdt/Android.bp
index 3a42bf3..7a1e5ed 100644
--- a/virtualizationmanager/fsfdt/Android.bp
+++ b/virtualizationmanager/fsfdt/Android.bp
@@ -17,8 +17,8 @@
],
}
-rust_library_rlib {
- name: "libfsfdt",
+rust_defaults {
+ name: "libfsfdt_default",
crate_name: "fsfdt",
defaults: ["avf_build_flags_rust"],
edition: "2021",
@@ -30,3 +30,17 @@
],
apex_available: ["com.android.virt"],
}
+
+rust_library_rlib {
+ name: "libfsfdt",
+ defaults: ["libfsfdt_default"],
+}
+
+rust_test {
+ name: "libfsfdt_test",
+ defaults: ["libfsfdt_default"],
+ data: ["testdata/**/*"],
+ data_bins: ["dtc_static"],
+ rustlibs: ["libtempfile"],
+ compile_multilib: "first",
+}
diff --git a/virtualizationmanager/fsfdt/src/lib.rs b/virtualizationmanager/fsfdt/src/lib.rs
index a2ca519..549df04 100644
--- a/virtualizationmanager/fsfdt/src/lib.rs
+++ b/virtualizationmanager/fsfdt/src/lib.rs
@@ -98,3 +98,56 @@
Ok(())
}
}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+ use std::io::Write;
+ use std::process::Command;
+ use tempfile::NamedTempFile;
+
+ const TEST_FS_FDT_ROOT_PATH: &str = "testdata/fs";
+ const BUF_SIZE_MAX: usize = 1024;
+
+ fn dts_from_fs(path: &Path) -> String {
+ let path = path.to_str().unwrap();
+ let res = Command::new("./dtc_static")
+ .args(["-f", "-s", "-I", "fs", "-O", "dts", path])
+ .output()
+ .unwrap();
+ assert!(res.status.success(), "{res:?}");
+ String::from_utf8(res.stdout).unwrap()
+ }
+
+ fn dts_from_dtb(path: &Path) -> String {
+ let path = path.to_str().unwrap();
+ let res = Command::new("./dtc_static")
+ .args(["-f", "-s", "-I", "dtb", "-O", "dts", path])
+ .output()
+ .unwrap();
+ assert!(res.status.success(), "{res:?}");
+ String::from_utf8(res.stdout).unwrap()
+ }
+
+ fn to_temp_file(fdt: &Fdt) -> Result<NamedTempFile> {
+ let mut file = NamedTempFile::new()?;
+ file.as_file_mut().write_all(fdt.as_slice())?;
+ file.as_file_mut().sync_all()?;
+
+ Ok(file)
+ }
+
+ #[test]
+ fn test_from_fs() {
+ let fs_path = Path::new(TEST_FS_FDT_ROOT_PATH);
+
+ let mut data = vec![0_u8; BUF_SIZE_MAX];
+ let fdt = Fdt::from_fs(fs_path, &mut data).unwrap();
+ let file = to_temp_file(fdt).unwrap();
+
+ let expected = dts_from_fs(fs_path);
+ let actual = dts_from_dtb(file.path());
+
+ assert_eq!(&expected, &actual);
+ }
+}
diff --git a/virtualizationmanager/fsfdt/testdata/fs/avf/reference/oem/stub b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/oem/stub
new file mode 100644
index 0000000..2e73f18
--- /dev/null
+++ b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/oem/stub
Binary files differ
diff --git a/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/empty b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/empty
diff --git a/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/vendor_extra_node/flag b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/vendor_extra_node/flag
new file mode 100644
index 0000000..accba00
--- /dev/null
+++ b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor/vendor_extra_node/flag
Binary files differ
diff --git a/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_hashtree_descriptor_root_digest b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_hashtree_descriptor_root_digest
new file mode 100644
index 0000000..e901bb1
--- /dev/null
+++ b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_hashtree_descriptor_root_digest
Binary files differ
diff --git a/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_image_key b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_image_key
new file mode 100644
index 0000000..4d02944
--- /dev/null
+++ b/virtualizationmanager/fsfdt/testdata/fs/avf/reference/vendor_image_key
Binary files differ