from scapy.layers.inet import IP, UDP
from framework import VppTestCase, VppTestRunner
-from util import Host
+from util import Host, ppp
+@unittest.skip("Crashes VPP")
class TestL2bdMultiInst(VppTestCase):
""" L2BD Multi-instance Test Case """
# Packet flows mapping pg0 -> pg1, pg2 etc.
cls.flows = dict()
for i in range(0, len(cls.pg_interfaces), 3):
- cls.flows[cls.pg_interfaces[i]] = [cls.pg_interfaces[i+1],
- cls.pg_interfaces[i+2]]
- cls.flows[cls.pg_interfaces[i+1]] = [cls.pg_interfaces[i],
- cls.pg_interfaces[i+2]]
- cls.flows[cls.pg_interfaces[i+2]] = [cls.pg_interfaces[i],
- cls.pg_interfaces[i+1]]
+ cls.flows[cls.pg_interfaces[i]] = [cls.pg_interfaces[i + 1],
+ cls.pg_interfaces[i + 2]]
+ cls.flows[cls.pg_interfaces[i + 1]] = \
+ [cls.pg_interfaces[i], cls.pg_interfaces[i + 2]]
+ cls.flows[cls.pg_interfaces[i + 2]] = \
+ [cls.pg_interfaces[i], cls.pg_interfaces[i + 1]]
# Mapping between packet-generator index and lists of test hosts
cls.hosts_by_pg_idx = dict()
Clear trace and packet infos before running each test.
"""
super(TestL2bdMultiInst, self).setUp()
- self.packet_infos = {}
def tearDown(self):
"""
def create_bd_and_mac_learn(self, count, start=1):
"""
- Create required number of bridge domains with MAC learning enabled, put
- 3 l2-pg interfaces to every bridge domain and send MAC learning packets.
+ Create required number of bridge domains with MAC learning enabled,
+ put 3 l2-pg interfaces to every bridge domain and send MAC learning
+ packets.
:param int count: Number of bridge domains to be created.
:param int start: Starting number of the bridge domain ID.
if self.bd_deleted_list.count(bd_id) == 1:
self.bd_deleted_list.remove(bd_id)
for j in range(3):
- pg_if = self.pg_interfaces[(i+start-1)*3+j]
+ pg_if = self.pg_interfaces[(i + start - 1) * 3 + j]
self.vapi.sw_interface_set_l2_bridge(pg_if.sw_if_index,
bd_id=bd_id)
self.logger.info("pg-interface %s added to bridge domain ID %d"
if self.bd_deleted_list.count(bd_id) == 0:
self.bd_deleted_list.append(bd_id)
for j in range(3):
- pg_if = self.pg_interfaces[(i+start-1)*3+j]
+ pg_if = self.pg_interfaces[(i + start - 1) * 3 + j]
self.pg_in_bd.remove(pg_if)
self.pg_not_in_bd.append(pg_if)
self.logger.info("Bridge domain ID %d deleted" % bd_id)
for i in range(0, n_int):
dst_host = dst_hosts[i]
src_host = random.choice(src_hosts)
- pkt_info = self.create_packet_info(
- src_if.sw_if_index, dst_if.sw_if_index)
+ pkt_info = self.create_packet_info(src_if, dst_if)
payload = self.info_to_payload(pkt_info)
p = (Ether(dst=dst_host.mac, src=src_host.mac) /
IP(src=src_host.ip4, dst=dst_host.ip4) /
self.assertEqual(udp.sport, saved_packet[UDP].sport)
self.assertEqual(udp.dport, saved_packet[UDP].dport)
except:
- self.logger.error("Unexpected or invalid packet:")
- self.logger.error(packet.show())
+ self.logger.error(ppp("Unexpected or invalid packet:", packet))
raise
for i in self.pg_interfaces:
remaining_packet = self.get_next_packet_info_for_interface2(
def run_verify_test(self):
"""
- Create packet streams for all configured l2-pg interfaces, send all
+ Create packet streams for all configured l2-pg interfaces, send all \
prepared packet streams and verify that:
- - all packets received correctly on all pg-l2 interfaces assigned \
- to bridge domains
- - no packet received on all pg-l2 interfaces not assigned to \
- bridge domains
-
- :raise: RuntimeError if no packet captured on l2-pg interface assigned \
- to the bridge domain or if any packet is captured on l2-pg interface \
- not assigned to the bridge domain.
+ - all packets received correctly on all pg-l2 interfaces assigned
+ to bridge domains
+ - no packet received on all pg-l2 interfaces not assigned to
+ bridge domains
+
+ :raise RuntimeError: if no packet captured on l2-pg interface assigned
+ to the bridge domain or if any packet is captured
+ on l2-pg interface not assigned to the bridge
+ domain.
"""
# Test
# Create incoming packet streams for packet-generator interfaces
for pg_if in self.pg_interfaces:
capture = pg_if.get_capture()
if pg_if in self.pg_in_bd:
- if len(capture) == 0:
- raise RuntimeError("Interface %s is in BD but the capture "
- "is empty!" % pg_if.name)
self.verify_capture(pg_if, capture)
- elif pg_if in self.pg_not_in_bd:
- try:
- self.assertEqual(len(capture), 0)
- except AssertionError:
- raise RuntimeError("Interface %s is not in BD but "
- "the capture is not empty!" % pg_if.name)
- else:
+ elif pg_if not in self.pg_not_in_bd:
self.logger.error("Unknown interface: %s" % pg_if.name)
- @unittest.skip("Crashes VPP")
def test_l2bd_inst_01(self):
""" L2BD Multi-instance test 1 - create 5 BDs
"""
# self.vapi.cli("clear trace")
self.run_verify_test()
- @unittest.skip("Crashes VPP")
def test_l2bd_inst_02(self):
""" L2BD Multi-instance test 2 - update data of 5 BDs
"""
self.verify_bd(self.bd_list[4], learn=False, forward=True,
flood=True, uu_flood=True)
- @unittest.skip("Crashes VPP")
def test_l2bd_inst_03(self):
""" L2BD Multi-instance 3 - delete 2 BDs
"""
# Test 3
self.run_verify_test()
- @unittest.skip("Crashes VPP")
def test_l2bd_inst_04(self):
""" L2BD Multi-instance test 4 - add 2 BDs
"""
# self.vapi.cli("clear trace")
self.run_verify_test()
- @unittest.skip("Crashes VPP")
def test_l2bd_inst_05(self):
""" L2BD Multi-instance 5 - delete 5 BDs
"""