diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 10e6592308..d54f2aa7ea 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -3980,7 +3980,7 @@ cleanup: return ret; } -static int +int virNetworkDefUpdateSection(virNetworkDefPtr def, unsigned int command, /* virNetworkUpdateCommand */ unsigned int section, /* virNetworkUpdateSection */ diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 920e899ad8..c28bfaefc3 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -428,4 +428,13 @@ int virNetworkObjListExport(virConnectPtr conn, virNetworkObjListFilter filter, unsigned int flags); +/* for testing */ +int +virNetworkDefUpdateSection(virNetworkDefPtr def, + unsigned int command, /* virNetworkUpdateCommand */ + unsigned int section, /* virNetworkUpdateSection */ + int parentIndex, + const char *xml, + unsigned int flags); /* virNetworkUpdateFlags */ + #endif /* __NETWORK_CONF_H__ */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c25a61fe8b..d4006ae82a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -503,6 +503,7 @@ virNetworkDefGetIpByIndex; virNetworkDefParseFile; virNetworkDefParseNode; virNetworkDefParseString; +virNetworkDefUpdateSection; virNetworkDeleteConfig; virNetworkFindByName; virNetworkFindByUUID; diff --git a/tests/Makefile.am b/tests/Makefile.am index c399dcb0e4..c80017998b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -73,6 +73,8 @@ EXTRA_DIST = \ networkxml2xmlin \ networkxml2xmlout \ networkxml2confdata \ + networkxml2xmlupdatein \ + networkxml2xmlupdateout \ nodedevschemadata \ nodedevschematest \ nodeinfodata \ @@ -191,7 +193,7 @@ if WITH_YAJL test_programs += jsontest endif -test_programs += networkxml2xmltest +test_programs += networkxml2xmltest networkxml2xmlupdatetest if WITH_NETWORK test_programs += networkxml2conftest @@ -505,6 +507,11 @@ networkxml2xmltest_SOURCES = \ testutils.c testutils.h networkxml2xmltest_LDADD = $(LDADDS) +networkxml2xmlupdatetest_SOURCES = \ + networkxml2xmlupdatetest.c \ + testutils.c testutils.h +networkxml2xmlupdatetest_LDADD = $(LDADDS) + if WITH_NETWORK networkxml2conftest_SOURCES = \ networkxml2conftest.c \ diff --git a/tests/networkxml2xmlin/nat-network-dns-srv-records.xml b/tests/networkxml2xmlin/nat-network-dns-srv-records.xml new file mode 100644 index 0000000000..eda9e20333 --- /dev/null +++ b/tests/networkxml2xmlin/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlout/nat-network-dns-srv-records.xml b/tests/networkxml2xmlout/nat-network-dns-srv-records.xml new file mode 100644 index 0000000000..eda9e20333 --- /dev/null +++ b/tests/networkxml2xmlout/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index dbf12b0ef7..675a862465 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -104,6 +104,7 @@ mymain(void) DO_TEST("netboot-proxy-network"); DO_TEST("nat-network-dns-txt-record"); DO_TEST("nat-network-dns-srv-record"); + DO_TEST("nat-network-dns-srv-records"); DO_TEST("nat-network-dns-srv-record-minimal"); DO_TEST("nat-network-dns-hosts"); DO_TEST("nat-network-dns-forward-plain"); diff --git a/tests/networkxml2xmlupdatein/dhcp-range-existing.xml b/tests/networkxml2xmlupdatein/dhcp-range-existing.xml new file mode 100644 index 0000000000..d229a62d3c --- /dev/null +++ b/tests/networkxml2xmlupdatein/dhcp-range-existing.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/dhcp-range.xml b/tests/networkxml2xmlupdatein/dhcp-range.xml new file mode 100644 index 0000000000..ed775c8a42 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dhcp-range.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml b/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml new file mode 100644 index 0000000000..6972d2e2d8 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml @@ -0,0 +1,3 @@ + + gateway + diff --git a/tests/networkxml2xmlupdatein/dns-host-pudding.xml b/tests/networkxml2xmlupdatein/dns-host-pudding.xml new file mode 100644 index 0000000000..0878a4b2b6 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-host-pudding.xml @@ -0,0 +1,3 @@ + + pudding + diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-example.xml b/tests/networkxml2xmlupdatein/dns-txt-record-example.xml new file mode 100644 index 0000000000..c822dde636 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-example.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml b/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml new file mode 100644 index 0000000000..420d8982b5 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/host-existing.xml b/tests/networkxml2xmlupdatein/host-existing.xml new file mode 100644 index 0000000000..205178e803 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-existing.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/host-incomplete.xml b/tests/networkxml2xmlupdatein/host-incomplete.xml new file mode 100644 index 0000000000..d882e454c8 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-incomplete.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/host-new-incomplete.xml b/tests/networkxml2xmlupdatein/host-new-incomplete.xml new file mode 100644 index 0000000000..42d51887ca --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-new-incomplete.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/host-new.xml b/tests/networkxml2xmlupdatein/host-new.xml new file mode 100644 index 0000000000..657dc2fc47 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-new.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/host-updated.xml b/tests/networkxml2xmlupdatein/host-updated.xml new file mode 100644 index 0000000000..acfb7a10b8 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-updated.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/interface-eth1.xml b/tests/networkxml2xmlupdatein/interface-eth1.xml new file mode 100644 index 0000000000..1663a66f4a --- /dev/null +++ b/tests/networkxml2xmlupdatein/interface-eth1.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/interface-eth47.xml b/tests/networkxml2xmlupdatein/interface-eth47.xml new file mode 100644 index 0000000000..5c244ffc31 --- /dev/null +++ b/tests/networkxml2xmlupdatein/interface-eth47.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/portgroup-alice-new.xml b/tests/networkxml2xmlupdatein/portgroup-alice-new.xml new file mode 100644 index 0000000000..46656c2767 --- /dev/null +++ b/tests/networkxml2xmlupdatein/portgroup-alice-new.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tests/networkxml2xmlupdatein/portgroup-alison.xml b/tests/networkxml2xmlupdatein/portgroup-alison.xml new file mode 100644 index 0000000000..ca6b7c197f --- /dev/null +++ b/tests/networkxml2xmlupdatein/portgroup-alison.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdatein/srv-record-donkey.xml b/tests/networkxml2xmlupdatein/srv-record-donkey.xml new file mode 100644 index 0000000000..b379a08736 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-donkey.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/srv-record-invalid.xml b/tests/networkxml2xmlupdatein/srv-record-invalid.xml new file mode 100644 index 0000000000..6a6811d8bb --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-invalid.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/srv-record-protocol.xml b/tests/networkxml2xmlupdatein/srv-record-protocol.xml new file mode 100644 index 0000000000..87478d033b --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-protocol.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/srv-record-service.xml b/tests/networkxml2xmlupdatein/srv-record-service.xml new file mode 100644 index 0000000000..5c8c9cd3b1 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-service.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/srv-record.xml b/tests/networkxml2xmlupdatein/srv-record.xml new file mode 100644 index 0000000000..3a65198190 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdatein/unparsable-dns-host.xml b/tests/networkxml2xmlupdatein/unparsable-dns-host.xml new file mode 100644 index 0000000000..392c67a8ea --- /dev/null +++ b/tests/networkxml2xmlupdatein/unparsable-dns-host.xml @@ -0,0 +1 @@ + diff --git a/tests/networkxml2xmlupdateout/dhcp6host-routed-network-another-range.xml b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-another-range.xml new file mode 100644 index 0000000000..ee6eb7a27c --- /dev/null +++ b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-another-range.xml @@ -0,0 +1,27 @@ + + local + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml new file mode 100644 index 0000000000..ee6eb7a27c --- /dev/null +++ b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml @@ -0,0 +1,27 @@ + + local + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml new file mode 100644 index 0000000000..6554c07f32 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml @@ -0,0 +1,19 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9c + + + + + + + pudding + + + host + gateway + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-srv-record.xml b/tests/networkxml2xmlupdateout/nat-network-dns-srv-record.xml new file mode 100644 index 0000000000..3dd19e6698 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-srv-record.xml @@ -0,0 +1,26 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-srv-records.xml b/tests/networkxml2xmlupdateout/nat-network-dns-srv-records.xml new file mode 100644 index 0000000000..eda9e20333 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-txt-none.xml b/tests/networkxml2xmlupdateout/nat-network-dns-txt-none.xml new file mode 100644 index 0000000000..93bc7db51d --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-txt-none.xml @@ -0,0 +1,23 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-dns-txt-records.xml b/tests/networkxml2xmlupdateout/nat-network-dns-txt-records.xml new file mode 100644 index 0000000000..63254d2d88 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-txt-records.xml @@ -0,0 +1,27 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml b/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml new file mode 100644 index 0000000000..6b87cd8789 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml @@ -0,0 +1,27 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-host-updated.xml b/tests/networkxml2xmlupdateout/nat-network-host-updated.xml new file mode 100644 index 0000000000..816ab3835d --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-host-updated.xml @@ -0,0 +1,23 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-hosts.xml new file mode 100644 index 0000000000..eb7acd7083 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-hosts.xml @@ -0,0 +1,24 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-no-forward-ifaces.xml b/tests/networkxml2xmlupdateout/nat-network-no-forward-ifaces.xml new file mode 100644 index 0000000000..ae49a3034e --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-forward-ifaces.xml @@ -0,0 +1,24 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml new file mode 100644 index 0000000000..bc9e4193fb --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml @@ -0,0 +1,10 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9c + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-no-range.xml b/tests/networkxml2xmlupdateout/nat-network-no-range.xml new file mode 100644 index 0000000000..7128783cbe --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-range.xml @@ -0,0 +1,22 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network-one-host.xml b/tests/networkxml2xmlupdateout/nat-network-one-host.xml new file mode 100644 index 0000000000..62778e4c5f --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-one-host.xml @@ -0,0 +1,22 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/nat-network.xml b/tests/networkxml2xmlupdateout/nat-network.xml new file mode 100644 index 0000000000..93bc7db51d --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network.xml @@ -0,0 +1,23 @@ + + default + 81ff0d90-c91e-6742-64da-4a736edb9a9b + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml new file mode 100644 index 0000000000..cc0c344c1b --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml @@ -0,0 +1,33 @@ + + openvswitch-net + 81ff0d90-c92e-6742-64da-4a736edb9a8b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml new file mode 100644 index 0000000000..7c19ad9f48 --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml @@ -0,0 +1,44 @@ + + openvswitch-net + 81ff0d90-c92e-6742-64da-4a736edb9a8b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml new file mode 100644 index 0000000000..41044240df --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml @@ -0,0 +1,23 @@ + + openvswitch-net + 81ff0d90-c92e-6742-64da-4a736edb9a8b + + + + + + + + + + + + + + + + + + + + diff --git a/tests/networkxml2xmlupdatetest.c b/tests/networkxml2xmlupdatetest.c new file mode 100644 index 0000000000..e5a17b2d99 --- /dev/null +++ b/tests/networkxml2xmlupdatetest.c @@ -0,0 +1,372 @@ +#include + +#include +#include +#include +#include + +#include +#include + +#include "internal.h" +#include "testutils.h" +#include "network_conf.h" +#include "testutilsqemu.h" +#include "virstring.h" + +#define VIR_FROM_THIS VIR_FROM_NONE + +static int +testCompareXMLToXMLFiles(const char *netxml, const char *updatexml, + const char *outxml, unsigned int flags, + unsigned int command, unsigned int section, + int parentIndex, bool expectFailure) +{ + char *netXmlData = NULL; + char *updateXmlData = NULL; + char *outXmlData = NULL; + char *actual = NULL; + int ret = -1; + virNetworkDefPtr def = NULL; + + if (virtTestLoadFile(netxml, &netXmlData) < 0) + goto error; + if (virtTestLoadFile(updatexml, &updateXmlData) < 0) + goto error; + + if (!(def = virNetworkDefParseString(netXmlData))) + goto fail; + + if (virNetworkDefUpdateSection(def, command, section, parentIndex, + updateXmlData, 0) < 0) + goto fail; + + if (!(actual = virNetworkDefFormat(def, flags))) + goto fail; + + if (!expectFailure) { + if (virtTestLoadFile(outxml, &outXmlData) < 0) + goto error; + + if (STRNEQ(outXmlData, actual)) { + virtTestDifference(stderr, outXmlData, actual); + goto fail; + } + } + + ret = 0; + +fail: + if (expectFailure) { + if (ret == 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", "Failed to fail."); + ret = -1; + } else { + virResetLastError(); + ret = 0; + } + } +error: + VIR_FREE(netXmlData); + VIR_FREE(updateXmlData); + VIR_FREE(outXmlData); + VIR_FREE(actual); + virNetworkDefFree(def); + return ret; +} + +struct testInfo { + const char *name; + const char *updatexml; + const char *netxml; + const char *outxml; + unsigned int command; + unsigned int section; + int parentIndex; + unsigned int flags; + bool expectFailure; +}; + +static int +testCompareXMLToXMLHelper(const void *data) +{ + const struct testInfo *info = data; + int result = -1; + char *netxml = NULL; + char *updatexml = NULL; + char *outxml = NULL; + + if (virAsprintf(&netxml, "%s/networkxml2xmlin/%s.xml", + abs_srcdir, info->netxml) < 0 || + virAsprintf(&updatexml, "%s/networkxml2xmlupdatein/%s.xml", + abs_srcdir, info->updatexml) < 0 || + virAsprintf(&outxml, "%s/networkxml2xmlupdateout/%s.xml", + abs_srcdir, info->outxml) < 0) { + goto cleanup; + } + + result = testCompareXMLToXMLFiles(netxml, updatexml, outxml, info->flags, + info->command, info->section, + info->parentIndex, info->expectFailure); + +cleanup: + VIR_FREE(netxml); + VIR_FREE(updatexml); + VIR_FREE(outxml); + + return result; +} + +static int +mymain(void) +{ + int ret = 0; + unsigned int section; + +#define DO_TEST_FULL(name, updatexml, netxml, outxml, command, section, \ + parentIndex, flags, expectFailure) \ + do { \ + const struct testInfo info = {name, updatexml, netxml, outxml, \ + command, section, flags, \ + parentIndex, expectFailure}; \ + if (virtTestRun("Network XML-2-XML " name, \ + 1, testCompareXMLToXMLHelper, &info) < 0) \ + ret = -1; \ + } while (0) + +#define DO_TEST(name, updatexml, netxml, outxml, command) \ + DO_TEST_FULL(name, updatexml, netxml, outxml, command, section, -12435, \ + 0, false) +#define DO_TEST_FAIL(name, updatexml, netxml, command) \ + DO_TEST_FULL(name, updatexml, netxml, "n/a", command, section, -12345, \ + 0, true) + +#define DO_TEST_INDEX(name, updatexml, netxml, outxml, command, index) \ + DO_TEST_FULL(name, updatexml, netxml, outxml, command, section, index, \ + 0, false) +#define DO_TEST_INDEX_FAIL(name, updatexml, netxml, command, index) \ + DO_TEST_FULL(name, updatexml, netxml, "n/a", command, section, index, \ + 0, true) + + + section = VIR_NETWORK_SECTION_IP_DHCP_HOST; + DO_TEST_INDEX_FAIL("add-host-incomplete", + "host-incomplete", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST, + 0); + DO_TEST_INDEX_FAIL("add-host-new-incomplete", + "host-new-incomplete", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST, + 0); + DO_TEST_INDEX_FAIL("add-host-existing", + "host-existing", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST, + 0); + DO_TEST_INDEX("add-host-new", + "host-new", + "nat-network", + "nat-network-hosts", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST, + 0); + DO_TEST_INDEX_FAIL("modify-host-missing", + "host-new", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_MODIFY, + 0); + DO_TEST_INDEX_FAIL("modify-host-incomplete", + "host-incomplete", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_MODIFY, + 0); + DO_TEST_INDEX("modify-host", + "host-updated", + "nat-network", + "nat-network-host-updated", + VIR_NETWORK_UPDATE_COMMAND_MODIFY, + 0); + DO_TEST_INDEX("delete-host-incomplete", + "host-incomplete", + "nat-network", + "nat-network-one-host", + VIR_NETWORK_UPDATE_COMMAND_DELETE, + 0); + DO_TEST_INDEX("delete-host-existing", + "host-existing", + "nat-network", + "nat-network-one-host", + VIR_NETWORK_UPDATE_COMMAND_DELETE, + 0); + DO_TEST_INDEX_FAIL("delete-host-missing", + "host-new", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_DELETE, + 0); + + + section = VIR_NETWORK_SECTION_IP_DHCP_RANGE; + DO_TEST_INDEX("add-dhcp-range", + "dhcp-range", + "dhcp6host-routed-network", + "dhcp6host-routed-network-range", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST, + 0); + DO_TEST_INDEX("append-dhcp-range", + "dhcp-range", + "dhcp6host-routed-network", + "dhcp6host-routed-network-another-range", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST, + 1); + DO_TEST_INDEX("delete-dhcp-range", + "dhcp-range-existing", + "nat-network", + "nat-network-no-range", + VIR_NETWORK_UPDATE_COMMAND_DELETE, + 0); + DO_TEST_INDEX_FAIL("delete-dhcp-range", + "dhcp-range", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_DELETE, + 0); + + + section = VIR_NETWORK_SECTION_FORWARD_INTERFACE; + DO_TEST("insert-forward-interface", + "interface-eth47", + "nat-network-dns-srv-record", + "nat-network-forward-ifaces", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST("delete-forward-interface", + "interface-eth1", + "nat-network-dns-srv-record", + "nat-network-no-forward-ifaces", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST_FAIL("delete-forward-interface", + "interface-eth47", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + + + section = VIR_NETWORK_SECTION_PORTGROUP; + DO_TEST("insert-portgroup", + "portgroup-alison", + "openvswitch-net", + "openvswitch-net-more-portgroups", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST_FAIL("append-duplicate-portgroup", + "portgroup-alice-new", + "openvswitch-net", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); + DO_TEST("modify-portgroup", + "portgroup-alice-new", + "openvswitch-net", + "openvswitch-net-modified", + VIR_NETWORK_UPDATE_COMMAND_MODIFY); + DO_TEST_FAIL("modify-missing-portgroup", + "portgroup-alison", + "openvswitch-net", + VIR_NETWORK_UPDATE_COMMAND_MODIFY); + DO_TEST("delete-portgroup", + "portgroup-alice-new", + "openvswitch-net", + "openvswitch-net-without-alice", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST_FAIL("delete-missing-portgroup", + "portgroup-alice-new", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + + + section = VIR_NETWORK_SECTION_DNS_HOST; + DO_TEST_FAIL("insert-incomplete-host", + "dns-host-gateway-incomplete", + "nat-network-dns-hosts", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST("insert-host", + "dns-host-pudding", + "nat-network-dns-hosts", + "nat-network-dns-more-hosts", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST_FAIL("delete-missing-unparsable-dns-host", + "unparsable-dns-host", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST("delete-dns-host", + "dns-host-gateway-incomplete", + "nat-network-dns-hosts", + "nat-network-no-hosts", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + + + section = VIR_NETWORK_SECTION_DNS_TXT; + DO_TEST("insert-dns-txt-record", + "dns-txt-record-snowman", + "nat-network-dns-txt-record", + "nat-network-dns-txt-records", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST_FAIL("append-duplicate-dns-txt-record", + "dns-txt-record-example", + "nat-network-dns-txt-record", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); + DO_TEST("delete-dns-txt-record", + "dns-txt-record-example", + "nat-network-dns-txt-record", + "nat-network-dns-txt-none", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST_FAIL("delete-missing-dns-txt-record", + "dns-txt-record-snowman", + "nat-network-dns-txt-record", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + + + section = VIR_NETWORK_SECTION_DNS_SRV; + DO_TEST("insert-first-srv-record-service", + "srv-record", + "nat-network", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_ADD_FIRST); + DO_TEST("append-first-srv-record-service", + "srv-record", + "nat-network", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); + DO_TEST_FAIL("add-existing-dns-srv-record", + "srv-record", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); + DO_TEST("append-srv-record-service", + "srv-record-donkey", + "nat-network-dns-srv-record", + "nat-network-dns-srv-records", + VIR_NETWORK_UPDATE_COMMAND_ADD_LAST); + + DO_TEST_FAIL("delete-missing-srv-record-service", + "srv-record-service", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST_FAIL("delete-srv-record-invalid", + "srv-record-invalid", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST("delete-srv-record-donkey", + "srv-record-donkey", + "nat-network-dns-srv-records", + "nat-network-dns-srv-record", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST_FAIL("delete-ambiguous-srv-record-service", + "srv-record-service", + "nat-network-dns-srv-records", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + DO_TEST("delete-srv-record-protocol", + "srv-record-protocol", + "nat-network-dns-srv-record", + "nat-network", + VIR_NETWORK_UPDATE_COMMAND_DELETE); + + + return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +VIRT_TEST_MAIN(mymain)