From 99e30acfdceb5c57fbdc898a389058051595958b Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 2 Mar 2018 16:47:32 +0100 Subject: [PATCH] tests: qemuxml2xml: Add proper domain status XML testing Add new approach to properly test status XML files by supplying a full XML file rather than generating synthetic test cases by prepending the status header. The two tests introduced here are copies of existing cases using the synthetic header so that current level of testing is kept. The files are chosen to excercising the vcpu and blockjob quirks present in the current testing. Signed-off-by: Peter Krempa --- tests/Makefile.am | 1 + .../blockjob-mirror-in.xml | 96 +++++ .../blockjob-mirror-out.xml | 1 + .../qemustatusxml2xmldata/vcpus-multi-in.xml | 343 ++++++++++++++++++ .../qemustatusxml2xmldata/vcpus-multi-out.xml | 1 + tests/qemuxml2xmltest.c | 108 +++++- 6 files changed, 543 insertions(+), 7 deletions(-) create mode 100644 tests/qemustatusxml2xmldata/blockjob-mirror-in.xml create mode 120000 tests/qemustatusxml2xmldata/blockjob-mirror-out.xml create mode 100644 tests/qemustatusxml2xmldata/vcpus-multi-in.xml create mode 120000 tests/qemustatusxml2xmldata/vcpus-multi-out.xml diff --git a/tests/Makefile.am b/tests/Makefile.am index d794df3e5c..1f60ee0393 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -128,6 +128,7 @@ EXTRA_DIST = \ qemumonitorjsondata \ qemuxml2argvdata \ qemuxml2xmloutdata \ + qemustatusxml2xmloutdata \ qemumemlockdata \ secretxml2xmlin \ securityselinuxhelperdata \ diff --git a/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml b/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml new file mode 100644 index 0000000000..a22d2173e7 --- /dev/null +++ b/tests/qemustatusxml2xmldata/blockjob-mirror-in.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu-system-i686 + + + + + + + + + +
+ + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + +
+ + +
+ + +
+ + + + + +
+ + + + diff --git a/tests/qemustatusxml2xmldata/blockjob-mirror-out.xml b/tests/qemustatusxml2xmldata/blockjob-mirror-out.xml new file mode 120000 index 0000000000..056c443c18 --- /dev/null +++ b/tests/qemustatusxml2xmldata/blockjob-mirror-out.xml @@ -0,0 +1 @@ +blockjob-mirror-in.xml \ No newline at end of file diff --git a/tests/qemustatusxml2xmldata/vcpus-multi-in.xml b/tests/qemustatusxml2xmldata/vcpus-multi-in.xml new file mode 100644 index 0000000000..c99046ce8d --- /dev/null +++ b/tests/qemustatusxml2xmldata/vcpus-multi-in.xml @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 288 + + hvm + + + + + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + +
+ + + + + + + + + + diff --git a/tests/qemustatusxml2xmldata/vcpus-multi-out.xml b/tests/qemustatusxml2xmldata/vcpus-multi-out.xml new file mode 120000 index 0000000000..688f8566f2 --- /dev/null +++ b/tests/qemustatusxml2xmldata/vcpus-multi-out.xml @@ -0,0 +1 @@ +vcpus-multi-in.xml \ No newline at end of file diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 1359213428..5856e80a46 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -184,7 +184,7 @@ testProcessStatusXML(virDomainObjPtr vm) static int -testCompareStatusXMLToXMLFiles(const void *opaque) +testCompareStatusXMLToXMLOldFiles(const void *opaque) { const struct testInfo *data = opaque; virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -277,6 +277,44 @@ testCompareStatusXMLToXMLFiles(const void *opaque) } +static int +testCompareStatusXMLToXMLFiles(const void *opaque) +{ + const struct testInfo *data = opaque; + virDomainObjPtr obj = NULL; + char *actual = NULL; + int ret = -1; + + if (!(obj = virDomainObjParseFile(data->inName, driver.caps, driver.xmlopt, + VIR_DOMAIN_DEF_PARSE_STATUS | + VIR_DOMAIN_DEF_PARSE_ACTUAL_NET | + VIR_DOMAIN_DEF_PARSE_PCI_ORIG_STATES | + VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS | + VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE | + VIR_DOMAIN_DEF_PARSE_ALLOW_POST_PARSE_FAIL))) + goto cleanup; + + if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL, + VIR_DOMAIN_DEF_FORMAT_SECURE | + VIR_DOMAIN_DEF_FORMAT_STATUS | + VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET | + VIR_DOMAIN_DEF_FORMAT_PCI_ORIG_STATES | + VIR_DOMAIN_DEF_FORMAT_CLOCK_ADJUST))) + + goto cleanup; + + if (virTestCompareToFile(actual, data->outActiveName) < 0) + goto cleanup; + + ret = 0; + + cleanup: + virObjectUnref(obj); + VIR_FREE(actual); + return ret; +} + + static void testInfoClear(struct testInfo *info) { @@ -292,10 +330,8 @@ testInfoClear(struct testInfo *info) static int -testInfoSet(struct testInfo *info, - const char *name, - int when, - int gic) +testInfoSetCommon(struct testInfo *info, + int gic) { if (!(info->qemuCaps = virQEMUCapsNew())) goto error; @@ -306,6 +342,23 @@ testInfoSet(struct testInfo *info, if (qemuTestCapsCacheInsert(driver.qemuCapsCache, info->qemuCaps) < 0) goto error; + return 0; + + error: + testInfoClear(info); + return -1; +} + + +static int +testInfoSet(struct testInfo *info, + const char *name, + int when, + int gic) +{ + if (testInfoSetCommon(info, gic) < 0) + return -1; + if (virAsprintf(&info->inName, "%s/qemuxml2argvdata/%s.xml", abs_srcdir, name) < 0) goto error; @@ -349,6 +402,29 @@ testInfoSet(struct testInfo *info, return -1; } + +static const char *statusPath = abs_srcdir "/qemustatusxml2xmldata/"; + +static int +testInfoSetStatus(struct testInfo *info, + const char *name, + int gic) +{ + if (testInfoSetCommon(info, gic) < 0) + return -1; + + if (virAsprintf(&info->inName, "%s%s-in.xml", statusPath, name) < 0 || + virAsprintf(&info->outActiveName, "%s%s-out.xml", statusPath, name) < 0) + goto error; + + return 0; + + error: + testInfoClear(info); + return -1; +} + + # define FAKEROOTDIRTEMPLATE abs_builddir "/fakerootdir-XXXXXX" static int @@ -397,8 +473,8 @@ mymain(void) testXML2XMLActive, &info) < 0) \ ret = -1; \ \ - if (virTestRun("QEMU XML-2-XML-status " name, \ - testCompareStatusXMLToXMLFiles, &info) < 0) \ + if (virTestRun("QEMU XML-2-XML-status (old)" name, \ + testCompareStatusXMLToXMLOldFiles, &info) < 0) \ ret = -1; \ } \ testInfoClear(&info); \ @@ -1364,6 +1440,24 @@ mymain(void) DO_TEST("disk-many-format-probing", NONE); driver.config->allowDiskFormatProbing = false; +# define DO_TEST_STATUS(name) \ + do { \ + if (testInfoSetStatus(&info, name, GIC_NONE) < 0) { \ + VIR_TEST_DEBUG("Failed to generate status test data for '%s'", name); \ + return -1; \ + } \ +\ + if (virTestRun("QEMU status XML-2-XML " name, \ + testCompareStatusXMLToXMLFiles, &info) < 0) \ + ret = -1; \ +\ + testInfoClear(&info); \ + } while (0) + + + DO_TEST_STATUS("blockjob-mirror"); + DO_TEST_STATUS("vcpus-multi"); + if (getenv("LIBVIRT_SKIP_CLEANUP") == NULL) virFileDeleteTree(fakerootdir); -- 2.39.5