diff options
author | simon <simon@FreeBSD.org> | 2010-07-22 11:37:54 +0000 |
---|---|---|
committer | simon <simon@FreeBSD.org> | 2010-07-22 11:37:54 +0000 |
commit | 4167320c67c8478504c602f3a7423472532debb3 (patch) | |
tree | 545911a0044f4f5884c72750616f4d77de8e3f8b /tools | |
parent | 1af623ef424b8231643c3777ef9d2da8bfd0ca0a (diff) | |
download | FreeBSD-src-4167320c67c8478504c602f3a7423472532debb3.zip FreeBSD-src-4167320c67c8478504c602f3a7423472532debb3.tar.gz |
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
Diffstat (limited to 'tools')
-rw-r--r-- | tools/regression/usr.sbin/newsyslog/Makefile | 4 | ||||
-rwxr-xr-x | tools/regression/usr.sbin/newsyslog/regress.sh | 333 | ||||
-rwxr-xr-x | tools/regression/usr.sbin/newsyslog/regress.t | 6 |
3 files changed, 343 insertions, 0 deletions
diff --git a/tools/regression/usr.sbin/newsyslog/Makefile b/tools/regression/usr.sbin/newsyslog/Makefile new file mode 100644 index 0000000..2c9ca59 --- /dev/null +++ b/tools/regression/usr.sbin/newsyslog/Makefile @@ -0,0 +1,4 @@ +# $FreeBSD$ + +all: + sh regress.sh diff --git a/tools/regression/usr.sbin/newsyslog/regress.sh b/tools/regression/usr.sbin/newsyslog/regress.sh new file mode 100755 index 0000000..5f8bcb4 --- /dev/null +++ b/tools/regression/usr.sbin/newsyslog/regress.sh @@ -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}" diff --git a/tools/regression/usr.sbin/newsyslog/regress.t b/tools/regression/usr.sbin/newsyslog/regress.t new file mode 100755 index 0000000..c36d834 --- /dev/null +++ b/tools/regression/usr.sbin/newsyslog/regress.t @@ -0,0 +1,6 @@ +#!/bin/sh +# $FreeBSD$ + +cd `dirname $0` + +sh regress.sh |