ip: fix buffer leaks in reassembly
[vpp.git] / test / test_punt.py
index d3a9307..ac059e9 100644 (file)
@@ -26,6 +26,7 @@ from scapy.layers.ipsec import ESP
 import scapy.layers.inet6 as inet6
 from scapy.layers.inet6 import IPv6, ICMPv6DestUnreach
 from scapy.contrib.ospf import OSPF_Hdr, OSPFv3_Hello
+from framework import tag_fixme_vpp_workers
 from framework import VppTestCase, VppTestRunner
 
 from vpp_ip import DpoProto
@@ -45,11 +46,11 @@ class serverSocketThread(threading.Thread):
         self.sockName = sockName
         self.sock = None
         self.rx_pkts = []
-        self.keep_running = True
+        self.stop_running = False
 
     def rx_packets(self):
         # Wait for some packets on socket
-        while self.keep_running:
+        while True:
             try:
                 data = self.sock.recv(65536)
 
@@ -60,7 +61,9 @@ class serverSocketThread(threading.Thread):
                 self.rx_pkts.append(Ether(data[8:]))
             except IOError as e:
                 if e.errno == 11:
-                    # nothing to receive, sleep a little
+                    # nothing to receive, stop running or sleep a little
+                    if self.stop_running:
+                        break
                     time.sleep(0.1)
                     pass
                 else:
@@ -80,8 +83,9 @@ class serverSocketThread(threading.Thread):
         self.rx_packets()
 
     def close(self):
+        self.stop_running = True
+        threading.Thread.join(self)
         self.sock.close()
-        self.keep_running = False
         return self.rx_pkts
 
 
@@ -130,7 +134,6 @@ 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):
@@ -302,7 +305,7 @@ class TestIP4PuntSocket(TestPuntSocket):
         #
         # expect ICMP - port unreachable for all packets
         #
-        rx = self.send_and_expect(self.pg0, pkts, self.pg0)
+        rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
 
         for p in rx:
             self.assertEqual(int(p[IP].proto), 1)   # ICMP
@@ -331,7 +334,7 @@ class TestIP4PuntSocket(TestPuntSocket):
         punts = self.vapi.punt_socket_dump(type=pt_l4)
         self.assertEqual(len(punts), 0)
 
-        rx = self.send_and_expect(self.pg0, pkts, self.pg0)
+        rx = self.send_and_expect_some(self.pg0, pkts, self.pg0)
         for p in rx:
             self.assertEqual(int(p[IP].proto), 1)   # ICMP
             self.assertEqual(int(p[ICMP].code), 3)  # unreachable
@@ -1046,6 +1049,7 @@ class TestIpProtoPuntSocket(TestPuntSocket):
         self.vapi.punt_socket_deregister(punt_ospf)
 
 
+@tag_fixme_vpp_workers
 class TestPunt(VppTestCase):
     """ Exception Punt Test Case """