tests: python3 use byte strings in raw()
[vpp.git] / test / test_neighbor.py
index aec4871..0b7ffff 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import unittest
 from socket import AF_INET, AF_INET6, inet_pton
@@ -6,7 +6,7 @@ from socket import AF_INET, AF_INET6, inet_pton
 from framework import VppTestCase, VppTestRunner
 from vpp_neighbor import VppNeighbor, find_nbr
 from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, \
-    VppIpTable, DpoProto
+    VppIpTable, DpoProto, FibPathType
 from vpp_papi import VppEnum
 
 import scapy.compat
@@ -17,6 +17,9 @@ from scapy.layers.inet6 import IPv6
 from scapy.contrib.mpls import MPLS
 from scapy.layers.inet6 import IPv6
 
+
+NUM_PKTS = 67
+
 # not exported by scapy, so redefined here
 arp_opts = {"who-has": 1, "is-at": 2}
 
@@ -24,6 +27,14 @@ arp_opts = {"who-has": 1, "is-at": 2}
 class ARPTestCase(VppTestCase):
     """ ARP Test Case """
 
+    @classmethod
+    def setUpClass(cls):
+        super(ARPTestCase, cls).setUpClass()
+
+    @classmethod
+    def tearDownClass(cls):
+        super(ARPTestCase, cls).tearDownClass()
+
     def setUp(self):
         super(ARPTestCase, self).setUp()
 
@@ -300,7 +311,16 @@ class ARPTestCase(VppTestCase):
         #
         self.pg2.set_unnumbered(self.pg1.sw_if_index)
 
+        #
+        # test the unnumbered dump both by all interfaces and just the enabled
+        # one
+        #
         unnum = self.vapi.ip_unnumbered_dump()
+        self.assertTrue(len(unnum))
+        self.assertEqual(unnum[0].ip_sw_if_index, self.pg1.sw_if_index)
+        self.assertEqual(unnum[0].sw_if_index, self.pg2.sw_if_index)
+        unnum = self.vapi.ip_unnumbered_dump(self.pg2.sw_if_index)
+        self.assertTrue(len(unnum))
         self.assertEqual(unnum[0].ip_sw_if_index, self.pg1.sw_if_index)
         self.assertEqual(unnum[0].sw_if_index, self.pg2.sw_if_index)
 
@@ -500,7 +520,7 @@ class ARPTestCase(VppTestCase):
                              self.pg1._remote_hosts[9].ip4)
 
         #
-        # Add a hierachy of routes for a host in the sub-net.
+        # Add a hierarchy of routes for a host in the sub-net.
         # Should still get an ARP resp since the cover is attached
         #
         p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_mac) /
@@ -599,8 +619,8 @@ class ARPTestCase(VppTestCase):
         #
         #  2 - don't respond to ARP request from an address not within the
         #      interface's sub-net
-        #   2b - to a prxied address
-        #   2c - not within a differents interface's sub-net
+        #   2b - to a proxied address
+        #   2c - not within a different interface's sub-net
         p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) /
              ARP(op="who-has",
                  hwsrc=self.pg0.remote_mac,
@@ -743,7 +763,7 @@ class ARPTestCase(VppTestCase):
         self.pg1.generate_remote_hosts(2)
 
         #
-        # Proxy ARP rewquest packets for each interface
+        # Proxy ARP request packets for each interface
         #
         arp_req_pg0 = (Ether(src=self.pg0.remote_mac,
                              dst="ff:ff:ff:ff:ff:ff") /
@@ -911,7 +931,7 @@ class ARPTestCase(VppTestCase):
         self.pg2.generate_remote_hosts(2)
 
         #
-        # Add a reoute with out going label via an ARP unresolved next-hop
+        # Add a route with out going label via an ARP unresolved next-hop
         #
         ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32,
                                  [VppRoutePath(self.pg2.remote_hosts[1].ip4,
@@ -926,7 +946,7 @@ class ARPTestCase(VppTestCase):
                    dst=self.pg0.local_mac) /
              IP(src=self.pg0.remote_ip4, dst="10.0.0.1") /
              UDP(sport=1234, dport=1234) /
-             Raw('\xa5' * 100))
+             Raw(b'\xa5' * 100))
 
         self.pg0.add_stream(p)
         self.pg_enable_capture(self.pg_interfaces)
@@ -1054,7 +1074,7 @@ class ARPTestCase(VppTestCase):
 
         #
         # remove the duplicate on pg1
-        # packet stream shoud generate ARPs out of pg1
+        # packet stream should generate ARPs out of pg1
         #
         arp_pg1.remove_vpp_config()
 
@@ -1207,7 +1227,7 @@ class ARPTestCase(VppTestCase):
                        self.pg1.remote_hosts[1].ip4)
 
         #
-        # set the mac address on the inteface that does not have a
+        # set the mac address on the interface that does not have a
         # configured subnet and thus no glean
         #
         self.vapi.sw_interface_set_mac_address(self.pg2.sw_if_index,
@@ -1276,7 +1296,7 @@ class ARPTestCase(VppTestCase):
                                  mac=self.pg1.remote_hosts[3].mac))
 
         #
-        # GARPs (requets nor replies) for host we don't know yet
+        # GARPs (request nor replies) for host we don't know yet
         # don't result in new neighbour entries
         #
         p1 = (Ether(dst="ff:ff:ff:ff:ff:ff",
@@ -1351,8 +1371,7 @@ class ARPTestCase(VppTestCase):
         ip_10_1 = VppIpRoute(self, "10::1", 128,
                              [VppRoutePath(self.pg0.remote_hosts[1].ip6,
                                            self.pg0.sw_if_index,
-                                           proto=DpoProto.DPO_PROTO_IP6)],
-                             is_ip6=1)
+                                           proto=DpoProto.DPO_PROTO_IP6)])
         ip_10_1.add_vpp_config()
 
         p1 = (Ether(dst=self.pg1.local_mac,
@@ -1380,15 +1399,16 @@ class ARPTestCase(VppTestCase):
         # Test that VPP responds with ARP requests to addresses that
         # are connected and local routes.
         # Use one of the 'remote' addresses in the subnet as a local address
-        # The intention of this route is that it then acts like a secondardy
+        # The intention of this route is that it then acts like a secondary
         # address added to an interface
         #
         self.pg0.generate_remote_hosts(2)
 
-        forus = VppIpRoute(self, self.pg0.remote_hosts[1].ip4, 32,
-                           [VppRoutePath(self.pg0.remote_hosts[1].ip4,
-                                         self.pg0.sw_if_index)],
-                           is_local=1)
+        forus = VppIpRoute(
+            self, self.pg0.remote_hosts[1].ip4, 32,
+            [VppRoutePath("0.0.0.0",
+                          self.pg0.sw_if_index,
+                          type=FibPathType.FIB_PATH_TYPE_LOCAL)])
         forus.add_vpp_config()
 
         p = (Ether(dst="ff:ff:ff:ff:ff:ff",
@@ -1411,6 +1431,14 @@ class ARPTestCase(VppTestCase):
 class NeighborStatsTestCase(VppTestCase):
     """ ARP/ND Counters """
 
+    @classmethod
+    def setUpClass(cls):
+        super(NeighborStatsTestCase, cls).setUpClass()
+
+    @classmethod
+    def tearDownClass(cls):
+        super(NeighborStatsTestCase, cls).tearDownClass()
+
     def setUp(self):
         super(NeighborStatsTestCase, self).setUp()
 
@@ -1464,14 +1492,14 @@ class NeighborStatsTestCase(VppTestCase):
               UDP(sport=1234, dport=1234) /
               Raw())
 
-        rx = self.send_and_expect(self.pg0, p1 * 65, self.pg1)
-        rx = self.send_and_expect(self.pg0, p2 * 65, self.pg1)
+        rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
+        rx = self.send_and_expect(self.pg0, p2 * NUM_PKTS, self.pg1)
 
-        self.assertEqual(65, arp1.get_stats()['packets'])
-        self.assertEqual(65, arp2.get_stats()['packets'])
+        self.assertEqual(NUM_PKTS, arp1.get_stats()['packets'])
+        self.assertEqual(NUM_PKTS, arp2.get_stats()['packets'])
 
-        rx = self.send_and_expect(self.pg0, p1 * 65, self.pg1)
-        self.assertEqual(130, arp1.get_stats()['packets'])
+        rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1)
+        self.assertEqual(NUM_PKTS*2, arp1.get_stats()['packets'])
 
     def test_nd_stats(self):
         """ ND Counters """
@@ -1509,8 +1537,8 @@ class NeighborStatsTestCase(VppTestCase):
         self.assertEqual(16, nd1.get_stats()['packets'])
         self.assertEqual(16, nd2.get_stats()['packets'])
 
-        rx = self.send_and_expect(self.pg1, p1 * 65, self.pg0)
-        self.assertEqual(81, nd1.get_stats()['packets'])
+        rx = self.send_and_expect(self.pg1, p1 * NUM_PKTS, self.pg0)
+        self.assertEqual(NUM_PKTS+16, nd1.get_stats()['packets'])
 
 
 if __name__ == '__main__':