freebsd-dev/bin/mv/tests/legacy_test.sh
Julio Merino 13de33a5dc Migrate tools/regression/bin/ tests to the new layout.
This change is a proof of concept on how to easily integrate existing
tests from the tools/regression/ hierarchy into the /usr/tests/ test
suite and on how to adapt them to the new layout for src.

To achieve these goals, this change:

- Moves tests from tools/regression/bin/<tool>/ to bin/<tool>/tests/.
- Renames the previous regress.sh files to legacy_test.sh.
- Adds Makefiles to build and install the tests and all their supporting
  data files into /usr/tests/bin/.
- Plugs the legacy_test test programs into the test suite using the new
  TAP backend for Kyua (appearing in 0.8) so that the code of the test
  programs does not have to change.
- Registers the new directories in the BSD.test.dist mtree file.

Reviewed by:	freebsd-testing
Approved by:	rpaulo (mentor)
2013-12-11 04:09:17 +00:00

297 lines
4.5 KiB
Bash

#!/bin/sh
# $FreeBSD$
# 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