#!/bin/sh # $FreeBSD: stable/11/bin/mv/tests/legacy_test.sh 259210 2013-12-11 04:09:17Z jmmv $ # 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