1#!/bin/sh 2 3# $FreeBSD$ 4 5COUNT=0 6TMPDIR=$(pwd)/work 7if [ $? -ne 0 ]; then 8 echo "$0: Can't create temp dir, exiting..." 9 exit 1 10fi 11 12# Begin an individual test 13begin() 14{ 15 COUNT=`expr $COUNT + 1` 16 OK=1 17 NAME="$1" 18} 19 20# End an individual test 21end() 22{ 23 if [ $OK = 1 ] 24 then 25 printf 'ok ' 26 else 27 printf 'not ok ' 28 fi 29 echo "$COUNT - $NAME" 30} 31 32# Make a file that can later be verified 33mkf() 34{ 35 CN=`basename $1` 36 echo "$CN-$CN" >$1 37} 38 39# Verify that the file specified is correct 40ckf() 41{ 42 if [ -f $2 ] && echo "$1-$1" | diff - $2 >/dev/null 43 then 44 ok 45 else 46 notok 47 fi 48} 49 50# Check that a file exists 51ckfe() 52{ 53 if [ -f $1 ] 54 then 55 ok 56 else 57 notok 58 fi 59} 60 61# Verify that the specified file does not exist 62# (is not there) 63cknt() 64{ 65 if [ -r $1 ] 66 then 67 notok 68 else 69 ok 70 fi 71} 72 73# Check if a file is there, depending of if it's supposed to or not - 74# basically how many log files we are supposed to keep vs. how many we 75# actually keep. 76ckntfe() 77{ 78 curcnt=$1 79 keepcnt=$2 80 f=$3 81 82 if [ $curcnt -le $keepcnt ] 83 then 84 #echo Assuming file there 85 ckfe $f 86 else 87 #echo Assuming file NOT there 88 cknt $f 89 fi 90} 91 92 93 94# A part of a test succeeds 95ok() 96{ 97 : 98} 99 100# A part of a test fails 101notok() 102{ 103 OK=0 104} 105 106# Verify that the exit code passed is for unsuccessful termination 107ckfail() 108{ 109 if [ $1 -gt 0 ] 110 then 111 ok 112 else 113 notok 114 fi 115} 116 117# Verify that the exit code passed is for successful termination 118ckok() 119{ 120 if [ $1 -eq 0 ] 121 then 122 ok 123 else 124 notok 125 fi 126} 127 128# Check that there are X files which match expr 129chkfcnt() 130{ 131 cnt=$1; shift 132 if [ $cnt -eq `echo "$@" | wc -w` ] 133 then 134 ok 135 else 136 notok 137 fi 138} 139 140# Check that two strings are alike 141ckstr() 142{ 143 if [ "$1" = "$2" ] 144 then 145 ok 146 else 147 notok 148 fi 149} 150 151tmpdir_create() 152{ 153 mkdir -p ${TMPDIR}/log ${TMPDIR}/alog 154 cd ${TMPDIR}/log 155} 156 157tmpdir_clean() 158{ 159 cd ${TMPDIR} 160 rm -rf "${TMPDIR}/log" "${TMPDIR}/alog" newsyslog.conf 161} 162 163run_newsyslog() 164{ 165 166 newsyslog -f ../newsyslog.conf -F -r "$@" 167} 168 169tests_normal_rotate() { 170 ext="$1" 171 dir="$2" 172 173 if [ -n "$dir" ]; then 174 newsyslog_args=" -a ${dir}" 175 name_postfix="${ext} archive dir" 176 else 177 newsyslog_args="" 178 name_postfix="${ext}" 179 fi 180 181 tmpdir_create 182 183 begin "create file ${name_postfix}" -newdir 184 run_newsyslog -C 185 ckfe $LOGFNAME 186 cknt ${dir}${LOGFNAME}.0${ext} 187 end 188 189 begin "rotate normal 1 ${name_postfix}" 190 run_newsyslog $newsyslog_args 191 ckfe ${LOGFNAME} 192 ckfe ${dir}${LOGFNAME}.0${ext} 193 cknt ${dir}${LOGFNAME}.1${ext} 194 end 195 196 begin "rotate normal 2 ${name_postfix}" 197 run_newsyslog $newsyslog_args 198 ckfe ${LOGFNAME} 199 ckfe ${dir}${LOGFNAME}.0${ext} 200 ckfe ${dir}${LOGFNAME}.1${ext} 201 cknt ${dir}${LOGFNAME}.2${ext} 202 end 203 204 begin "rotate normal 3 ${name_postfix}" 205 run_newsyslog $newsyslog_args 206 ckfe ${LOGFNAME} 207 ckfe ${dir}${LOGFNAME}.0${ext} 208 ckfe ${dir}${LOGFNAME}.1${ext} 209 ckfe ${dir}${LOGFNAME}.2${ext} 210 cknt ${dir}${LOGFNAME}.3${ext} 211 end 212 213 begin "rotate normal 4 ${name_postfix}" 214 run_newsyslog $newsyslog_args 215 ckfe ${LOGFNAME} 216 ckfe ${dir}${LOGFNAME}.0${ext} 217 ckfe ${dir}${LOGFNAME}.1${ext} 218 ckfe ${dir}${LOGFNAME}.2${ext} 219 cknt ${dir}${LOGFNAME}.4${ext} 220 end 221 222 begin "rotate normal 5 ${name_postfix}" 223 run_newsyslog $newsyslog_args 224 ckfe ${LOGFNAME} 225 ckfe ${dir}${LOGFNAME}.0${ext} 226 ckfe ${dir}${LOGFNAME}.1${ext} 227 ckfe ${dir}${LOGFNAME}.2${ext} 228 cknt ${dir}${LOGFNAME}.4${ext} 229 end 230 231 # Wait a bit so we can see if the noaction test rotates files 232 sleep 1.1 233 234 begin "noaction ${name_postfix}" 235 ofiles=`ls -Tl ${dir}${LOGFNAME}.*${ext} | tr -d '\n'` 236 run_newsyslog ${newsyslog_args} -n >/dev/null 237 ckfe ${LOGFNAME} 238 ckstr "$ofiles" "`ls -lT ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`" 239 end 240 241 tmpdir_clean 242} 243 244tests_normal_rotate_keepn() { 245 cnt="$1" 246 ext="$2" 247 dir="$3" 248 249 if [ -n "$dir" ]; then 250 newsyslog_args=" -a ${dir}" 251 name_postfix="${ext} archive dir" 252 else 253 newsyslog_args="" 254 name_postfix="${ext}" 255 fi 256 257 tmpdir_create 258 259 begin "create file ${name_postfix}" -newdir 260 run_newsyslog -C 261 ckfe $LOGFNAME 262 cknt ${dir}${LOGFNAME}.0${ext} 263 end 264 265 begin "rotate normal 1 cnt=$cnt ${name_postfix}" 266 run_newsyslog $newsyslog_args 267 ckfe ${LOGFNAME} 268 ckntfe 1 $cnt ${dir}${LOGFNAME}.0${ext} 269 cknt ${dir}${LOGFNAME}.1${ext} 270 end 271 272 begin "rotate normal 2 cnt=$cnt ${name_postfix}" 273 run_newsyslog $newsyslog_args 274 ckfe ${LOGFNAME} 275 ckntfe 1 $cnt ${dir}${LOGFNAME}.0${ext} 276 ckntfe 2 $cnt ${dir}${LOGFNAME}.1${ext} 277 cknt ${dir}${LOGFNAME}.2${ext} 278 end 279 280 begin "rotate normal 3 cnt=$cnt ${name_postfix}" 281 run_newsyslog $newsyslog_args 282 ckfe ${LOGFNAME} 283 ckntfe 1 $cnt ${dir}${LOGFNAME}.0${ext} 284 ckntfe 2 $cnt ${dir}${LOGFNAME}.1${ext} 285 ckntfe 3 $cnt ${dir}${LOGFNAME}.2${ext} 286 cknt ${dir}${LOGFNAME}.3${ext} 287 end 288 289 begin "rotate normal 3 cnt=$cnt ${name_postfix}" 290 run_newsyslog $newsyslog_args 291 ckfe ${LOGFNAME} 292 ckntfe 1 $cnt ${dir}${LOGFNAME}.0${ext} 293 ckntfe 2 $cnt ${dir}${LOGFNAME}.1${ext} 294 ckntfe 3 $cnt ${dir}${LOGFNAME}.2${ext} 295 ckntfe 4 $cnt ${dir}${LOGFNAME}.3${ext} 296 cknt ${dir}${LOGFNAME}.4${ext} 297 end 298 299 # Wait a bit so we can see if the noaction test rotates files 300 sleep 1.1 301 302 begin "noaction ${name_postfix}" 303 osum=`md5 ${dir}${LOGFNAME} | tr -d '\n'` 304 run_newsyslog ${newsyslog_args} -n >/dev/null 305 ckfe ${LOGFNAME} 306 ckstr "$osum" "`md5 ${dir}${LOGFNAME} | tr -d '\n'`" 307 end 308 309 tmpdir_clean 310} 311 312tests_time_rotate() { 313 ext="$1" 314 dir="$2" 315 316 if [ -n "$dir" ]; then 317 newsyslog_args="-t DEFAULT -a ${dir}" 318 name_postfix="${ext} archive dir" 319 else 320 newsyslog_args="-t DEFAULT" 321 name_postfix="${ext}" 322 fi 323 324 tmpdir_create 325 326 begin "create file ${name_postfix}" -newdir 327 run_newsyslog -C ${newsyslog_args} 328 ckfe ${LOGFNAME} 329 end 330 331 begin "rotate time 1 ${name_postfix}" 332 run_newsyslog ${newsyslog_args} 333 ckfe ${LOGFNAME} 334 chkfcnt 1 ${dir}${LOGFNAME}.*${ext} 335 end 336 337 sleep 1.1 338 339 begin "rotate time 2 ${name_postfix}" 340 run_newsyslog ${newsyslog_args} 341 ckfe ${LOGFNAME} 342 chkfcnt 2 ${dir}${LOGFNAME}.*${ext} 343 end 344 345 sleep 1.1 346 347 begin "rotate time 3 ${name_postfix}" 348 run_newsyslog ${newsyslog_args} 349 ckfe ${LOGFNAME} 350 chkfcnt 3 ${dir}${LOGFNAME}.*${ext} 351 end 352 353 sleep 1.1 354 355 begin "rotate time 4 ${name_postfix}" 356 run_newsyslog ${newsyslog_args} 357 ckfe ${LOGFNAME} 358 chkfcnt 3 ${dir}${LOGFNAME}.*${ext} 359 end 360 361 begin "noaction ${name_postfix}" 362 ofiles=`ls -1 ${dir}${LOGFNAME}.*${ext} | tr -d '\n'` 363 run_newsyslog ${newsyslog_args} -n >/dev/null 364 ckfe ${LOGFNAME} 365 ckstr "$ofiles" "`ls -1 ${dir}${LOGFNAME}.*${ext} | tr -d '\n'`" 366 end 367 368 tmpdir_clean 369} 370 371echo 1..126 372mkdir -p ${TMPDIR} 373cd ${TMPDIR} 374 375LOGFNAME=foo.log 376LOGFPATH=${TMPDIR}/log/${LOGFNAME} 377 378# Normal, no archive dir, keep X files 379echo "$LOGFPATH 640 0 * @T00 NC" > newsyslog.conf 380tests_normal_rotate_keepn 0 381 382echo "$LOGFPATH 640 1 * @T00 NC" > newsyslog.conf 383tests_normal_rotate_keepn 1 384 385echo "$LOGFPATH 640 2 * @T00 NC" > newsyslog.conf 386tests_normal_rotate_keepn 2 387 388echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf 389tests_normal_rotate_keepn 3 390 391# Normal, no archive dir, keep X files, gz 392echo "$LOGFPATH 640 0 * @T00 NCZ" > newsyslog.conf 393tests_normal_rotate_keepn 0 ".gz" 394 395echo "$LOGFPATH 640 1 * @T00 NCZ" > newsyslog.conf 396tests_normal_rotate_keepn 1 ".gz" 397 398echo "$LOGFPATH 640 2 * @T00 NCZ" > newsyslog.conf 399tests_normal_rotate_keepn 2 ".gz" 400 401echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf 402tests_normal_rotate_keepn 3 ".gz" 403 404# Normal, no archive dir 405echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf 406tests_normal_rotate 407 408echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf 409tests_normal_rotate ".gz" 410 411echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf 412tests_normal_rotate ".bz2" 413 414# Normal, archive dir 415echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf 416tests_normal_rotate "" "${TMPDIR}/alog/" 417 418echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf 419tests_normal_rotate ".gz" "${TMPDIR}/alog/" 420 421echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf 422tests_normal_rotate ".bz2" "${TMPDIR}/alog/" 423 424# Time based, no archive dir 425echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf 426tests_time_rotate 427 428echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf 429tests_time_rotate "gz" "" 430 431echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf 432tests_time_rotate "bz2" "" 433 434# Time based, archive dir 435echo "$LOGFPATH 640 3 * @T00 NC" > newsyslog.conf 436tests_time_rotate "" "${TMPDIR}/alog/" 437 438echo "$LOGFPATH 640 3 * @T00 NCZ" > newsyslog.conf 439tests_time_rotate "gz" "${TMPDIR}/alog/" 440 441echo "$LOGFPATH 640 3 * @T00 NCJ" > newsyslog.conf 442tests_time_rotate "bz2" "${TMPDIR}/alog/" 443 444rm -rf "${TMPDIR}" 445