Add regression tests for newsyslog. These are far from a complete
test of newsyslog, as they were mainly made to test 'newsyslog -t', but they do test the basic functionality. The test 'framework' was based on dds@'s code in src/tools/regression/bin/mv/. Note that currently these tests are not fully correct for the non-timestamp based rotation case, as it seems like newsyslog actually by default keeps a file too much around. MFC after: 3 weeks
This commit is contained in:
parent
1af623ef42
commit
4167320c67
4
tools/regression/usr.sbin/newsyslog/Makefile
Normal file
4
tools/regression/usr.sbin/newsyslog/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
# $FreeBSD$
|
||||
|
||||
all:
|
||||
sh regress.sh
|
333
tools/regression/usr.sbin/newsyslog/regress.sh
Executable file
333
tools/regression/usr.sbin/newsyslog/regress.sh
Executable file
@ -0,0 +1,333 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $FreeBSD$
|
||||
|
||||
COUNT=0
|
||||
TMPDIR=`mktemp -d -t regress_newsyslog`
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "$0: Can't create temp dir, exiting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Begin an individual test
|
||||
begin()
|
||||
{
|
||||
COUNT=`expr $COUNT + 1`
|
||||
OK=1
|
||||
NAME="$1"
|
||||
}
|
||||
|
||||
# End an individual test
|
||||
end()
|
||||
{
|
||||
if [ $OK = 1 ]
|
||||
then
|
||||
printf 'ok '
|
||||
else
|
||||
printf 'not ok '
|
||||
fi
|
||||
echo "$COUNT - $NAME"
|
||||
}
|
||||
|
||||
# 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
|
||||
}
|
||||
|
||||
# Check that a file exists
|
||||
ckfe()
|
||||
{
|
||||
if [ -f $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
|
||||
}
|
||||
|
||||
# Check that there are X files which match expr
|
||||
chkfcnt()
|
||||
{
|
||||
cnt=$1; shift
|
||||
if [ $cnt -eq `echo "$@" | wc -w` ]
|
||||
then
|
||||
ok
|
||||
else
|
||||
notok
|
||||
fi
|
||||
}
|
||||
|
||||
# Check that two strings are alike
|
||||
ckstr()
|
||||
{
|
||||
if [ "$1" = "$2" ]
|
||||
then
|
||||
ok
|
||||
else
|
||||
notok
|
||||
fi
|
||||
}
|
||||
|
||||
tmpdir_create()
|
||||
{
|
||||
mkdir -p ${TMPDIR}/log ${TMPDIR}/alog
|
||||
cd ${TMPDIR}/log
|
||||
}
|
||||
|
||||
tmpdir_clean()
|
||||
{
|
||||
cd ${TMPDIR}
|
||||
rm -rf "${TMPDIR}/log" "${TMPDIR}/alog" newsyslog.conf
|
||||
}
|
||||
|
||||
run_newsyslog()
|
||||
{
|
||||
|
||||
newsyslog -f ../newsyslog.conf -F -r "$@"
|
||||
}
|
||||
|
||||
tests_normal_rotate() {
|
||||
ext="$1"
|
||||
dir="$2"
|
||||
|
||||
if [ -n "$dir" ]; then
|
||||
newsyslog_args=" -a ${dir}"
|
||||
name_postfix="${ext} archive dir"
|
||||
else
|
||||
newsyslog_args=""
|
||||
name_postfix="${ext}"
|
||||
fi
|
||||
|
||||
tmpdir_create
|
||||
|
||||
begin "create file ${name_postfix}" -newdir
|
||||
run_newsyslog -C
|
||||
ckfe $LOGFNAME
|
||||
cknt ${dir}${LOGFNAME}.0${ext}
|
||||
end
|
||||
|
||||
begin "rotate normal 1 ${name_postfix}"
|
||||
run_newsyslog $newsyslog_args
|
||||
ckfe ${LOGFNAME}
|
||||
ckfe ${dir}${LOGFNAME}.0${ext}
|
||||
cknt ${dir}${LOGFNAME}.1${ext}
|
||||
end
|
||||
|
||||
begin "rotate normal 2 ${name_postfix}"
|
||||
run_newsyslog $newsyslog_args
|
||||
ckfe ${LOGFNAME}
|
||||
ckfe ${dir}${LOGFNAME}.0${ext}
|
||||
ckfe ${dir}${LOGFNAME}.1${ext}
|
||||
cknt ${dir}${LOGFNAME}.2${ext}
|
||||
end
|
||||
|
||||
begin "rotate normal 3 ${name_postfix}"
|
||||
run_newsyslog $newsyslog_args
|
||||
ckfe ${LOGFNAME}
|
||||
ckfe ${dir}${LOGFNAME}.0${ext}
|
||||
ckfe ${dir}${LOGFNAME}.1${ext}
|
||||
ckfe ${dir}${LOGFNAME}.2${ext}
|
||||
cknt ${dir}${LOGFNAME}.3${ext}
|
||||
end
|
||||
|
||||
begin "rotate normal 4 ${name_postfix}"
|
||||
run_newsyslog $newsyslog_args
|
||||
ckfe ${LOGFNAME}
|
||||
ckfe ${dir}${LOGFNAME}.0${ext}
|
||||
ckfe ${dir}${LOGFNAME}.1${ext}
|
||||
ckfe ${dir}${LOGFNAME}.2${ext}
|
||||
cknt ${dir}${LOGFNAME}.4${ext}
|
||||
end
|
||||
|
||||
begin "rotate normal 5 ${name_postfix}"
|
||||
run_newsyslog $newsyslog_args
|
||||
ckfe ${LOGFNAME}
|
||||
ckfe ${dir}${LOGFNAME}.0${ext}
|
||||
ckfe ${dir}${LOGFNAME}.1${ext}
|
||||
ckfe ${dir}${LOGFNAME}.2${ext}
|
||||
cknt ${dir}${LOGFNAME}.4${ext}
|
||||
end
|
||||
|
||||
# Wait a bit so we can see if the noaction test rotates files
|
||||
sleep 1.1
|
||||
|
||||
begin "noaction ${name_postfix}"
|
||||
ofiles=`ls -Tl ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`
|
||||
run_newsyslog ${newsyslog_args} -n >/dev/null
|
||||
ckfe ${LOGFNAME}
|
||||
ckstr "$ofiles" "`ls -lT ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`"
|
||||
end
|
||||
|
||||
tmpdir_clean
|
||||
}
|
||||
|
||||
tests_time_rotate() {
|
||||
ext="$1"
|
||||
dir="$2"
|
||||
|
||||
if [ -n "$dir" ]; then
|
||||
newsyslog_args="-t DEFAULT -a ${dir}"
|
||||
name_postfix="${ext} archive dir"
|
||||
else
|
||||
newsyslog_args="-t DEFAULT"
|
||||
name_postfix="${ext}"
|
||||
fi
|
||||
|
||||
tmpdir_create
|
||||
|
||||
begin "create file ${name_postfix}" -newdir
|
||||
run_newsyslog -C ${newsyslog_args}
|
||||
ckfe ${LOGFNAME}
|
||||
end
|
||||
|
||||
begin "rotate time 1 ${name_postfix}"
|
||||
run_newsyslog ${newsyslog_args}
|
||||
ckfe ${LOGFNAME}
|
||||
chkfcnt 1 ${dir}${LOGFNAME}.*${ext}
|
||||
end
|
||||
|
||||
sleep 1.1
|
||||
|
||||
begin "rotate time 2 ${name_postfix}"
|
||||
run_newsyslog ${newsyslog_args}
|
||||
ckfe ${LOGFNAME}
|
||||
chkfcnt 2 ${dir}${LOGFNAME}.*${ext}
|
||||
end
|
||||
|
||||
sleep 1.1
|
||||
|
||||
begin "rotate time 3 ${name_postfix}"
|
||||
run_newsyslog ${newsyslog_args}
|
||||
ckfe ${LOGFNAME}
|
||||
chkfcnt 3 ${dir}${LOGFNAME}.*${ext}
|
||||
end
|
||||
|
||||
sleep 1.1
|
||||
|
||||
begin "rotate time 4 ${name_postfix}"
|
||||
run_newsyslog ${newsyslog_args}
|
||||
ckfe ${LOGFNAME}
|
||||
chkfcnt 3 ${dir}${LOGFNAME}.*${ext}
|
||||
end
|
||||
|
||||
begin "noaction ${name_postfix}"
|
||||
ofiles=`ls -1 ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`
|
||||
run_newsyslog ${newsyslog_args} -n >/dev/null
|
||||
ckfe ${LOGFNAME}
|
||||
ckstr "$ofiles" "`ls -1 ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`"
|
||||
end
|
||||
|
||||
tmpdir_clean
|
||||
}
|
||||
|
||||
echo 1..78
|
||||
mkdir -p ${TMPDIR}
|
||||
cd ${TMPDIR}
|
||||
|
||||
LOGFNAME=foo.log
|
||||
LOGFPATH=${TMPDIR}/log/${LOGFNAME}
|
||||
|
||||
|
||||
# XXX for tests_normal_rotate it should be 3 instead of 2 count - but
|
||||
# that's currently broken!
|
||||
|
||||
# Normal, no archive dir
|
||||
echo "$LOGFPATH 640 2 * @T00 NC" > newsyslog.conf
|
||||
tests_normal_rotate
|
||||
|
||||
echo "$LOGFPATH 640 2 * @T00 NCZ" > newsyslog.conf
|
||||
tests_normal_rotate ".gz"
|
||||
|
||||
echo "$LOGFPATH 640 2 * @T00 NCJ" > newsyslog.conf
|
||||
tests_normal_rotate ".bz2"
|
||||
|
||||
# Normal, archive dir
|
||||
echo "$LOGFPATH 640 2 * @T00 NC" > newsyslog.conf
|
||||
tests_normal_rotate "" "${TMPDIR}/alog/"
|
||||
|
||||
echo "$LOGFPATH 640 2 * @T00 NCZ" > newsyslog.conf
|
||||
tests_normal_rotate ".gz" "${TMPDIR}/alog/"
|
||||
|
||||
echo "$LOGFPATH 640 2 * @T00 NCJ" > newsyslog.conf
|
||||
tests_normal_rotate ".bz2" "${TMPDIR}/alog/"
|
||||
|
||||
# Time based, no archive dir
|
||||
echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf
|
||||
tests_time_rotate
|
||||
|
||||
echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf
|
||||
tests_time_rotate "gz" ""
|
||||
|
||||
echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf
|
||||
tests_time_rotate "bz2" ""
|
||||
|
||||
# Time based, archive dir
|
||||
echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf
|
||||
tests_time_rotate "" "${TMPDIR}/alog/"
|
||||
|
||||
echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf
|
||||
tests_time_rotate "gz" "${TMPDIR}/alog/"
|
||||
|
||||
echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf
|
||||
tests_time_rotate "bz2" "${TMPDIR}/alog/"
|
||||
|
||||
rm -rf "${TMPDIR}"
|
6
tools/regression/usr.sbin/newsyslog/regress.t
Executable file
6
tools/regression/usr.sbin/newsyslog/regress.t
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
# $FreeBSD$
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
sh regress.sh
|
Loading…
x
Reference in New Issue
Block a user