The test was using client and server to generate traffic that would
be sampled. The sampling check relayed on the fact that the last
echo from server would arrive when the client is already closed.
That wasn't always the case which led to missing samples for ICMP
error. Make sure the server waits a little before sending the last
packet. Giving the client a chance to properly exit first. Also make
the delay between the two packets sent by client smaller to slightly
shorten the time required to execute the test.

Reported-at: https://issues.redhat.com/browse/FDP-1941
Signed-off-by: Ales Musil <[email protected]>
---
 tests/system-ovn.at | 51 ++++++++++++++++++++++++++++++++++-----------
 1 file changed, 39 insertions(+), 12 deletions(-)

diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index 5b34e621f..9c86e1e38 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -13302,6 +13302,32 @@ check_uuid ovn-nbctl
 check_row_count nb:ACL 6
 check_row_count nb:Sample 12
 
+AT_DATA([client.py], [dnl
+import socket
+import sys
+import time
+
+port = int(sys.argv[[1]])
+
+sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+sock.sendto(b"hello\n", ("43.43.43.43", port))
+time.sleep(0.3)
+sock.sendto(b"bye\n", ("43.43.43.43", port))
+sock.close()
+])
+
+AT_DATA([server.py], [dnl
+import sys
+import time
+
+line = sys.stdin.readline()
+if "bye" in line:
+    time.sleep(1)
+
+sys.stdout.write(line)
+sys.stdout.flush()
+])
+
 dnl Wait for ovn-controller to catch up.
 wait_for_ports_up
 check ovn-nbctl --wait=hv sync
@@ -13322,24 +13348,25 @@ dnl And wait for it to be up and running.
 OVS_WAIT_UNTIL([ovs-ofctl dump-ipfix-flow br-int | grep -q '1 ids'])
 
 dnl Start UDP echo server on vm2.
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 1000], 
[nc-vm2-1000.pid])
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 1010], 
[nc-vm2-1010.pid])
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 2000], 
[nc-vm2-2000.pid])
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 2010], 
[nc-vm2-2010.pid])
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 3000], 
[nc-vm2-3000.pid])
-NETNS_DAEMONIZE([vm2], [nc -e /bin/cat -k -u -v -l -m 1 3010], 
[nc-vm2-3010.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 1000], 
[nc-vm2-1000.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 1010], 
[nc-vm2-1010.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 2000], 
[nc-vm2-2000.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 2010], 
[nc-vm2-2010.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 3000], 
[nc-vm2-3000.pid])
+NETNS_DAEMONIZE([vm2], [nc -e "$PYTHON ./server.py" -k -u -v -l -m 1 3010], 
[nc-vm2-3010.pid])
+NETNS_START_TCPDUMP([vm2], [-i vm2 -vnne], [vm2])
 
 dnl Send traffic (2 packets) to the UDP LB1 (hits the from-lport ACL).
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 1000])
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 1010])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 1000])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 1010])
 
 dnl Send traffic (2 packets) to the UDP LB1 (hits the from-lport after-lb ACL).
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 2000])
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 2010])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 2000])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 2010])
 
 dnl Send traffic (2 packets) to the UDP LB1 (hits the from-lport ACL).
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 3000])
-NS_CHECK_EXEC([vm1], [(echo a; sleep 1; echo a) | nc --send-only -u 
43.43.43.43 3010])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 3000])
+NS_CHECK_EXEC([vm1], [$PYTHON3 ./client.py 3010])
 
 dnl Wait until OVS sampled all expected packets (4 data packets + 1 ICMP
 dnl port unreachable error on each session).
-- 
2.51.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to