Page MenuHomeFreeBSD

D47569.id146448.diff
No OneTemporary

D47569.id146448.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/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

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)

Event Timeline