[PATCH 08/23] qemu*xml2*test: Invoke tests from a function

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

 



Refactor the code so that the test macros invoke a helper function with
no additional steps. This change prevents regressions in compilation
time when adding extra steps for the tests, which happen when the test
macro gets too complicated.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 tests/qemuxml2argvtest.c  | 48 ++++++++++++++++++++++-----------------
 tests/qemuxml2xmltest.c   | 47 +++++++++++++++++++++++++-------------
 tests/qemuxmlactivetest.c | 35 +++++++++++++++++-----------
 tests/testutilsqemu.c     | 10 +++-----
 tests/testutilsqemu.h     |  6 ++---
 5 files changed, 86 insertions(+), 60 deletions(-)

diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index 09ba2647ae..e1a75cdd10 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -811,18 +811,6 @@ testCompareXMLToArgv(const void *data)
     return ret;
 }

-static void
-testInfoSetPaths(testQemuInfo *info,
-                 const char *suffix)
-{
-    info->infile = g_strdup_printf("%s/qemuxml2argvdata/%s.xml",
-                                   abs_srcdir, info->name);
-    info->outfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.args",
-                                    abs_srcdir, info->name, suffix ? suffix : "");
-    info->errfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.err",
-                                      abs_srcdir, info->name, suffix ? suffix : "");
-}
-

 static int
 testConfXMLCheck(GHashTable *existingTestCases)
@@ -870,6 +858,32 @@ testConfXMLEnumerate(GHashTable *existingTestCases)
 }


+static void
+testRun(const char *name,
+        const char *suffix,
+        int *ret,
+        struct testQemuConf *testConf,
+        ...)
+{
+    g_autofree char *testname = g_strdup_printf("QEMU XML-2-ARGV %s%s", name, suffix);
+    g_autoptr(testQemuInfo) info = g_new0(testQemuInfo, 1);
+    va_list ap;
+
+    info->name = name;
+    info->conf = testConf;
+
+    va_start(ap, testConf);
+    testQemuInfoSetArgs(info, ap);
+    va_end(ap);
+
+    info->infile = g_strdup_printf("%s/qemuxml2argvdata/%s.xml", abs_srcdir, info->name);
+    info->outfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.args", abs_srcdir, info->name, suffix);
+    info->errfile = g_strdup_printf("%s/qemuxml2argvdata/%s%s.err", abs_srcdir, info->name, suffix);
+
+    virTestRunLog(ret, testname, testCompareXMLToArgv, info);
+}
+
+
 static int
 mymain(void)
 {
@@ -940,15 +954,7 @@ mymain(void)
  * version.
  */
 # define DO_TEST_FULL(_name, _suffix, ...) \
-    do { \
-        static testQemuInfo info = { \
-            .name = _name, \
-        }; \
-        testQemuInfoSetArgs(&info, &testConf, __VA_ARGS__); \
-        testInfoSetPaths(&info, _suffix); \
-        virTestRunLog(&ret, "QEMU XML-2-ARGV " _name _suffix, testCompareXMLToArgv, &info); \
-        testQemuInfoClear(&info); \
-    } while (0)
+    testRun(_name, _suffix, &ret, &testConf, __VA_ARGS__);

 # define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \
     DO_TEST_FULL(name, "." arch "-" ver, \
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index b4fcd87df8..2e384e76aa 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -107,6 +107,34 @@ testInfoSetPaths(testQemuInfo *info,
 }


+static void
+testRun(const char *name,
+        const char *suffix,
+        struct testQemuConf *testConf,
+        int *ret,
+        ...)
+{
+    g_autofree char *name_active = g_strdup_printf("QEMU XML-2-XML-active %s", name);
+    g_autofree char *name_inactive = g_strdup_printf("QEMU XML-2-XML-inactive %s", name);
+    g_autoptr(testQemuInfo) info = g_new0(testQemuInfo, 1);
+    va_list ap;
+
+    info->name = name;
+    info->conf = testConf;
+
+    va_start(ap, ret);
+    testQemuInfoSetArgs(info, ap);
+    va_end(ap);
+
+
+    testInfoSetPaths(info, suffix, "inactive");
+    virTestRunLog(ret, name_inactive, testXML2XMLInactive, info);
+
+    testInfoSetPaths(info, suffix, "active");
+    virTestRunLog(ret, name_active, testXML2XMLActive, info);
+}
+
+
 static int
 mymain(void)
 {
@@ -147,22 +175,9 @@ mymain(void)
     virSetConnectStorage(conn);

 #define DO_TEST_CAPS_INTERNAL(_name, arch, ver, ...) \
-    do { \
-        static testQemuInfo info = { \
-            .name = _name, \
-        }; \
-        testQemuInfoSetArgs(&info, &testConf, \
-                            ARG_CAPS_ARCH, arch, \
-                            ARG_CAPS_VER, ver, \
-                            __VA_ARGS__, ARG_END); \
- \
-        testInfoSetPaths(&info, "." arch "-" ver, "inactive"); \
-        virTestRunLog(&ret, "QEMU XML-2-XML-inactive " _name, testXML2XMLInactive, &info); \
- \
-        testInfoSetPaths(&info, "." arch "-" ver, "active"); \
-        virTestRunLog(&ret, "QEMU XML-2-XML-active " _name, testXML2XMLActive, &info); \
-        testQemuInfoClear(&info); \
-    } while (0)
+    testRun(_name, "." arch "-" ver, &testConf, &ret, \
+            ARG_CAPS_ARCH, arch, ARG_CAPS_VER, ver, \
+            __VA_ARGS__, ARG_END);

 #define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \
     DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__)
diff --git a/tests/qemuxmlactivetest.c b/tests/qemuxmlactivetest.c
index 9224bd5d05..65431863bd 100644
--- a/tests/qemuxmlactivetest.c
+++ b/tests/qemuxmlactivetest.c
@@ -60,11 +60,30 @@ testCompareStatusXMLToXMLFiles(const void *opaque)

 static const char *statusPath = abs_srcdir "/qemustatusxml2xmldata/";

-static void
-testInfoSetStatusPaths(testQemuInfo *info)
+
+static int
+testRunStatus(const char *name,
+              struct testQemuConf *testConf,
+              ...)
 {
+    const char *testname = g_strdup_printf("QEMU status XML-2-XML %s", name);
+    g_autoptr(testQemuInfo) info = g_new0(testQemuInfo, 1);
+    va_list ap;
+
+    info->name = name;
+    info->conf = testConf;
+
+    va_start(ap, testConf);
+    testQemuInfoSetArgs(info, ap);
+    va_end(ap);
+
     info->infile = g_strdup_printf("%s%s-in.xml", statusPath, info->name);
     info->outfile = g_strdup_printf("%s%s-out.xml", statusPath, info->name);
+
+    if (virTestRun(testname, testCompareStatusXMLToXMLFiles, info) < 0)
+        return -1;
+
+    return 0;
 }


@@ -90,20 +109,10 @@ mymain(void)

 #define DO_TEST_STATUS(_name) \
     do { \
-        static testQemuInfo info = { \
-            .name = _name, \
-        }; \
-        testQemuInfoSetArgs(&info, &testConf, ARG_END); \
-        testInfoSetStatusPaths(&info); \
-\
-        if (virTestRun("QEMU status XML-2-XML " _name, \
-                       testCompareStatusXMLToXMLFiles, &info) < 0) \
+        if (testRunStatus(_name, &testConf, ARG_END) < 0) \
             ret = -1; \
-\
-        testQemuInfoClear(&info); \
     } while (0)

-
     DO_TEST_STATUS("blockjob-mirror");
     DO_TEST_STATUS("vcpus-multi");
     DO_TEST_STATUS("modern");
diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c
index cf4ef3a317..3799c2eb51 100644
--- a/tests/testutilsqemu.c
+++ b/tests/testutilsqemu.c
@@ -624,16 +624,13 @@ testQemuCapsIterate(const char *suffix,

 void
 testQemuInfoSetArgs(testQemuInfo *info,
-                    struct testQemuConf *conf, ...)
+                    va_list argptr)
 {
-    va_list argptr;
     testQemuInfoArgName argname;
     int flag;

-    info->conf = conf;
     info->args.newargs = true;

-    va_start(argptr, conf);
     while ((argname = va_arg(argptr, testQemuInfoArgName)) != ARG_END) {
         switch (argname) {
         case ARG_QEMU_CAPS:
@@ -748,8 +745,6 @@ testQemuInfoSetArgs(testQemuInfo *info,
         if (info->args.invalidarg)
             break;
     }
-
-    va_end(argptr);
 }


@@ -959,7 +954,7 @@ testQemuInfoInitArgs(testQemuInfo *info)


 void
-testQemuInfoClear(testQemuInfo *info)
+testQemuInfoFree(testQemuInfo *info)
 {
     VIR_FREE(info->infile);
     VIR_FREE(info->outfile);
@@ -970,6 +965,7 @@ testQemuInfoClear(testQemuInfo *info)
     g_clear_pointer(&info->args.fds, g_hash_table_unref);
     g_clear_object(&info->nbdkitCaps);
     g_clear_pointer(&info->args.fakeNbdkitCaps, virBitmapFree);
+    g_free(info);
 }


diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h
index c9c36d24c6..9343457f59 100644
--- a/tests/testutilsqemu.h
+++ b/tests/testutilsqemu.h
@@ -115,6 +115,8 @@ struct _testQemuInfo {
 };

 typedef struct _testQemuInfo testQemuInfo;
+void testQemuInfoFree(testQemuInfo *info);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(testQemuInfo, testQemuInfoFree);

 virDomainXMLOption *testQemuXMLConfInit(void);

@@ -153,10 +155,8 @@ int testQemuCapsIterate(const char *suffix,
                         void *opaque);

 void testQemuInfoSetArgs(testQemuInfo *info,
-                         struct testQemuConf *conf,
-                         ...);
+                         va_list argptr);
 int testQemuInfoInitArgs(testQemuInfo *info);
-void testQemuInfoClear(testQemuInfo *info);

 int testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev,
                                          virDomainChrSourceDef *chardev,
-- 
2.43.0
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[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