Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102636082
D47569.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
14 KB
Referenced Files
None
Subscribers
None
D47569.diff
View Options
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,9 @@
# xargs -n1 | sort | uniq -d;
# done
+# 20241114: rewrite mv tests
+OLD_FILES+=usr/tests/bin/mv/legacy_test
+
# 20241112: Retire MK_PROFILE support
OLD_FILES+=usr/lib/lib80211_p.a
OLD_FILES+=usr/lib/lib9p_p.a
diff --git a/bin/mv/tests/Makefile b/bin/mv/tests/Makefile
--- a/bin/mv/tests/Makefile
+++ b/bin/mv/tests/Makefile
@@ -1,5 +1,5 @@
.include <bsd.own.mk>
-TAP_TESTS_SH= legacy_test
+ATF_TESTS_SH= mv_test
.include <bsd.test.mk>
diff --git a/bin/mv/tests/legacy_test.sh b/bin/mv/tests/legacy_test.sh
deleted file mode 100644
--- a/bin/mv/tests/legacy_test.sh
+++ /dev/null
@@ -1,295 +0,0 @@
-#!/bin/sh
-
-# A directory in a device different from that where the tests are run
-TMPDIR=/tmp/regress.$$
-COUNT=0
-
-# Begin an individual test
-begin()
-{
- COUNT=`expr $COUNT + 1`
- OK=1
- if [ -z "$FS" ]
- then
- NAME="$1"
- else
- NAME="$1 (cross device)"
- fi
- rm -rf testdir $TMPDIR/testdir
- mkdir -p testdir $TMPDIR/testdir
- cd testdir
-}
-
-# End an individual test
-end()
-{
- if [ $OK = 1 ]
- then
- printf 'ok '
- else
- printf 'not ok '
- fi
- echo "$COUNT - $NAME"
- cd ..
- rm -rf testdir $TMPDIR/testdir
-}
-
-# Make a file that can later be verified
-mkf()
-{
- CN=`basename $1`
- echo "$CN-$CN" >$1
-}
-
-# Verify that the file specified is correct
-ckf()
-{
- if [ -f $2 ] && echo "$1-$1" | diff - $2 >/dev/null
- then
- ok
- else
- notok
- fi
-}
-
-# Make a fifo that can later be verified
-mkp()
-{
- mkfifo $1
-}
-
-# Verify that the file specified is correct
-ckp()
-{
- if [ -p $2 ]
- then
- ok
- else
- notok
- fi
-}
-
-# Make a directory that can later be verified
-mkd()
-{
- CN=`basename $1`
- mkdir -p $1/"$CN-$CN"
-}
-
-# Verify that the directory specified is correct
-ckd()
-{
- if [ -d $2/$1-$1 ]
- then
- ok
- else
- notok
- fi
-}
-
-# Verify that the specified file does not exist
-# (is not there)
-cknt()
-{
- if [ -r $1 ]
- then
- notok
- else
- ok
- fi
-}
-
-# A part of a test succeeds
-ok()
-{
- :
-}
-
-# A part of a test fails
-notok()
-{
- OK=0
-}
-
-# Verify that the exit code passed is for unsuccessful termination
-ckfail()
-{
- if [ $1 -gt 0 ]
- then
- ok
- else
- notok
- fi
-}
-
-# Verify that the exit code passed is for successful termination
-ckok()
-{
- if [ $1 -eq 0 ]
- then
- ok
- else
- notok
- fi
-}
-
-# Run all tests locally and across devices
-echo 1..32
-for FS in '' $TMPDIR/testdir/
-do
- begin 'Rename file'
- mkf fa
- mv fa ${FS}fb
- ckok $?
- ckf fa ${FS}fb
- cknt fa
- end
-
- begin 'Move files into directory'
- mkf fa
- mkf fb
- mkdir -p ${FS}1/2/3
- mv fa fb ${FS}1/2/3
- ckok $?
- ckf fa ${FS}1/2/3/fa
- ckf fb ${FS}1/2/3/fb
- cknt fa
- cknt fb
- end
-
- begin 'Move file from directory to file'
- mkdir -p 1/2/3
- mkf 1/2/3/fa
- mv 1/2/3/fa ${FS}fb
- ckok $?
- ckf fa ${FS}fb
- cknt 1/2/3/fa
- end
-
- begin 'Move file from directory to existing file'
- mkdir -p 1/2/3
- mkf 1/2/3/fa
- :> ${FS}fb
- mv 1/2/3/fa ${FS}fb
- ckok $?
- ckf fa ${FS}fb
- cknt 1/2/3/fa
- end
-
- begin 'Move file from directory to existing directory'
- mkdir -p 1/2/3
- mkf 1/2/3/fa
- mkdir -p ${FS}db/fa
- # Should fail per POSIX step 3a:
- # Destination path is a file of type directory and
- # source_file is not a file of type directory
- mv 1/2/3/fa ${FS}db 2>/dev/null
- ckfail $?
- ckf fa 1/2/3/fa
- end
-
- begin 'Move file from directory to directory'
- mkdir -p da1/da2/da3
- mkdir -p ${FS}db1/db2/db3
- mkf da1/da2/da3/fa
- mv da1/da2/da3/fa ${FS}db1/db2/db3/fb
- ckok $?
- ckf fa ${FS}db1/db2/db3/fb
- cknt da1/da2/da3/fa
- end
-
- begin 'Rename directory'
- mkd da
- mv da ${FS}db
- ckok $?
- ckd da ${FS}db
- cknt da
- end
-
- begin 'Move directory to directory name'
- mkd da1/da2/da3/da
- mkdir -p ${FS}db1/db2/db3
- mv da1/da2/da3/da ${FS}db1/db2/db3/db
- ckok $?
- ckd da ${FS}db1/db2/db3/db
- cknt da1/da2/da3/da
- end
-
- begin 'Move directory to directory'
- mkd da1/da2/da3/da
- mkdir -p ${FS}db1/db2/db3
- mv da1/da2/da3/da ${FS}db1/db2/db3
- ckok $?
- ckd da ${FS}db1/db2/db3/da
- cknt da1/da2/da3/da
- end
-
- begin 'Move directory to existing empty directory'
- mkd da1/da2/da3/da
- mkdir -p ${FS}db1/db2/db3/da
- mv da1/da2/da3/da ${FS}db1/db2/db3
- ckok $?
- ckd da ${FS}db1/db2/db3/da
- cknt da1/da2/da3/da
- end
-
- begin 'Move directory to existing non-empty directory'
- mkd da1/da2/da3/da
- mkdir -p ${FS}db1/db2/db3/da/full
- # Should fail (per the semantics of rename(2))
- mv da1/da2/da3/da ${FS}db1/db2/db3 2>/dev/null
- ckfail $?
- ckd da da1/da2/da3/da
- end
-
- begin 'Move directory to existing file'
- mkd da1/da2/da3/da
- mkdir -p ${FS}db1/db2/db3
- :> ${FS}db1/db2/db3/da
- # Should fail per POSIX step 3b:
- # Destination path is a file not of type directory
- # and source_file is a file of type directory
- mv da1/da2/da3/da ${FS}db1/db2/db3/da 2>/dev/null
- ckfail $?
- ckd da da1/da2/da3/da
- end
-
- begin 'Rename fifo'
- mkp fa
- mv fa ${FS}fb
- ckok $?
- ckp fa ${FS}fb
- cknt fa
- end
-
- begin 'Move fifos into directory'
- mkp fa
- mkp fb
- mkdir -p ${FS}1/2/3
- mv fa fb ${FS}1/2/3
- ckok $?
- ckp fa ${FS}1/2/3/fa
- ckp fb ${FS}1/2/3/fb
- cknt fa
- cknt fb
- end
-
- begin 'Move fifo from directory to fifo'
- mkdir -p 1/2/3
- mkp 1/2/3/fa
- mv 1/2/3/fa ${FS}fb
- ckok $?
- ckp fa ${FS}fb
- cknt 1/2/3/fa
- end
-
- begin 'Move fifo from directory to directory'
- mkdir -p da1/da2/da3
- mkdir -p ${FS}db1/db2/db3
- mkp da1/da2/da3/fa
- mv da1/da2/da3/fa ${FS}db1/db2/db3/fb
- ckok $?
- ckp fa ${FS}db1/db2/db3/fb
- cknt da1/da2/da3/fa
- end
-done
diff --git a/bin/mv/tests/mv_test.sh b/bin/mv/tests/mv_test.sh
new file mode 100644
--- /dev/null
+++ b/bin/mv/tests/mv_test.sh
@@ -0,0 +1,391 @@
+#
+# Copyright (c) 2007 Diomidis Spinellis
+# Copyright (c) 2023 Klara, Inc.
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+mv_setup() {
+ atf_check mkdir fs
+ atf_check mount -t tmpfs -o size=1m tmp fs
+}
+
+mv_cleanup() {
+ umount fs || true
+}
+
+# Make a file that can later be verified
+mv_makefile() {
+ local cn="${1##*/}"
+ echo "$cn-$cn" >"$1"
+}
+
+# Verify that the file specified is correct
+mv_checkfile() {
+ atf_check -o inline:"$1-$1\n" cat "$2"
+}
+
+# Make a fifo that can later be verified
+mv_makepipe() {
+ atf_check mkfifo $1
+}
+
+# Verify that the file specified is correct
+mv_checkpipe() {
+ atf_check test -p "$2"
+}
+
+# Make a directory that can later be verified
+mv_makedir() {
+ local cn="${1##*/}"
+ atf_check mkdir -p "$1/$cn-$cn"
+}
+
+# Verify that the directory specified is correct
+mv_checkdir() {
+ atf_check test -d "$2/$1-$1"
+}
+
+# Verify that the specified file does not exist
+# (is not there)
+mv_checkabsent() {
+ atf_check -s exit:1 test -r "$1"
+}
+
+atf_test_case rename_file cleanup
+rename_file_head() {
+ atf_set "descr" "Rename file"
+ atf_set "require.user" "root"
+}
+rename_file_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makefile fa
+ atf_check mv fa ${FS}fb
+ mv_checkfile fa ${FS}fb
+ mv_checkabsent fa
+ done
+}
+rename_file_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case file_into_dir cleanup
+file_into_dir_head() {
+ atf_set "descr" "Move files into directory"
+ atf_set "require.user" "root"
+}
+file_into_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makefile fa
+ mv_makefile fb
+ atf_check mkdir -p ${FS}1/2/3
+ atf_check mv fa fb ${FS}1/2/3
+ mv_checkfile fa ${FS}1/2/3/fa
+ mv_checkfile fb ${FS}1/2/3/fb
+ mv_checkabsent fa
+ mv_checkabsent fb
+ done
+}
+file_into_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case file_from_dir cleanup
+file_from_dir_head() {
+ atf_set "descr" "Move file from directory to file"
+ atf_set "require.user" "root"
+}
+file_from_dir_body() {
+ mv_setup
+ atf_check mkdir -p 1/2/3
+ for FS in "" "fs/" ; do
+ mv_makefile 1/2/3/fa
+ atf_check mv 1/2/3/fa ${FS}fb
+ mv_checkfile fa ${FS}fb
+ mv_checkabsent 1/2/3/fa
+ done
+}
+file_from_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case file_from_dir_replace cleanup
+file_from_dir_replace_head() {
+ atf_set "descr" "Move file from directory to existing file"
+ atf_set "require.user" "root"
+}
+file_from_dir_replace_body() {
+ mv_setup
+ atf_check mkdir -p 1/2/3
+ for FS in "" "fs/" ; do
+ mv_makefile 1/2/3/fa
+ :> ${FS}fb
+ atf_check mv 1/2/3/fa ${FS}fb
+ mv_checkfile fa ${FS}fb
+ mv_checkabsent 1/2/3/fa
+ done
+}
+file_from_dir_replace_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case file_to_dir cleanup
+file_to_dir_head() {
+ atf_set "descr" "Move file from directory to existing directory"
+ atf_set "require.user" "root"
+}
+file_to_dir_body() {
+ mv_setup
+ atf_check mkdir -p 1/2/3
+ for FS in "" "fs/" ; do
+ mv_makefile 1/2/3/fa
+ atf_check mkdir -p ${FS}db/fa
+ # Should fail per POSIX step 3a:
+ # Destination path is a file of type directory and
+ # source_file is not a file of type directory
+ atf_check -s not-exit:0 -e match:"Is a directory" \
+ mv 1/2/3/fa ${FS}db
+ mv_checkfile fa 1/2/3/fa
+ done
+}
+file_to_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case file_from_rename_dir cleanup
+file_from_rename_dir_head() {
+ atf_set "descr" "Move file from directory to directory"
+ atf_set "require.user" "root"
+}
+file_from_rename_dir_body() {
+ mv_setup
+ atf_check mkdir -p da1/da2/da3
+ for FS in "" "fs/" ; do
+ atf_check mkdir -p ${FS}db1/db2/db3
+ mv_makefile da1/da2/da3/fa
+ atf_check mv da1/da2/da3/fa ${FS}db1/db2/db3/fb
+ mv_checkfile fa ${FS}db1/db2/db3/fb
+ mv_checkabsent da1/da2/da3/fa
+ done
+}
+file_from_rename_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case rename_dir cleanup
+rename_dir_head() {
+ atf_set "descr" "Rename directory"
+ atf_set "require.user" "root"
+}
+rename_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da
+ atf_check mv da ${FS}db
+ mv_checkdir da ${FS}db
+ mv_checkabsent da
+ done
+}
+rename_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case dir_to_dir cleanup
+dir_to_dir_head() {
+ atf_set "descr" "Move directory to directory name"
+ atf_set "require.user" "root"
+}
+dir_to_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da1/da2/da3/da
+ atf_check mkdir -p ${FS}db1/db2/db3
+ atf_check mv da1/da2/da3/da ${FS}db1/db2/db3/db
+ mv_checkdir da ${FS}db1/db2/db3/db
+ mv_checkabsent da1/da2/da3/da
+ done
+}
+dir_to_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case dir_into_dir cleanup
+dir_into_dir_head() {
+ atf_set "descr" "Move directory to directory"
+ atf_set "require.user" "root"
+}
+dir_into_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da1/da2/da3/da
+ atf_check mkdir -p ${FS}db1/db2/db3
+ atf_check mv da1/da2/da3/da ${FS}db1/db2/db3
+ mv_checkdir da ${FS}db1/db2/db3/da
+ mv_checkabsent da1/da2/da3/da
+ done
+}
+dir_into_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case dir_to_empty_dir cleanup
+dir_to_empty_dir_head() {
+ atf_set "descr" "Move directory to existing empty directory"
+ atf_set "require.user" "root"
+}
+dir_to_empty_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da1/da2/da3/da
+ atf_check mkdir -p ${FS}db1/db2/db3/da
+ atf_check mv da1/da2/da3/da ${FS}db1/db2/db3
+ mv_checkdir da ${FS}db1/db2/db3/da
+ mv_checkabsent da1/da2/da3/da
+ done
+}
+dir_to_empty_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case dir_to_nonempty_dir cleanup
+dir_to_nonempty_dir_head() {
+ atf_set "descr" "Move directory to existing non-empty directory"
+ atf_set "require.user" "root"
+}
+dir_to_nonempty_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da1/da2/da3/da
+ atf_check mkdir -p ${FS}db1/db2/db3/da/full
+ # Should fail (per the semantics of rename(2))
+ atf_check -s not-exit:0 -e match:"Directory not empty" \
+ mv da1/da2/da3/da ${FS}db1/db2/db3
+ mv_checkdir da da1/da2/da3/da
+ done
+}
+dir_to_nonempty_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case dir_to_file cleanup
+dir_to_file_head() {
+ atf_set "descr" "Move directory to existing file"
+ atf_set "require.user" "root"
+}
+dir_to_file_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makedir da1/da2/da3/da
+ atf_check mkdir -p ${FS}db1/db2/db3
+ :> ${FS}db1/db2/db3/da
+ # Should fail per POSIX step 3b:
+ # Destination path is a file not of type directory
+ # and source_file is a file of type directory
+ atf_check -s not-exit:0 -e match:"Not a directory" \
+ mv da1/da2/da3/da ${FS}db1/db2/db3/da
+ mv_checkdir da da1/da2/da3/da
+ done
+}
+dir_to_file_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case rename_fifo cleanup
+rename_fifo_head() {
+ atf_set "descr" "Rename fifo"
+ atf_set "require.user" "root"
+}
+rename_fifo_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makepipe fa
+ atf_check mv fa ${FS}fb
+ mv_checkpipe fa ${FS}fb
+ mv_checkabsent fa
+ done
+}
+rename_fifo_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case fifo_into_dir cleanup
+fifo_into_dir_head() {
+ atf_set "descr" "Move fifos into directory"
+ atf_set "require.user" "root"
+}
+fifo_into_dir_body() {
+ mv_setup
+ for FS in "" "fs/" ; do
+ mv_makepipe fa
+ mv_makepipe fb
+ atf_check mkdir -p ${FS}1/2/3
+ atf_check mv fa fb ${FS}1/2/3
+ mv_checkpipe fa ${FS}1/2/3/fa
+ mv_checkpipe fb ${FS}1/2/3/fb
+ mv_checkabsent fa
+ mv_checkabsent fb
+ done
+}
+fifo_into_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case fifo_from_dir cleanup
+fifo_from_dir_head() {
+ atf_set "descr" "Move fifo from directory to fifo"
+ atf_set "require.user" "root"
+}
+fifo_from_dir_body() {
+ mv_setup
+ atf_check mkdir -p 1/2/3
+ for FS in "" "fs/" ; do
+ mv_makepipe 1/2/3/fa
+ atf_check mv 1/2/3/fa ${FS}fb
+ mv_checkpipe fa ${FS}fb
+ mv_checkabsent 1/2/3/fa
+ done
+}
+fifo_from_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case fifo_from_dir_into_dir cleanup
+fifo_from_dir_into_dir_head() {
+ atf_set "descr" "Move fifo from directory to directory"
+ atf_set "require.user" "root"
+}
+fifo_from_dir_into_dir_body() {
+ mv_setup
+ atf_check mkdir -p da1/da2/da3
+ for FS in "" "fs/" ; do
+ atf_check mkdir -p ${FS}db1/db2/db3
+ mv_makepipe da1/da2/da3/fa
+ atf_check mv da1/da2/da3/fa ${FS}db1/db2/db3/fb
+ mv_checkpipe fa ${FS}db1/db2/db3/fb
+ mv_checkabsent da1/da2/da3/fa
+ done
+}
+fifo_from_dir_into_dir_cleanup() {
+ mv_cleanup
+}
+
+atf_init_test_cases() {
+ atf_add_test_case rename_file
+ atf_add_test_case file_into_dir
+ atf_add_test_case file_from_dir
+ atf_add_test_case file_from_dir_replace
+ atf_add_test_case file_to_dir
+ atf_add_test_case file_from_rename_dir
+ atf_add_test_case rename_dir
+ atf_add_test_case dir_to_dir
+ atf_add_test_case dir_into_dir
+ atf_add_test_case dir_to_empty_dir
+ atf_add_test_case dir_to_nonempty_dir
+ atf_add_test_case dir_to_file
+ atf_add_test_case rename_fifo
+ atf_add_test_case fifo_into_dir
+ atf_add_test_case fifo_from_dir
+ atf_add_test_case fifo_from_dir_into_dir
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 16, 3:41 AM (20 h, 27 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14650054
Default Alt Text
D47569.diff (14 KB)
Attached To
Mode
D47569: mv: Convert tests to ATF.
Attached
Detach File
Event Timeline
Log In to Comment