[libvirt PATCH v7 13/18] tests: Add macOS support to qemuxml2*test

Andrea Bolognani abologna at redhat.com
Fri Jan 21 17:54:53 UTC 2022


The new DO_TEST_MACOS() macro makes it possible to create test
cases that verify the behavior of libvirt on a macOS machine
with HVF support available.

Signed-off-by: Andrea Bolognani <abologna at redhat.com>
Tested-by: Brad Laue <brad at brad-x.com>
Tested-by: Christophe Fergeau <cfergeau at redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
---
 tests/qemuxml2argvtest.c | 25 ++++++++++++++++++++++++-
 tests/qemuxml2xmltest.c  | 27 ++++++++++++++++++++++++++-
 tests/testutilsqemu.c    |  4 ++++
 tests/testutilsqemu.h    |  2 ++
 4 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 9d2de2a569..69bcdd0120 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -39,6 +39,8 @@
 # define VIR_FROM_THIS VIR_FROM_QEMU
 
 static virQEMUDriver driver;
+static virCaps *linuxCaps;
+static virCaps *macOSCaps;
 
 static unsigned char *
 fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED,
@@ -716,12 +718,18 @@ testCompareXMLToArgv(const void *data)
     g_autofree char *archstr = NULL;
     virArch arch = VIR_ARCH_NONE;
     g_autoptr(virIdentity) sysident = virIdentityGetSystem();
+    int rc;
 
     memset(&monitor_chr, 0, sizeof(monitor_chr));
 
     if (testQemuInfoInitArgs((struct testQemuInfo *) info) < 0)
         goto cleanup;
 
+    if (info->args.hostOS == HOST_OS_MACOS)
+        driver.caps = macOSCaps;
+    else
+        driver.caps = linuxCaps;
+
     if (info->arch != VIR_ARCH_NONE && info->arch != VIR_ARCH_X86_64)
         qemuTestSetHostArch(&driver, info->arch);
 
@@ -771,7 +779,11 @@ testCompareXMLToArgv(const void *data)
             goto cleanup;
     }
 
-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+    if (info->args.hostOS == HOST_OS_MACOS)
+        rc = qemuTestCapsCacheInsertMacOS(driver.qemuCapsCache, info->qemuCaps);
+    else
+        rc = qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps);
+    if (rc < 0)
         goto cleanup;
 
     if (info->migrateFrom &&
@@ -934,6 +946,13 @@ mymain(void)
     if (qemuTestDriverInit(&driver) < 0)
         return EXIT_FAILURE;
 
+    /* By default, the driver gets a virCaps instance that's suitable for
+     * tests that expect Linux as the host OS. We create another one for
+     * macOS and keep around pointers to both: this allows us to later
+     * pick the appropriate one for each test case */
+    linuxCaps = driver.caps;
+    macOSCaps = testQemuCapsInitMacOS();
+
     driver.privileged = true;
 
     VIR_FREE(driver.config->defaultTLSx509certdir);
@@ -1074,6 +1093,10 @@ mymain(void)
     DO_TEST_FULL(name, "", \
                  ARG_GIC, gic, \
                  ARG_QEMU_CAPS, __VA_ARGS__, QEMU_CAPS_LAST, ARG_END)
+# define DO_TEST_MACOS(name, ...) \
+    DO_TEST_FULL(name, "", \
+                 ARG_HOST_OS, HOST_OS_MACOS, \
+                 ARG_QEMU_CAPS, __VA_ARGS__, QEMU_CAPS_LAST, ARG_END)
 
 # define DO_TEST_FAILURE(name, ...) \
     DO_TEST_FULL(name, "", \
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index ce1cac31c8..e3f3e481af 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -21,6 +21,8 @@
 #define VIR_FROM_THIS VIR_FROM_NONE
 
 static virQEMUDriver driver;
+static virCaps *linuxCaps;
+static virCaps *macOSCaps;
 
 enum {
     WHEN_INACTIVE = 1,
@@ -32,13 +34,24 @@ enum {
 static int
 testXML2XMLCommon(const struct testQemuInfo *info)
 {
+    int rc;
+
     if (testQemuInfoInitArgs((struct testQemuInfo *) info) < 0)
         return -1;
 
+    if (info->args.hostOS == HOST_OS_MACOS)
+        driver.caps = macOSCaps;
+    else
+        driver.caps = linuxCaps;
+
     if (!(info->flags & FLAG_REAL_CAPS))
         virQEMUCapsInitQMPBasicArch(info->qemuCaps);
 
-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+    if (info->args.hostOS == HOST_OS_MACOS)
+        rc = qemuTestCapsCacheInsertMacOS(driver.qemuCapsCache, info->qemuCaps);
+    else
+        rc = qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps);
+    if (rc < 0)
         return -1;
 
     return 0;
@@ -143,6 +156,13 @@ mymain(void)
     if (qemuTestDriverInit(&driver) < 0)
         return EXIT_FAILURE;
 
+    /* By default, the driver gets a virCaps instance that's suitable for
+     * tests that expect Linux as the host OS. We create another one for
+     * macOS and keep around pointers to both: this allows us to later
+     * pick the appropriate one for each test case */
+    linuxCaps = driver.caps;
+    macOSCaps = testQemuCapsInitMacOS();
+
     cfg = virQEMUDriverGetConfig(&driver);
     driver.privileged = true;
 
@@ -206,6 +226,11 @@ mymain(void)
 #define DO_TEST_NOCAPS(name) \
     DO_TEST_FULL(name, "", WHEN_BOTH, ARG_END)
 
+#define DO_TEST_MACOS(name, ...) \
+    DO_TEST_FULL(name, "", WHEN_BOTH, \
+                 ARG_HOST_OS, HOST_OS_MACOS, \
+                 ARG_QEMU_CAPS, __VA_ARGS__, QEMU_CAPS_LAST, ARG_END)
+
     /* Unset or set all envvars here that are copied in qemudBuildCommandLine
      * using ADD_ENV_COPY, otherwise these tests may fail due to unexpected
      * values for these envvars */
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index e48e449f02..a77d1e6fe6 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -870,6 +870,10 @@ testQemuInfoSetArgs(struct testQemuInfo *info,
             info->args.capsver = va_arg(argptr, char *);
             break;
 
+        case ARG_HOST_OS:
+            info->args.hostOS = va_arg(argptr, int);
+            break;
+
         case ARG_END:
         default:
             info->args.invalidarg = true;
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index a9202d2ae6..51139e6a97 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -47,6 +47,7 @@ typedef enum {
     ARG_PARSEFLAGS,
     ARG_CAPS_ARCH,
     ARG_CAPS_VER,
+    ARG_HOST_OS,
     ARG_END,
 } testQemuInfoArgName;
 
@@ -72,6 +73,7 @@ struct testQemuArgs {
     char *capsver;
     char *capsarch;
     int gic;
+    testQemuHostOS hostOS;
     bool invalidarg;
 };
 
-- 
2.34.1




More information about the libvir-list mailing list