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