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

Reply via email to