Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102634528
D47569.id146448.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.id146448.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/cvt.pl b/bin/mv/tests/cvt.pl
new file mode 100755
--- /dev/null
+++ b/bin/mv/tests/cvt.pl
@@ -0,0 +1,44 @@
+#!/usr/local/bin/perl -w
+
+use strict;
+use warnings;
+
+my $count = 0;
+my $emit = 0;
+my $name;
+my $descr;
+
+while (<>) {
+ if (/^\s+begin\s+'(.*)'\s*$/) {
+ $count++;
+ $emit = 1;
+ $name = sprintf("mv%02d", $count);
+ $descr = $1;
+ print <<EOF
+atf_test_case ${name} cleanup
+${name}_head() {
+ atf_set "descr" "$descr"
+ atf_set "require.user" "root"
+}
+${name}_body() {
+ mv_setup
+EOF
+ } elsif (/^\s+end\s*$/) {
+ $emit = 0;
+ print <<EOF
+}
+${name}_cleanup() {
+ mv_cleanup
+}
+
+EOF
+ } elsif ($emit) {
+ print;
+ }
+}
+
+print("atf_init_test_cases() {\n");
+for (my $i = 1; $i <= $count; $i++) {
+ printf("\tatf_add_test_case mv%02d\n", $i);
+}
+print("}\n");
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 mv01 cleanup
+mv01_head() {
+ atf_set "descr" "Rename file"
+ atf_set "require.user" "root"
+}
+mv01_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
+}
+mv01_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv02 cleanup
+mv02_head() {
+ atf_set "descr" "Move files into directory"
+ atf_set "require.user" "root"
+}
+mv02_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
+}
+mv02_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv03 cleanup
+mv03_head() {
+ atf_set "descr" "Move file from directory to file"
+ atf_set "require.user" "root"
+}
+mv03_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
+}
+mv03_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv04 cleanup
+mv04_head() {
+ atf_set "descr" "Move file from directory to existing file"
+ atf_set "require.user" "root"
+}
+mv04_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
+}
+mv04_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv05 cleanup
+mv05_head() {
+ atf_set "descr" "Move file from directory to existing directory"
+ atf_set "require.user" "root"
+}
+mv05_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
+}
+mv05_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv06 cleanup
+mv06_head() {
+ atf_set "descr" "Move file from directory to directory"
+ atf_set "require.user" "root"
+}
+mv06_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
+}
+mv06_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv07 cleanup
+mv07_head() {
+ atf_set "descr" "Rename directory"
+ atf_set "require.user" "root"
+}
+mv07_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
+}
+mv07_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv08 cleanup
+mv08_head() {
+ atf_set "descr" "Move directory to directory name"
+ atf_set "require.user" "root"
+}
+mv08_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
+}
+mv08_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv09 cleanup
+mv09_head() {
+ atf_set "descr" "Move directory to directory"
+ atf_set "require.user" "root"
+}
+mv09_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
+}
+mv09_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv10 cleanup
+mv10_head() {
+ atf_set "descr" "Move directory to existing empty directory"
+ atf_set "require.user" "root"
+}
+mv10_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
+}
+mv10_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv11 cleanup
+mv11_head() {
+ atf_set "descr" "Move directory to existing non-empty directory"
+ atf_set "require.user" "root"
+}
+mv11_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
+}
+mv11_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv12 cleanup
+mv12_head() {
+ atf_set "descr" "Move directory to existing file"
+ atf_set "require.user" "root"
+}
+mv12_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
+}
+mv12_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv13 cleanup
+mv13_head() {
+ atf_set "descr" "Rename fifo"
+ atf_set "require.user" "root"
+}
+mv13_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
+}
+mv13_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv14 cleanup
+mv14_head() {
+ atf_set "descr" "Move fifos into directory"
+ atf_set "require.user" "root"
+}
+mv14_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
+}
+mv14_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv15 cleanup
+mv15_head() {
+ atf_set "descr" "Move fifo from directory to fifo"
+ atf_set "require.user" "root"
+}
+mv15_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
+}
+mv15_cleanup() {
+ mv_cleanup
+}
+
+atf_test_case mv16 cleanup
+mv16_head() {
+ atf_set "descr" "Move fifo from directory to directory"
+ atf_set "require.user" "root"
+}
+mv16_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
+}
+mv16_cleanup() {
+ mv_cleanup
+}
+
+atf_init_test_cases() {
+ atf_add_test_case mv01
+ atf_add_test_case mv02
+ atf_add_test_case mv03
+ atf_add_test_case mv04
+ atf_add_test_case mv05
+ atf_add_test_case mv06
+ atf_add_test_case mv07
+ atf_add_test_case mv08
+ atf_add_test_case mv09
+ atf_add_test_case mv10
+ atf_add_test_case mv11
+ atf_add_test_case mv12
+ atf_add_test_case mv13
+ atf_add_test_case mv14
+ atf_add_test_case mv15
+ atf_add_test_case mv16
+}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 16, 3:09 AM (21 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14652223
Default Alt Text
D47569.id146448.diff (14 KB)
Attached To
Mode
D47569: mv: Convert tests to ATF.
Attached
Detach File
Event Timeline
Log In to Comment