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;