Add checks for updating sections of network definition via virNetworkDefUpdateSection. https://bugzilla.redhat.com/show_bug.cgi?id=989569 --- src/conf/network_conf.c | 2 +- src/conf/network_conf.h | 9 + src/libvirt_private.syms | 1 + tests/Makefile.am | 9 +- .../nat-network-dns-srv-records.xml | 27 ++ .../nat-network-dns-srv-records.xml | 27 ++ tests/networkxml2xmltest.c | 1 + .../networkxml2xmlupdatein/dhcp-range-existing.xml | 1 + tests/networkxml2xmlupdatein/dhcp-range.xml | 1 + .../dns-host-gateway-incomplete.xml | 3 + tests/networkxml2xmlupdatein/dns-host-pudding.xml | 3 + .../dns-txt-record-example.xml | 1 + .../dns-txt-record-snowman.xml | 1 + tests/networkxml2xmlupdatein/host-existing.xml | 1 + tests/networkxml2xmlupdatein/host-incomplete.xml | 1 + .../networkxml2xmlupdatein/host-new-incomplete.xml | 1 + tests/networkxml2xmlupdatein/host-new.xml | 1 + tests/networkxml2xmlupdatein/host-updated.xml | 1 + tests/networkxml2xmlupdatein/interface-eth1.xml | 1 + tests/networkxml2xmlupdatein/interface-eth47.xml | 1 + .../networkxml2xmlupdatein/portgroup-alice-new.xml | 10 + tests/networkxml2xmlupdatein/portgroup-alison.xml | 11 + tests/networkxml2xmlupdatein/srv-record-donkey.xml | 1 + .../networkxml2xmlupdatein/srv-record-invalid.xml | 1 + .../networkxml2xmlupdatein/srv-record-protocol.xml | 1 + .../networkxml2xmlupdatein/srv-record-service.xml | 1 + tests/networkxml2xmlupdatein/srv-record.xml | 1 + .../networkxml2xmlupdatein/unparsable-dns-host.xml | 1 + .../dhcp6host-routed-network-another-range.xml | 27 ++ .../dhcp6host-routed-network-range.xml | 27 ++ .../nat-network-dns-more-hosts.xml | 19 ++ .../nat-network-dns-srv-record.xml | 26 ++ .../nat-network-dns-srv-records.xml | 27 ++ .../nat-network-dns-txt-none.xml | 23 ++ .../nat-network-dns-txt-records.xml | 27 ++ .../nat-network-forward-ifaces.xml | 27 ++ .../nat-network-host-updated.xml | 23 ++ .../networkxml2xmlupdateout/nat-network-hosts.xml | 24 ++ .../nat-network-no-forward-ifaces.xml | 24 ++ .../nat-network-no-hosts.xml | 10 + .../nat-network-no-range.xml | 22 ++ .../nat-network-one-host.xml | 22 ++ tests/networkxml2xmlupdateout/nat-network.xml | 23 ++ .../openvswitch-net-modified.xml | 33 ++ .../openvswitch-net-more-portgroups.xml | 44 +++ .../openvswitch-net-without-alice.xml | 23 ++ tests/networkxml2xmlupdatetest.c | 372 +++++++++++++++++++++ 47 files changed, 941 insertions(+), 2 deletions(-) create mode 100644 tests/networkxml2xmlin/nat-network-dns-srv-records.xml create mode 100644 tests/networkxml2xmlout/nat-network-dns-srv-records.xml create mode 100644 tests/networkxml2xmlupdatein/dhcp-range-existing.xml create mode 100644 tests/networkxml2xmlupdatein/dhcp-range.xml create mode 100644 tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml create mode 100644 tests/networkxml2xmlupdatein/dns-host-pudding.xml create mode 100644 tests/networkxml2xmlupdatein/dns-txt-record-example.xml create mode 100644 tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml create mode 100644 tests/networkxml2xmlupdatein/host-existing.xml create mode 100644 tests/networkxml2xmlupdatein/host-incomplete.xml create mode 100644 tests/networkxml2xmlupdatein/host-new-incomplete.xml create mode 100644 tests/networkxml2xmlupdatein/host-new.xml create mode 100644 tests/networkxml2xmlupdatein/host-updated.xml create mode 100644 tests/networkxml2xmlupdatein/interface-eth1.xml create mode 100644 tests/networkxml2xmlupdatein/interface-eth47.xml create mode 100644 tests/networkxml2xmlupdatein/portgroup-alice-new.xml create mode 100644 tests/networkxml2xmlupdatein/portgroup-alison.xml create mode 100644 tests/networkxml2xmlupdatein/srv-record-donkey.xml create mode 100644 tests/networkxml2xmlupdatein/srv-record-invalid.xml create mode 100644 tests/networkxml2xmlupdatein/srv-record-protocol.xml create mode 100644 tests/networkxml2xmlupdatein/srv-record-service.xml create mode 100644 tests/networkxml2xmlupdatein/srv-record.xml create mode 100644 tests/networkxml2xmlupdatein/unparsable-dns-host.xml create mode 100644 tests/networkxml2xmlupdateout/dhcp6host-routed-network-another-range.xml create mode 100644 tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-srv-record.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-srv-records.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-txt-none.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-dns-txt-records.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-host-updated.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-hosts.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-no-forward-ifaces.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-no-hosts.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-no-range.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network-one-host.xml create mode 100644 tests/networkxml2xmlupdateout/nat-network.xml create mode 100644 tests/networkxml2xmlupdateout/openvswitch-net-modified.xml create mode 100644 tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml create mode 100644 tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml create mode 100644 tests/networkxml2xmlupdatetest.c diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 10e6592..d54f2aa 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 920e899..c28bfae 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 c25a61f..d4006ae 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 c399dcb..c800179 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 0000000..eda9e20 --- /dev/null +++ b/tests/networkxml2xmlin/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + <srv service='name' protocol='tcp' domain='donkey' target='.' port='404' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> 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 0000000..eda9e20 --- /dev/null +++ b/tests/networkxml2xmlout/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + <srv service='name' protocol='tcp' domain='donkey' target='.' port='404' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index dbf12b0..675a862 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 0000000..d229a62 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dhcp-range-existing.xml @@ -0,0 +1 @@ +<range start="192.168.122.2" end="192.168.122.254"/> diff --git a/tests/networkxml2xmlupdatein/dhcp-range.xml b/tests/networkxml2xmlupdatein/dhcp-range.xml new file mode 100644 index 0000000..ed775c8 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dhcp-range.xml @@ -0,0 +1 @@ +<range start='10.0.0.10' end='10.0.0.100'/> diff --git a/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml b/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml new file mode 100644 index 0000000..6972d2e --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-host-gateway-incomplete.xml @@ -0,0 +1,3 @@ +<host> + <hostname>gateway</hostname> +</host> diff --git a/tests/networkxml2xmlupdatein/dns-host-pudding.xml b/tests/networkxml2xmlupdatein/dns-host-pudding.xml new file mode 100644 index 0000000..0878a4b --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-host-pudding.xml @@ -0,0 +1,3 @@ +<host ip='f0:0d::f0:0d'> + <hostname>pudding</hostname> +</host> diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-example.xml b/tests/networkxml2xmlupdatein/dns-txt-record-example.xml new file mode 100644 index 0000000..c822dde --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-example.xml @@ -0,0 +1 @@ +<txt name='example' value='example value'/> diff --git a/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml b/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml new file mode 100644 index 0000000..420d898 --- /dev/null +++ b/tests/networkxml2xmlupdatein/dns-txt-record-snowman.xml @@ -0,0 +1 @@ +<txt name='snowman' value='water'/> diff --git a/tests/networkxml2xmlupdatein/host-existing.xml b/tests/networkxml2xmlupdatein/host-existing.xml new file mode 100644 index 0000000..205178e --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-existing.xml @@ -0,0 +1 @@ +<host mac="00:16:3e:77:e2:ed" name="a.example.com" ip="192.168.122.10"/> diff --git a/tests/networkxml2xmlupdatein/host-incomplete.xml b/tests/networkxml2xmlupdatein/host-incomplete.xml new file mode 100644 index 0000000..d882e45 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-incomplete.xml @@ -0,0 +1 @@ +<host mac="00:16:3e:77:e2:ed"/> diff --git a/tests/networkxml2xmlupdatein/host-new-incomplete.xml b/tests/networkxml2xmlupdatein/host-new-incomplete.xml new file mode 100644 index 0000000..42d5188 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-new-incomplete.xml @@ -0,0 +1 @@ +<host name='tea'/> diff --git a/tests/networkxml2xmlupdatein/host-new.xml b/tests/networkxml2xmlupdatein/host-new.xml new file mode 100644 index 0000000..657dc2f --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-new.xml @@ -0,0 +1 @@ +<host mac="00:16:3e:77:f0:0d" name="m.example.com" ip="192.168.122.12"/> diff --git a/tests/networkxml2xmlupdatein/host-updated.xml b/tests/networkxml2xmlupdatein/host-updated.xml new file mode 100644 index 0000000..acfb7a1 --- /dev/null +++ b/tests/networkxml2xmlupdatein/host-updated.xml @@ -0,0 +1 @@ +<host mac="00:16:3e:77:e2:ed" name="a.example.com" ip="192.168.122.47"/> diff --git a/tests/networkxml2xmlupdatein/interface-eth1.xml b/tests/networkxml2xmlupdatein/interface-eth1.xml new file mode 100644 index 0000000..1663a66 --- /dev/null +++ b/tests/networkxml2xmlupdatein/interface-eth1.xml @@ -0,0 +1 @@ +<interface dev='eth1'/> diff --git a/tests/networkxml2xmlupdatein/interface-eth47.xml b/tests/networkxml2xmlupdatein/interface-eth47.xml new file mode 100644 index 0000000..5c244ff --- /dev/null +++ b/tests/networkxml2xmlupdatein/interface-eth47.xml @@ -0,0 +1 @@ +<interface dev='eth47'/> diff --git a/tests/networkxml2xmlupdatein/portgroup-alice-new.xml b/tests/networkxml2xmlupdatein/portgroup-alice-new.xml new file mode 100644 index 0000000..46656c2 --- /dev/null +++ b/tests/networkxml2xmlupdatein/portgroup-alice-new.xml @@ -0,0 +1,10 @@ +<portgroup name='alice'> + <vlan trunk='yes'> + <tag id='888'/> + <tag id='808'/> + <tag id='909'/> + </vlan> + <virtualport> + <parameters profileid='alice-profile'/> + </virtualport> +</portgroup> diff --git a/tests/networkxml2xmlupdatein/portgroup-alison.xml b/tests/networkxml2xmlupdatein/portgroup-alison.xml new file mode 100644 index 0000000..ca6b7c1 --- /dev/null +++ b/tests/networkxml2xmlupdatein/portgroup-alison.xml @@ -0,0 +1,11 @@ +<portgroup name='alison'> + <vlan trunk='yes'> + <tag id='4'/> + <tag id='8'/> + <tag id='13'/> + <tag id='1990'/> + </vlan> + <virtualport> + <parameters profileid='alison-profile'/> + </virtualport> +</portgroup> diff --git a/tests/networkxml2xmlupdatein/srv-record-donkey.xml b/tests/networkxml2xmlupdatein/srv-record-donkey.xml new file mode 100644 index 0000000..b379a08 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-donkey.xml @@ -0,0 +1 @@ +<srv service='name' protocol='tcp' domain='donkey' target='.' port='404' priority='10' weight='10'/> diff --git a/tests/networkxml2xmlupdatein/srv-record-invalid.xml b/tests/networkxml2xmlupdatein/srv-record-invalid.xml new file mode 100644 index 0000000..6a6811d --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-invalid.xml @@ -0,0 +1 @@ +<srv protocol='pudding'/> diff --git a/tests/networkxml2xmlupdatein/srv-record-protocol.xml b/tests/networkxml2xmlupdatein/srv-record-protocol.xml new file mode 100644 index 0000000..87478d0 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-protocol.xml @@ -0,0 +1 @@ +<srv protocol='tcp'/> diff --git a/tests/networkxml2xmlupdatein/srv-record-service.xml b/tests/networkxml2xmlupdatein/srv-record-service.xml new file mode 100644 index 0000000..5c8c9cd --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record-service.xml @@ -0,0 +1 @@ +<srv service='name'/> diff --git a/tests/networkxml2xmlupdatein/srv-record.xml b/tests/networkxml2xmlupdatein/srv-record.xml new file mode 100644 index 0000000..3a65198 --- /dev/null +++ b/tests/networkxml2xmlupdatein/srv-record.xml @@ -0,0 +1 @@ +<srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> diff --git a/tests/networkxml2xmlupdatein/unparsable-dns-host.xml b/tests/networkxml2xmlupdatein/unparsable-dns-host.xml new file mode 100644 index 0000000..392c67a --- /dev/null +++ b/tests/networkxml2xmlupdatein/unparsable-dns-host.xml @@ -0,0 +1 @@ +<host protocol='name'/> 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 0000000..ee6eb7a --- /dev/null +++ b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-another-range.xml @@ -0,0 +1,27 @@ +<network> + <name>local</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='route'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr1' stp='on' delay='0'/> + <mac address='12:34:56:78:9a:bc'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='10.0.0.10' end='10.0.0.100'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + <dhcp> + <host id='0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63' ip='2001:db8:ac10:fd01::1:20'/> + <host name='paul' ip='2001:db8:ac10:fd01::1:21'/> + <host id='0:3:0:1:0:16:3e:11:22:33' name='peter.xyz' ip='2001:db8:ac10:fd01::1:22'/> + <host id='0:3:0:1:0:16:3e:44:55:33' ip='2001:db8:ac10:fd01::1:23'/> + <host id='0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66' name='badbob' ip='2001:db8:ac10:fd01::1:24'/> + </dhcp> + </ip> + <route address='192.168.222.0' netmask='255.255.255.0' gateway='192.168.122.10'/> + <route family='ipv6' address='2001:db8:ac10:fc00::' prefix='64' gateway='2001:db8:ac10:fd01::1:24'/> +</network> diff --git a/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml new file mode 100644 index 0000000..ee6eb7a --- /dev/null +++ b/tests/networkxml2xmlupdateout/dhcp6host-routed-network-range.xml @@ -0,0 +1,27 @@ +<network> + <name>local</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='route'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr1' stp='on' delay='0'/> + <mac address='12:34:56:78:9a:bc'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='10.0.0.10' end='10.0.0.100'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + <dhcp> + <host id='0:4:7e:7d:f0:7d:a8:bc:c5:d2:13:32:11:ed:16:ea:84:63' ip='2001:db8:ac10:fd01::1:20'/> + <host name='paul' ip='2001:db8:ac10:fd01::1:21'/> + <host id='0:3:0:1:0:16:3e:11:22:33' name='peter.xyz' ip='2001:db8:ac10:fd01::1:22'/> + <host id='0:3:0:1:0:16:3e:44:55:33' ip='2001:db8:ac10:fd01::1:23'/> + <host id='0:1:0:1:18:aa:62:fe:0:16:3e:44:55:66' name='badbob' ip='2001:db8:ac10:fd01::1:24'/> + </dhcp> + </ip> + <route address='192.168.222.0' netmask='255.255.255.0' gateway='192.168.122.10'/> + <route family='ipv6' address='2001:db8:ac10:fc00::' prefix='64' gateway='2001:db8:ac10:fd01::1:24'/> +</network> 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 0000000..6554c07 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-more-hosts.xml @@ -0,0 +1,19 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid> + <forward dev='eth0' mode='nat'> + <interface dev='eth0'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <host ip='f0:d::f0:d'> + <hostname>pudding</hostname> + </host> + <host ip='192.168.122.1'> + <hostname>host</hostname> + <hostname>gateway</hostname> + </host> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + </ip> +</network> 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 0000000..3dd19e6 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-srv-record.xml @@ -0,0 +1,26 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> 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 0000000..eda9e20 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-srv-records.xml @@ -0,0 +1,27 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + <srv service='name' protocol='tcp' domain='donkey' target='.' port='404' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> 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 0000000..93bc7db --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-txt-none.xml @@ -0,0 +1,23 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> 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 0000000..63254d2 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-dns-txt-records.xml @@ -0,0 +1,27 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <txt name='snowman' value='water'/> + <txt name='example' value='example value'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml b/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml new file mode 100644 index 0000000..6b87cd8 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-forward-ifaces.xml @@ -0,0 +1,27 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth47' mode='nat'> + <interface dev='eth47'/> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-host-updated.xml b/tests/networkxml2xmlupdateout/nat-network-host-updated.xml new file mode 100644 index 0000000..816ab38 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-host-updated.xml @@ -0,0 +1,23 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.47'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-hosts.xml new file mode 100644 index 0000000..eb7acd7 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-hosts.xml @@ -0,0 +1,24 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + <host mac='00:16:3e:77:f0:0d' name='m.example.com' ip='192.168.122.12'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> 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 0000000..ae49a30 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-forward-ifaces.xml @@ -0,0 +1,24 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward mode='nat'/> + <bridge name='virbr0' stp='on' delay='0'/> + <dns> + <srv service='name' protocol='tcp' domain='test-domain-name' target='.' port='1024' priority='10' weight='10'/> + </dns> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml new file mode 100644 index 0000000..bc9e419 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-hosts.xml @@ -0,0 +1,10 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid> + <forward dev='eth0' mode='nat'> + <interface dev='eth0'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-no-range.xml b/tests/networkxml2xmlupdateout/nat-network-no-range.xml new file mode 100644 index 0000000..7128783 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-no-range.xml @@ -0,0 +1,22 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network-one-host.xml b/tests/networkxml2xmlupdateout/nat-network-one-host.xml new file mode 100644 index 0000000..62778e4 --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network-one-host.xml @@ -0,0 +1,22 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/nat-network.xml b/tests/networkxml2xmlupdateout/nat-network.xml new file mode 100644 index 0000000..93bc7db --- /dev/null +++ b/tests/networkxml2xmlupdateout/nat-network.xml @@ -0,0 +1,23 @@ +<network> + <name>default</name> + <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9b</uuid> + <forward dev='eth1' mode='nat'> + <interface dev='eth1'/> + </forward> + <bridge name='virbr0' stp='on' delay='0'/> + <ip address='192.168.122.1' netmask='255.255.255.0'> + <dhcp> + <range start='192.168.122.2' end='192.168.122.254'/> + <host mac='00:16:3e:77:e2:ed' name='a.example.com' ip='192.168.122.10'/> + <host mac='00:16:3e:3e:a9:1a' name='b.example.com' ip='192.168.122.11'/> + </dhcp> + </ip> + <ip family='ipv4' address='192.168.123.1' netmask='255.255.255.0'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fe01::1' prefix='64'> + </ip> + <ip family='ipv6' address='2001:db8:ac10:fd01::1' prefix='64'> + </ip> + <ip family='ipv4' address='10.24.10.1'> + </ip> +</network> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml new file mode 100644 index 0000000..cc0c344 --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-modified.xml @@ -0,0 +1,33 @@ +<network> + <name>openvswitch-net</name> + <uuid>81ff0d90-c92e-6742-64da-4a736edb9a8b</uuid> + <forward mode='bridge'/> + <virtualport type='openvswitch'/> + <portgroup name='bob' default='yes'> + <vlan trunk='yes'> + <tag id='666'/> + </vlan> + <virtualport> + <parameters profileid='bob-profile'/> + </virtualport> + </portgroup> + <portgroup name='alice'> + <vlan trunk='yes'> + <tag id='888'/> + <tag id='808'/> + <tag id='909'/> + </vlan> + <virtualport> + <parameters profileid='alice-profile'/> + </virtualport> + </portgroup> + <portgroup name='native'> + <vlan trunk='yes'> + <tag id='123' nativeMode='tagged'/> + <tag id='444'/> + </vlan> + <virtualport> + <parameters profileid='native-profile'/> + </virtualport> + </portgroup> +</network> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml new file mode 100644 index 0000000..7c19ad9 --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-more-portgroups.xml @@ -0,0 +1,44 @@ +<network> + <name>openvswitch-net</name> + <uuid>81ff0d90-c92e-6742-64da-4a736edb9a8b</uuid> + <forward mode='bridge'/> + <virtualport type='openvswitch'/> + <portgroup name='alison'> + <vlan trunk='yes'> + <tag id='4'/> + <tag id='8'/> + <tag id='13'/> + <tag id='1990'/> + </vlan> + <virtualport> + <parameters profileid='alison-profile'/> + </virtualport> + </portgroup> + <portgroup name='bob' default='yes'> + <vlan trunk='yes'> + <tag id='666'/> + </vlan> + <virtualport> + <parameters profileid='bob-profile'/> + </virtualport> + </portgroup> + <portgroup name='alice'> + <vlan trunk='yes'> + <tag id='777'/> + <tag id='888'/> + <tag id='999'/> + </vlan> + <virtualport> + <parameters profileid='alice-profile'/> + </virtualport> + </portgroup> + <portgroup name='native'> + <vlan trunk='yes'> + <tag id='123' nativeMode='tagged'/> + <tag id='444'/> + </vlan> + <virtualport> + <parameters profileid='native-profile'/> + </virtualport> + </portgroup> +</network> diff --git a/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml new file mode 100644 index 0000000..4104424 --- /dev/null +++ b/tests/networkxml2xmlupdateout/openvswitch-net-without-alice.xml @@ -0,0 +1,23 @@ +<network> + <name>openvswitch-net</name> + <uuid>81ff0d90-c92e-6742-64da-4a736edb9a8b</uuid> + <forward mode='bridge'/> + <virtualport type='openvswitch'/> + <portgroup name='bob' default='yes'> + <vlan trunk='yes'> + <tag id='666'/> + </vlan> + <virtualport> + <parameters profileid='bob-profile'/> + </virtualport> + </portgroup> + <portgroup name='native'> + <vlan trunk='yes'> + <tag id='123' nativeMode='tagged'/> + <tag id='444'/> + </vlan> + <virtualport> + <parameters profileid='native-profile'/> + </virtualport> + </portgroup> +</network> diff --git a/tests/networkxml2xmlupdatetest.c b/tests/networkxml2xmlupdatetest.c new file mode 100644 index 0000000..e5a17b2 --- /dev/null +++ b/tests/networkxml2xmlupdatetest.c @@ -0,0 +1,372 @@ +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#include <sys/types.h> +#include <fcntl.h> + +#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) -- 1.8.1.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list