Pass file descriptors rather than filenames to Virt Manager.

This requires using a parcelable rather than a JSON file for the config.

Bug: 187181124
Test: atest VirtualizationTestCases
Change-Id: I1636010f5ed55da165f5acd82f1bd8b924e09b41
diff --git a/tests/Android.bp b/tests/Android.bp
index 1b747fe..a06977e 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -32,7 +32,6 @@
     data: [
         ":virt_test_kernel",
         ":virt_test_initramfs",
-        "vsock_config.json",
     ],
     static_libs: [
         // The existence of the library in the system partition is not guaranteed.
diff --git a/tests/AndroidTest.xml b/tests/AndroidTest.xml
index ed4d00c..7c9d889 100644
--- a/tests/AndroidTest.xml
+++ b/tests/AndroidTest.xml
@@ -36,7 +36,6 @@
         <option name="push-file" key="VirtualizationTestCases" value="/data/local/tmp/virt-test/VirtualizationTestCases" />
         <option name="push-file" key="virt_test_kernel"        value="/data/local/tmp/virt-test/kernel" />
         <option name="push-file" key="virt_test_initramfs.img" value="/data/local/tmp/virt-test/initramfs" />
-        <option name="push-file" key="vsock_config.json"       value="/data/local/tmp/virt-test/vsock_config.json" />
     </target_preparer>
 
     <!-- Root currently needed to run CrosVM.
diff --git a/tests/vsock_config.json b/tests/vsock_config.json
deleted file mode 100644
index 762baec..0000000
--- a/tests/vsock_config.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "kernel": "/data/local/tmp/virt-test/kernel",
-  "initrd": "/data/local/tmp/virt-test/initramfs",
-  "params": "rdinit=/bin/init bin/vsock_client 2 45678 HelloWorld"
-}
diff --git a/tests/vsock_test.cc b/tests/vsock_test.cc
index 0df1c5d..f31cb94 100644
--- a/tests/vsock_test.cc
+++ b/tests/vsock_test.cc
@@ -27,6 +27,7 @@
 #include "android-base/logging.h"
 #include "android-base/parseint.h"
 #include "android-base/unique_fd.h"
+#include "android/system/virtmanager/VirtualMachineConfig.h"
 #include "virt/VirtualizationTest.h"
 
 using namespace android::base;
@@ -35,7 +36,9 @@
 namespace virt {
 
 static constexpr int kGuestPort = 45678;
-static constexpr const char kVmConfigPath[] = "/data/local/tmp/virt-test/vsock_config.json";
+static constexpr const char kVmKernelPath[] = "/data/local/tmp/virt-test/kernel";
+static constexpr const char kVmInitrdPath[] = "/data/local/tmp/virt-test/initramfs";
+static constexpr const char kVmParams[] = "rdinit=/bin/init bin/vsock_client 2 45678 HelloWorld";
 static constexpr const char kTestMessage[] = "HelloWorld";
 
 TEST_F(VirtualizationTest, TestVsock) {
@@ -57,10 +60,13 @@
     ret = TEMP_FAILURE_RETRY(listen(server_fd, 1));
     ASSERT_EQ(ret, 0) << strerror(errno);
 
+    VirtualMachineConfig config;
+    config.kernel = ParcelFileDescriptor(unique_fd(open(kVmKernelPath, O_RDONLY | O_CLOEXEC)));
+    config.initrd = ParcelFileDescriptor(unique_fd(open(kVmInitrdPath, O_RDONLY | O_CLOEXEC)));
+    config.params = String16(kVmParams);
+
     sp<IVirtualMachine> vm;
-    unique_fd vm_config_fd(open(kVmConfigPath, O_RDONLY | O_CLOEXEC));
-    status =
-            mVirtManager->startVm(ParcelFileDescriptor(std::move(vm_config_fd)), std::nullopt, &vm);
+    status = mVirtManager->startVm(config, std::nullopt, &vm);
     ASSERT_TRUE(status.isOk()) << "Error starting VM: " << status;
 
     int32_t cid;