Use Virt Manager for test
Bug: 171278952
Test: atest VirtualizationHostTestCases
Change-Id: Ib603194acb90d4e0952cf276c136efd246d0ce31
diff --git a/tests/hostside/native/vsock/Android.bp b/tests/hostside/native/vsock/Android.bp
index 13b46d5..966bc04 100644
--- a/tests/hostside/native/vsock/Android.bp
+++ b/tests/hostside/native/vsock/Android.bp
@@ -19,11 +19,13 @@
cc_test {
name: "virt_hostside_tests_vsock_server",
srcs: ["server.cc"],
- static_libs: [
+ shared_libs: [
+ "android.system.virtmanager-cpp",
"libbase",
+ "libbinder",
"liblog",
+ "libutils",
],
- static_executable: true,
test_suites: ["device-tests"],
}
diff --git a/tests/hostside/native/vsock/server.cc b/tests/hostside/native/vsock/server.cc
index d4a99d2..1a1aa37 100644
--- a/tests/hostside/native/vsock/server.cc
+++ b/tests/hostside/native/vsock/server.cc
@@ -26,15 +26,21 @@
#include "android-base/logging.h"
#include "android-base/parseint.h"
#include "android-base/unique_fd.h"
+#include "android/system/virtmanager/IVirtManager.h"
+#include "android/system/virtmanager/IVirtualMachine.h"
+#include "binder/IServiceManager.h"
+using namespace android;
using namespace android::base;
+using namespace android::system::virtmanager;
int main(int argc, const char *argv[]) {
unsigned int port;
- if (argc != 2 || !ParseUint(argv[1], &port)) {
- LOG(ERROR) << "Usage: " << argv[0] << " <port>";
+ if (argc != 3 || !ParseUint(argv[1], &port)) {
+ LOG(ERROR) << "Usage: " << argv[0] << " <port> <vm_config.json>";
return EXIT_FAILURE;
}
+ String16 vm_config(argv[2]);
unique_fd server_fd(TEMP_FAILURE_RETRY(socket(AF_VSOCK, SOCK_STREAM, 0)));
if (server_fd < 0) {
@@ -61,6 +67,27 @@
return EXIT_FAILURE;
}
+ LOG(INFO) << "Getting Virt Manager";
+ sp<IVirtManager> virt_manager;
+ status_t err = getService<IVirtManager>(String16("android.system.virtmanager"), &virt_manager);
+ if (err != 0) {
+ LOG(ERROR) << "Error getting Virt Manager from Service Manager: " << err;
+ return EXIT_FAILURE;
+ }
+ sp<IVirtualMachine> vm;
+ binder::Status status = virt_manager->startVm(vm_config, &vm);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Error starting VM: " << status;
+ return EXIT_FAILURE;
+ }
+ int32_t cid;
+ status = vm->getCid(&cid);
+ if (!status.isOk()) {
+ LOG(ERROR) << "Error getting CID: " << status;
+ return EXIT_FAILURE;
+ }
+ LOG(INFO) << "VM starting with CID " << cid;
+
LOG(INFO) << "Accepting connection...";
struct sockaddr_vm client_sa;
socklen_t client_sa_len = sizeof(client_sa);