Page MenuHomeFreeBSD

D47569.diff
No OneTemporary

D47569.diff

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

Mime Type
text/plain
Expires
Sat, Nov 16, 12:41 AM (21 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14650054
Default Alt Text
D47569.diff (14 KB)

Event Timeline