- Ensure that dhcpd is started before sending traffic (potential flaky
  tests).
- Fix total_pkts=$(cat pkt.pcap | wc -l) which did not count number of
  packets as using tcpdump -vv.
- Modify NETNS_START_DHCPD to also support ipv4.
- Use created dhcpd.leases file (some tests created it but did not use it).
- Have dhclient related folder in /tmp to avoid writing permission issue.
- Check dhclient pid still exists before trying to kill it when exiting,
  to avoid confusing kill errors.

Fixes: dce4abfc68eb ("northd, tests: DHCP Relay Agent support for overlay IPv4 
subnets.")
Fixes: f9ffb0ee9dd3 ("controller: ACL correctly handles fragmented traffic.")
Signed-off-by: Xavier Simonart <[email protected]>
---
 tests/system-common-macros.at | 37 ++++++++++++++++++------------
 tests/system-ovn.at           | 42 +++++++++++------------------------
 2 files changed, 36 insertions(+), 43 deletions(-)

diff --git a/tests/system-common-macros.at b/tests/system-common-macros.at
index 16c59c3ce..a995af301 100644
--- a/tests/system-common-macros.at
+++ b/tests/system-common-macros.at
@@ -161,23 +161,32 @@ m4_define([NETNS_START_TCPDUMP],
     ]
 )
 
-# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf])
+# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf], [extra_dhcp_args],
+#                   [extra_tcpdump_args])
 #
-# Helper to properly start dhcpd
+# Helper to properly start dhcpd. extra_dhcp_args is optional ("-6" if not set)
+# extra_tcpdump_args is also optional.
 m4_define([NETNS_START_DHCPD],
     [
-        DHCP_TEST_DIR="$ovs_base/dhcp-test"
-        mkdir -p $DHCP_TEST_DIR
-
-        mv $3 $DHCP_TEST_DIR/dhcpd.conf
-
-        touch $DHCP_TEST_DIR/dhcpd.leases
-        chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
-        chmod 775 $DHCP_TEST_DIR
-        chmod 664 $DHCP_TEST_DIR/dhcpd.leases
-
-        NETNS_START_TCPDUMP([$1], [-nni $2], [$1])
-        NETNS_DAEMONIZE([$1], [dhcpd -6 -f -lf $DHCP_TEST_DIR/dhcpd.leases -cf 
$DHCP_TEST_DIR/dhcpd.conf $2 > dhcpd.log 2>&1], [dhcpd.pid])
+        DHCP_MACRO_TEST_DIR="$ovs_base/dhcp-test"
+        dhcp_macro_arg="$4"
+        if test "x$dhcp_macro_arg" = "x"; then
+            EXTRA_DHCP_MACRO_ARGS="-6"
+        else
+            EXTRA_DHCP_MACRO_ARGS="$dhcp_macro_arg"
+        fi
+        mkdir -p $DHCP_MACRO_TEST_DIR
+
+        mv $3 $DHCP_MACRO_TEST_DIR/dhcpd.conf
+
+        touch $DHCP_MACRO_TEST_DIR/dhcpd.leases
+        chown root:dhcpd $DHCP_MACRO_TEST_DIR $DHCP_MACRO_TEST_DIR/dhcpd.leases
+        chmod 775 $DHCP_MACRO_TEST_DIR
+        chmod 664 $DHCP_MACRO_TEST_DIR/dhcpd.leases
+
+        NETNS_START_TCPDUMP([$1], [-nni $2 $5], [$1])
+        NETNS_DAEMONIZE([$1], [dhcpd $EXTRA_DHCP_MACRO_ARGS -d -f -lf 
$DHCP_MACRO_TEST_DIR/dhcpd.leases -cf $DHCP_MACRO_TEST_DIR/dhcpd.conf $2 > 
dhcpd.log 2>&1], [dhcpd.pid])
+        OVS_WAIT_UNTIL([grep -q "Server starting service" dhcpd.log])
     ]
 )
 
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index a4afab4e5..1f227335b 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -12704,6 +12704,7 @@ check ovn-nbctl --wait=hv sync
 
 DHCP_TEST_DIR="/tmp/dhcp-test"
 rm -rf $DHCP_TEST_DIR
+on_exit "rm -rf $DHCP_TEST_DIR"
 mkdir $DHCP_TEST_DIR
 cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
 subnet 172.16.1.0 netmask 255.255.255.0 {
@@ -12723,32 +12724,22 @@ subnet 192.168.2.0 netmask 255.255.255.0 {
   max-lease-time 120;
 }
 EOF
-cat > $DHCP_TEST_DIR/dhclien.conf <<EOF
+cat > $DHCP_TEST_DIR/dhclient.conf <<EOF
 timeout 2
 EOF
 
-touch $DHCP_TEST_DIR/dhcpd.leases
-chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
-chmod 775 $DHCP_TEST_DIR
-chmod 664 $DHCP_TEST_DIR/dhcpd.leases
+NETNS_START_DHCPD([server], [s1], [$DHCP_TEST_DIR/dhcpd.conf], [-4], [-nvv])
 
-
-NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf s1 > 
dhcpd.log 2>&1], [dhcpd.pid])
-
-NS_CHECK_EXEC([server], [tcpdump -l -nvv -i s1  udp > pkt.pcap 2>tcpdump_err 
&])
-OVS_WAIT_UNTIL([grep "listening" tcpdump_err])
-on_exit 'kill $(pidof tcpdump)'
-
-NS_CHECK_EXEC([sw01], [dhclient -1 -q -lf $DHCP_TEST_DIR/dhclient-sw01.lease 
-pf $DHCP_TEST_DIR/dhclient-sw01.pid -cf $DHCP_TEST_DIR/dhclien.conf sw01])
-NS_CHECK_EXEC([sw11], [dhclient -1 -q -lf $DHCP_TEST_DIR/dhclient-sw11.lease 
-pf $DHCP_TEST_DIR/dhclient-sw11.pid -cf $DHCP_TEST_DIR/dhclien.conf sw11])
+NS_CHECK_EXEC([sw01], [dhclient -1 -q -lf $DHCP_TEST_DIR/dhclient-sw01.lease 
-pf $DHCP_TEST_DIR/dhclient-sw01.pid -cf $DHCP_TEST_DIR/dhclient.conf sw01])
+NS_CHECK_EXEC([sw11], [dhclient -1 -q -lf $DHCP_TEST_DIR/dhclient-sw11.lease 
-pf $DHCP_TEST_DIR/dhclient-sw11.pid -cf $DHCP_TEST_DIR/dhclient.conf sw11])
 
 OVS_WAIT_UNTIL([
-    total_pkts=$(cat pkt.pcap | wc -l)
+    total_pkts=$(grep "BOOTP/DHCP" server.tcpdump | wc -l)
     test ${total_pkts} -ge 8
 ])
 
-on_exit 'kill `cat $DHCP_TEST_DIR/dhclient-sw01.pid` &&
-kill `cat $DHCP_TEST_DIR/dhclient-sw11.pid` && rm -rf $DHCP_TEST_DIR'
+on_exit "test -e $DHCP_TEST_DIR/dhclient-sw01.pid && kill \`cat 
$DHCP_TEST_DIR/dhclient-sw01.pid\` 2>/dev/null
+test -e $DHCP_TEST_DIR/dhclient-sw11.pid && kill \`cat 
$DHCP_TEST_DIR/dhclient-sw11.pid\` 2>/dev/null"
 
 NS_CHECK_EXEC([sw01], [ip addr show sw01 | grep -oP 
'(?<=inet\s)\d+(\.\d+){3}'], [0], [dnl
 192.168.1.10
@@ -21558,7 +21549,8 @@ check ovn-nbctl --wait=hv set NB_Global . 
options:acl_ct_translation=true
 check ovn-nbctl --wait=hv sync
 
 # Setup DHCP server configuration.
-DHCP_TEST_DIR="$ovs_base/dhcp-test"
+DHCP_TEST_DIR="/tmp/dhcp-test"
+on_exit "rm -rf $DHCP_TEST_DIR"
 mkdir -p $DHCP_TEST_DIR
 
 cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
@@ -21571,21 +21563,13 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
 }
 EOF
 
-touch $DHCP_TEST_DIR/dhcpd.leases
-chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
-chmod 775 $DHCP_TEST_DIR
-chmod 664 $DHCP_TEST_DIR/dhcpd.leases
-
 # Start dhcpd as DHCP server in the server namespace.
-NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf server > 
$DHCP_TEST_DIR/dhcpd.log 2>&1], [dhcpd.pid])
-
-# Give dhcpd time to start.
-sleep 1
+NETNS_START_DHCPD([server], [server], [$DHCP_TEST_DIR/dhcpd.conf], [-4], [udp])
 
 # Request IP via DHCP using dhclient.
-NS_CHECK_EXEC([client], [dhclient -1 -v -lf $DHCP_TEST_DIR/dhclient.lease -pf 
$DHCP_TEST_DIR/dhclient.pid client], [0], [ignore], [ignore])
+NS_CHECK_EXEC([client], [dhclient -1 -lf $DHCP_TEST_DIR/dhclient.lease -pf 
$DHCP_TEST_DIR/dhclient.pid client])
 # Register cleanup handler to kill dhclient when test exits.
-on_exit 'kill $(cat $DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true'
+on_exit "test -e $DHCP_TEST_DIR/dhclient.pid && kill \$(cat 
$DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true"
 
 # Verify client got an IP address from DHCP.
 NS_CHECK_EXEC([client], [ip addr show client | grep -q "192.168.1.100"], [0])
-- 
2.47.1

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

Reply via email to