From 4da93c9a9273d8d5735e250a99388aae5d92b032 Mon Sep 17 00:00:00 2001
From: Pierre LALET <pierre.lalet@cea.fr>
Date: Sun, 8 Jan 2017 13:47:51 +0100
Subject: [PATCH] Add tests for sniff(), send(), sendp()

---
 appveyor.yml        |  2 +-
 test/regression.uts | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/appveyor.yml b/appveyor.yml
index d634de0a..29131bf7 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -27,7 +27,7 @@ test_script:
   - set PATH="%APPVEYOR_BUILD_FOLDER%;C:\Program Files\Wireshark\;%PATH%"
   
   # Main unit tests
-  - "%PYTHON%\\python -m coverage run -a bin\\UTscapy -f text -t test\\regression.uts -F -K automaton -K mock_read_routes6_bsd || exit /b 42"
+  - "%PYTHON%\\python -m coverage run -a bin\\UTscapy -f text -t test\\regression.uts -F -K automaton -K mock_read_routes6_bsd -K fork || exit /b 42"
   - 'del test\regression.uts'
 
   # Secondary unit tests
diff --git a/test/regression.uts b/test/regression.uts
index 41c640a0..cf3051cc 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -688,6 +688,31 @@ assert(DNS in IP(str(dns_ans2)))
 conf.route.route("0.0.0.0")[2]
 arping(_+"/24")
 
+= send() and sniff()
+~ netaccess fork
+import time
+import os
+def send_and_sniff(pkt, timeout=2, flt=None, iface=None):
+    """Send a packet, sniff, and check the packet has been seen"""
+    pid = os.fork()
+    assert pid != -1
+    if pid == 0:
+        time.sleep(1)
+        (sendp if isinstance(pkt, (Ether, Dot3)) else send)(pkt, iface=iface)
+        os._exit(0)
+    else:
+        spkt = str(pkt)
+        pkts = sniff(
+            timeout=timeout, iface=iface, filter=flt,
+            stop_filter=lambda p: pkt.__class__ in p and str(p[pkt.__class__]) == spkt
+        )
+        os.waitpid(pid, 0)
+    assert str(pkt) in (str(p[pkt.__class__]) for p in pkts if pkt.__class__ in p)
+
+send_and_sniff(IP(dst="secdev.org")/ICMP())
+send_and_sniff(IP(dst="secdev.org")/ICMP(), flt="icmp")
+send_and_sniff(Ether()/IP(dst="secdev.org")/ICMP())
+
 
 ############
 ############
-- 
GitLab