From nobody Sun Apr 28 16:09:54 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a02:cbb9:0:0:0:0:0 with SMTP id v25csp6993595jap; Tue, 14 Dec 2021 03:51:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJyBzdEHBBZ+P3XWvH8QKFcbFmNMa9TMIU5Dt8niDzwHZMDKep2Dpvcvw90rKcYut90QN5U/ X-Received: by 2002:a0c:ef4c:: with SMTP id t12mr4718296qvs.110.1639482673397; Tue, 14 Dec 2021 03:51:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1639482673; cv=none; d=google.com; s=arc-20160816; b=e77EIQ+B+SxFrE69m8uazHGb2HN8qOci1hBZiQI2t0LffExeBOqOzg5aI4+hqHYGjV H7Exy+p7sd2gILNmqvXZ/uQXxvoTgXcb5vPb9DXxChb+vO0tmbFNJGQOGnKutzEbH3y4 1sUNRbZ+eBKDoVKxkExVSQ/VuWVi853IDT8d6Abl6+Emwy3jdL+cehkDlioCNf4roL7M Yzp7A4dQzMBr9utPGAold5Bbx9NKxqCxVFZ7ycXPU8MK4h9gtFlQv9pE0+LL7eoyd7aw MP/cCS00xekCvzVTu2TMsoSv3HGYUMErfoXfJ8XVa/d86rk4yxoON1sFy8uqINf46i63 kc6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:to:from :dkim-signature; bh=lSMEwGthMgqkFa1TrdOq8najZkvnyHTRYcNVSH+uQgI=; b=HsywX8p//nDJyO3iE9SATz4Bum+TqJ8g/90n0t81cM7yV+tIGZ5hMb3R2RCMYP+raT jTeOud9Ul2bKGPnkbhAWPt7e9W/1zwlx9wxxuBAl9loMJ6kpnYYWZDDX5iaA4wtuEIS6 cTRbATEHvaMetKwAYf3f5bqI6mbjNgEkmEPBa2QQcoYdEVKfiOcME3Y19rB3Lz73FBs4 ZoN97gLlitWyLcibOs2VTZzv5thoexXrnd0PGzk0Sw9oZgcSh4kuC2HJJK2D0FRcci3M NvIFGz/FFmgLGssePlcvc+YvBUM52XXoGGFvy0THyaA8mVeRN9Tntkij6pQLW8NyH2d+ TkNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Jt8HFOMN; spf=pass (google.com: domain of mptcp+bounces-2742-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2742-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [2604:1380:1:3600::1]) by mx.google.com with ESMTPS id a15si15197863qvd.41.2021.12.14.03.51.13 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Dec 2021 03:51:13 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-2742-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) client-ip=2604:1380:1:3600::1; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Jt8HFOMN; spf=pass (google.com: domain of mptcp+bounces-2742-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-2742-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id AC7281C08E9 for ; Tue, 14 Dec 2021 11:51:12 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4D9212C80; Tue, 14 Dec 2021 11:51:11 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95C33173 for ; Tue, 14 Dec 2021 11:51:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1639482668; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lSMEwGthMgqkFa1TrdOq8najZkvnyHTRYcNVSH+uQgI=; b=Jt8HFOMNp1Ch/XWeMWM/w4wRX/u+W83HZuMKsOzSRrg1X6dBYLCrxBs2w+KmvlWjXJnjPP DEIap8qFh0U0RvkKLF3gzT27ZBqMNBFEKlZJTjYtqqKE8tQQS9Qf5uuVGOvWzyyGjuSvxs asmg/Qv9PXHD78v/gx7njnZZIbFk5oE= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-118-yYtV6dAfMHykcpoBWwFYpA-1; Tue, 14 Dec 2021 06:51:07 -0500 X-MC-Unique: yYtV6dAfMHykcpoBWwFYpA-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 690A118A0F1B for ; Tue, 14 Dec 2021 11:51:06 +0000 (UTC) Received: from gerbillo.redhat.com (unknown [10.39.194.135]) by smtp.corp.redhat.com (Postfix) with ESMTP id C7AE91002390 for ; Tue, 14 Dec 2021 11:51:05 +0000 (UTC) From: Paolo Abeni To: mptcp@lists.linux.dev Subject: [PATCH v2 mptcp-next] selftests: mptcp: more stable join tests-cases. Date: Tue, 14 Dec 2021 12:51:02 +0100 Message-Id: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=pabeni@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" MPTCP join self-tests are a bit fragile as they reply on delays instead of events to catch-up with the expected sockets states. Replace the delay with state checking where possible and reduce the number of sleeps in the most complex scenarios. This will both reduce the tests run-time and will improve stability. Signed-off-by: Paolo Abeni --- v1 -> v2: - fix ipv6 addr handling --- .../testing/selftests/net/mptcp/mptcp_join.sh | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 8f49bbd4a201..7014391d750e 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -238,6 +238,42 @@ is_v6() [ -z "${1##*:*}" ] } =20 +# $1: ns, $2: port +wait_local_port_listen() +{ + local listener_ns=3D"${1}" + local port=3D"${2}" + + local port_hex i + + port_hex=3D"$(printf "%04X" "${port}")" + for i in $(seq 10); do + ip netns exec "${listener_ns}" cat /proc/net/tcp* | \ + awk "BEGIN {rc=3D1} {if (\$2 ~ /:${port_hex}\$/ && \$4 ~ /0A/) {rc=3D0;= exit}} END {exit rc}" && + break + sleep 0.1 + done +} + +# $1: ns, $2: endpoint id +wait_address_deleted() +{ + local ns=3D"${1}" + local addr=3D"${2}" + local cnt + + # 'ss' will trim everything from the rightmost ':' on looking + # for a trailing port number. Append a colon to avoid ipv6 + # address corruption + is_v6 ${addr} && addr=3D"inet6:$addr:" + + for i in $(seq 10); do + cnt=3D$(ss -HtON ${ns} state big src =3D ${addr} | wc -l) + [ "$cnt" =3D 0 ] || break; + sleep 0.1 + done +} + do_transfer() { listener_ns=3D"$1" @@ -307,7 +343,7 @@ do_transfer() fi spid=3D$! =20 - sleep 1 + wait_local_port_listen "${listener_ns}" "${port}" =20 if [ "$test_link_fail" -eq 0 ];then timeout ${timeout_test} \ @@ -324,10 +360,13 @@ do_transfer() fi cpid=3D$! =20 + # let the mptcp subflow be established in background before + # do endpoint manipulation + [ $addr_nr_ns1 =3D "0" -a $addr_nr_ns2 =3D "0" ] || sleep 1 + if [ $addr_nr_ns1 -gt 0 ]; then let add_nr_ns1=3Daddr_nr_ns1 counter=3D2 - sleep 1 while [ $add_nr_ns1 -gt 0 ]; do local addr if is_v6 "${connect_addr}"; then @@ -339,7 +378,6 @@ do_transfer() let counter+=3D1 let add_nr_ns1-=3D1 done - sleep 1 elif [ $addr_nr_ns1 -lt 0 ]; then let rm_nr_ns1=3D-addr_nr_ns1 if [ $rm_nr_ns1 -lt 8 ]; then @@ -347,22 +385,18 @@ do_transfer() pos=3D1 dump=3D(`ip netns exec ${listener_ns} ./pm_nl_ctl dump`) if [ ${#dump[@]} -gt 0 ]; then - sleep 1 - while [ $counter -le $rm_nr_ns1 ] do id=3D${dump[$pos]} ip netns exec ${listener_ns} ./pm_nl_ctl del $id - sleep 1 + wait_address_deleted ${listener_ns} ${dump[-1]} let counter+=3D1 let pos+=3D5 done fi elif [ $rm_nr_ns1 -eq 8 ]; then - sleep 1 ip netns exec ${listener_ns} ./pm_nl_ctl flush elif [ $rm_nr_ns1 -eq 9 ]; then - sleep 1 ip netns exec ${listener_ns} ./pm_nl_ctl del 0 ${connect_addr} fi fi @@ -373,10 +407,13 @@ do_transfer() addr_nr_ns2=3D${addr_nr_ns2:9} fi =20 + # if newly added endpoints must be deleted, give the background msk + # some time to created them + [ $addr_nr_ns1 -gt 0 -a $addr_nr_ns2 -lt 0 ] && sleep 1 + if [ $addr_nr_ns2 -gt 0 ]; then let add_nr_ns2=3Daddr_nr_ns2 counter=3D3 - sleep 1 while [ $add_nr_ns2 -gt 0 ]; do local addr if is_v6 "${connect_addr}"; then @@ -388,7 +425,6 @@ do_transfer() let counter+=3D1 let add_nr_ns2-=3D1 done - sleep 1 elif [ $addr_nr_ns2 -lt 0 ]; then let rm_nr_ns2=3D-addr_nr_ns2 if [ $rm_nr_ns2 -lt 8 ]; then @@ -396,19 +432,17 @@ do_transfer() pos=3D1 dump=3D(`ip netns exec ${connector_ns} ./pm_nl_ctl dump`) if [ ${#dump[@]} -gt 0 ]; then - sleep 1 - while [ $counter -le $rm_nr_ns2 ] do + # rm_addr are serialized, allow the previous one to complete id=3D${dump[$pos]} ip netns exec ${connector_ns} ./pm_nl_ctl del $id - sleep 1 + wait_address_deleted ${connector_ns} ${dump[-1]} let counter+=3D1 let pos+=3D5 done fi elif [ $rm_nr_ns2 -eq 8 ]; then - sleep 1 ip netns exec ${connector_ns} ./pm_nl_ctl flush elif [ $rm_nr_ns2 -eq 9 ]; then local addr @@ -417,7 +451,6 @@ do_transfer() else addr=3D"10.0.1.2" fi - sleep 1 ip netns exec ${connector_ns} ./pm_nl_ctl del 0 $addr fi fi @@ -1685,7 +1718,7 @@ add_addr_ports_tests() ip netns exec $ns2 ./pm_nl_ctl limits 1 3 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow - run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow + run_tests $ns1 $ns2 10.0.1.1 0 -8 -2 slow chk_join_nr "flush subflows and signal with port" 3 3 3 chk_add_nr 1 1 chk_rm_nr 2 2 --=20 2.33.1