X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_punt.py;h=c0c635079771cbef37acb090ebad07fe3d5bf8ce;hb=12989b538881f9681f078cf1485c51df1251877a;hp=4b9a05043f8252c39c80fec16b723afacc26928f;hpb=ead1e536d66d83b546528c32e2112085a97c8e13;p=vpp.git diff --git a/test/test_punt.py b/test/test_punt.py index 4b9a05043f8..c0c63507977 100644 --- a/test/test_punt.py +++ b/test/test_punt.py @@ -6,6 +6,9 @@ import os import threading import struct import copy +import fcntl +import time + from struct import unpack, unpack_from try: @@ -42,17 +45,26 @@ class serverSocketThread(threading.Thread): self.sockName = sockName self.sock = None self.rx_pkts = [] + self.keep_running = True def rx_packets(self): # Wait for some packets on socket - while True: - data = self.sock.recv(65536) - - # punt socket metadata - # packet_desc = data[0:8] - - # Ethernet - self.rx_pkts.append(Ether(data[8:])) + while self.keep_running: + try: + data = self.sock.recv(65536) + + # punt socket metadata + # packet_desc = data[0:8] + + # Ethernet + self.rx_pkts.append(Ether(data[8:])) + except IOError as e: + if e.errno == 11: + # nothing to receive, sleep a little + time.sleep(0.1) + pass + else: + raise def run(self): self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) @@ -62,12 +74,14 @@ class serverSocketThread(threading.Thread): pass self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 65536) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 65536) + fcntl.fcntl(self.sock, fcntl.F_SETFL, os.O_NONBLOCK) self.sock.bind(self.sockName) self.rx_packets() def close(self): self.sock.close() + self.keep_running = False return self.rx_pkts @@ -116,6 +130,7 @@ class TestPuntSocket(VppTestCase): rx_pkts = [] for thread in self.sock_servers: rx_pkts += thread.close() + thread.join() return rx_pkts def verify_port(self, pr, vpr): @@ -691,6 +706,7 @@ class TestExceptionPuntSocket(TestPuntSocket): def setUp(self): super(TestExceptionPuntSocket, self).setUp() + self.create_pg_interfaces(range(2)) for i in self.pg_interfaces: i.config_ip4() i.resolve_arp() @@ -790,7 +806,7 @@ class TestExceptionPuntSocket(TestPuntSocket): IPSEC_API_INTEG_ALG_SHA1_96), b"0123456701234567", b"0123456701234567").add_vpp_config() - VppIpsecTunInterface(self, self.pg0, 1001, 1001, + VppIpsecTunInterface(self, self.pg1, 1000, 1000, (VppEnum.vl_api_ipsec_crypto_alg_t. IPSEC_API_CRYPTO_ALG_AES_CBC_128), b"0123456701234567", @@ -806,8 +822,12 @@ class TestExceptionPuntSocket(TestPuntSocket): # adn SPI=0 # cfgs = dict() - cfgs['ipsec4-no-such-tunnel'] = {'spi': 99, 'udp': False} - cfgs['ipsec4-spi-o-udp-0'] = {'spi': 0, 'udp': True} + cfgs['ipsec4-no-such-tunnel'] = {'spi': 99, + 'udp': False, + 'itf': self.pg0} + cfgs['ipsec4-spi-o-udp-0'] = {'spi': 0, + 'udp': True, + 'itf': self.pg1} # # find the VPP ID for these punt exception reasin @@ -835,9 +855,10 @@ class TestExceptionPuntSocket(TestPuntSocket): # create packet streams for 'no-such-tunnel' exception # for cfg in cfgs.values(): - pkt = (Ether(src=self.pg0.remote_mac, - dst=self.pg0.local_mac) / - IP(src=self.pg0.remote_ip4, dst=self.pg0.local_ip4)) + pkt = (Ether(src=cfg['itf'].remote_mac, + dst=cfg['itf'].local_mac) / + IP(src=cfg['itf'].remote_ip4, + dst=cfg['itf'].local_ip4)) if (cfg['udp']): pkt = pkt / UDP(sport=666, dport=4500) pkt = (pkt / ESP(spi=cfg['spi'], seq=3) / @@ -848,7 +869,7 @@ class TestExceptionPuntSocket(TestPuntSocket): # send packets for each SPI we expect to be punted # for cfg in cfgs.values(): - self.send_and_assert_no_replies(self.pg0, cfg['pkts']) + self.send_and_assert_no_replies(cfg['itf'], cfg['pkts']) # # verify the punted packets arrived on the associated socket