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(a)redhat.com>
---
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