#! /bin/sh
#
#	Tests for logadm(1M)
#
#	Copyright (c) 2006 by Roman Oreshnikov
#
case $1 in
test);;
clean);;
*)
  echo "Usage: $0 {test|clean}"; exit
esac

PWD=`pwd`
DIR=logadmTest
C=1
N=1
Begin() {
  echo
  echo "Test $N: $@"
  TST=$PWD/$DIR/test$N
  CFG=$DIR/test$N.cfg
  LOG=$DIR/test$N.log
  touch "$CFG"
}
Msg() { echo "Test $N: $@"; }
Tst() {
  echo "$0: Exec logadm -v -f $CFG $@" >>$LOG
  /usr/sbin/logadm -v -f $CFG "$@" >>$LOG 2>&1
}
End() { set -- 1 $C; N=$#; C=$@; }
#
#	Clear tests dir
#
if [ -d "$DIR" ]; then
  rm -rf "$DIR" || exit 1
fi
if [ -d "/tmp/$DIR" ]; then
  rm -rf "/tmp/$DIR" || exit 1
fi
[ "x$1" = xtest ] || exit
mkdir -p "$DIR" "/tmp/$DIR"
#
#	Tests
#
TST=/usr/sbin/logadm
echo "Script for check work of $TST"
echo
/usr/sbin/pkgchk -l -p $TST

Begin "Check rotation with sending signal and move old logs to another device"
Tst -w $TST -a 'kill -HUP `cat '$TST'.pid`' -t '/tmp/'$DIR'/$basename.$n'
echo "#!/bin/sh
echo \$\$ >$TST.pid;
trap 'echo Signal; exec >&-; echo Restart >$TST; exit' 1
exec >$TST
echo Start
while :; do [ -f '$TST' ] || echo fail >$TST.fail; done" >$TST.sh
chmod 755 $TST.sh
$TST.sh &
sleep 1
Tst
grep Signal /tmp/$DIR/test$N.0 >/dev/null
E=$?
[ $E = 0 ] || Msg "Error! Last string in old logfile is absent"
if [ -f "$TST.fail" ]; then
  Msg "Error! Logfile are temporary absent"
  E=1
fi
[ $E = 0 ] && Msg Ok
End

Begin "Check rotation with sending signal and compression all old logs"
Tst -w $TST -a 'kill -HUP `cat '$TST'.pid`' -z 0
echo "#!/bin/sh
echo \$\$ >$TST.pid;
trap 'echo Signal; exec >&-; echo Restart >$TST; exit' 1
exec >$TST
echo Start
while :; do [ -f '$TST' ] || echo fail>$TST.fail; done" >$TST.sh
chmod 755 $TST.sh
$TST.sh &
sleep 1
Tst
gzip -dc $TST.0.gz | grep Signal >/dev/null
E=$?
[ $E = 0 ] || Msg "Error! Last string in old logfile is absent"
if [ -f "$TST.fail" ]; then
  Msg "Error! Logfile are temporary absent"
  E=1
fi
[ $E = 0 ] && Msg Ok
End

Begin "Check rotation files by expression"
echo "$TST" >${TST}a
echo "$TST" >${TST}b
Tst -w Test$N -s 5b "$TST?"
Tst
echo >${TST}a
perl -i -e "\$t=gmtime(time-10*24*60*60);
	while(<>) { s/-P '[^']+'/-P '\$t'/; print; }" $CFG
Tst
if [ -f "${TST}a.1" ]; then
  Msg "Error! Rotate file by generic string with timestamp"
else
  Msg "Ok"
fi
End

