This is patterned after similar functionality for domain XML tests, but tries harder to avoid reading non-existent networkxml2xmlout data file when parse fails. --- tests/networkxml2xmltest.c | 75 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 18 deletions(-)
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index 8d60aa8..b83396b 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -16,26 +16,58 @@ #define VIR_FROM_THIS VIR_FROM_NONE +typedef enum { + TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS, + TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE, + TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT, + TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE, +} testCompareNetXML2XMLResult; + static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml, - unsigned int flags) + unsigned int flags, + testCompareNetXML2XMLResult expectResult) { char *actual = NULL; - int ret = -1; + int ret; + testCompareNetXML2XMLResult result = TEST_COMPARE_DOM_XML2XML_RESULT_SUCCESS; virNetworkDefPtr dev = NULL; - if (!(dev = virNetworkDefParseFile(inxml))) - goto fail; - - if (!(actual = virNetworkDefFormat(dev, flags))) - goto fail; + if (!(dev = virNetworkDefParseFile(inxml))) { + result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE; + goto cleanup; + } + if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE) + goto cleanup; - if (virtTestCompareToFile(actual, outxml) < 0) - goto fail; + if (!(actual = virNetworkDefFormat(dev, flags))) { + result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT; + goto cleanup; + } + if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT) + goto cleanup; + + if (virtTestCompareToFile(actual, outxml) < 0) { + result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE; + goto cleanup; + } + if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE) + goto cleanup; - ret = 0; + cleanup: + if (result == expectResult) { + ret = 0; + if (expectResult != TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS) { + VIR_TEST_DEBUG("Got expected failure code=%d msg=%s", + result, virGetLastErrorMessage()); + } + } else { + ret = -1; + VIR_TEST_DEBUG("Expected result code=%d but received code=%d", + expectResult, result); + } + virResetLastError(); - fail: VIR_FREE(actual); virNetworkDefFree(dev); return ret; @@ -44,6 +76,7 @@ testCompareXMLToXMLFiles(const char *inxml, const char *outxml, struct testInfo { const char *name; unsigned int flags; + testCompareNetXML2XMLResult expectResult; }; static int @@ -61,7 +94,8 @@ testCompareXMLToXMLHelper(const void *data) goto cleanup; } - result = testCompareXMLToXMLFiles(inxml, outxml, info->flags); + result = testCompareXMLToXMLFiles(inxml, outxml, info->flags, + info->expectResult); cleanup: VIR_FREE(inxml); @@ -75,14 +109,19 @@ mymain(void) { int ret = 0; -#define DO_TEST_FULL(name, flags) \ +#define DO_TEST_FULL(name, flags, expectResult) \ do { \ - const struct testInfo info = {name, flags}; \ + const struct testInfo info = {name, flags, expectResult}; \ if (virtTestRun("Network XML-2-XML " name, \ - testCompareXMLToXMLHelper, &info) < 0) \ + testCompareXMLToXMLHelper, &info) < 0) \ ret = -1; \ } while (0) -#define DO_TEST(name) DO_TEST_FULL(name, 0) +#define DO_TEST(name) \ + DO_TEST_FULL(name, 0, TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS) +#define DO_TEST_FLAGS(name, flags) \ + DO_TEST_FULL(name, flags, TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS) +#define DO_TEST_PARSE_ERROR(name) \ + DO_TEST_FULL(name, 0, TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE) DO_TEST("dhcp6host-routed-network"); DO_TEST("empty-allow-ipv6"); @@ -106,9 +145,9 @@ mymain(void) DO_TEST("vepa-net"); DO_TEST("bandwidth-network"); DO_TEST("openvswitch-net"); - DO_TEST_FULL("passthrough-pf", VIR_NETWORK_XML_INACTIVE); + DO_TEST_FLAGS("passthrough-pf", VIR_NETWORK_XML_INACTIVE); DO_TEST("hostdev"); - DO_TEST_FULL("hostdev-pf", VIR_NETWORK_XML_INACTIVE); + DO_TEST_FLAGS("hostdev-pf", VIR_NETWORK_XML_INACTIVE); DO_TEST("passthrough-address-crash"); DO_TEST("nat-network-explicit-flood"); DO_TEST("host-bridge-no-flood"); -- 2.5.5 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list