- 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