Add integration test for avmdtool dump

Bug: 239534874
Test: atest avmdtool_tests
Change-Id: I2a4713e23d81cbe482a5b9d1a8c37ec135ca3fb2
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 33498d3..c967473 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -35,6 +35,9 @@
       "path": "packages/modules/Virtualization/apkdmverity"
     },
     {
+      "path": "packages/modules/Virtualization/avmd"
+    },
+    {
       "path": "packages/modules/Virtualization/virtualizationservice"
     },
     {
diff --git a/avmd/Android.bp b/avmd/Android.bp
index 9f0b28b..b09bed5 100644
--- a/avmd/Android.bp
+++ b/avmd/Android.bp
@@ -22,7 +22,6 @@
 rust_binary {
     name: "avmdtool",
     srcs: ["src/main.rs"],
-    required: ["avbtool"],
     host_supported: true,
     prefer_rlib: true,
     rustlibs: [
@@ -36,3 +35,16 @@
         "libvbmeta_rust",
     ],
 }
+
+rust_test_host {
+    name: "avmdtool_tests",
+    srcs: ["tests/*_test.rs"],
+    test_suites: ["general-tests"],
+    prefer_rlib: true,
+    data: ["tests/data/*"],
+    data_bins: ["avmdtool"],
+    data_libs: [
+        "libcrypto",
+        "libz",
+    ],
+}
diff --git a/avmd/TEST_MAPPING b/avmd/TEST_MAPPING
new file mode 100644
index 0000000..dd687fe
--- /dev/null
+++ b/avmd/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+  "presubmit" : [
+    {
+      "name" : "avmdtool_tests"
+    }
+  ]
+}
diff --git a/avmd/tests/avmdtool_test.rs b/avmd/tests/avmdtool_test.rs
new file mode 100644
index 0000000..d93cb6f
--- /dev/null
+++ b/avmd/tests/avmdtool_test.rs
@@ -0,0 +1,34 @@
+// Copyright 2022, The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Tests for avmdtool.
+
+use std::fs;
+use std::process::Command;
+
+#[test]
+fn test_dump() {
+    // test.avmd is generated with
+    // ```
+    // avmdtool create /tmp/test.amvd \
+    // --apex-payload microdroid vbmeta ./libs/apexutil/tests/data/test.apex \
+    // --apk microdroid_manager apk \
+    // ./libs/apkverify/tests/data/v3-only-with-rsa-pkcs1-sha256-4096.apk \
+    // --apk microdroid_manager extra-apk ./libs/apkverify/tests/data/v3-only-with-stamp.apk
+    //```
+    let output =
+        Command::new("./avmdtool").args(["dump", "tests/data/test.avmd"]).output().unwrap();
+    assert!(output.status.success());
+    assert_eq!(output.stdout, fs::read("tests/data/test.avmd.dump").unwrap());
+}
diff --git a/avmd/tests/data/test.avmd b/avmd/tests/data/test.avmd
new file mode 100644
index 0000000..52e634f
--- /dev/null
+++ b/avmd/tests/data/test.avmd
Binary files differ
diff --git a/avmd/tests/data/test.avmd.dump b/avmd/tests/data/test.avmd.dump
new file mode 100644
index 0000000..a63a151
--- /dev/null
+++ b/avmd/tests/data/test.avmd.dump
@@ -0,0 +1,16 @@
+Descriptors:
+  VBMeta descriptor:
+    namespace:             microdroid
+    name:                  vbmeta
+    vbmeta digest:         296e32a76544de9da01713e471403ab4667705ad527bb4f1fac0cf61e7ce122d
+  APK descriptor:
+    namespace:             microdroid_manager
+    name:                  apk
+    Signing algorithm ID:  0x103
+    APK digest:            0df2426ea33aedaf495d88e5be0c6a1663ff0a81c5ed12d5b2929ae4b4300f2f
+  APK descriptor:
+    namespace:             microdroid_manager
+    name:                  extra-apk
+    Signing algorithm ID:  0x201
+    APK digest:            626bb647c0089717a7ffa52fd8e845f9403d5e27f7a5a8752e47b3345fb82f5c
+