The branch main has been updated by des:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=2822a7953316f99418425bf3aa403d668e5af402

commit 2822a7953316f99418425bf3aa403d668e5af402
Author:     Dag-Erling Smørgrav <d...@freebsd.org>
AuthorDate: 2024-11-19 09:29:11 +0000
Commit:     Dag-Erling Smørgrav <d...@freebsd.org>
CommitDate: 2024-11-19 09:29:11 +0000

    mv: Convert tests to ATF.
    
    Sponsored by:   Klara, Inc.
    Reviewed by:    asomers, markj
    Differential Revision:  https://reviews.freebsd.org/D47569
---
 ObsoleteFiles.inc           |   3 +
 bin/mv/tests/Makefile       |   2 +-
 bin/mv/tests/legacy_test.sh | 295 ---------------------------------
 bin/mv/tests/mv_test.sh     | 391 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 395 insertions(+), 296 deletions(-)

diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index 57e0f4609050..1378d6b6dcfa 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -51,6 +51,9 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20241119: 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
index 0e8da4c0981d..d0c65138c9c7 100644
--- 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
index 8af025a0d011..000000000000
--- 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
index 000000000000..aae4bc3f9297
--- /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
+}

Reply via email to