[PATCH 03/14] tests: Export handlers for fake secondary drivers

Rayhan Faizel posted 14 patches 3 months ago
[PATCH 03/14] tests: Export handlers for fake secondary drivers
Posted by Rayhan Faizel 3 months ago
This patch exports handlers for fake network, storage and secret drivers
which will be used by the QEMU XML domain fuzzer.

Signed-off-by: Rayhan Faizel <rayhan.faizel@gmail.com>
---
 tests/qemuxmlconftest.c | 249 --------------------------------------
 tests/testutilsqemu.c   | 256 ++++++++++++++++++++++++++++++++++++++++
 tests/testutilsqemu.h   |  57 +++++++++
 3 files changed, 313 insertions(+), 249 deletions(-)

diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index 89292af300..35830257c7 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -33,52 +33,6 @@
 
 static virQEMUDriver driver;
 
-static unsigned char *
-fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED,
-                   size_t *value_size,
-                   unsigned int fakeflags G_GNUC_UNUSED)
-{
-    char *secret;
-    secret = g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
-    *value_size = strlen(secret);
-    return (unsigned char *) secret;
-}
-
-static virSecretPtr
-fakeSecretLookupByUsage(virConnectPtr conn,
-                        int usageType,
-                        const char *usageID)
-{
-    unsigned char uuid[VIR_UUID_BUFLEN];
-    if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) {
-        if (!STRPREFIX(usageID, "/storage/guest_disks/")) {
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                           "test provided invalid volume storage prefix '%s'",
-                           usageID);
-            return NULL;
-        }
-    } else if (STRNEQ(usageID, "mycluster_myname") &&
-               STRNEQ(usageID, "client.admin secret")) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       "test provided incorrect usage '%s'", usageID);
-        return NULL;
-    }
-
-    if (virUUIDGenerate(uuid) < 0)
-        return NULL;
-
-    return virGetSecret(conn, uuid, usageType, usageID);
-}
-
-static virSecretPtr
-fakeSecretLookupByUUID(virConnectPtr conn,
-                       const unsigned char *uuid)
-{
-    /* NB: This mocked value could be "tls" or "volume" depending on
-     * which test is being run, we'll leave at NONE (or 0) */
-    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
-}
-
 static virSecretDriver fakeSecretDriver = {
     .connectNumOfSecrets = NULL,
     .connectListSecrets = NULL,
@@ -92,118 +46,6 @@ static virSecretDriver fakeSecretDriver = {
 };
 
 
-# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
-static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";
-
-static virStoragePoolPtr
-fakeStoragePoolLookupByName(virConnectPtr conn,
-                            const char *name)
-{
-    g_autofree char *xmlpath = NULL;
-
-    if (STRNEQ(name, "inactive")) {
-        xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir,
-                                  STORAGE_POOL_XML_PATH, name);
-
-        if (!virFileExists(xmlpath)) {
-            virReportError(VIR_ERR_NO_STORAGE_POOL,
-                           "File '%s' not found", xmlpath);
-            return NULL;
-        }
-    }
-
-    return virGetStoragePool(conn, name, fakeUUID, NULL, NULL);
-}
-
-
-static virStorageVolPtr
-fakeStorageVolLookupByName(virStoragePoolPtr pool,
-                           const char *name)
-{
-    g_auto(GStrv) volinfo = NULL;
-
-    if (STREQ(pool->name, "inactive")) {
-        virReportError(VIR_ERR_OPERATION_INVALID,
-                       "storage pool '%s' is not active", pool->name);
-        return NULL;
-    }
-
-    if (STREQ(name, "nonexistent")) {
-        virReportError(VIR_ERR_NO_STORAGE_VOL,
-                       "no storage vol with matching name '%s'", name);
-        return NULL;
-    }
-
-    if (!(volinfo = g_strsplit(name, "+", 2)))
-        return NULL;
-
-    if (!volinfo[1]) {
-        return virGetStorageVol(pool->conn, pool->name, name, "block", NULL, NULL);
-    }
-
-    return virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0],
-                           NULL, NULL);
-}
-
-static int
-fakeStorageVolGetInfo(virStorageVolPtr vol,
-                      virStorageVolInfoPtr info)
-{
-    memset(info, 0, sizeof(*info));
-
-    info->type = virStorageVolTypeFromString(vol->key);
-
-    if (info->type < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       "Invalid volume type '%s'", vol->key);
-        return -1;
-    }
-
-    return 0;
-}
-
-
-static char *
-fakeStorageVolGetPath(virStorageVolPtr vol)
-{
-    return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name);
-}
-
-
-static char *
-fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
-                          unsigned int flags_unused G_GNUC_UNUSED)
-{
-    g_autofree char *xmlpath = NULL;
-    char *xmlbuf = NULL;
-
-    if (STREQ(pool->name, "inactive")) {
-        virReportError(VIR_ERR_NO_STORAGE_POOL, NULL);
-        return NULL;
-    }
-
-    xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XML_PATH,
-                              pool->name);
-
-    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR,
-                       "failed to load XML file '%s'",
-                       xmlpath);
-        return NULL;
-    }
-
-    return xmlbuf;
-}
-
-static int
-fakeStoragePoolIsActive(virStoragePoolPtr pool)
-{
-    if (STREQ(pool->name, "inactive"))
-        return 0;
-
-    return 1;
-}
-
 /* Test storage pool implementation
  *
  * These functions aid testing of storage pool related stuff when creating a
@@ -257,97 +99,6 @@ static virNWFilterDriver fakeNWFilterDriver = {
 };
 
 
-/* name of the fake network shall be constructed as:
- *  NETWORKXMLNAME;NETWORKPORTXMLNAME
- *  where:
- *  NETWORKXMLNAME resolves to abs_srcdir/networkxml2xmlin/NETWORKXMLNAME.xml
- *  NETWORKPORTXMLNAME resolves to abs_srcdir/virnetworkportxml2xmldata/NETWORKPORTXMLNAME.xml
- */
-static virNetworkPtr
-fakeNetworkLookupByName(virConnectPtr conn,
-                        const char *name)
-{
-    unsigned char uuid[VIR_UUID_BUFLEN];
-    g_autofree char *netname = g_strdup(name);
-    g_autofree char *path = NULL;
-    char *tmp;
-
-    memset(uuid, 0, VIR_UUID_BUFLEN);
-
-    if ((tmp = strchr(netname, ';'))) {
-        *tmp = '\0';
-    } else {
-        virReportError(VIR_ERR_NO_NETWORK,
-                       "Malformed fake network name '%s'. See fakeNetworkLookupByName.",
-                       name);
-        return NULL;
-    }
-
-    path = g_strdup_printf(abs_srcdir "/networkxml2xmlin/%s.xml", netname);
-
-    if (!virFileExists(path)) {
-        virReportError(VIR_ERR_NO_NETWORK, "fake network '%s' not found", path);
-        return NULL;
-    }
-
-    return virGetNetwork(conn, name, uuid);
-}
-
-
-static char *
-fakeNetworkGetXMLDesc(virNetworkPtr network,
-                      unsigned int noflags G_GNUC_UNUSED)
-{
-    g_autofree char *netname = g_strdup(network->name);
-    g_autofree char *path = NULL;
-    char *xml = NULL;
-
-    *(strchr(netname, ';')) = '\0';
-
-    path = g_strdup_printf(abs_srcdir "/networkxml2xmlin/%s.xml", netname);
-
-    if (virFileReadAll(path, 4 * 1024, &xml) < 0)
-        return NULL;
-
-    return xml;
-}
-
-
-static virNetworkPortPtr
-fakeNetworkPortCreateXML(virNetworkPtr net,
-                         const char *xmldesc G_GNUC_UNUSED,
-                         unsigned int noflags G_GNUC_UNUSED)
-{
-    unsigned char uuid[VIR_UUID_BUFLEN];
-    g_autofree char *portname = g_strdup(strchr(net->name, ';') + 1);
-    g_autofree char *path = g_strdup_printf(abs_srcdir "/virnetworkportxml2xmldata/%s.xml", portname);
-
-    memset(uuid, 0, VIR_UUID_BUFLEN);
-
-    if (!virFileExists(path)) {
-        virReportError(VIR_ERR_NO_NETWORK_PORT, "fake network port '%s' not found", path);
-        return NULL;
-    }
-
-    return virGetNetworkPort(net, uuid);
-}
-
-
-static char *
-fakeNetworkPortGetXMLDesc(virNetworkPortPtr port,
-                          unsigned int noflags G_GNUC_UNUSED)
-{
-    g_autofree char *portname = g_strdup(strchr(port->net->name, ';') + 1);
-    g_autofree char *path = g_strdup_printf(abs_srcdir "/virnetworkportxml2xmldata/%s.xml", portname);
-    char *xml = NULL;
-
-    if (virFileReadAll(path, 4 * 1024, &xml) < 0)
-        return NULL;
-
-    return xml;
-}
-
-
 static virNetworkDriver fakeNetworkDriver = {
     .networkLookupByName = fakeNetworkLookupByName,
     .networkGetXMLDesc = fakeNetworkGetXMLDesc,
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index ee6cae218a..4445fafd23 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -13,6 +13,7 @@
 # include "virstring.h"
 # include "virfilecache.h"
 # include "virtpm.h"
+# include "conf/storage_conf.h"
 
 # include <sys/types.h>
 # include <fcntl.h>
@@ -1076,3 +1077,258 @@ testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev,
 
     return 0;
 }
+
+
+# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/"
+static const unsigned char fakeUUID[VIR_UUID_BUFLEN] = "fakeuuid";
+
+virStoragePoolPtr
+fakeStoragePoolLookupByName(virConnectPtr conn,
+                            const char *name)
+{
+    g_autofree char *xmlpath = NULL;
+
+    if (STRNEQ(name, "inactive")) {
+        xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir,
+                                  STORAGE_POOL_XML_PATH, name);
+
+        if (!virFileExists(xmlpath)) {
+            virReportError(VIR_ERR_NO_STORAGE_POOL,
+                           "File '%s' not found", xmlpath);
+            return NULL;
+        }
+    }
+
+    return virGetStoragePool(conn, name, fakeUUID, NULL, NULL);
+}
+
+
+virStorageVolPtr
+fakeStorageVolLookupByName(virStoragePoolPtr pool,
+                           const char *name)
+{
+    g_auto(GStrv) volinfo = NULL;
+
+    if (STREQ(pool->name, "inactive")) {
+        virReportError(VIR_ERR_OPERATION_INVALID,
+                       "storage pool '%s' is not active", pool->name);
+        return NULL;
+    }
+
+    if (STREQ(name, "nonexistent")) {
+        virReportError(VIR_ERR_NO_STORAGE_VOL,
+                       "no storage vol with matching name '%s'", name);
+        return NULL;
+    }
+
+    if (!(volinfo = g_strsplit(name, "+", 2)))
+        return NULL;
+
+    if (!volinfo[1]) {
+        return virGetStorageVol(pool->conn, pool->name, name, "block", NULL, NULL);
+    }
+
+    return virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0],
+                           NULL, NULL);
+}
+
+
+int
+fakeStorageVolGetInfo(virStorageVolPtr vol,
+                      virStorageVolInfoPtr info)
+{
+    memset(info, 0, sizeof(*info));
+
+    info->type = virStorageVolTypeFromString(vol->key);
+
+    if (info->type < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       "Invalid volume type '%s'", vol->key);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+char *
+fakeStorageVolGetPath(virStorageVolPtr vol)
+{
+    return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name);
+}
+
+
+char *
+fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
+                          unsigned int flags_unused G_GNUC_UNUSED)
+{
+    g_autofree char *xmlpath = NULL;
+    char *xmlbuf = NULL;
+
+    if (STREQ(pool->name, "inactive")) {
+        virReportError(VIR_ERR_NO_STORAGE_POOL, NULL);
+        return NULL;
+    }
+
+    xmlpath = g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XML_PATH,
+                              pool->name);
+
+    if (virTestLoadFile(xmlpath, &xmlbuf) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       "failed to load XML file '%s'",
+                       xmlpath);
+        return NULL;
+    }
+
+    return xmlbuf;
+}
+
+
+int
+fakeStoragePoolIsActive(virStoragePoolPtr pool)
+{
+    if (STREQ(pool->name, "inactive"))
+        return 0;
+
+    return 1;
+}
+
+
+/* name of the fake network shall be constructed as:
+ *  NETWORKXMLNAME;NETWORKPORTXMLNAME
+ *  where:
+ *  NETWORKXMLNAME resolves to abs_srcdir/networkxml2xmlin/NETWORKXMLNAME.xml
+ *  NETWORKPORTXMLNAME resolves to abs_srcdir/virnetworkportxml2xmldata/NETWORKPORTXMLNAME.xml
+ */
+virNetworkPtr
+fakeNetworkLookupByName(virConnectPtr conn,
+                        const char *name)
+{
+    unsigned char uuid[VIR_UUID_BUFLEN];
+    g_autofree char *netname = g_strdup(name);
+    g_autofree char *path = NULL;
+    char *tmp;
+
+    memset(uuid, 0, VIR_UUID_BUFLEN);
+
+    if ((tmp = strchr(netname, ';'))) {
+        *tmp = '\0';
+    } else {
+        virReportError(VIR_ERR_NO_NETWORK,
+                       "Malformed fake network name '%s'. See fakeNetworkLookupByName.",
+                       name);
+        return NULL;
+    }
+
+    path = g_strdup_printf(abs_srcdir "/networkxml2xmlin/%s.xml", netname);
+
+    if (!virFileExists(path)) {
+        virReportError(VIR_ERR_NO_NETWORK, "fake network '%s' not found", path);
+        return NULL;
+    }
+
+    return virGetNetwork(conn, name, uuid);
+}
+
+
+char *
+fakeNetworkGetXMLDesc(virNetworkPtr network,
+                      unsigned int noflags G_GNUC_UNUSED)
+{
+    g_autofree char *netname = g_strdup(network->name);
+    g_autofree char *path = NULL;
+    char *xml = NULL;
+
+    *(strchr(netname, ';')) = '\0';
+
+    path = g_strdup_printf(abs_srcdir "/networkxml2xmlin/%s.xml", netname);
+
+    if (virFileReadAll(path, 4 * 1024, &xml) < 0)
+        return NULL;
+
+    return xml;
+}
+
+
+virNetworkPortPtr
+fakeNetworkPortCreateXML(virNetworkPtr net,
+                         const char *xmldesc G_GNUC_UNUSED,
+                         unsigned int noflags G_GNUC_UNUSED)
+{
+    unsigned char uuid[VIR_UUID_BUFLEN];
+    g_autofree char *portname = g_strdup(strchr(net->name, ';') + 1);
+    g_autofree char *path = g_strdup_printf(abs_srcdir "/virnetworkportxml2xmldata/%s.xml", portname);
+
+    memset(uuid, 0, VIR_UUID_BUFLEN);
+
+    if (!virFileExists(path)) {
+        virReportError(VIR_ERR_NO_NETWORK_PORT, "fake network port '%s' not found", path);
+        return NULL;
+    }
+
+    return virGetNetworkPort(net, uuid);
+}
+
+
+char *
+fakeNetworkPortGetXMLDesc(virNetworkPortPtr port,
+                          unsigned int noflags G_GNUC_UNUSED)
+{
+    g_autofree char *portname = g_strdup(strchr(port->net->name, ';') + 1);
+    g_autofree char *path = g_strdup_printf(abs_srcdir "/virnetworkportxml2xmldata/%s.xml", portname);
+    char *xml = NULL;
+
+    if (virFileReadAll(path, 4 * 1024, &xml) < 0)
+        return NULL;
+
+    return xml;
+}
+
+
+unsigned char *
+fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED,
+                   size_t *value_size,
+                   unsigned int fakeflags G_GNUC_UNUSED)
+{
+    char *secret;
+    secret = g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A");
+    *value_size = strlen(secret);
+    return (unsigned char *) secret;
+}
+
+
+virSecretPtr
+fakeSecretLookupByUsage(virConnectPtr conn,
+                        int usageType,
+                        const char *usageID)
+{
+    unsigned char uuid[VIR_UUID_BUFLEN];
+    if (usageType == VIR_SECRET_USAGE_TYPE_VOLUME) {
+        if (!STRPREFIX(usageID, "/storage/guest_disks/")) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           "test provided invalid volume storage prefix '%s'",
+                           usageID);
+            return NULL;
+        }
+    } else if (STRNEQ(usageID, "mycluster_myname") &&
+               STRNEQ(usageID, "client.admin secret")) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       "test provided incorrect usage '%s'", usageID);
+        return NULL;
+    }
+
+    if (virUUIDGenerate(uuid) < 0)
+        return NULL;
+
+    return virGetSecret(conn, uuid, usageType, usageID);
+}
+
+
+virSecretPtr
+fakeSecretLookupByUUID(virConnectPtr conn,
+                       const unsigned char *uuid)
+{
+    /* NB: This mocked value could be "tls" or "volume" depending on
+     * which test is being run, we'll leave at NONE (or 0) */
+    return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
+}
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index 90632031ff..99d34fcaf5 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -188,4 +188,61 @@ testQemuInsertRealCaps(virFileCache *cache,
                        GHashTable *capsCache,
                        GHashTable *schemaCache,
                        GHashTable **schema);
+
+void
+testQemuPrepareDef(virDomainObj *vm,
+                   testQemuInfo *info);
+
+virStoragePoolPtr
+fakeStoragePoolLookupByName(virConnectPtr conn,
+                            const char *name);
+
+virStorageVolPtr
+fakeStorageVolLookupByName(virStoragePoolPtr pool,
+                           const char *name);
+
+int
+fakeStorageVolGetInfo(virStorageVolPtr vol,
+                      virStorageVolInfoPtr info);
+
+char *
+fakeStorageVolGetPath(virStorageVolPtr vol);
+
+char *
+fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool,
+                          unsigned int flags_unused);
+
+int
+fakeStoragePoolIsActive(virStoragePoolPtr pool);
+
+virNetworkPtr
+fakeNetworkLookupByName(virConnectPtr conn,
+                        const char *name);
+
+char *
+fakeNetworkGetXMLDesc(virNetworkPtr network,
+                      unsigned int noflags);
+
+virNetworkPortPtr
+fakeNetworkPortCreateXML(virNetworkPtr net,
+                         const char *xmldesc,
+                         unsigned int noflags);
+
+char *
+fakeNetworkPortGetXMLDesc(virNetworkPortPtr port,
+                          unsigned int noflags);
+
+unsigned char *
+fakeSecretGetValue(virSecretPtr obj,
+                   size_t *value_size,
+                   unsigned int fakeflags);
+
+virSecretPtr
+fakeSecretLookupByUsage(virConnectPtr conn,
+                        int usageType,
+                        const char *usageID);
+
+virSecretPtr
+fakeSecretLookupByUUID(virConnectPtr conn,
+                       const unsigned char *uuid);
 #endif
-- 
2.34.1