ip: admin change affects intf IPv4 addr routes
[vpp.git] / test / test_dhcp.py
index 833ee00..bdc5df7 100644 (file)
@@ -8,6 +8,7 @@ from framework import VppTestCase, VppTestRunner, running_extended_tests
 from vpp_neighbor import VppNeighbor
 from vpp_ip_route import find_route, VppIpTable
 from util import mk_ll_addr
+import scapy.compat
 from scapy.layers.l2 import Ether, getmacbyip, ARP
 from scapy.layers.inet import IP, UDP, ICMP
 from scapy.layers.inet6 import IPv6, in6_getnsmac
@@ -30,6 +31,14 @@ DHCP6_SERVER_PORT = 546
 class TestDHCP(VppTestCase):
     """ DHCP Test Case """
 
+    @classmethod
+    def setUpClass(cls):
+        super(TestDHCP, cls).setUpClass()
+
+    @classmethod
+    def tearDownClass(cls):
+        super(TestDHCP, cls).tearDownClass()
+
     def setUp(self):
         super(TestDHCP, self).setUp()
 
@@ -360,6 +369,16 @@ class TestDHCP(VppTestCase):
         # not sure why this is not decoding
         # adv = pkt[DHCP6_Advertise]
 
+    def wait_for_no_route(self, address, length,
+                          n_tries=50, s_time=1):
+        while (n_tries):
+            if not find_route(self, address, length):
+                return True
+            n_tries = n_tries - 1
+            self.sleep(s_time)
+
+        return False
+
     def test_dhcp_proxy(self):
         """ DHCPv4 Proxy """
 
@@ -480,7 +499,7 @@ class TestDHCP(VppTestCase):
         #
         # 1. not our IP address = not checked by VPP? so offer is replayed
         #    to client
-        bad_ip = option_82[0:8] + chr(33) + option_82[9:]
+        bad_ip = option_82[0:8] + scapy.compat.chb(33) + option_82[9:]
 
         p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
              IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
@@ -494,7 +513,7 @@ class TestDHCP(VppTestCase):
                                         "DHCP offer option 82 bad address")
 
         # 2. Not a sw_if_index VPP knows
-        bad_if_index = option_82[0:2] + chr(33) + option_82[3:]
+        bad_if_index = option_82[0:2] + scapy.compat.chb(33) + option_82[3:]
 
         p = (Ether(dst=self.pg0.local_mac, src=self.pg0.remote_mac) /
              IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4) /
@@ -1203,7 +1222,7 @@ class TestDHCP(VppTestCase):
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname)
 
         rx = self.pg3.get_capture(1)
 
@@ -1273,7 +1292,7 @@ class TestDHCP(VppTestCase):
         #
         # remove the DHCP config
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname, is_add=0)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname, is_add=0)
 
         #
         # and now the route should be gone
@@ -1287,8 +1306,8 @@ class TestDHCP(VppTestCase):
         self.pg3.admin_down()
         self.sleep(1)
         self.pg3.admin_up()
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname,
-                              client_id=self.pg3.local_mac)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname,
+                                     client_id=self.pg3.local_mac)
 
         rx = self.pg3.get_capture(1)
 
@@ -1345,7 +1364,7 @@ class TestDHCP(VppTestCase):
         #
         # remove the DHCP config
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname, is_add=0)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname, is_add=0)
 
         self.assertFalse(find_route(self, self.pg3.local_ip4, 32))
         self.assertFalse(find_route(self, self.pg3.local_ip4, 24))
@@ -1357,8 +1376,8 @@ class TestDHCP(VppTestCase):
         #
         # Configure DHCP client on PG3 and capture the discover sent
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname,
-                              set_broadcast_flag=0)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname,
+                                     set_broadcast_flag=0)
 
         rx = self.pg3.get_capture(1)
 
@@ -1452,7 +1471,7 @@ class TestDHCP(VppTestCase):
         #
         # remove the DHCP config
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname, is_add=0)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname, is_add=0)
 
         #
         # and now the route should be gone
@@ -1466,7 +1485,7 @@ class TestDHCP(VppTestCase):
         self.pg3.admin_down()
         self.sleep(1)
         self.pg3.admin_up()
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname)
 
         rx = self.pg3.get_capture(1)
 
@@ -1535,20 +1554,15 @@ class TestDHCP(VppTestCase):
                                       is_add=0)
 
         #
-        # Sleep for the lease time
+        # the route should be gone after the lease expires
         #
-        self.sleep(lease_time+1)
-
-        #
-        # And now the route should be gone
-        #
-        self.assertFalse(find_route(self, self.pg3.local_ip4, 32))
-        self.assertFalse(find_route(self, self.pg3.local_ip4, 24))
+        self.assertTrue(self.wait_for_no_route(self.pg3.local_ip4, 32))
+        self.assertTrue(self.wait_for_no_route(self.pg3.local_ip4, 24))
 
         #
         # remove the DHCP config
         #
-        self.vapi.dhcp_client(self.pg3.sw_if_index, hostname, is_add=0)
+        self.vapi.dhcp_client_config(self.pg3.sw_if_index, hostname, is_add=0)
 
 
 if __name__ == '__main__':