diff mbox series

[2/2] fstests: add _require_hardlinks for all necessary tests

Message ID 39716adc-c4db-65b3-b3c1-866bf3517d7f@redhat.com (mailing list archive)
State New, archived
Headers show
Series fstests: add/enhance requires tests for hardlinks & softlinks | expand

Commit Message

Eric Sandeen April 9, 2020, 7:10 p.m. UTC
Add a new _require function for hardlinks, to test hardlink support
in all tests which need it.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---

Comments

Zorro Lang April 12, 2020, 7:05 a.m. UTC | #1
On Thu, Apr 09, 2020 at 02:10:36PM -0500, Eric Sandeen wrote:
> Add a new _require function for hardlinks, to test hardlink support
> in all tests which need it.
> 
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
> 
> diff --git a/common/rc b/common/rc
> index 476d3d07..8bb9aa1f 100644
> --- a/common/rc
> +++ b/common/rc
> @@ -3493,6 +3493,18 @@ _require_symlinks()
>  	rm -f $target $link
>  }
>  
> +_require_hardlinks()
> +{
> +	local target=`mktemp -p $TEST_DIR`
> +	local link=`mktemp -p $TEST_DIR -u`
> +	ln `basename $target` $link

I really doubt if it works. Why we need the basename of the $target? It cause we
create a link in *current* directory, and the current directory isn't the
$TEST_DIR.

The _require_symlinks won't fail due to symlink can be created cross filesystems,
but hardlink can't. But that's not the _require_symlinks want to test, right?

So why we need the basename? Please correct me if I'm wrong.

Thanks,
Zorro

> +	if [ "$?" -ne 0 ]; then
> +		rm -f $target
> +		_notrun "No hardlink support"
> +	fi
> +	rm -f $target $link
> +}
> +
>  _require_test_fcntl_advisory_locks()
>  {
>  	[ "$FSTYP" != "cifs" ] && return 0
> diff --git a/tests/generic/002 b/tests/generic/002
> index 575ac42b..480b77bc 100755
> --- a/tests/generic/002
> +++ b/tests/generic/002
> @@ -28,6 +28,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_test
> +_require_hardlinks
>  
>  rm -f $seqres.full
>  
> diff --git a/tests/generic/039 b/tests/generic/039
> index daa2e353..27cd6bf5 100755
> --- a/tests/generic/039
> +++ b/tests/generic/039
> @@ -39,6 +39,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/040 b/tests/generic/040
> index 712ae595..b69d8127 100755
> --- a/tests/generic/040
> +++ b/tests/generic/040
> @@ -44,6 +44,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/041 b/tests/generic/041
> index 8001e8ce..1674d544 100755
> --- a/tests/generic/041
> +++ b/tests/generic/041
> @@ -48,6 +48,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/056 b/tests/generic/056
> index 9caf1166..28920d36 100755
> --- a/tests/generic/056
> +++ b/tests/generic/056
> @@ -37,6 +37,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/057 b/tests/generic/057
> index ba51dbb9..91e1d98e 100755
> --- a/tests/generic/057
> +++ b/tests/generic/057
> @@ -37,6 +37,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/065 b/tests/generic/065
> index d6a1670b..30f3c32e 100755
> --- a/tests/generic/065
> +++ b/tests/generic/065
> @@ -38,6 +38,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/089 b/tests/generic/089
> index 3d608269..52649596 100755
> --- a/tests/generic/089
> +++ b/tests/generic/089
> @@ -36,6 +36,7 @@ addentries()
>  _supported_fs generic
>  _supported_os Linux
>  _require_test
> +_require_hardlinks
>  
>  rm -f $seqres.full
>  [ "X$TEST_DIR" = "X" ] && exit 1
> diff --git a/tests/generic/090 b/tests/generic/090
> index bf38d1c8..db1aeef3 100755
> --- a/tests/generic/090
> +++ b/tests/generic/090
> @@ -36,6 +36,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/104 b/tests/generic/104
> index d78689f4..4b6256db 100755
> --- a/tests/generic/104
> +++ b/tests/generic/104
> @@ -31,6 +31,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/106 b/tests/generic/106
> index 74d5dc30..e1c859e5 100755
> --- a/tests/generic/106
> +++ b/tests/generic/106
> @@ -30,6 +30,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/107 b/tests/generic/107
> index 5c6bbfca..214f3389 100755
> --- a/tests/generic/107
> +++ b/tests/generic/107
> @@ -33,6 +33,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/236 b/tests/generic/236
> index f207165f..2110b053 100755
> --- a/tests/generic/236
> +++ b/tests/generic/236
> @@ -25,8 +25,8 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  
>  # real QA test starts here
>  _supported_fs generic
> -# only Linux supports fallocate
>  _supported_os Linux
> +_require_hardlinks
>  _require_test
>  
>  rm -f $TEST_DIR/ouch*
> diff --git a/tests/generic/336 b/tests/generic/336
> index e007552c..6832ccde 100755
> --- a/tests/generic/336
> +++ b/tests/generic/336
> @@ -32,6 +32,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/343 b/tests/generic/343
> index e35488dd..2034197e 100755
> --- a/tests/generic/343
> +++ b/tests/generic/343
> @@ -32,6 +32,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/378 b/tests/generic/378
> index 393d1ce7..ea776949 100755
> --- a/tests/generic/378
> +++ b/tests/generic/378
> @@ -39,6 +39,7 @@ _supported_fs generic
>  _supported_os Linux
>  _require_test
>  _require_user
> +_require_hardlinks
>  
>  # Setup testfile and its hardlink
>  testfile=$TEST_DIR/testfile.$seq
> diff --git a/tests/generic/480 b/tests/generic/480
> index ba2c34ad..63a87519 100755
> --- a/tests/generic/480
> +++ b/tests/generic/480
> @@ -32,6 +32,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/498 b/tests/generic/498
> index 71f5091c..7adf0b32 100755
> --- a/tests/generic/498
> +++ b/tests/generic/498
> @@ -31,6 +31,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/502 b/tests/generic/502
> index a60ac9a7..a49ee0b3 100755
> --- a/tests/generic/502
> +++ b/tests/generic/502
> @@ -34,6 +34,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/526 b/tests/generic/526
> index d0b51f87..934d263f 100755
> --- a/tests/generic/526
> +++ b/tests/generic/526
> @@ -32,6 +32,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
> diff --git a/tests/generic/527 b/tests/generic/527
> index 61dd4f0b..4b664da9 100755
> --- a/tests/generic/527
> +++ b/tests/generic/527
> @@ -32,6 +32,7 @@ _cleanup()
>  _supported_fs generic
>  _supported_os Linux
>  _require_scratch
> +_require_hardlinks
>  _require_dm_target flakey
>  
>  rm -f $seqres.full
>
Zorro Lang April 13, 2020, 2:53 p.m. UTC | #2
On Mon, Apr 13, 2020 at 08:33:29AM -0500, Eric Sandeen wrote:
> On 4/12/20 2:05 AM, Zorro Lang wrote:
> > On Thu, Apr 09, 2020 at 02:10:36PM -0500, Eric Sandeen wrote:
> >> Add a new _require function for hardlinks, to test hardlink support
> >> in all tests which need it.
> >>
> >> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> >> ---
> >>
> >> diff --git a/common/rc b/common/rc
> >> index 476d3d07..8bb9aa1f 100644
> >> --- a/common/rc
> >> +++ b/common/rc
> >> @@ -3493,6 +3493,18 @@ _require_symlinks()
> >>  	rm -f $target $link
> >>  }
> >>  
> >> +_require_hardlinks()
> >> +{
> >> +	local target=`mktemp -p $TEST_DIR`
> >> +	local link=`mktemp -p $TEST_DIR -u`
> >> +	ln `basename $target` $link
> > 
> > I really doubt if it works. Why we need the basename of the $target? It cause we
> > create a link in *current* directory, and the current directory isn't the
> > $TEST_DIR.
> > 
> > The _require_symlinks won't fail due to symlink can be created cross filesystems,
> > but hardlink can't. But that's not the _require_symlinks want to test, right?
> > 
> > So why we need the basename? Please correct me if I'm wrong.
> 
> Sigh, no I'm wrong.  I just copied _require_symlinks without looking closely, and
> dropped the "-s" for a hardlink.
> 
> I forgot that the argument to ln -s can be an arbitrary relative path,
> 
> "Symbolic links can hold arbitrary text; if later resolved, a relative link is
> interpreted in relation to its parent directory."

Wow, yes! The manual of *ln* talk about that. I even never noticed that :-P
Thanks for telling me about it. So the _require_symlinks is fine, but the
_require_hardlinks need to fixed.

Thanks,
Zorro

> 
> $ mkdir /tmp/test
> $ export TEST_DIR=/tmp/test
> $ target=`mktemp -p $TEST_DIR`
> $ link=`mktemp -p $TEST_DIR -u`
> 
> $ echo $target
> /tmp/test/tmp.zjKtdM7Y0r
> $ echo $link
> /tmp/test/tmp.sdmFq6vyyl
> 
> $ ln -s `basename $target` $link
> 
> $ ls -l /tmp/test
> total 0
> lrwxrwxrwx. 1 sandeen sandeen 14 Apr 13 08:27 tmp.sdmFq6vyyl -> tmp.zjKtdM7Y0r
> -rw-------. 1 sandeen sandeen  0 Apr 13 08:27 tmp.zjKtdM7Y0r
> 
> Thanks for catching this, and sorry for making such a mess of this series.
> 
> -Eric
>
diff mbox series

Patch

diff --git a/common/rc b/common/rc
index 476d3d07..8bb9aa1f 100644
--- a/common/rc
+++ b/common/rc
@@ -3493,6 +3493,18 @@  _require_symlinks()
 	rm -f $target $link
 }
 
+_require_hardlinks()
+{
+	local target=`mktemp -p $TEST_DIR`
+	local link=`mktemp -p $TEST_DIR -u`
+	ln `basename $target` $link
+	if [ "$?" -ne 0 ]; then
+		rm -f $target
+		_notrun "No hardlink support"
+	fi
+	rm -f $target $link
+}
+
 _require_test_fcntl_advisory_locks()
 {
 	[ "$FSTYP" != "cifs" ] && return 0
diff --git a/tests/generic/002 b/tests/generic/002
index 575ac42b..480b77bc 100755
--- a/tests/generic/002
+++ b/tests/generic/002
@@ -28,6 +28,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_test
+_require_hardlinks
 
 rm -f $seqres.full
 
diff --git a/tests/generic/039 b/tests/generic/039
index daa2e353..27cd6bf5 100755
--- a/tests/generic/039
+++ b/tests/generic/039
@@ -39,6 +39,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/040 b/tests/generic/040
index 712ae595..b69d8127 100755
--- a/tests/generic/040
+++ b/tests/generic/040
@@ -44,6 +44,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/041 b/tests/generic/041
index 8001e8ce..1674d544 100755
--- a/tests/generic/041
+++ b/tests/generic/041
@@ -48,6 +48,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/056 b/tests/generic/056
index 9caf1166..28920d36 100755
--- a/tests/generic/056
+++ b/tests/generic/056
@@ -37,6 +37,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/057 b/tests/generic/057
index ba51dbb9..91e1d98e 100755
--- a/tests/generic/057
+++ b/tests/generic/057
@@ -37,6 +37,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/065 b/tests/generic/065
index d6a1670b..30f3c32e 100755
--- a/tests/generic/065
+++ b/tests/generic/065
@@ -38,6 +38,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/089 b/tests/generic/089
index 3d608269..52649596 100755
--- a/tests/generic/089
+++ b/tests/generic/089
@@ -36,6 +36,7 @@  addentries()
 _supported_fs generic
 _supported_os Linux
 _require_test
+_require_hardlinks
 
 rm -f $seqres.full
 [ "X$TEST_DIR" = "X" ] && exit 1
diff --git a/tests/generic/090 b/tests/generic/090
index bf38d1c8..db1aeef3 100755
--- a/tests/generic/090
+++ b/tests/generic/090
@@ -36,6 +36,7 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/104 b/tests/generic/104
index d78689f4..4b6256db 100755
--- a/tests/generic/104
+++ b/tests/generic/104
@@ -31,6 +31,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/106 b/tests/generic/106
index 74d5dc30..e1c859e5 100755
--- a/tests/generic/106
+++ b/tests/generic/106
@@ -30,6 +30,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/107 b/tests/generic/107
index 5c6bbfca..214f3389 100755
--- a/tests/generic/107
+++ b/tests/generic/107
@@ -33,6 +33,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/236 b/tests/generic/236
index f207165f..2110b053 100755
--- a/tests/generic/236
+++ b/tests/generic/236
@@ -25,8 +25,8 @@  trap "_cleanup; exit \$status" 0 1 2 3 15
 
 # real QA test starts here
 _supported_fs generic
-# only Linux supports fallocate
 _supported_os Linux
+_require_hardlinks
 _require_test
 
 rm -f $TEST_DIR/ouch*
diff --git a/tests/generic/336 b/tests/generic/336
index e007552c..6832ccde 100755
--- a/tests/generic/336
+++ b/tests/generic/336
@@ -32,6 +32,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/343 b/tests/generic/343
index e35488dd..2034197e 100755
--- a/tests/generic/343
+++ b/tests/generic/343
@@ -32,6 +32,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/378 b/tests/generic/378
index 393d1ce7..ea776949 100755
--- a/tests/generic/378
+++ b/tests/generic/378
@@ -39,6 +39,7 @@  _supported_fs generic
 _supported_os Linux
 _require_test
 _require_user
+_require_hardlinks
 
 # Setup testfile and its hardlink
 testfile=$TEST_DIR/testfile.$seq
diff --git a/tests/generic/480 b/tests/generic/480
index ba2c34ad..63a87519 100755
--- a/tests/generic/480
+++ b/tests/generic/480
@@ -32,6 +32,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/498 b/tests/generic/498
index 71f5091c..7adf0b32 100755
--- a/tests/generic/498
+++ b/tests/generic/498
@@ -31,6 +31,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/502 b/tests/generic/502
index a60ac9a7..a49ee0b3 100755
--- a/tests/generic/502
+++ b/tests/generic/502
@@ -34,6 +34,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/526 b/tests/generic/526
index d0b51f87..934d263f 100755
--- a/tests/generic/526
+++ b/tests/generic/526
@@ -32,6 +32,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full
diff --git a/tests/generic/527 b/tests/generic/527
index 61dd4f0b..4b664da9 100755
--- a/tests/generic/527
+++ b/tests/generic/527
@@ -32,6 +32,7 @@  _cleanup()
 _supported_fs generic
 _supported_os Linux
 _require_scratch
+_require_hardlinks
 _require_dm_target flakey
 
 rm -f $seqres.full