Ondřej Svoboda has uploaded a new change for review.
Change subject: testSetupNetworksAddDelDhcp: Check that an DHCPv4 address is in range ......................................................................
testSetupNetworksAddDelDhcp: Check that an DHCPv4 address is in range
(At least) one address is now required to be in a range we know and control. Also introduce range checking for IPv6.
Change-Id: Ied7e11e84b8f81c39c799fadfca06b7bde0a409c Signed-off-by: Ondřej Svoboda osvoboda@redhat.com --- M tests/functional/networkTests.py 1 file changed, 26 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/86/36186/1
diff --git a/tests/functional/networkTests.py b/tests/functional/networkTests.py index f23f033..c09e122 100644 --- a/tests/functional/networkTests.py +++ b/tests/functional/networkTests.py @@ -22,6 +22,8 @@ import json import signal import netaddr +import socket +import struct
from hookValidation import ValidatesHook from network.sourceroute import StaticSourceRoute @@ -217,6 +219,20 @@ del attrs['d']
+# adapted from http://stackoverflow.com/questions/10558441/ +# inet-aton-similar-function-for-ipv6 +def _ipv4_to_int(addr): + addr = addr.split('/')[0] # remove the network prefix + return struct.unpack('>L', socket.inet_aton(addr))[0] + + +def _ipv6_to_int(addr): + addr = addr.split('/')[0] # remove the network prefix + addr = socket.inet_pton(socket.AF_INET6, addr) + hi, lo = struct.unpack(">QQ", addr) + return (hi << 64) | lo + + @expandPermutations class NetworkTest(TestCaseBase):
@@ -367,6 +383,15 @@ def assertMtu(self, mtu, *elems): for elem in elems: self.assertEquals(int(mtu), int(self.vdsm_net.getMtu(elem))) + + def assertAddrInRange(self, addrs, family=4, + range_from=DHCP_RANGE_FROM, range_to=DHCP_RANGE_TO): + addr_to_int = _ipv4_to_int if family == 4 else _ipv6_to_int + range_from = addr_to_int(range_from) + range_to = addr_to_int(range_to) + passes = (range_from <= addr_to_int(a) <= range_to for a in addrs) + self.assertTrue(any(passes), 'no address {0} in expected range'.format( + addrs))
def testLegacyBonds(self): if not (caps.getos() in (caps.OSName.RHEVH, caps.OSName.RHEL) @@ -1773,6 +1798,7 @@ device_name = right
if dhcpv4: + self.assertAddrInRange(test_net['ipv4addrs']) # TODO: source routing not ready for IPv6 ip_addr = test_net['addr'] self.assertSourceRoutingConfiguration(device_name, ip_addr)