Use mk_cdisk instead of assemble_cvd

mk_cdisk is a tool to create a composite disk image. It can be used to
create other kinds of composite disks as well as os_composite.os which
was created by assemble_cvd before.

For example, if we want to pass host apexes to microdroid we can pass
them via a composite disk referencing host apex files.

Bug: 181093750
Test: running microdroid VM following updated microdroid/README.md
TEst: MicrodroidTestCase
Change-Id: Ief6468564da9eb78c6729ae64a218811919b3ae0
diff --git a/apex/Android.bp b/apex/Android.bp
index bb73630..5357566 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -29,7 +29,7 @@
         },
     },
     binaries: [
-        "assemble_cvd",
+        "mk_cdisk",
         "fd_server",
         "virtmanager",
         "vm",
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index 8ffb3cb..90d2678 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -298,3 +298,8 @@
         "microdroid",
     ],
 }
+
+prebuilt_etc {
+    name: "microdroid_cdisk.json",
+    src: "microdroid_cdisk.json",
+}
diff --git a/microdroid/README.md b/microdroid/README.md
index d737e22..08ed35b 100644
--- a/microdroid/README.md
+++ b/microdroid/README.md
@@ -24,6 +24,7 @@
 $ m microdroid_uboot_env
 $ m microdroid_vbmeta
 $ m microdroid_vbmeta_system
+$ m microdroid_cdisk.json
 ```
 
 ## Installing
@@ -38,14 +39,10 @@
 $ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_vendor_boot-5.10.img /data/local/tmp/vendor_boot.img
 $ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_vbmeta.img /data/local/tmp/vbmeta.img
 $ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_vbmeta_system.img /data/local/tmp/vbmeta_system.img
-$ adb shell mkdir /data/local/tmp/cuttlefish_runtime.1/
-$ adb push $ANDROID_PRODUCT_OUT/system/etc/uboot_env.img /data/local/tmp/cuttlefish_runtime.1/
-$ adb shell mkdir -p /data/local/tmp/etc/cvd_config
-$ adb shell 'echo "{}" > /data/local/tmp/etc/cvd_config/cvd_config_phone.json'
-$ dd if=/dev/zero of=empty.img bs=4k count=600
-$ mkfs.ext4 -F empty.img
-$ adb push empty.img /data/local/tmp/userdata.img
-$ adb push empty.img /data/local/tmp/cache.img
+$ adb push $ANDROID_PRODUCT_OUT/system/etc/uboot_env.img /data/local/tmp
+$ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_cdisk.json /data/local/tmp
+$ dd if=/dev/zero of=misc.img bs=4k count=256
+$ adb push misc.img /data/local/tmp/
 ```
 
 ## Running
@@ -54,8 +51,8 @@
 future, this shall be done via [`virtmanager`](../virtmanager/).
 
 ```
-$ adb shell 'HOME=/data/local/tmp; PATH=$PATH:/apex/com.android.virt/bin; assemble_cvd -protected_vm < /dev/null'
-$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --cid=5 --disable-sandbox --bios=bootloader --serial=type=stdout --disk=cuttlefish_runtime/os_composite.img'
+$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/mk_cdisk microdroid_cdisk.json os_composite.img'
+$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --cid=5 --disable-sandbox --bios=bootloader --serial=type=stdout --disk=os_composite.img'
 ```
 
 The CID in `--cid` parameter can be anything greater than 2 (`VMADDR_CID_HOST`).
diff --git a/microdroid/microdroid_cdisk.json b/microdroid/microdroid_cdisk.json
new file mode 100644
index 0000000..818a2b8
--- /dev/null
+++ b/microdroid/microdroid_cdisk.json
@@ -0,0 +1,48 @@
+{
+  "partitions": [
+    {
+      "label": "uboot_env",
+      "path": "uboot_env.img"
+    },
+    {
+      "label": "misc",
+      "path": "misc.img"
+    },
+    {
+      "label": "boot_a",
+      "path": "boot.img"
+    },
+    {
+      "label": "boot_b",
+      "path": "boot.img"
+    },
+    {
+      "label": "vendor_boot_a",
+      "path": "vendor_boot.img"
+    },
+    {
+      "label": "vendor_boot_b",
+      "path": "vendor_boot.img"
+    },
+    {
+      "label": "vbmeta_a",
+      "path": "vbmeta.img"
+    },
+    {
+      "label": "vbmeta_b",
+      "path": "vbmeta.img"
+    },
+    {
+      "label": "vbmeta_system_a",
+      "path": "vbmeta_system.img"
+    },
+    {
+      "label": "vbmeta_system_b",
+      "path": "vbmeta_system.img"
+    },
+    {
+      "label": "super",
+      "path": "super.img"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tests/hostside/Android.bp b/tests/hostside/Android.bp
index c030e8d..a1e6cbb 100644
--- a/tests/hostside/Android.bp
+++ b/tests/hostside/Android.bp
@@ -8,22 +8,21 @@
     test_suites: ["device-tests"],
     libs: ["tradefed"],
     data: [
+        ":microdroid_cdisk.json",
         ":microdroid_super",
         ":microdroid_boot-5.10",
         ":microdroid_vendor_boot-5.10",
         ":microdroid_uboot_env",
         ":cuttlefish_crosvm_bootloader",
-        ":MicrodroidHostTestCase_EmptyImage",
+        ":MicrodroidHostTestCase_misc",
         ":microdroid_vbmeta",
         ":microdroid_vbmeta_system",
     ],
 }
 
 genrule {
-    name: "MicrodroidHostTestCase_EmptyImage",
-    tools: ["mke2fs"],
-    out: ["empty.img"],
-    cmd: "dd if=/dev/zero of=$(out) bs=4k count=600 &&" +
-        "$(location mke2fs) -t ext4 $(out)",
+    name: "MicrodroidHostTestCase_misc",
+    out: ["misc.img"],
+    cmd: "dd if=/dev/zero of=$(out) bs=4k count=256",
     visibility: ["//visibility:private"],
 }
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index c5c86a6..a521570 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -69,44 +69,44 @@
     @Test
     public void testMicrodroidBoots() throws Exception {
         // Prepare input files
+        pushFile("microdroid_cdisk.json", "microdroid_cdisk.json");
         pushFile("u-boot.bin", "bootloader");
         pushFile("microdroid_super.img", "super.img");
         pushFile("microdroid_boot-5.10.img", "boot.img");
         pushFile("microdroid_vendor_boot-5.10.img", "vendor_boot.img");
-        pushFile("uboot_env.img", "cuttlefish_runtime.1/uboot_env.img");
-        pushFile("empty.img", "userdata.img");
+        pushFile("uboot_env.img", "uboot_env.img");
+        pushFile("misc.img", "misc.img");
         pushFile("microdroid_vbmeta.img", "vbmeta.img");
         pushFile("microdroid_vbmeta_system.img", "vbmeta_system.img");
-        pushFile("empty.img", "cache.img");
-        getDevice().executeShellCommand("mkdir -p " + TEST_ROOT + "etc/cvd_config");
-        getDevice().pushString("{}", TEST_ROOT + "etc/cvd_config/cvd_config_phone.json");
 
-        // Run assemble_cvd to create os_composite.img
-        getDevice().executeShellCommand("HOME=" + TEST_ROOT + "; "
-                + "PATH=$PATH:" + VIRT_APEX + "bin; "
-                + VIRT_APEX + "bin/assemble_cvd -protected_vm < /dev/null");
+        // Create os_composite.img
+        String makeOsCompositeCmd =
+                String.format(
+                        "cd %s; %sbin/mk_cdisk microdroid_cdisk.json os_composite.img",
+                        TEST_ROOT, VIRT_APEX);
+        getDevice().executeShellCommand(makeOsCompositeCmd);
 
         // Make sure that os_composite.img is created
-        final String compositeImg = TEST_ROOT + "cuttlefish_runtime/os_composite.img";
+        final String compositeImg = TEST_ROOT + "/os_composite.img";
         CommandResult result = getDevice().executeShellV2Command("du -b " + compositeImg);
         assertThat(result.getExitCode(), is(0));
         assertThat(result.getStdout(), is(not("")));
 
         // Start microdroid using crosvm
         ExecutorService executor = Executors.newFixedThreadPool(1);
-        executor.execute(() -> {
-            try {
-                getDevice().executeShellV2Command("cd " + TEST_ROOT + "; "
-                        + VIRT_APEX + "bin/crosvm run "
-                        + "--cid=" + TEST_VM_CID + " "
-                        + "--disable-sandbox "
-                        + "--bios=bootloader "
-                        + "--serial=type=syslog "
-                        + "--disk=cuttlefish_runtime/os_composite.img");
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        });
+        String runMicrodroidCmd =
+                String.format(
+                        "cd %s; %sbin/crosvm run --cid=%d --disable-sandbox --bios=bootloader"
+                                + " --serial=type=syslog --disk=os_composite.img",
+                        TEST_ROOT, VIRT_APEX, TEST_VM_CID);
+        executor.execute(
+                () -> {
+                    try {
+                        getDevice().executeShellV2Command(runMicrodroidCmd);
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                });
         // .. and wait for microdroid to boot
         // TODO(jiyong): don't wait too long. We can wait less by monitoring log from microdroid
         Thread.sleep(MICRODROID_BOOT_TIMEOUT_MILLIS);