X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_l2bd_multi_instance.py;h=daf77ec979445ab25bd0121014ce454a99fe6ff1;hb=84fd6493b32729094c87741416f4f9898ab286f8;hp=0bb9e5974d1275fcac1cdd2167056dd8e38cdffc;hpb=284293a3ff4ba6508f8d02b644cfd1a60966382c;p=vpp.git diff --git a/test/test_l2bd_multi_instance.py b/test/test_l2bd_multi_instance.py index 0bb9e5974d1..daf77ec9794 100644 --- a/test/test_l2bd_multi_instance.py +++ b/test/test_l2bd_multi_instance.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """L2BD Multi-instance Test Case HLD: **NOTES:** @@ -74,7 +74,7 @@ from util import Host, ppp class TestL2bdMultiInst(VppTestCase): - """ L2BD Multi-instance Test Case """ + """L2BD Multi-instance Test Case""" @classmethod def setUpClass(cls): @@ -98,9 +98,9 @@ class TestL2bdMultiInst(VppTestCase): bd_ifs = cls.bd_if_range(b + 1) for j in bd_ifs: cls.flows[cls.pg_interfaces[j]] = [ - cls.pg_interfaces[x] for x in bd_ifs if x != j] - assert( - len(cls.flows[cls.pg_interfaces[j]]) == ifs_per_bd - 1) + cls.pg_interfaces[x] for x in bd_ifs if x != j + ] + assert len(cls.flows[cls.pg_interfaces[j]]) == ifs_per_bd - 1 # Mapping between packet-generator index and lists of test hosts cls.hosts_by_pg_idx = dict() @@ -115,25 +115,31 @@ class TestL2bdMultiInst(VppTestCase): for i in cls.pg_interfaces: i.admin_up() - # Create list of BDs - cls.bd_list = list() - - # Create list of deleted BDs - cls.bd_deleted_list = list() - - # Create list of pg_interfaces in BDs - cls.pg_in_bd = list() - except Exception: super(TestL2bdMultiInst, cls).tearDownClass() raise + @classmethod + def tearDownClass(cls): + super(TestL2bdMultiInst, cls).tearDownClass() + def setUp(self): """ Clear trace and packet infos before running each test. """ self.reset_packet_infos() super(TestL2bdMultiInst, self).setUp() + # Create list of BDs + self.bd_list = [] + + # Create dict of BDs + self.bd_map = {} + + # Create list of deleted BDs + self.bd_deleted_list = [] + + # Create list of pg_interfaces in BDs + self.pg_in_bd = [] def tearDown(self): """ @@ -155,12 +161,16 @@ class TestL2bdMultiInst(VppTestCase): addresses for. """ c = hosts_per_if - assert(not cls.hosts_by_pg_idx) + assert not cls.hosts_by_pg_idx for i in range(len(cls.pg_interfaces)): pg_idx = cls.pg_interfaces[i].sw_if_index - cls.hosts_by_pg_idx[pg_idx] = [Host( - "00:00:00:ff:%02x:%02x" % (pg_idx, j + 1), - "172.17.1%02u.%u" % (pg_idx, j + 1)) for j in range(c)] + cls.hosts_by_pg_idx[pg_idx] = [ + Host( + "00:00:00:ff:%02x:%02x" % (pg_idx, j + 1), + "172.17.1%02u.%u" % (pg_idx, j + 1), + ) + for j in range(c) + ] @classmethod def bd_if_range(cls, b): @@ -179,22 +189,35 @@ class TestL2bdMultiInst(VppTestCase): (Default value = 1) """ for b in range(start, start + count): - self.vapi.bridge_domain_add_del(bd_id=b) - self.logger.info("Bridge domain ID %d created" % b) - if self.bd_list.count(b) == 0: - self.bd_list.append(b) - if self.bd_deleted_list.count(b) == 1: - self.bd_deleted_list.remove(b) + if b == start: + self.vapi.bridge_domain_add_del_v2( + bd_id=b, flood=1, uu_flood=1, forward=1, learn=1, is_add=1 + ) + bd_id = b + else: + ret = self.vapi.bridge_domain_add_del_v2( + bd_id=0xFFFFFFFF, flood=1, uu_flood=1, forward=1, learn=1, is_add=1 + ) + bd_id = ret.bd_id + self.logger.info("Bridge domain ID %d created" % bd_id) + if self.bd_list.count(bd_id) == 0: + self.bd_map[b] = bd_id + self.bd_list.append(bd_id) + if self.bd_deleted_list.count(bd_id) == 1: + self.bd_deleted_list.remove(bd_id) for j in self.bd_if_range(b): pg_if = self.pg_interfaces[j] - self.vapi.sw_interface_set_l2_bridge(pg_if.sw_if_index, - bd_id=b) - self.logger.info("pg-interface %s added to bridge domain ID %d" - % (pg_if.name, b)) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=pg_if.sw_if_index, bd_id=bd_id + ) + self.logger.info( + "pg-interface %s added to bridge domain ID %d" % (pg_if.name, bd_id) + ) self.pg_in_bd.append(pg_if) hosts = self.hosts_by_pg_idx[pg_if.sw_if_index] - packets = [Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) - for host in hosts] + packets = [ + Ether(dst="ff:ff:ff:ff:ff:ff", src=host.mac) for host in hosts + ] pg_if.add_stream(packets) self.logger.info("Sending broadcast eth frames for MAC learning") self.pg_start() @@ -210,15 +233,22 @@ class TestL2bdMultiInst(VppTestCase): (Default value = 1) """ for b in range(start, start + count): + bd_id = self.bd_map[b] for j in self.bd_if_range(b): pg_if = self.pg_interfaces[j] - self.vapi.sw_interface_set_l2_bridge(pg_if.sw_if_index, - bd_id=b, enable=0) + self.vapi.sw_interface_set_l2_bridge( + rx_sw_if_index=pg_if.sw_if_index, bd_id=bd_id, enable=0 + ) self.pg_in_bd.remove(pg_if) - self.vapi.bridge_domain_add_del(bd_id=b, is_add=0) - self.bd_list.remove(b) - self.bd_deleted_list.append(b) - self.logger.info("Bridge domain ID %d deleted" % b) + self.logger.info( + "pg-interface %s removed from bridge domain ID %d" + % (pg_if.name, bd_id) + ) + self.vapi.bridge_domain_add_del_v2(bd_id=bd_id, is_add=0) + self.bd_map.pop(b) + self.bd_list.remove(bd_id) + self.bd_deleted_list.append(bd_id) + self.logger.info("Bridge domain ID %d deleted" % bd_id) def create_stream(self, src_if): """ @@ -237,16 +267,20 @@ class TestL2bdMultiInst(VppTestCase): pkt_info = self.create_packet_info(src_if, dst_if) payload = self.info_to_payload(pkt_info) src_host = random.choice(src_hosts) - p = (Ether(dst=dst_host.mac, src=src_host.mac) / - IP(src=src_host.ip4, dst=dst_host.ip4) / - UDP(sport=1234, dport=1234) / - Raw(payload)) + p = ( + Ether(dst=dst_host.mac, src=src_host.mac) + / IP(src=src_host.ip4, dst=dst_host.ip4) + / UDP(sport=1234, dport=1234) + / Raw(payload) + ) pkt_info.data = p.copy() size = random.choice(packet_sizes) self.extend_packet(p, size) pkts.append(p) - self.logger.debug("Input stream created for port %s. Length: %u pkt(s)" - % (src_if.name, len(pkts))) + self.logger.debug( + "Input stream created for port %s. Length: %u pkt(s)" + % (src_if.name, len(pkts)) + ) return pkts def verify_capture(self, dst_if): @@ -263,12 +297,15 @@ class TestL2bdMultiInst(VppTestCase): try: ip = packet[IP] udp = packet[UDP] - info = self.payload_to_info(str(packet[Raw])) + info = self.payload_to_info(packet[Raw]) self.assertEqual(info.dst, dst) - self.logger.debug("Got packet on port %s: src=%u (id=%u)" % - (dst_if.name, info.src, info.index)) + self.logger.debug( + "Got packet on port %s: src=%u (id=%u)" + % (dst_if.name, info.src, info.index) + ) last_info[info.src] = self.get_next_packet_info_for_interface2( - info.src, dst, last_info[info.src]) + info.src, dst, last_info[info.src] + ) pkt_info = last_info[info.src] self.assertTrue(pkt_info is not None) self.assertEqual(info.index, pkt_info.index) @@ -285,10 +322,13 @@ class TestL2bdMultiInst(VppTestCase): remaining = 0 for src in self.flows[dst_if]: remaining_packet = self.get_next_packet_info_for_interface2( - src.sw_if_index, dst, last_info[src.sw_if_index]) + src.sw_if_index, dst, last_info[src.sw_if_index] + ) if remaining_packet is None: - s += "Port %u: Packet expected from source %u didn't arrive\n"\ - % (dst, src.sw_if_index) + s += "Port %u: Packet expected from source %u didn't arrive\n" % ( + dst, + src.sw_if_index, + ) remaining += 1 self.assertNotEqual(0, remaining, s) @@ -316,7 +356,7 @@ class TestL2bdMultiInst(VppTestCase): else: raise ValueError("Unknown feature used: %s" % flag) is_set = 1 if args[flag] else 0 - self.vapi.bridge_flags(bd_id, is_set, feature_bitmap) + self.vapi.bridge_flags(bd_id=bd_id, is_set=is_set, flags=feature_bitmap) self.logger.info("Bridge domain ID %d updated" % bd_id) def verify_bd(self, bd_id, **args): @@ -372,7 +412,7 @@ class TestL2bdMultiInst(VppTestCase): # Test # Create incoming packet streams for packet-generator interfaces # for pg_if in self.pg_interfaces: - assert(len(self._packet_count_for_dst_if_idx) == 0) + assert len(self._packet_count_for_dst_if_idx) == 0 for pg_if in self.pg_in_bd: pkts = self.create_stream(pg_if) pg_if.add_stream(pkts) @@ -387,8 +427,7 @@ class TestL2bdMultiInst(VppTestCase): self.verify_capture(pg_if) def test_l2bd_inst_01(self): - """ L2BD Multi-instance test 1 - create 5 BDs - """ + """L2BD Multi-instance test 1 - create 5 BDs""" # Config 1 # Create 5 BDs, put interfaces to these BDs and send MAC learning # packets @@ -401,12 +440,46 @@ class TestL2bdMultiInst(VppTestCase): # Test 1 # self.vapi.cli("clear trace") self.run_verify_test() + self.delete_bd(5) def test_l2bd_inst_02(self): - """ L2BD Multi-instance test 2 - delete 2 BDs - """ + """L2BD Multi-instance test 2 - update data of 5 BDs""" + # Config 2 + # Update data of 5 BDs (disable learn, forward, flood, uu-flood) + self.create_bd_and_mac_learn(5) + self.set_bd_flags( + self.bd_list[0], learn=False, forward=False, flood=False, uu_flood=False + ) + self.set_bd_flags(self.bd_list[1], forward=False) + self.set_bd_flags(self.bd_list[2], flood=False) + self.set_bd_flags(self.bd_list[3], uu_flood=False) + self.set_bd_flags(self.bd_list[4], learn=False) + + # Verify 2 + # Skipping check of uu_flood as it is not returned by + # bridge_domain_dump api command + self.verify_bd( + self.bd_list[0], learn=False, forward=False, flood=False, uu_flood=False + ) + self.verify_bd( + self.bd_list[1], learn=True, forward=False, flood=True, uu_flood=True + ) + self.verify_bd( + self.bd_list[2], learn=True, forward=True, flood=False, uu_flood=True + ) + self.verify_bd( + self.bd_list[3], learn=True, forward=True, flood=True, uu_flood=False + ) + self.verify_bd( + self.bd_list[4], learn=False, forward=True, flood=True, uu_flood=True + ) + self.delete_bd(5) + + def test_l2bd_inst_03(self): + """L2BD Multi-instance test 3 - delete 2 BDs""" # Config 3 # Delete 2 BDs + self.create_bd_and_mac_learn(5) self.delete_bd(2) # Verify 3 @@ -417,10 +490,10 @@ class TestL2bdMultiInst(VppTestCase): # Test 3 self.run_verify_test() + self.delete_bd(3, 3) - def test_l2bd_inst_03(self): - """ L2BD Multi-instance test 3 - add 2 BDs - """ + def test_l2bd_inst_04(self): + """L2BD Multi-instance test 4 - add 2 BDs""" # Config 4 # Create 5 BDs, put interfaces to these BDs and send MAC learning # packets @@ -433,38 +506,13 @@ class TestL2bdMultiInst(VppTestCase): # Test 4 # self.vapi.cli("clear trace") self.run_verify_test() - - def test_l2bd_inst_04(self): - """ L2BD Multi-instance test 4 - update data of 5 BDs - """ - # Config 2 - # Update data of 5 BDs (disable learn, forward, flood, uu-flood) - self.set_bd_flags(self.bd_list[0], learn=False, forward=False, - flood=False, uu_flood=False) - self.set_bd_flags(self.bd_list[1], forward=False) - self.set_bd_flags(self.bd_list[2], flood=False) - self.set_bd_flags(self.bd_list[3], uu_flood=False) - self.set_bd_flags(self.bd_list[4], learn=False) - - # Verify 2 - # Skipping check of uu_flood as it is not returned by - # bridge_domain_dump api command - self.verify_bd(self.bd_list[0], learn=False, forward=False, - flood=False, uu_flood=False) - self.verify_bd(self.bd_list[1], learn=True, forward=False, - flood=True, uu_flood=True) - self.verify_bd(self.bd_list[2], learn=True, forward=True, - flood=False, uu_flood=True) - self.verify_bd(self.bd_list[3], learn=True, forward=True, - flood=True, uu_flood=False) - self.verify_bd(self.bd_list[4], learn=False, forward=True, - flood=True, uu_flood=True) + self.delete_bd(2) def test_l2bd_inst_05(self): - """ L2BD Multi-instance test 5 - delete 5 BDs - """ + """L2BD Multi-instance test 5 - delete 5 BDs""" # Config 5 # Delete 5 BDs + self.create_bd_and_mac_learn(5) self.delete_bd(5) # Verify 5 @@ -474,5 +522,5 @@ class TestL2bdMultiInst(VppTestCase): self.assertEqual(self.verify_bd(bd_id), 1) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main(testRunner=VppTestRunner)