fsfdt: Add test

Test: atest libfsfdt_test
Change-Id: I154976352c8e7b2fee52798cdcc4beb0908c5d9f
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);
+    }
+}