[PATCH 21/27] tests: Move testPrepareHostBackendChardevOne into test utils

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Move the function doing the fake setup of chardev backend for FD passing
into the collection of qemu test helpers so that it can be used in
qemumonitorjsontest.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 tests/qemuxml2argvtest.c |  93 +---------------------------------
 tests/testutilsqemu.c    | 106 +++++++++++++++++++++++++++++++++++++++
 tests/testutilsqemu.h    |   3 ++
 3 files changed, 111 insertions(+), 91 deletions(-)

diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index d4e518e3a1..1e1d9ee9a1 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -378,95 +378,6 @@ testCheckExclusiveFlags(int flags)
 }


-static int
-testPrepareHostBackendChardevOne(virDomainDeviceDef *dev,
-                                 virDomainChrSourceDef *chardev,
-                                 void *opaque)
-{
-    virDomainObj *vm = opaque;
-    qemuDomainObjPrivate *priv = vm->privateData;
-    qemuDomainChrSourcePrivate *charpriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(chardev);
-    int fakesourcefd = -1;
-    const char *devalias = NULL;
-    bool usefdset = true;
-
-    if (dev) {
-        virDomainDeviceInfo *info = virDomainDeviceGetInfo(dev);
-        devalias = info->alias;
-
-        /* vhost-user disk doesn't use FD passing */
-        if (dev->type == VIR_DOMAIN_DEVICE_DISK)
-            return 0;
-
-        if (dev->type == VIR_DOMAIN_DEVICE_NET) {
-            /* due to a historical bug in qemu we don't use FD passtrhough for
-             * vhost-sockets for network devices */
-            return 0;
-        }
-
-        /* TPMs FD passing setup is special and handled separately */
-        if (dev->type == VIR_DOMAIN_DEVICE_TPM)
-            return 0;
-    } else {
-        devalias = "monitor";
-    }
-
-    switch ((virDomainChrType) chardev->type) {
-    case VIR_DOMAIN_CHR_TYPE_NULL:
-    case VIR_DOMAIN_CHR_TYPE_VC:
-    case VIR_DOMAIN_CHR_TYPE_PTY:
-    case VIR_DOMAIN_CHR_TYPE_DEV:
-    case VIR_DOMAIN_CHR_TYPE_PIPE:
-    case VIR_DOMAIN_CHR_TYPE_STDIO:
-    case VIR_DOMAIN_CHR_TYPE_UDP:
-    case VIR_DOMAIN_CHR_TYPE_TCP:
-    case VIR_DOMAIN_CHR_TYPE_SPICEVMC:
-    case VIR_DOMAIN_CHR_TYPE_SPICEPORT:
-        break;
-
-    case VIR_DOMAIN_CHR_TYPE_FILE:
-        fakesourcefd = 1750;
-        break;
-
-    case VIR_DOMAIN_CHR_TYPE_UNIX:
-        if (chardev->data.nix.listen &&
-            virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS_COMMANDLINE))
-            fakesourcefd = 1729;
-
-        usefdset = false;
-        break;
-
-    case VIR_DOMAIN_CHR_TYPE_NMDM:
-    case VIR_DOMAIN_CHR_TYPE_LAST:
-        break;
-    }
-
-    if (fakesourcefd != -1) {
-        if (fcntl(fakesourcefd, F_GETFD) != -1)
-            abort();
-
-        charpriv->sourcefd = qemuFDPassNew(devalias, priv, usefdset);
-
-        if (qemuFDPassAddFD(charpriv->sourcefd, &fakesourcefd, "-source") < 0)
-            return -1;
-    }
-
-    if (chardev->logfile) {
-        int fd = 1751;
-
-        if (fcntl(fd, F_GETFD) != -1)
-            abort();
-
-        charpriv->logfd = qemuFDPassNew(devalias, priv, true);
-
-        if (qemuFDPassAddFD(charpriv->logfd, &fd, "-log") < 0)
-            return -1;
-    }
-
-    return 0;
-}
-
-
 static virCommand *
 testCompareXMLToArgvCreateArgs(virQEMUDriver *drv,
                                virDomainObj *vm,
@@ -483,11 +394,11 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv,
         return NULL;

     if (qemuDomainDeviceBackendChardevForeach(vm->def,
-                                              testPrepareHostBackendChardevOne,
+                                              testQemuPrepareHostBackendChardevOne,
                                               vm) < 0)
         return NULL;

-    if (testPrepareHostBackendChardevOne(NULL, priv->monConfig, vm) < 0)
+    if (testQemuPrepareHostBackendChardevOne(NULL, priv->monConfig, vm) < 0)
         return NULL;

     for (i = 0; i < vm->def->ndisks; i++) {
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index 646ef415d1..c156a89413 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -13,6 +13,9 @@
 # include "virstring.h"
 # include "virfilecache.h"

+# include <sys/types.h>
+# include <fcntl.h>
+
 # define VIR_FROM_THIS VIR_FROM_QEMU

 virCPUDef *cpuDefault;
@@ -979,3 +982,106 @@ testQemuInfoClear(struct testQemuInfo *info)
     virObjectUnref(info->qemuCaps);
     g_clear_pointer(&info->args.fakeCaps, virObjectUnref);
 }
+
+
+/**
+ * testQemuPrepareHostBackendChardevOne:
+ * @dev: device definition object
+ * @chardev: chardev source object
+ * @opaque: Caller is expected to pass pointer to virDomainObj or NULL
+ *
+ * This helper sets up a chardev source backend for FD passing with fake
+ * file descriptros. It's expected to be used as  callback for
+ * 'qemuDomainDeviceBackendChardevForeach', thus the VM object is passed via
+ * @opaque. Callers may pass NULL if the test scope is limited.
+ */
+int
+testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev,
+                                     virDomainChrSourceDef *chardev,
+                                     void *opaque)
+{
+    virDomainObj *vm = opaque;
+    qemuDomainObjPrivate *priv = NULL;
+    qemuDomainChrSourcePrivate *charpriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(chardev);
+    int fakesourcefd = -1;
+    const char *devalias = NULL;
+    bool usefdset = true;
+
+    if (vm)
+        priv = vm->privateData;
+
+    if (dev) {
+        virDomainDeviceInfo *info = virDomainDeviceGetInfo(dev);
+        devalias = info->alias;
+
+        /* vhost-user disk doesn't use FD passing */
+        if (dev->type == VIR_DOMAIN_DEVICE_DISK)
+            return 0;
+
+        if (dev->type == VIR_DOMAIN_DEVICE_NET) {
+            /* due to a historical bug in qemu we don't use FD passtrhough for
+             * vhost-sockets for network devices */
+            return 0;
+        }
+
+        /* TPMs FD passing setup is special and handled separately */
+        if (dev->type == VIR_DOMAIN_DEVICE_TPM)
+            return 0;
+    } else {
+        devalias = "monitor";
+    }
+
+    switch ((virDomainChrType) chardev->type) {
+    case VIR_DOMAIN_CHR_TYPE_NULL:
+    case VIR_DOMAIN_CHR_TYPE_VC:
+    case VIR_DOMAIN_CHR_TYPE_PTY:
+    case VIR_DOMAIN_CHR_TYPE_DEV:
+    case VIR_DOMAIN_CHR_TYPE_PIPE:
+    case VIR_DOMAIN_CHR_TYPE_STDIO:
+    case VIR_DOMAIN_CHR_TYPE_UDP:
+    case VIR_DOMAIN_CHR_TYPE_TCP:
+    case VIR_DOMAIN_CHR_TYPE_SPICEVMC:
+    case VIR_DOMAIN_CHR_TYPE_SPICEPORT:
+        break;
+
+    case VIR_DOMAIN_CHR_TYPE_FILE:
+        fakesourcefd = 1750;
+        break;
+
+    case VIR_DOMAIN_CHR_TYPE_UNIX:
+        if (chardev->data.nix.listen &&
+            virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS_COMMANDLINE))
+            fakesourcefd = 1729;
+
+        usefdset = false;
+        break;
+
+    case VIR_DOMAIN_CHR_TYPE_NMDM:
+    case VIR_DOMAIN_CHR_TYPE_LAST:
+        break;
+    }
+
+    if (fakesourcefd != -1) {
+        if (fcntl(fakesourcefd, F_GETFD) != -1)
+            abort();
+
+        charpriv->sourcefd = qemuFDPassNew(devalias, priv, usefdset);
+
+        if (qemuFDPassAddFD(charpriv->sourcefd, &fakesourcefd, "-source") < 0)
+            return -1;
+    }
+
+    if (chardev->logfile) {
+        int fd = 1751;
+
+        if (fcntl(fd, F_GETFD) != -1)
+            abort();
+
+        charpriv->logfd = qemuFDPassNew(devalias, priv, true);
+
+        if (qemuFDPassAddFD(charpriv->logfd, &fd, "-log") < 0)
+            return -1;
+    }
+
+    return 0;
+}
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index 51139e6a97..187f9b7cd3 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -143,4 +143,7 @@ void testQemuInfoSetArgs(struct testQemuInfo *info,
 int testQemuInfoInitArgs(struct testQemuInfo *info);
 void testQemuInfoClear(struct testQemuInfo *info);

+int testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev,
+                                         virDomainChrSourceDef *chardev,
+                                         void *opaque);
 #endif
-- 
2.34.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux