Skip to content

Commit 351a4ff

Browse files
simonartxavieralmusil
authored andcommitted
tests: Fix multiple dhcp tests related issues.
- 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: dce4abf ("northd, tests: DHCP Relay Agent support for overlay IPv4 subnets.") Fixes: f9ffb0e ("controller: ACL correctly handles fragmented traffic.") Signed-off-by: Xavier Simonart <xsimonar@redhat.com> Signed-off-by: Ales Musil <amusil@redhat.com> (cherry picked from commit e52a475)
1 parent ac165c2 commit 351a4ff

2 files changed

Lines changed: 36 additions & 43 deletions

File tree

tests/system-common-macros.at

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -161,23 +161,32 @@ m4_define([NETNS_START_TCPDUMP],
161161
]
162162
)
163163

164-
# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf])
164+
# NETNS_START_DHCPD([namespace], [iface], [dhcpd.conf], [extra_dhcp_args],
165+
# [extra_tcpdump_args])
165166
#
166-
# Helper to properly start dhcpd
167+
# Helper to properly start dhcpd. extra_dhcp_args is optional ("-6" if not set)
168+
# extra_tcpdump_args is also optional.
167169
m4_define([NETNS_START_DHCPD],
168170
[
169-
DHCP_TEST_DIR="$ovs_base/dhcp-test"
170-
mkdir -p $DHCP_TEST_DIR
171-
172-
mv $3 $DHCP_TEST_DIR/dhcpd.conf
173-
174-
touch $DHCP_TEST_DIR/dhcpd.leases
175-
chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
176-
chmod 775 $DHCP_TEST_DIR
177-
chmod 664 $DHCP_TEST_DIR/dhcpd.leases
178-
179-
NETNS_START_TCPDUMP([$1], [-nni $2], [$1])
180-
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])
171+
DHCP_MACRO_TEST_DIR="$ovs_base/dhcp-test"
172+
dhcp_macro_arg="$4"
173+
if test "x$dhcp_macro_arg" = "x"; then
174+
EXTRA_DHCP_MACRO_ARGS="-6"
175+
else
176+
EXTRA_DHCP_MACRO_ARGS="$dhcp_macro_arg"
177+
fi
178+
mkdir -p $DHCP_MACRO_TEST_DIR
179+
180+
mv $3 $DHCP_MACRO_TEST_DIR/dhcpd.conf
181+
182+
touch $DHCP_MACRO_TEST_DIR/dhcpd.leases
183+
chown root:dhcpd $DHCP_MACRO_TEST_DIR $DHCP_MACRO_TEST_DIR/dhcpd.leases
184+
chmod 775 $DHCP_MACRO_TEST_DIR
185+
chmod 664 $DHCP_MACRO_TEST_DIR/dhcpd.leases
186+
187+
NETNS_START_TCPDUMP([$1], [-nni $2 $5], [$1])
188+
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])
189+
OVS_WAIT_UNTIL([grep -q "Server starting service" dhcpd.log])
181190
]
182191
)
183192

tests/system-ovn.at

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -12704,6 +12704,7 @@ check ovn-nbctl --wait=hv sync
1270412704

1270512705
DHCP_TEST_DIR="/tmp/dhcp-test"
1270612706
rm -rf $DHCP_TEST_DIR
12707+
on_exit "rm -rf $DHCP_TEST_DIR"
1270712708
mkdir $DHCP_TEST_DIR
1270812709
cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
1270912710
subnet 172.16.1.0 netmask 255.255.255.0 {
@@ -12723,32 +12724,22 @@ subnet 192.168.2.0 netmask 255.255.255.0 {
1272312724
max-lease-time 120;
1272412725
}
1272512726
EOF
12726-
cat > $DHCP_TEST_DIR/dhclien.conf <<EOF
12727+
cat > $DHCP_TEST_DIR/dhclient.conf <<EOF
1272712728
timeout 2
1272812729
EOF
1272912730

12730-
touch $DHCP_TEST_DIR/dhcpd.leases
12731-
chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
12732-
chmod 775 $DHCP_TEST_DIR
12733-
chmod 664 $DHCP_TEST_DIR/dhcpd.leases
12731+
NETNS_START_DHCPD([server], [s1], [$DHCP_TEST_DIR/dhcpd.conf], [-4], [-nvv])
1273412732

12735-
12736-
NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf s1 > dhcpd.log 2>&1], [dhcpd.pid])
12737-
12738-
NS_CHECK_EXEC([server], [tcpdump -l -nvv -i s1 udp > pkt.pcap 2>tcpdump_err &])
12739-
OVS_WAIT_UNTIL([grep "listening" tcpdump_err])
12740-
on_exit 'kill $(pidof tcpdump)'
12741-
12742-
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])
12743-
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])
12733+
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])
12734+
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])
1274412735

1274512736
OVS_WAIT_UNTIL([
12746-
total_pkts=$(cat pkt.pcap | wc -l)
12737+
total_pkts=$(grep "BOOTP/DHCP" server.tcpdump | wc -l)
1274712738
test ${total_pkts} -ge 8
1274812739
])
1274912740

12750-
on_exit 'kill `cat $DHCP_TEST_DIR/dhclient-sw01.pid` &&
12751-
kill `cat $DHCP_TEST_DIR/dhclient-sw11.pid` && rm -rf $DHCP_TEST_DIR'
12741+
on_exit "test -e $DHCP_TEST_DIR/dhclient-sw01.pid && kill \`cat $DHCP_TEST_DIR/dhclient-sw01.pid\` 2>/dev/null
12742+
test -e $DHCP_TEST_DIR/dhclient-sw11.pid && kill \`cat $DHCP_TEST_DIR/dhclient-sw11.pid\` 2>/dev/null"
1275212743

1275312744
NS_CHECK_EXEC([sw01], [ip addr show sw01 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'], [0], [dnl
1275412745
192.168.1.10
@@ -21276,7 +21267,8 @@ check ovn-nbctl --wait=hv set NB_Global . options:acl_ct_translation=true
2127621267
check ovn-nbctl --wait=hv sync
2127721268

2127821269
# Setup DHCP server configuration.
21279-
DHCP_TEST_DIR="$ovs_base/dhcp-test"
21270+
DHCP_TEST_DIR="/tmp/dhcp-test"
21271+
on_exit "rm -rf $DHCP_TEST_DIR"
2128021272
mkdir -p $DHCP_TEST_DIR
2128121273

2128221274
cat > $DHCP_TEST_DIR/dhcpd.conf <<EOF
@@ -21289,21 +21281,13 @@ subnet 192.168.1.0 netmask 255.255.255.0 {
2128921281
}
2129021282
EOF
2129121283

21292-
touch $DHCP_TEST_DIR/dhcpd.leases
21293-
chown root:dhcpd $DHCP_TEST_DIR $DHCP_TEST_DIR/dhcpd.leases
21294-
chmod 775 $DHCP_TEST_DIR
21295-
chmod 664 $DHCP_TEST_DIR/dhcpd.leases
21296-
2129721284
# Start dhcpd as DHCP server in the server namespace.
21298-
NETNS_DAEMONIZE([server], [dhcpd -4 -f -cf $DHCP_TEST_DIR/dhcpd.conf server > $DHCP_TEST_DIR/dhcpd.log 2>&1], [dhcpd.pid])
21299-
21300-
# Give dhcpd time to start.
21301-
sleep 1
21285+
NETNS_START_DHCPD([server], [server], [$DHCP_TEST_DIR/dhcpd.conf], [-4], [udp])
2130221286

2130321287
# Request IP via DHCP using dhclient.
21304-
NS_CHECK_EXEC([client], [dhclient -1 -v -lf $DHCP_TEST_DIR/dhclient.lease -pf $DHCP_TEST_DIR/dhclient.pid client], [0], [ignore], [ignore])
21288+
NS_CHECK_EXEC([client], [dhclient -1 -lf $DHCP_TEST_DIR/dhclient.lease -pf $DHCP_TEST_DIR/dhclient.pid client])
2130521289
# Register cleanup handler to kill dhclient when test exits.
21306-
on_exit 'kill $(cat $DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true'
21290+
on_exit "test -e $DHCP_TEST_DIR/dhclient.pid && kill \$(cat $DHCP_TEST_DIR/dhclient.pid) 2>/dev/null || true"
2130721291

2130821292
# Verify client got an IP address from DHCP.
2130921293
NS_CHECK_EXEC([client], [ip addr show client | grep -q "192.168.1.100"], [0])

0 commit comments

Comments
 (0)