This patch added the backup testcase using an address with a port number.
The original backup tests only work for the output of 'pm_nl_ctl dump'
without the port number. It chooses the last item in the dump to parse
the address in it, and in this case, the address is showed at the end
of the item.
But it dosen't work for the dump with the port number, in this case, the
port number is showed at the end of the item, not the address.
This patch implemented a more flexible approach to get the address and
the port number from the dump to fit for the port number case.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/net/mptcp/mptcp_join.sh | 46 +++++++++++++++++--
1 file changed, 41 insertions(+), 5 deletions(-)
diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh
index 25725be98342..39dffde68ae2 100755
--- a/tools/testing/selftests/net/mptcp/mptcp_join.sh
+++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh
@@ -239,6 +239,16 @@ is_v6()
[ -z "${1##*:*}" ]
}
+is_addr()
+{
+ [ -z "${1##*[.:]*}" ]
+}
+
+is_number()
+{
+ [[ $1 == ?(-)+([0-9]) ]]
+}
+
# $1: ns, $2: port
wait_local_port_listen()
{
@@ -464,11 +474,27 @@ do_transfer()
if [ ! -z $sflags ]; then
sleep 1
for netns in "$ns1" "$ns2"; do
- dump=(`ip netns exec $netns ./pm_nl_ctl dump`)
- if [ ${#dump[@]} -gt 0 ]; then
- addr=${dump[${#dump[@]} - 1]}
- ip netns exec $netns ./pm_nl_ctl set $addr flags $sflags
- fi
+ ip netns exec $netns ./pm_nl_ctl dump | while read line; do
+ local arr=($line)
+ local addr
+ local port=0
+ local _port=""
+
+ for i in ${arr[@]}; do
+ if is_addr $i; then
+ addr=$i
+ fi
+ if is_number $i; then
+ if [ $i -gt 10000 ]; then
+ port=$i
+ fi
+ fi
+ done
+ if [ $port -gt 0 ]; then
+ _port="port $port"
+ fi
+ ip netns exec $netns ./pm_nl_ctl set $addr flags $sflags $_port
+ done
done
fi
@@ -1651,6 +1677,16 @@ backup_tests()
chk_add_nr 1 1
chk_prio_nr 1 0
chk_rm_nr 0 0
+
+ # single address with port, backup
+ reset
+ ip netns exec $ns1 ./pm_nl_ctl limits 0 1
+ ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100
+ ip netns exec $ns2 ./pm_nl_ctl limits 1 1
+ run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
+ chk_join_nr "single address with port, backup" 1 1 1
+ chk_add_nr 1 1
+ chk_prio_nr 1 0
}
add_addr_ports_tests()
--
2.31.1
On Thu, 13 Jan 2022, Geliang Tang wrote: > This patch added the backup testcase using an address with a port number. > > The original backup tests only work for the output of 'pm_nl_ctl dump' > without the port number. It chooses the last item in the dump to parse > the address in it, and in this case, the address is showed at the end > of the item. > > But it dosen't work for the dump with the port number, in this case, the > port number is showed at the end of the item, not the address. > > This patch implemented a more flexible approach to get the address and > the port number from the dump to fit for the port number case. > > Signed-off-by: Geliang Tang <geliang.tang@suse.com> > --- > .../testing/selftests/net/mptcp/mptcp_join.sh | 46 +++++++++++++++++-- > 1 file changed, 41 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh > index 25725be98342..39dffde68ae2 100755 > --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh > +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh > @@ -239,6 +239,16 @@ is_v6() > [ -z "${1##*:*}" ] > } > > +is_addr() > +{ > + [ -z "${1##*[.:]*}" ] > +} > + > +is_number() > +{ > + [[ $1 == ?(-)+([0-9]) ]] > +} > + > # $1: ns, $2: port > wait_local_port_listen() > { > @@ -464,11 +474,27 @@ do_transfer() > if [ ! -z $sflags ]; then > sleep 1 > for netns in "$ns1" "$ns2"; do > - dump=(`ip netns exec $netns ./pm_nl_ctl dump`) > - if [ ${#dump[@]} -gt 0 ]; then > - addr=${dump[${#dump[@]} - 1]} > - ip netns exec $netns ./pm_nl_ctl set $addr flags $sflags > - fi > + ip netns exec $netns ./pm_nl_ctl dump | while read line; do > + local arr=($line) > + local addr > + local port=0 > + local _port="" > + > + for i in ${arr[@]}; do > + if is_addr $i; then > + addr=$i > + fi > + if is_number $i; then > + if [ $i -gt 10000 ]; then Why this check for > 10000? I assume it's because the expected port numbers are assumed to be 10000+$TEST_COUNT but it would help to explain in a comment. -Mat > + port=$i > + fi > + fi > + done > + if [ $port -gt 0 ]; then > + _port="port $port" > + fi > + ip netns exec $netns ./pm_nl_ctl set $addr flags $sflags $_port > + done > done > fi > > @@ -1651,6 +1677,16 @@ backup_tests() > chk_add_nr 1 1 > chk_prio_nr 1 0 > chk_rm_nr 0 0 > + > + # single address with port, backup > + reset > + ip netns exec $ns1 ./pm_nl_ctl limits 0 1 > + ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal port 10100 > + ip netns exec $ns2 ./pm_nl_ctl limits 1 1 > + run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup > + chk_join_nr "single address with port, backup" 1 1 1 > + chk_add_nr 1 1 > + chk_prio_nr 1 0 > } > > add_addr_ports_tests() > -- > 2.31.1 > > > -- Mat Martineau Intel
© 2016 - 2022 Red Hat, Inc.