Edward Haas has uploaded a new change for review. Change subject: net: support nameserver address with %iface tail ......................................................................
net: support nameserver address with %iface tail The nameserver address may include an %<iface> tail, to specify on which iface the address is to be reached. The patch fixes the validation of the nameserver address when this tail exists. In addition, unit tests have been placed to cover the ip validation scenarios. Change-Id: Iea4d2eea2af8004435dae54ad56588739e028ba2 Signed-off-by: Edward Haas <edwa...@redhat.com> --- M lib/vdsm/network/ip/validator.py M tests/network/ip_test.py 2 files changed, 51 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/93/65693/1 diff --git a/lib/vdsm/network/ip/validator.py b/lib/vdsm/network/ip/validator.py index 9e84bd1..113f2c0 100644 --- a/lib/vdsm/network/ip/validator.py +++ b/lib/vdsm/network/ip/validator.py @@ -48,7 +48,17 @@ def _validate_nameservers_address(nameservers_addr): for addr in nameservers_addr: + addr = _normalize_address(addr) if ':' in addr: IPv6.validateAddress(addr) else: IPv4.validateAddress(addr) + + +def _normalize_address(addr): + """ + The nameserver address may be tailed with the interface from which it + should be reached: '2001::1%eth0' + For the purpose of address validation, such tail is ignored. + """ + return addr.split('%', 1)[0] diff --git a/tests/network/ip_test.py b/tests/network/ip_test.py index 8dc328e..e4c7a7e 100644 --- a/tests/network/ip_test.py +++ b/tests/network/ip_test.py @@ -22,7 +22,9 @@ from testlib import VdsmTestCase +from vdsm.network import errors as ne from vdsm.network.ip import address +from vdsm.network.ip import validator @attr(type='unit') @@ -44,3 +46,42 @@ self.assertEqual(None, ip.address) self.assertEqual(None, ip.gateway) self.assertEqual(None, ip.defaultRoute) + + +@attr(type='unit') +class TestIPValidator(VdsmTestCase): + + def test_ignore_remove_networks(self): + validator.validate({'NET0': {'remove': True, + 'defaultRoute': False, + 'nameservers': ['8.8.8.8']}}) + + def test_nameserver_defined_on_a_non_primary_network_fails(self): + with self.assertRaises(ne.ConfigNetworkError) as cne: + validator.validate({'NET0': {'defaultRoute': False, + 'nameservers': ['8.8.8.8']}}) + self.assertEqual(cne.exception.errCode, ne.ERR_BAD_PARAMS) + + def test_nameserver_faulty_ipv4_address(self): + with self.assertRaises(ne.ConfigNetworkError) as cne: + validator.validate({'NET0': {'defaultRoute': True, + 'nameservers': ['a.8.8.8']}}) + self.assertEqual(cne.exception.errCode, ne.ERR_BAD_ADDR) + + def test_nameserver_faulty_ipv6_address(self): + with self.assertRaises(ne.ConfigNetworkError) as cne: + validator.validate({'NET0': {'defaultRoute': True, + 'nameservers': ['2001:bla::1']}}) + self.assertEqual(cne.exception.errCode, ne.ERR_BAD_ADDR) + + def test_nameserver_valid_ipv4_address(self): + validator.validate({'NET0': {'defaultRoute': True, + 'nameservers': ['8.8.8.8']}}) + + def test_nameserver_valid_ipv6_address(self): + validator.validate({'NET0': {'defaultRoute': True, + 'nameservers': ['2001::1']}}) + + def test_nameserver_address_with_interface_tail(self): + validator.validate({'NET0': {'defaultRoute': True, + 'nameservers': ['2001::1%eth1']}}) -- To view, visit https://gerrit.ovirt.org/65693 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iea4d2eea2af8004435dae54ad56588739e028ba2 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Edward Haas <edwa...@redhat.com> _______________________________________________ vdsm-patches mailing list -- vdsm-patches@lists.fedorahosted.org To unsubscribe send an email to vdsm-patches-le...@lists.fedorahosted.org