From owner-svn-src-all@FreeBSD.ORG Thu Jul 22 11:37:55 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 093B51065670; Thu, 22 Jul 2010 11:37:55 +0000 (UTC) (envelope-from simon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id EAFF58FC14; Thu, 22 Jul 2010 11:37:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o6MBbsjY034169; Thu, 22 Jul 2010 11:37:54 GMT (envelope-from simon@svn.freebsd.org) Received: (from simon@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o6MBbsAx034166; Thu, 22 Jul 2010 11:37:54 GMT (envelope-from simon@svn.freebsd.org) Message-Id: <201007221137.o6MBbsAx034166@svn.freebsd.org> From: "Simon L. Nielsen" Date: Thu, 22 Jul 2010 11:37:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210373 - head/tools/regression/usr.sbin/newsyslog X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Jul 2010 11:37:55 -0000 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