Author: simon
Date: Thu Jul 22 11:37:54 2010
New Revision: 210373
URL: http://svn.freebsd.org/changeset/base/210373

Log:
  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

Added:
  head/tools/regression/usr.sbin/newsyslog/
  head/tools/regression/usr.sbin/newsyslog/Makefile   (contents, props changed)
  head/tools/regression/usr.sbin/newsyslog/regress.sh   (contents, props 
changed)
  head/tools/regression/usr.sbin/newsyslog/regress.t   (contents, props changed)

Added: head/tools/regression/usr.sbin/newsyslog/Makefile
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/usr.sbin/newsyslog/Makefile   Thu Jul 22 11:37:54 
2010        (r210373)
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+all:
+       sh regress.sh

Added: head/tools/regression/usr.sbin/newsyslog/regress.sh
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/usr.sbin/newsyslog/regress.sh Thu Jul 22 11:37:54 
2010        (r210373)
@@ -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}"

Added: head/tools/regression/usr.sbin/newsyslog/regress.t
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/tools/regression/usr.sbin/newsyslog/regress.t  Thu Jul 22 11:37:54 
2010        (r210373)
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+
+cd `dirname $0`
+
+sh regress.sh
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to