mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
common: check if a given rename flag is supported in _require_renameat2
Some testcases may require a special rename flag, such as RENAME_WHITEOUT, so add support check for if a given rename flag is supported in _require_renameat2. [Eryu: rename the helper to _require_renameat2 while we're at it, and add 'exchange' check to generic/398 and generic/419] Signed-off-by: kaixuxia <kaixuxia@tencent.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
+31
-2
@@ -101,12 +101,41 @@ _rename_tests()
|
|||||||
#
|
#
|
||||||
# This checks whether the renameat2 syscall is supported
|
# This checks whether the renameat2 syscall is supported
|
||||||
#
|
#
|
||||||
_requires_renameat2()
|
_require_renameat2()
|
||||||
{
|
{
|
||||||
|
local flags=$1
|
||||||
|
local rename_dir=$TEST_DIR/$$
|
||||||
|
local cmd=""
|
||||||
|
|
||||||
if test ! -x src/renameat2; then
|
if test ! -x src/renameat2; then
|
||||||
_notrun "renameat2 binary not found"
|
_notrun "renameat2 binary not found"
|
||||||
fi
|
fi
|
||||||
if ! src/renameat2 -t; then
|
|
||||||
|
mkdir $rename_dir
|
||||||
|
touch $rename_dir/foo
|
||||||
|
case $flags in
|
||||||
|
"noreplace")
|
||||||
|
cmd="-n $rename_dir/foo $rename_dir/bar"
|
||||||
|
;;
|
||||||
|
"exchange")
|
||||||
|
touch $rename_dir/bar
|
||||||
|
cmd="-x $rename_dir/foo $rename_dir/bar"
|
||||||
|
;;
|
||||||
|
"whiteout")
|
||||||
|
touch $rename_dir/bar
|
||||||
|
cmd="-w $rename_dir/foo $rename_dir/bar"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
cmd=""
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
rm -rf $rename_dir
|
||||||
|
_fail "_require_renameat2: only support noreplace,exchange,whiteout rename flags"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if ! src/renameat2 -t $cmd; then
|
||||||
|
rm -rf $rename_dir
|
||||||
_notrun "kernel doesn't support renameat2 syscall"
|
_notrun "kernel doesn't support renameat2 syscall"
|
||||||
fi
|
fi
|
||||||
|
rm -rf $rename_dir
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ _supported_fs generic
|
|||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
|
|
||||||
_require_test
|
_require_test
|
||||||
_requires_renameat2
|
_require_renameat2
|
||||||
_require_test_symlinks
|
_require_test_symlinks
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
|
|||||||
+3
-10
@@ -29,20 +29,13 @@ _supported_fs generic
|
|||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
|
|
||||||
_require_test
|
_require_test
|
||||||
_requires_renameat2
|
_require_renameat2 noreplace
|
||||||
_require_test_symlinks
|
_require_test_symlinks
|
||||||
|
|
||||||
rename_dir=$TEST_DIR/$$
|
|
||||||
mkdir $rename_dir
|
|
||||||
touch $rename_dir/foo
|
|
||||||
if ! src/renameat2 -t -n $rename_dir/foo $rename_dir/bar; then
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir
|
|
||||||
_notrun "fs doesn't support RENAME_NOREPLACE"
|
|
||||||
fi
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar
|
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
|
|
||||||
|
rename_dir=$TEST_DIR/$$
|
||||||
|
mkdir $rename_dir
|
||||||
_rename_tests $rename_dir -n
|
_rename_tests $rename_dir -n
|
||||||
rmdir $rename_dir
|
rmdir $rename_dir
|
||||||
|
|
||||||
|
|||||||
+3
-10
@@ -29,20 +29,13 @@ _supported_fs generic
|
|||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
|
|
||||||
_require_test
|
_require_test
|
||||||
_requires_renameat2
|
_require_renameat2 exchange
|
||||||
_require_test_symlinks
|
_require_test_symlinks
|
||||||
|
|
||||||
rename_dir=$TEST_DIR/$$
|
|
||||||
mkdir $rename_dir
|
|
||||||
touch $rename_dir/foo $rename_dir/bar
|
|
||||||
if ! src/renameat2 -t -x $rename_dir/foo $rename_dir/bar; then
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir
|
|
||||||
_notrun "fs doesn't support RENAME_EXCHANGE"
|
|
||||||
fi
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar
|
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
|
|
||||||
|
rename_dir=$TEST_DIR/$$
|
||||||
|
mkdir $rename_dir
|
||||||
_rename_tests $rename_dir -x
|
_rename_tests $rename_dir -x
|
||||||
rmdir $rename_dir
|
rmdir $rename_dir
|
||||||
|
|
||||||
|
|||||||
+3
-10
@@ -29,20 +29,13 @@ _supported_fs generic
|
|||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
|
|
||||||
_require_test
|
_require_test
|
||||||
_requires_renameat2
|
_require_renameat2 whiteout
|
||||||
_require_test_symlinks
|
_require_test_symlinks
|
||||||
|
|
||||||
rename_dir=$TEST_DIR/$$
|
|
||||||
mkdir $rename_dir
|
|
||||||
touch $rename_dir/foo $rename_dir/bar
|
|
||||||
if ! src/renameat2 -t -w $rename_dir/foo $rename_dir/bar; then
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar; rmdir $rename_dir
|
|
||||||
_notrun "fs doesn't support RENAME_WHITEOUT"
|
|
||||||
fi
|
|
||||||
rm -f $rename_dir/foo $rename_dir/bar
|
|
||||||
|
|
||||||
# real QA test starts here
|
# real QA test starts here
|
||||||
|
|
||||||
|
rename_dir=$TEST_DIR/$$
|
||||||
|
mkdir $rename_dir
|
||||||
_rename_tests $rename_dir -w
|
_rename_tests $rename_dir -w
|
||||||
rmdir $rename_dir
|
rmdir $rename_dir
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ rm -f $seqres.full
|
|||||||
_supported_fs generic
|
_supported_fs generic
|
||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
_require_scratch_encryption
|
_require_scratch_encryption
|
||||||
_requires_renameat2
|
_require_renameat2 exchange
|
||||||
|
|
||||||
_new_session_keyring
|
_new_session_keyring
|
||||||
_scratch_mkfs_encrypted &>> $seqres.full
|
_scratch_mkfs_encrypted &>> $seqres.full
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ _supported_fs generic
|
|||||||
_supported_os Linux
|
_supported_os Linux
|
||||||
_require_scratch_encryption
|
_require_scratch_encryption
|
||||||
_require_command "$KEYCTL_PROG" keyctl
|
_require_command "$KEYCTL_PROG" keyctl
|
||||||
_requires_renameat2
|
_require_renameat2 exchange
|
||||||
|
|
||||||
_new_session_keyring
|
_new_session_keyring
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user