This allows tests to check for specific failure scenarios
---
tests/bhyvexml2xmltest.c | 4 ++--
tests/genericxml2xmltest.c | 4 ++--
tests/lxcxml2xmltest.c | 3 ++-
tests/qemuxml2xmltest.c | 6 ++++--
tests/testutils.c | 47 ++++++++++++++++++++++++++++++++++------------
tests/testutils.h | 12 +++++++++++-
6 files changed, 56 insertions(+), 20 deletions(-)
diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c
index 8f556ee..c8c6c6e 100644
--- a/tests/bhyvexml2xmltest.c
+++ b/tests/bhyvexml2xmltest.c
@@ -32,8 +32,8 @@ testCompareXMLToXMLHelper(const void *data)
ret = testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, xml_in,
info->different ? xml_out : xml_in,
- false,
- NULL, NULL, 0);
+ false, NULL, NULL, 0,
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
cleanup:
VIR_FREE(xml_in);
diff --git a/tests/genericxml2xmltest.c b/tests/genericxml2xmltest.c
index bf9b11d..7d504db 100644
--- a/tests/genericxml2xmltest.c
+++ b/tests/genericxml2xmltest.c
@@ -39,8 +39,8 @@ testCompareXMLToXMLHelper(const void *data)
ret = testCompareDomXML2XMLFiles(caps, xmlopt, xml_in,
info->different ? xml_out : xml_in,
- !info->inactive_only,
- NULL, NULL, 0);
+ !info->inactive_only, NULL, NULL, 0,
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
cleanup:
VIR_FREE(xml_in);
VIR_FREE(xml_out);
diff --git a/tests/lxcxml2xmltest.c b/tests/lxcxml2xmltest.c
index 0b51340..fec0142 100644
--- a/tests/lxcxml2xmltest.c
+++ b/tests/lxcxml2xmltest.c
@@ -46,7 +46,8 @@ testCompareXMLToXMLHelper(const void *data)
ret = testCompareDomXML2XMLFiles(caps, xmlopt, xml_in,
info->different ? xml_out : xml_in,
!info->inactive_only,
- NULL, NULL, info->parse_flags);
+ NULL, NULL, info->parse_flags,
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
cleanup:
VIR_FREE(xml_in);
VIR_FREE(xml_out);
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 0735677..b0f298c 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -54,7 +54,8 @@ testXML2XMLActive(const void *opaque)
return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt,
info->inName, info->outActiveName, true,
- qemuXML2XMLPreFormatCallback, opaque, 0);
+ qemuXML2XMLPreFormatCallback, opaque, 0,
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
}
@@ -65,7 +66,8 @@ testXML2XMLInactive(const void *opaque)
return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName,
info->outInactiveName, false,
- qemuXML2XMLPreFormatCallback, opaque, 0);
+ qemuXML2XMLPreFormatCallback, opaque, 0,
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS);
}
diff --git a/tests/testutils.c b/tests/testutils.c
index fc4c339..a0ce4b6 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -1079,10 +1079,12 @@ int
testCompareDomXML2XMLFiles(virCapsPtr caps, virDomainXMLOptionPtr xmlopt,
const char *infile, const char *outfile, bool live,
testCompareDomXML2XMLPreFormatCallback cb,
- const void *opaque, unsigned int parseFlags)
+ const void *opaque, unsigned int parseFlags,
+ testCompareDomXML2XMLResult expectResult)
{
char *actual = NULL;
int ret = -1;
+ testCompareDomXML2XMLResult result;
virDomainDefPtr def = NULL;
unsigned int parse_flags = live ? 0 : VIR_DOMAIN_DEF_PARSE_INACTIVE;
unsigned int format_flags = VIR_DOMAIN_DEF_FORMAT_SECURE;
@@ -1092,25 +1094,46 @@ testCompareDomXML2XMLFiles(virCapsPtr caps, virDomainXMLOptionPtr
xmlopt,
if (!live)
format_flags |= VIR_DOMAIN_DEF_FORMAT_INACTIVE;
- if (!(def = virDomainDefParseFile(infile, caps, xmlopt, parse_flags)))
- goto fail;
+ if (!(def = virDomainDefParseFile(infile, caps, xmlopt, parse_flags))) {
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE;
+ goto out;
+ }
if (!virDomainDefCheckABIStability(def, def)) {
VIR_TEST_DEBUG("ABI stability check failed on %s", infile);
- goto fail;
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_STABILITY;
+ goto out;
}
- if (cb && cb(def, opaque) < 0)
- goto fail;
+ if (cb && cb(def, opaque) < 0) {
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_CB;
+ goto out;
+ }
- if (!(actual = virDomainDefFormat(def, caps, format_flags)))
- goto fail;
+ if (!(actual = virDomainDefFormat(def, caps, format_flags))) {
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_FORMAT;
+ goto out;
+ }
- if (virtTestCompareToFile(actual, outfile) < 0)
- goto fail;
+ if (virtTestCompareToFile(actual, outfile) < 0) {
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_COMPARE;
+ goto out;
+ }
+
+ result = TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS;
+ out:
+ if (result == expectResult) {
+ ret = 0;
+ if (expectResult != TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS) {
+ VIR_TEST_DEBUG("Got expected failure code=%d msg=%s",
+ result, virGetLastErrorMessage());
+ }
+ } else {
+ ret = -1;
+ VIR_TEST_DEBUG("Expected failure code=%d but received code=%d",
+ expectResult, result);
+ }
- ret = 0;
- fail:
VIR_FREE(actual);
virDomainDefFree(def);
return ret;
diff --git a/tests/testutils.h b/tests/testutils.h
index 058be55..0417a0b 100644
--- a/tests/testutils.h
+++ b/tests/testutils.h
@@ -134,6 +134,15 @@ int virtTestMain(int argc,
virCapsPtr virTestGenericCapsInit(void);
virDomainXMLOptionPtr virTestGenericDomainXMLConfInit(void);
+typedef enum {
+ TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_STABILITY,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_CB,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_FORMAT,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_COMPARE,
+} testCompareDomXML2XMLResult;
+
typedef int (*testCompareDomXML2XMLPreFormatCallback)(virDomainDefPtr def,
const void *opaque);
int testCompareDomXML2XMLFiles(virCapsPtr caps,
@@ -143,6 +152,7 @@ int testCompareDomXML2XMLFiles(virCapsPtr caps,
bool live,
testCompareDomXML2XMLPreFormatCallback cb,
const void *opaque,
- unsigned int parseFlags);
+ unsigned int parseFlags,
+ testCompareDomXML2XMLResult expectResult);
#endif /* __VIR_TEST_UTILS_H__ */
--
2.5.5