[libvirt] [PATCH 8/8] tests/testutilsqemu: properly initialize qemu caps for tests

Pavel Hrdina posted 8 patches 8 years, 10 months ago
Only 7 patches received!
[libvirt] [PATCH 8/8] tests/testutilsqemu: properly initialize qemu caps for tests
Posted by Pavel Hrdina 8 years, 10 months ago
This removes the hacky extern global variable and modifies the
test code to properly create QEMU capabilities cache for QEMU
binaries used in our tests.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
---
 src/qemu/qemu_capabilities.c |  6 ------
 tests/qemuhotplugtest.c      | 11 ++++-------
 tests/qemuxml2argvtest.c     |  7 +++----
 tests/qemuxml2xmltest.c      | 30 ++++++++++++++++--------------
 tests/testutilsqemu.c        | 36 +++++++++++++++++++-----------------
 tests/testutilsqemu.h        |  5 +----
 6 files changed, 43 insertions(+), 52 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 11fe3e2d9d..2648d46619 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -5209,8 +5209,6 @@ virQEMUCapsCacheValidate(virQEMUCapsCachePtr cache,
 }
 
 
-const char *qemuTestCapsName;
-
 virQEMUCapsPtr
 virQEMUCapsCacheLookup(virCapsPtr caps,
                        virQEMUCapsCachePtr cache,
@@ -5218,10 +5216,6 @@ virQEMUCapsCacheLookup(virCapsPtr caps,
 {
     virQEMUCapsPtr ret = NULL;
 
-    /* This is used only by test suite!!! */
-    if (qemuTestCapsName)
-        binary = qemuTestCapsName;
-
     virMutexLock(&cache->lock);
 
     ret = virHashLookup(cache->binaries, binary);
diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
index e835999c72..fe97fd0dc3 100644
--- a/tests/qemuhotplugtest.c
+++ b/tests/qemuhotplugtest.c
@@ -58,7 +58,7 @@ static int
 qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
                          virDomainObjPtr *vm,
                          const char *domxml,
-                         bool event, const char *testname)
+                         bool event)
 {
     int ret = -1;
     qemuDomainObjPrivatePtr priv = NULL;
@@ -79,8 +79,7 @@ qemuHotplugCreateObjects(virDomainXMLOptionPtr xmlopt,
     if (event)
         virQEMUCapsSet(priv->qemuCaps, QEMU_CAPS_DEVICE_DEL_EVENT);
 
-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, testname,
-                                priv->qemuCaps) < 0)
+    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, priv->qemuCaps) < 0)
         goto cleanup;
 
     if (!((*vm)->def = virDomainDefParseString(domxml,
@@ -262,8 +261,7 @@ testQemuHotplug(const void *data)
         vm = test->vm;
     } else {
         if (qemuHotplugCreateObjects(driver.xmlopt, &vm, domain_xml,
-                                     test->deviceDeletedEvent,
-                                     test->domain_filename) < 0)
+                                     test->deviceDeletedEvent) < 0)
             goto cleanup;
     }
 
@@ -415,8 +413,7 @@ testQemuHotplugCpuPrepare(const char *test,
     if (virTestLoadFile(data->file_xml_dom, &data->xml_dom) < 0)
         goto error;
 
-    if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom, true,
-                                 "cpu-hotplug-test-domain") < 0)
+    if (qemuHotplugCreateObjects(driver.xmlopt, &data->vm, data->xml_dom, true) < 0)
         goto error;
 
     if (!(caps = virQEMUDriverGetCapabilities(&driver, false)))
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 18ff5ad147..525aa67e02 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -434,16 +434,15 @@ testCompareXMLToArgv(const void *data)
     if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
         flags |= FLAG_FIPS;
 
-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
-                                info->qemuCaps) < 0)
-        goto cleanup;
-
     if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                     abs_srcdir, info->name) < 0 ||
         virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
                     abs_srcdir, info->name) < 0)
         goto cleanup;
 
+    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+        goto cleanup;
+
     if (info->migrateFrom &&
         !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
                                                 info->migrateFd)))
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 579328912a..e1ef9e5b86 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -251,25 +251,26 @@ testInfoSet(struct testInfo *info,
             int when,
             int gic)
 {
+    int ret = -1;
+
     if (!(info->qemuCaps = virQEMUCapsNew()))
-        goto error;
+        goto cleanup;
 
     if (testQemuCapsSetGIC(info->qemuCaps, gic) < 0)
-        goto error;
+        goto cleanup;
 
-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, name,
-                                info->qemuCaps) < 0)
-        goto error;
+    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
+        goto cleanup;
 
     if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
                     abs_srcdir, name) < 0)
-        goto error;
+        goto cleanup;
 
     if (when & WHEN_INACTIVE) {
         if (virAsprintf(&info->outInactiveName,
                         "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-inactive.xml",
                         abs_srcdir, name) < 0)
-            goto error;
+            goto cleanup;
 
         if (!virFileExists(info->outInactiveName)) {
             VIR_FREE(info->outInactiveName);
@@ -277,7 +278,7 @@ testInfoSet(struct testInfo *info,
             if (virAsprintf(&info->outInactiveName,
                             "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                             abs_srcdir, name) < 0)
-                goto error;
+                goto cleanup;
         }
     }
 
@@ -285,7 +286,7 @@ testInfoSet(struct testInfo *info,
         if (virAsprintf(&info->outActiveName,
                         "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s-active.xml",
                         abs_srcdir, name) < 0)
-            goto error;
+            goto cleanup;
 
         if (!virFileExists(info->outActiveName)) {
             VIR_FREE(info->outActiveName);
@@ -293,15 +294,16 @@ testInfoSet(struct testInfo *info,
             if (virAsprintf(&info->outActiveName,
                             "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
                             abs_srcdir, name) < 0)
-                goto error;
+                goto cleanup;
         }
     }
 
-    return 0;
+    ret = 0;
 
- error:
-    testInfoFree(info);
-    return -1;
+ cleanup:
+    if (ret < 0)
+        testInfoFree(info);
+    return ret;
 }
 
 
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index d3d62df9d1..709e291bd4 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -586,34 +586,36 @@ void qemuTestDriverFree(virQEMUDriver *driver)
     virObjectUnref(driver->securityManager);
 }
 
-int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
                             virQEMUCapsPtr caps)
 {
-    int ret;
+    size_t i;
+    virQEMUCapsPtr tmpCaps;
 
     if (caps) {
-        /* Our caps were created artificially, so we don't want
-         * virQEMUCapsCacheFree() to attempt to deallocate them */
-        virObjectRef(caps);
+        tmpCaps = caps;
     } else {
-        caps = virQEMUCapsNew();
-        if (!caps)
+        if (!(tmpCaps = virQEMUCapsNew()))
             return -ENOMEM;
     }
 
-    /* We can have repeating names for our test data sets,
-     * so make sure there's no old copy */
-    virHashRemoveEntry(cache->binaries, binary);
+    for (i = 0; i < ARRAY_CARDINALITY(QEMUBinList); i++) {
+        virObjectRef(tmpCaps);
+        if (virHashUpdateEntry(cache->binaries,
+                               QEMUBinList[i],
+                               tmpCaps) < 0) {
+            virObjectUnref(tmpCaps);
+            return -1;
+        }
+    }
 
-    ret = virHashAddEntry(cache->binaries, binary, caps);
-    if (ret < 0)
-        virObjectUnref(caps);
-    else
-        qemuTestCapsName = binary;
+    if (!caps)
+        virObjectUnref(tmpCaps);
 
-    return ret;
+    return 0;
 }
 
+
 # define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX"
 # define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX"
 
@@ -678,7 +680,7 @@ int qemuTestDriverInit(virQEMUDriver *driver)
     if (!driver->xmlopt)
         goto error;
 
-    if (qemuTestCapsCacheInsert(driver->qemuCapsCache, "empty", NULL) < 0)
+    if (qemuTestCapsCacheInsert(driver->qemuCapsCache, NULL) < 0)
         goto error;
 
     if (!(mgr = virSecurityManagerNew("none", "qemu",
diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index 047a64d1ac..3393f5eb71 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -29,12 +29,9 @@ void qemuTestSetHostCPU(virCapsPtr caps,
 
 int qemuTestDriverInit(virQEMUDriver *driver);
 void qemuTestDriverFree(virQEMUDriver *driver);
-int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache, const char *binary,
+int qemuTestCapsCacheInsert(virQEMUCapsCachePtr cache,
                             virQEMUCapsPtr caps);
 
 int testQemuCapsSetGIC(virQEMUCapsPtr qemuCaps,
                        int gic);
-
-/* This variable is actually defined in src/qemu/qemu_capabilities.c */
-extern const char *qemuTestCapsName;
 #endif
-- 
2.12.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 8/8] tests/testutilsqemu: properly initialize qemu caps for tests
Posted by Ján Tomko 8 years, 10 months ago
On Fri, Apr 07, 2017 at 03:44:23PM +0200, Pavel Hrdina wrote:
>This removes the hacky extern global variable and modifies the
>test code to properly create QEMU capabilities cache for QEMU
>binaries used in our tests.
>
>Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
>---
> src/qemu/qemu_capabilities.c |  6 ------
> tests/qemuhotplugtest.c      | 11 ++++-------
> tests/qemuxml2argvtest.c     |  7 +++----
> tests/qemuxml2xmltest.c      | 30 ++++++++++++++++--------------
> tests/testutilsqemu.c        | 36 +++++++++++++++++++-----------------
> tests/testutilsqemu.h        |  5 +----
> 6 files changed, 43 insertions(+), 52 deletions(-)
>

>diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
>index 18ff5ad147..525aa67e02 100644
>--- a/tests/qemuxml2argvtest.c
>+++ b/tests/qemuxml2argvtest.c
>@@ -434,16 +434,15 @@ testCompareXMLToArgv(const void *data)
>     if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
>         flags |= FLAG_FIPS;
>
>-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
>-                                info->qemuCaps) < 0)
>-        goto cleanup;
>-
>     if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
>                     abs_srcdir, info->name) < 0 ||
>         virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
>                     abs_srcdir, info->name) < 0)
>         goto cleanup;
>
>+    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
>+        goto cleanup;
>+

Is there a reason for exchaging these two conditions?

>     if (info->migrateFrom &&
>         !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
>                                                 info->migrateFd)))

>diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
>index 579328912a..e1ef9e5b86 100644
>--- a/tests/qemuxml2xmltest.c
>+++ b/tests/qemuxml2xmltest.c
>@@ -293,15 +294,16 @@ testInfoSet(struct testInfo *info,
>             if (virAsprintf(&info->outActiveName,
>                             "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
>                             abs_srcdir, name) < 0)
>-                goto error;
>+                goto cleanup;
>         }
>     }
>
>-    return 0;
>+    ret = 0;
>
>- error:
>-    testInfoFree(info);
>-    return -1;
>+ cleanup:
>+    if (ret < 0)
>+        testInfoFree(info);
>+    return ret;
> }

The error -> cleanup change also does not belong in this patch.

Jan
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 8/8] tests/testutilsqemu: properly initialize qemu caps for tests
Posted by Pavel Hrdina 8 years, 10 months ago
On Tue, Apr 11, 2017 at 01:39:08PM +0200, Ján Tomko wrote:
> On Fri, Apr 07, 2017 at 03:44:23PM +0200, Pavel Hrdina wrote:
> >This removes the hacky extern global variable and modifies the
> >test code to properly create QEMU capabilities cache for QEMU
> >binaries used in our tests.
> >
> >Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
> >---
> > src/qemu/qemu_capabilities.c |  6 ------
> > tests/qemuhotplugtest.c      | 11 ++++-------
> > tests/qemuxml2argvtest.c     |  7 +++----
> > tests/qemuxml2xmltest.c      | 30 ++++++++++++++++--------------
> > tests/testutilsqemu.c        | 36 +++++++++++++++++++-----------------
> > tests/testutilsqemu.h        |  5 +----
> > 6 files changed, 43 insertions(+), 52 deletions(-)
> >
> 
> >diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> >index 18ff5ad147..525aa67e02 100644
> >--- a/tests/qemuxml2argvtest.c
> >+++ b/tests/qemuxml2argvtest.c
> >@@ -434,16 +434,15 @@ testCompareXMLToArgv(const void *data)
> >     if (virQEMUCapsGet(info->qemuCaps, QEMU_CAPS_ENABLE_FIPS))
> >         flags |= FLAG_FIPS;
> >
> >-    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->name,
> >-                                info->qemuCaps) < 0)
> >-        goto cleanup;
> >-
> >     if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
> >                     abs_srcdir, info->name) < 0 ||
> >         virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
> >                     abs_srcdir, info->name) < 0)
> >         goto cleanup;
> >
> >+    if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0)
> >+        goto cleanup;
> >+
> 
> Is there a reason for exchaging these two conditions?

No, this is a leftover from early version where I was parsing the binary
from the *xml*.  I'll drop the movement.

> >     if (info->migrateFrom &&
> >         !(migrateURI = qemuMigrationIncomingURI(info->migrateFrom,
> >                                                 info->migrateFd)))
> 
> >diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> >index 579328912a..e1ef9e5b86 100644
> >--- a/tests/qemuxml2xmltest.c
> >+++ b/tests/qemuxml2xmltest.c
> >@@ -293,15 +294,16 @@ testInfoSet(struct testInfo *info,
> >             if (virAsprintf(&info->outActiveName,
> >                             "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
> >                             abs_srcdir, name) < 0)
> >-                goto error;
> >+                goto cleanup;
> >         }
> >     }
> >
> >-    return 0;
> >+    ret = 0;
> >
> >- error:
> >-    testInfoFree(info);
> >-    return -1;
> >+ cleanup:
> >+    if (ret < 0)
> >+        testInfoFree(info);
> >+    return ret;
> > }
> 
> The error -> cleanup change also does not belong in this patch.

This one is also a leftover, but it makes sense so I'll move it to
separate patch.

Pavel
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list