diff mbox series

[v2,3/3] Add test for NFS directory listing regression

Message ID 20211123151537.14913-3-mdoucha@suse.cz
State Accepted
Headers show
Series [v2,1/3] nfs_lib.sh: Add nfs_get_remote_path() | expand

Commit Message

Martin Doucha Nov. 23, 2021, 3:15 p.m. UTC
---

Changes since v1:
- Replace Bash-style brace expansion with $(seq ...)
- Document command line parameter in usage info

 runtest/net.nfs                           | 11 ++++
 testcases/network/nfs/nfs_stress/Makefile |  3 +-
 testcases/network/nfs/nfs_stress/nfs07.sh | 67 +++++++++++++++++++++++
 3 files changed, 80 insertions(+), 1 deletion(-)
 create mode 100755 testcases/network/nfs/nfs_stress/nfs07.sh

Comments

Petr Vorel Nov. 23, 2021, 7:40 p.m. UTC | #1
Hi Martin,

Reviewed-by: Petr Vorel <pvorel@suse.cz>

> Changes since v1:
> - Replace Bash-style brace expansion with $(seq ...)
> - Document command line parameter in usage info

>  runtest/net.nfs                           | 11 ++++
>  testcases/network/nfs/nfs_stress/Makefile |  3 +-
>  testcases/network/nfs/nfs_stress/nfs07.sh | 67 +++++++++++++++++++++++
>  3 files changed, 80 insertions(+), 1 deletion(-)
>  create mode 100755 testcases/network/nfs/nfs_stress/nfs07.sh

> diff --git a/runtest/net.nfs b/runtest/net.nfs
> index 3df35809a..042c14ce4 100644
> --- a/runtest/net.nfs
> +++ b/runtest/net.nfs
> @@ -61,6 +61,17 @@ nfs01_06  nfs06 -v "3,3,3,4,4,4" -t "udp,udp,tcp,tcp,tcp,tcp"
>  nfs02_06 nfs06 -v "3,4,4.1,4.2,4.2,4.2" -t "udp,tcp,tcp,tcp,tcp,tcp"
>  nfs03_ipv6_06 nfs06 -6 -v "4,4.1,4.1,4.2,4.2,4.2" -t "tcp,tcp,tcp,tcp,tcp,tcp"

> +nfs3_07 nfs07.sh -v 3 -t udp
> +nfs3t_07 nfs07.sh -v 3 -t tcp
> +nfs4_07 nfs07.sh -v 4 -t tcp
> +nfs41_07 nfs07.sh -v 4.1 -t tcp
> +nfs42_07 nfs07.sh -v 4.2 -t tcp
> +nfs3_ipv6_07 nfs07.sh -6 -v 3 -t udp
> +nfs3t_ipv6_07 nfs07.sh -6 -v 3 -t tcp
> +nfs4_ipv6_07 nfs07.sh -6 -v 4 -t tcp
> +nfs41_ipv6_07 nfs07.sh -6 -v 4.1 -t tcp
> +nfs42_ipv6_07 nfs07.sh -6 -v 4.2 -t tcp
> +
>  nfslock3_01 nfslock01 -v 3 -t udp
>  nfslock3t_01 nfslock01 -v 3 -t tcp
>  nfslock4_01 nfslock01 -v 4 -t tcp
> diff --git a/testcases/network/nfs/nfs_stress/Makefile b/testcases/network/nfs/nfs_stress/Makefile
> index 856008ce2..0b7408e29 100644
> --- a/testcases/network/nfs/nfs_stress/Makefile
> +++ b/testcases/network/nfs/nfs_stress/Makefile
> @@ -15,6 +15,7 @@ INSTALL_TARGETS		:= nfs_lib.sh \
>  			   nfs03 \
>  			   nfs04 \
>  			   nfs05 \
> -			   nfs06
> +			   nfs06 \
> +			   nfs07.sh

>  include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/network/nfs/nfs_stress/nfs07.sh b/testcases/network/nfs/nfs_stress/nfs07.sh
> new file mode 100755
> index 000000000..2c04746fa
> --- /dev/null
> +++ b/testcases/network/nfs/nfs_stress/nfs07.sh
> @@ -0,0 +1,67 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# Copyright (c) 2021 SUSE LLC <mdoucha@suse.cz>
> +#
> +#  DESCRIPTION: Create a large number of files and directories on NFS volume.
> +#  Then check whether they can be listed via NFS.
> +
> +FILE_COUNT=5000
> +
> +TST_OPTS="n:"
> +TST_PARSE_ARGS=do_parse_args
> +TST_TESTFUNC="do_test"
> +TST_SETUP="do_setup"
> +
> +do_parse_args()
> +{
> +	case "$1" in
> +	n) FILE_COUNT="$2";;
> +	esac
> +}
> +
> +. nfs_lib.sh
> +
> +TST_USAGE="show_usage"
> +
> +show_usage()
> +{
> +	nfs_usage
> +	echo "-n x    Create x files and x directories, default is 5000"
I'd use $FILE_COUNT (safe to use as help is run before setup, thus -n is not
processed).

> +}
> +
> +do_setup()
> +{
> +	nfs_setup
> +
> +	local rpath=$(nfs_get_remote_path | sed -e 's/%/%%/g')
> +	local file_fmt="$rpath/file%1.0f"
> +	local dir_fmt="$rpath/dir%1.0f"
> +
> +	tst_rhost_run -s -c "touch \$(seq -f \"$file_fmt\" -s ' ' $FILE_COUNT)"
> +	tst_rhost_run -s -c "mkdir \$(seq -f \"$dir_fmt\" -s ' ' $FILE_COUNT)"
+1, very nice

> +}
> +
> +do_test()
> +{
> +	local count
> +
> +	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
typo: s/fitler/filter/

> +	# out potential duplicate filenames returned by buggy NFS
> +	count=`ls | grep '^file' | sort -u | wc -l`
> +
> +	if [ $count -ne $FILE_COUNT ]; then
> +		tst_res TFAIL "Listing files failed: $count != $FILE_COUNT"
> +		return
> +	fi
> +
> +	count=`ls | grep '^dir' | sort -u | wc -l`
> +
> +	if [ $count -ne $FILE_COUNT ]; then
> +		tst_res TFAIL "Listing dirs failed: $count != $FILE_COUNT"
> +		return
> +	fi
> +
> +	tst_res TPASS "All files and directories were correctly listed"
maybe mention $FILE_COUNT?
> +}
> +
> +tst_run

Reviewed-by: Petr Vorel <pvorel@suse.cz>

If you agree, I suggest to merge it with these changes:

diff --git testcases/network/nfs/nfs_stress/nfs07.sh testcases/network/nfs/nfs_stress/nfs07.sh
index 2c04746fa..e44573405 100755
--- testcases/network/nfs/nfs_stress/nfs07.sh
+++ testcases/network/nfs/nfs_stress/nfs07.sh
@@ -26,7 +26,7 @@ TST_USAGE="show_usage"
 show_usage()
 {
 	nfs_usage
-	echo "-n x    Create x files and x directories, default is 5000"
+	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
 }
 
 do_setup()
@@ -45,7 +45,7 @@ do_test()
 {
 	local count
 
-	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
+	# Pass the list of files through `sort -u` in case `ls` doesn't filter
 	# out potential duplicate filenames returned by buggy NFS
 	count=`ls | grep '^file' | sort -u | wc -l`
 
@@ -61,7 +61,7 @@ do_test()
 		return
 	fi
 
-	tst_res TPASS "All files and directories were correctly listed"
+	tst_res TPASS "All $FILE_COUNT files and directories were correctly listed"
 }
 
 tst_run
Martin Doucha Nov. 24, 2021, 9:27 a.m. UTC | #2
On 23. 11. 21 20:40, Petr Vorel wrote:
> If you agree, I suggest to merge it with these changes:
> 
> diff --git testcases/network/nfs/nfs_stress/nfs07.sh testcases/network/nfs/nfs_stress/nfs07.sh
> index 2c04746fa..e44573405 100755
> --- testcases/network/nfs/nfs_stress/nfs07.sh
> +++ testcases/network/nfs/nfs_stress/nfs07.sh
> @@ -26,7 +26,7 @@ TST_USAGE="show_usage"
>  show_usage()
>  {
>  	nfs_usage
> -	echo "-n x    Create x files and x directories, default is 5000"
> +	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
>  }

If you run `nfs07.sh -hn 123`, your version will print that the default
is 123.

>  
>  do_setup()
> @@ -45,7 +45,7 @@ do_test()
>  {
>  	local count
>  
> -	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
> +	# Pass the list of files through `sort -u` in case `ls` doesn't filter
>  	# out potential duplicate filenames returned by buggy NFS
>  	count=`ls | grep '^file' | sort -u | wc -l`
>  
> @@ -61,7 +61,7 @@ do_test()
>  		return
>  	fi
>  
> -	tst_res TPASS "All files and directories were correctly listed"
> +	tst_res TPASS "All $FILE_COUNT files and directories were correctly listed"
>  }

That would make the line over 80 characters and the number isn't that
important. Let's fix just the "fitler" typo.
Petr Vorel Nov. 24, 2021, 9:50 a.m. UTC | #3
Hi Martin,

> > -	echo "-n x    Create x files and x directories, default is 5000"
> > +	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
> >  }

> If you run `nfs07.sh -hn 123`, your version will print that the default
> is 123.

Out of curiosity (as it's not anything important) not sure what's wrong on my
side (I tested it before I suggested it, I also reinstalled LTP to make sure
it's updated), but it works as expected:

# PATH="/opt/ltp/testcases/bin:$PATH" ./nfs07.sh -hn 123
nfs07 1 TINFO: initialize 'lhost' 'ltp_ns_veth2' interface
nfs07 1 TINFO: add local addr 10.0.0.2/24
nfs07 1 TINFO: add local addr fd00:1:1:1::2/64
nfs07 1 TINFO: initialize 'rhost' 'ltp_ns_veth1' interface
nfs07 1 TINFO: add remote addr 10.0.0.1/24
nfs07 1 TINFO: add remote addr fd00:1:1:1::1/64
nfs07 1 TINFO: Network config (local -- remote):
nfs07 1 TINFO: ltp_ns_veth2 -- ltp_ns_veth1
nfs07 1 TINFO: 10.0.0.2/24 -- 10.0.0.1/24
nfs07 1 TINFO: fd00:1:1:1::2/64 -- fd00:1:1:1::1/64
-t x    Socket type, tcp or udp, default is udp
-v x    NFS version, default is '3'
-n x    Create x files and x directories, default is 5000
-h      Prints this help
-i n    Execute test n times

> >  do_setup()
> > @@ -45,7 +45,7 @@ do_test()
> >  {
> >  	local count

> > -	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
> > +	# Pass the list of files through `sort -u` in case `ls` doesn't filter
> >  	# out potential duplicate filenames returned by buggy NFS
> >  	count=`ls | grep '^file' | sort -u | wc -l`

> > @@ -61,7 +61,7 @@ do_test()
> >  		return
> >  	fi

> > -	tst_res TPASS "All files and directories were correctly listed"
> > +	tst_res TPASS "All $FILE_COUNT files and directories were correctly listed"
> >  }

> That would make the line over 80 characters and the number isn't that
> important. Let's fix just the "fitler" typo.
I don't consider 80 as an issue as long as it's not over 100 chars (barier
increased also in mainline checkpatch.pl), but sure, these are really minor
issues, thus agree to fix just the typo.

Waiting little longer if Alexey has any comments and then merge.

Thanks a lot for very useful test case!

Kind regards,
Petr
Martin Doucha Nov. 24, 2021, 10:06 a.m. UTC | #4
On 24. 11. 21 10:50, Petr Vorel wrote:
> Hi Martin,
> 
>>> -	echo "-n x    Create x files and x directories, default is 5000"
>>> +	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
>>>  }
> 
>> If you run `nfs07.sh -hn 123`, your version will print that the default
>> is 123.
> 
> Out of curiosity (as it's not anything important) not sure what's wrong on my
> side (I tested it before I suggested it, I also reinstalled LTP to make sure
> it's updated), but it works as expected:

Ah, sorry, I've put the arguments in the wrong order.
`nfs07.sh -n 123 -h` will overwrite $FILE_COUNT before printing usage info.
Petr Vorel Nov. 24, 2021, 10:27 a.m. UTC | #5
> On 24. 11. 21 10:50, Petr Vorel wrote:
> > Hi Martin,

> >>> -	echo "-n x    Create x files and x directories, default is 5000"
> >>> +	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
> >>>  }

> >> If you run `nfs07.sh -hn 123`, your version will print that the default
> >> is 123.

> > Out of curiosity (as it's not anything important) not sure what's wrong on my
> > side (I tested it before I suggested it, I also reinstalled LTP to make sure
> > it's updated), but it works as expected:

> Ah, sorry, I've put the arguments in the wrong order.
> `nfs07.sh -n 123 -h` will overwrite $FILE_COUNT before printing usage info.

Ah, correct, thanks! I should have figured this out myself.

Kind regards,
Petr
Alexey Kodanev Nov. 24, 2021, 2:07 p.m. UTC | #6
On 24.11.2021 12:50, Petr Vorel wrote:
> Hi Martin,
> 
>>> -	echo "-n x    Create x files and x directories, default is 5000"
>>> +	echo "-n x    Create x files and x directories, default is $FILE_COUNT"
>>>  }
> 
>> If you run `nfs07.sh -hn 123`, your version will print that the default
>> is 123.
> 
> Out of curiosity (as it's not anything important) not sure what's wrong on my
> side (I tested it before I suggested it, I also reinstalled LTP to make sure
> it's updated), but it works as expected:
> 
> # PATH="/opt/ltp/testcases/bin:$PATH" ./nfs07.sh -hn 123
> nfs07 1 TINFO: initialize 'lhost' 'ltp_ns_veth2' interface
> nfs07 1 TINFO: add local addr 10.0.0.2/24
> nfs07 1 TINFO: add local addr fd00:1:1:1::2/64
> nfs07 1 TINFO: initialize 'rhost' 'ltp_ns_veth1' interface
> nfs07 1 TINFO: add remote addr 10.0.0.1/24
> nfs07 1 TINFO: add remote addr fd00:1:1:1::1/64
> nfs07 1 TINFO: Network config (local -- remote):
> nfs07 1 TINFO: ltp_ns_veth2 -- ltp_ns_veth1
> nfs07 1 TINFO: 10.0.0.2/24 -- 10.0.0.1/24
> nfs07 1 TINFO: fd00:1:1:1::2/64 -- fd00:1:1:1::1/64
> -t x    Socket type, tcp or udp, default is udp
> -v x    NFS version, default is '3'
> -n x    Create x files and x directories, default is 5000
> -h      Prints this help
> -i n    Execute test n times
> 
>>>  do_setup()
>>> @@ -45,7 +45,7 @@ do_test()
>>>  {
>>>  	local count
> 
>>> -	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
>>> +	# Pass the list of files through `sort -u` in case `ls` doesn't filter
>>>  	# out potential duplicate filenames returned by buggy NFS
>>>  	count=`ls | grep '^file' | sort -u | wc -l`
> 
>>> @@ -61,7 +61,7 @@ do_test()
>>>  		return
>>>  	fi
> 
>>> -	tst_res TPASS "All files and directories were correctly listed"
>>> +	tst_res TPASS "All $FILE_COUNT files and directories were correctly listed"
>>>  }
> 
>> That would make the line over 80 characters and the number isn't that
>> important. Let's fix just the "fitler" typo.
> I don't consider 80 as an issue as long as it's not over 100 chars (barier
> increased also in mainline checkpatch.pl), but sure, these are really minor
> issues, thus agree to fix just the typo.
> 
> Waiting little longer if Alexey has any comments and then merge.

Hi Petr, Martin

Overall the new test looks good, and I would only replace the old style
command substitution count=`ls ...` with count=$(ls ...).

Thanks,
Alexey

> 
> Thanks a lot for very useful test case!
> 
> Kind regards,
> Petr
>
Martin Doucha Nov. 24, 2021, 2:12 p.m. UTC | #7
On 24. 11. 21 15:07, Alexey Kodanev wrote:
> Hi Petr, Martin
> 
> Overall the new test looks good, and I would only replace the old style
> command substitution count=`ls ...` with count=$(ls ...).

Good idea.
Petr Vorel Nov. 25, 2021, 11:06 a.m. UTC | #8
Hi Martin, Alexey,

> On 24. 11. 21 15:07, Alexey Kodanev wrote:
> > Hi Petr, Martin

> > Overall the new test looks good, and I would only replace the old style
> > command substitution count=`ls ...` with count=$(ls ...).
+1, thanks for a review.

> Good idea.

I'll do that before merging this (later today).

Kind regards,
Petr
Petr Vorel Nov. 25, 2021, 1:27 p.m. UTC | #9
Hi Martin, Alexey,

FYI merged. Thanks!

Kind regards,
Petr
diff mbox series

Patch

diff --git a/runtest/net.nfs b/runtest/net.nfs
index 3df35809a..042c14ce4 100644
--- a/runtest/net.nfs
+++ b/runtest/net.nfs
@@ -61,6 +61,17 @@  nfs01_06  nfs06 -v "3,3,3,4,4,4" -t "udp,udp,tcp,tcp,tcp,tcp"
 nfs02_06 nfs06 -v "3,4,4.1,4.2,4.2,4.2" -t "udp,tcp,tcp,tcp,tcp,tcp"
 nfs03_ipv6_06 nfs06 -6 -v "4,4.1,4.1,4.2,4.2,4.2" -t "tcp,tcp,tcp,tcp,tcp,tcp"
 
+nfs3_07 nfs07.sh -v 3 -t udp
+nfs3t_07 nfs07.sh -v 3 -t tcp
+nfs4_07 nfs07.sh -v 4 -t tcp
+nfs41_07 nfs07.sh -v 4.1 -t tcp
+nfs42_07 nfs07.sh -v 4.2 -t tcp
+nfs3_ipv6_07 nfs07.sh -6 -v 3 -t udp
+nfs3t_ipv6_07 nfs07.sh -6 -v 3 -t tcp
+nfs4_ipv6_07 nfs07.sh -6 -v 4 -t tcp
+nfs41_ipv6_07 nfs07.sh -6 -v 4.1 -t tcp
+nfs42_ipv6_07 nfs07.sh -6 -v 4.2 -t tcp
+
 nfslock3_01 nfslock01 -v 3 -t udp
 nfslock3t_01 nfslock01 -v 3 -t tcp
 nfslock4_01 nfslock01 -v 4 -t tcp
diff --git a/testcases/network/nfs/nfs_stress/Makefile b/testcases/network/nfs/nfs_stress/Makefile
index 856008ce2..0b7408e29 100644
--- a/testcases/network/nfs/nfs_stress/Makefile
+++ b/testcases/network/nfs/nfs_stress/Makefile
@@ -15,6 +15,7 @@  INSTALL_TARGETS		:= nfs_lib.sh \
 			   nfs03 \
 			   nfs04 \
 			   nfs05 \
-			   nfs06
+			   nfs06 \
+			   nfs07.sh
 
 include $(top_srcdir)/include/mk/generic_leaf_target.mk
diff --git a/testcases/network/nfs/nfs_stress/nfs07.sh b/testcases/network/nfs/nfs_stress/nfs07.sh
new file mode 100755
index 000000000..2c04746fa
--- /dev/null
+++ b/testcases/network/nfs/nfs_stress/nfs07.sh
@@ -0,0 +1,67 @@ 
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) 2021 SUSE LLC <mdoucha@suse.cz>
+#
+#  DESCRIPTION: Create a large number of files and directories on NFS volume.
+#  Then check whether they can be listed via NFS.
+
+FILE_COUNT=5000
+
+TST_OPTS="n:"
+TST_PARSE_ARGS=do_parse_args
+TST_TESTFUNC="do_test"
+TST_SETUP="do_setup"
+
+do_parse_args()
+{
+	case "$1" in
+	n) FILE_COUNT="$2";;
+	esac
+}
+
+. nfs_lib.sh
+
+TST_USAGE="show_usage"
+
+show_usage()
+{
+	nfs_usage
+	echo "-n x    Create x files and x directories, default is 5000"
+}
+
+do_setup()
+{
+	nfs_setup
+
+	local rpath=$(nfs_get_remote_path | sed -e 's/%/%%/g')
+	local file_fmt="$rpath/file%1.0f"
+	local dir_fmt="$rpath/dir%1.0f"
+
+	tst_rhost_run -s -c "touch \$(seq -f \"$file_fmt\" -s ' ' $FILE_COUNT)"
+	tst_rhost_run -s -c "mkdir \$(seq -f \"$dir_fmt\" -s ' ' $FILE_COUNT)"
+}
+
+do_test()
+{
+	local count
+
+	# Pass the list of files through `sort -u` in case `ls` doesn't fitler
+	# out potential duplicate filenames returned by buggy NFS
+	count=`ls | grep '^file' | sort -u | wc -l`
+
+	if [ $count -ne $FILE_COUNT ]; then
+		tst_res TFAIL "Listing files failed: $count != $FILE_COUNT"
+		return
+	fi
+
+	count=`ls | grep '^dir' | sort -u | wc -l`
+
+	if [ $count -ne $FILE_COUNT ]; then
+		tst_res TFAIL "Listing dirs failed: $count != $FILE_COUNT"
+		return
+	fi
+
+	tst_res TPASS "All files and directories were correctly listed"
+}
+
+tst_run