Fix Microdroid tests to work with kernelboot method

Test [1] is reworked to [2]. runMicrodroidWithResignedImages() is
reworked to deal with new partition layout. [3] is ignored for now -
blocking it on b/245277660. [4] is obsolete & hence deleted.

1. testBootFailsWhenBootloaderAndVbMetaAreSignedWithDifferentKeys
2. testBootFailsWhenVbMetaDigestDoesNotMatchBootconfig
3. testBootSucceedsWhenNonProtectedVmStartsWithImagesSignedWithDifferentKey
4. testBootSucceedsWhenBootloaderAndVbmetaHaveSameSigningKeys

Bug: 240235424
Test: atest MicrodroidTestCase
Change-Id: Ie8cf8ccb2f109b06214cce457b205b886c7dc3a6
diff --git a/tests/hostside/java/com/android/microdroid/test/MicrodroidTestCase.java b/tests/hostside/java/com/android/microdroid/test/MicrodroidTestCase.java
index 69218a8..a4e46a1 100644
--- a/tests/hostside/java/com/android/microdroid/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/com/android/microdroid/test/MicrodroidTestCase.java
@@ -58,6 +58,7 @@
 import org.json.JSONObject;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestName;
@@ -356,7 +357,7 @@
         JSONObject config = new JSONObject(FileUtil.readStringFromFile(microdroidConfigFile));
 
         // Replace paths so that the config uses re-signed images from TEST_ROOT
-        config.put("bootloader", config.getString("bootloader").replace(VIRT_APEX, TEST_ROOT));
+        config.put("kernel", config.getString("kernel").replace(VIRT_APEX, TEST_ROOT));
         JSONArray disks = config.getJSONArray("disks");
         for (int diskIndex = 0; diskIndex < disks.length(); diskIndex++) {
             JSONObject disk = disks.getJSONObject(diskIndex);
@@ -368,14 +369,16 @@
         }
 
         // Add partitions to the second disk
-        final String vbmetaPath = TEST_ROOT + "etc/fs/microdroid_vbmeta_bootconfig.img";
-        final String bootconfigPath = TEST_ROOT + "etc/fs/microdroid_bootconfig.full_debuggable";
-        disks.getJSONObject(1)
-                .getJSONArray("partitions")
-                .put(newPartition("vbmeta", vbmetaPath))
-                .put(newPartition("bootconfig", bootconfigPath))
-                .put(newPartition("vm-instance", instanceImgPath));
-
+        final String initrdPath = TEST_ROOT + "etc/microdroid_initrd_full_debuggable.img";
+        config.put("initrd", initrdPath);
+        // Add instance image as a partition in disks[1]
+        disks.put(
+            new JSONObject()
+                .put("writable", true)
+                .put(
+                    "partitions",
+                    new JSONArray()
+                        .put(newPartition("vm-instance", instanceImgPath))));
         // Add payload image disk with partitions:
         // - payload-metadata
         // - apexes: com.android.os.statsd, com.android.adbd, [sharedlib apex](optional)
@@ -435,7 +438,10 @@
         assertThat(getDevice().pullFileContents(consolePath), containsString("pvmfw boot failed"));
     }
 
+    // TODO(b/245277660): Resigning the system/vendor image changes the vbmeta hash.
+    // So, unless vbmeta related bootconfigs are updated the following test will fail
     @Test
+    @Ignore("b/245277660")
     @CddTest(requirements = {"9.17/C-2-2", "9.17/C-2-6"})
     public void testBootSucceedsWhenNonProtectedVmStartsWithImagesSignedWithDifferentKey()
             throws Exception {
@@ -454,7 +460,7 @@
 
     @Test
     @CddTest(requirements = {"9.17/C-2-2", "9.17/C-2-6"})
-    public void testBootFailsWhenBootloaderAndVbMetaAreSignedWithDifferentKeys() throws Exception {
+    public void testBootFailsWhenVbMetaDigestDoesNotMatchBootconfig() throws Exception {
         // Sign everything with key1 except vbmeta
         File key = findTestFile("test.com.android.virt.pem");
         File key2 = findTestFile("test2.com.android.virt.pem");
@@ -466,34 +472,11 @@
         String cid =
                 runMicrodroidWithResignedImages(
                         key, keyOverrides, isProtected, daemonize, consolePath);
-        // Wail for a while so that bootloader prints errors to console
+        // Wait so that init can print errors to console (time in cuttlefish >> in real device)
         assertThatEventually(
-                10000,
+                100000,
                 () -> getDevice().pullFileContents(consolePath),
-                containsString("Public key was rejected"));
-        shutdownMicrodroid(getDevice(), cid);
-    }
-
-    @Test
-    @CddTest(requirements = {"9.17/C-2-2", "9.17/C-2-6"})
-    public void testBootSucceedsWhenBootloaderAndVbmetaHaveSameSigningKeys() throws Exception {
-        // Sign everything with key1 except bootloader and vbmeta
-        File key = findTestFile("test.com.android.virt.pem");
-        File key2 = findTestFile("test2.com.android.virt.pem");
-        Map<String, File> keyOverrides =
-                Map.of(
-                        "microdroid_bootloader", key2,
-                        "microdroid_vbmeta.img", key2,
-                        "microdroid_vbmeta_bootconfig.img", key2);
-        boolean isProtected = false; // Not interested in pvwfw
-        boolean daemonize = true; // Bootloader should succeed.
-        // To be able to stop it, it should be a daemon.
-        String consolePath = TEST_ROOT + "console";
-        String cid =
-                runMicrodroidWithResignedImages(
-                        key, keyOverrides, isProtected, daemonize, consolePath);
-        // Adb connection to the microdroid means that boot succeeded.
-        adbConnectToMicrodroid(getDevice(), cid);
+                containsString("init: [libfs_avb]Failed to verify vbmeta digest"));
         shutdownMicrodroid(getDevice(), cid);
     }