All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hangbin Liu <liuhangbin@gmail.com>
To: thinker.li@gmail.com
Cc: netdev@vger.kernel.org, martin.lau@linux.dev,
	kernel-team@meta.com, davem@davemloft.net, kuba@kernel.org,
	pabeni@redhat.com, dsahern@kernel.org, edumazet@google.com,
	sinquersw@gmail.com, kuifeng@meta.com
Subject: Re: [PATCH net-next v3 2/2] selftests: fib_tests: Add tests for toggling between w/ and w/o expires.
Date: Thu, 14 Dec 2023 11:32:13 +0800	[thread overview]
Message-ID: <ZXp3PYOBji7AArUG@Laptop-X1> (raw)
In-Reply-To: <20231213213735.434249-3-thinker.li@gmail.com>

Hi Kui-Feng,

On Wed, Dec 13, 2023 at 01:37:35PM -0800, thinker.li@gmail.com wrote:
> From: Kui-Feng Lee <thinker.li@gmail.com>
> 
> Make sure that toggling routes between w/ expires and w/o expires works
> properly with GC list.
> 
> When a route with expires is replaced by a permanent route, the entry
> should be removed from the gc list. When a permanent routes is replaced by
> a temporary route, the new entry should be added to the gc list. The new
> tests check if these basic operators work properly.
> 
> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
> Cc: Hangbin Liu <liuhangbin@gmail.com>
> ---
>  tools/testing/selftests/net/fib_tests.sh | 82 +++++++++++++++++++++++-
>  1 file changed, 80 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/net/fib_tests.sh b/tools/testing/selftests/net/fib_tests.sh
> index 66d0db7a2614..337d0febd796 100755
> --- a/tools/testing/selftests/net/fib_tests.sh
> +++ b/tools/testing/selftests/net/fib_tests.sh
> @@ -785,6 +785,8 @@ fib6_gc_test()
>  	    ret=0
>  	fi
>  
> +	log_test $ret 0 "ipv6 route garbage collection"

If the ret doesn't affect the later tests. You can simple do like:

if [ $N_EXP_SLEEP -ne 0 ]; then
	log_test 1 0 "fib6_gc: expected 0 routes with expires, got $N_EXP_SLEEP"
fi

> +
>  	# Permanent routes
>  	for i in $(seq 1 5000); do
>  	    $IP -6 route add 2001:30::$i \
> @@ -806,9 +808,85 @@ fib6_gc_test()
>  	    ret=0
>  	fi
>  
> -	set +e
> +	log_test $ret 0 "ipv6 route garbage collection (with permanent routes)"
>  
> -	log_test $ret 0 "ipv6 route garbage collection"
> +	# Delete permanent routes
> +	for i in $(seq 1 5000); do
> +	    $IP -6 route del 2001:30::$i \
> +		via 2001:10::2 dev dummy_10
> +	done
> +
> +	# Permanent routes
> +	for i in $(seq 1 100); do
> +	    # Expire route after $EXPIRE seconds

            ^^ These are permanent routes, no expires

> +	    $IP -6 route add 2001:20::$i \
> +		via 2001:10::2 dev dummy_10
> +	done
> +	# Replace with temporary routes
> +	for i in $(seq 1 100); do
> +	    # Expire route after $EXPIRE seconds
> +	    $IP -6 route replace 2001:20::$i \
> +		via 2001:10::2 dev dummy_10 expires $EXPIRE
> +	done
> +	N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
> +	if [ $N_EXP_SLEEP -ne 100 ]; then
> +	    echo "FAIL: expected 100 routes with expires, got $N_EXP_SLEEP"
> +	    ret=1
> +	else
> +	    ret=0
> +	fi
> +
> +	if [ $ret -eq 0 ]; then

All these if/else ret setting/checking looks redundant. Either we can just return
when one test failed (so there is no need to check if $ret -eq 0).

if [ $N_EXP_SLEEP -ne 100 ]; then
	log_test 1 0 "fib6_gc: replace permanent to temporary: expected 100 routes with expires, got $N_EXP_SLEEP"
	cleanup &> /dev/null
	return
fi

Or, use different subnet for testing. So the next one doesn't affect the
previous test. Then there is no need to call "cleanup && return" for every
failed check. e.g.

do temporary route test with 2001:20:: subnet
if [ $N_EXP_SLEEP -ne 0 ]; then
    log_test 1 0 "some log info"
fi

do permanent route + temp route with 2001:30:: subnet
if [ $N_EXP_SLEEP -ne 0 ]; then
    log_test 1 0 "some log info"
fi
(Here we'd better remove the 5000 permanent route :), or just del and re-add
the interface directly.)

do permanent route with replace to temp route with 2001:40:: subnet
if [ $N_EXP_SLEEP -ne 100 ]; then
    log_test 1 0 "some log info"
else
   sleep and recheck the route number
fi

etc.

> +	    sleep $(($EXPIRE * 2 + 1))
> +	    N_EXP_SLEEP=$($IP -6 route list |grep expires|wc -l)
> +	    if [ $N_EXP_SLEEP -ne 0 ]; then
> +		echo "FAIL: expected 0 routes with expires," \
> +		     "got $N_EXP_SLEEP"
> +		ret=1
> +	    else
> +		ret=0
> +	    fi
> +	fi
> +
> +	if [ $ret -eq 0 ]; then
> +	    PERM_BASE=$($IP -6 route list |grep -v expires|wc -l)
> +	    # Temporary routes
> +	    for i in $(seq 1 100); do
> +		# Expire route after $EXPIRE seconds
> +		$IP -6 route add 2001:20::$i \
> +		    via 2001:10::2 dev dummy_10 expires $EXPIRE
> +	    done
> +	    # Replace with permanent routes
> +	    for i in $(seq 1 100); do
> +		# Expire route after $EXPIRE seconds

                ^^ These are permanent routes.

Thanks
Hangbin

      reply	other threads:[~2023-12-14  3:32 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-13 21:37 [PATCH net-next v3 0/2] Fix dangling pointer at f6i->gc_link thinker.li
2023-12-13 21:37 ` [PATCH net-next v3 1/2] net/ipv6: insert a f6i to a GC list only if the f6i is in a fib6_table tree thinker.li
2023-12-14  6:11   ` David Ahern
2023-12-14 23:43     ` Kui-Feng Lee
2023-12-15 19:12     ` Kui-Feng Lee
2023-12-16 18:36       ` David Ahern
2023-12-18  1:05         ` Kui-Feng Lee
2023-12-18  1:16       ` Kui-Feng Lee
2023-12-13 21:37 ` [PATCH net-next v3 2/2] selftests: fib_tests: Add tests for toggling between w/ and w/o expires thinker.li
2023-12-14  3:32   ` Hangbin Liu [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZXp3PYOBji7AArUG@Laptop-X1 \
    --to=liuhangbin@gmail.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@kernel.org \
    --cc=edumazet@google.com \
    --cc=kernel-team@meta.com \
    --cc=kuba@kernel.org \
    --cc=kuifeng@meta.com \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sinquersw@gmail.com \
    --cc=thinker.li@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.