1#!/bin/sh 2# 3# "$Id: run-stp-tests.sh 12104 2014-08-20 15:23:40Z msweet $" 4# 5# Perform the complete set of IPP compliance tests specified in the 6# CUPS Software Test Plan. 7# 8# Copyright 2007-2014 by Apple Inc. 9# Copyright 1997-2007 by Easy Software Products, all rights reserved. 10# 11# These coded instructions, statements, and computer programs are the 12# property of Apple Inc. and are protected by Federal copyright 13# law. Distribution and use rights are outlined in the file "LICENSE.txt" 14# which should have been included with this file. If this file is 15# file is missing or damaged, see the license at "http://www.cups.org/". 16# 17 18argcount=$# 19 20# 21# Don't allow "make check" or "make test" to be run by root... 22# 23 24if test "x`id -u`" = x0; then 25 echo Please run this as a normal user. Not supported when run as root. 26 exit 1 27fi 28 29# 30# Force the permissions of the files we create... 31# 32 33umask 022 34 35# 36# Make the IPP test program... 37# 38 39make 40 41# 42# Solaris has a non-POSIX grep in /bin... 43# 44 45if test -x /usr/xpg4/bin/grep; then 46 GREP=/usr/xpg4/bin/grep 47else 48 GREP=grep 49fi 50 51# 52# Figure out the proper echo options... 53# 54 55if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then 56 ac_n=-n 57 ac_c= 58else 59 ac_n= 60 ac_c='\c' 61fi 62 63# 64# Greet the tester... 65# 66 67echo "Welcome to the CUPS Automated Test Script." 68echo "" 69echo "Before we begin, it is important that you understand that the larger" 70echo "tests require significant amounts of RAM and disk space. If you" 71echo "attempt to run one of the big tests on a system that lacks sufficient" 72echo "disk and virtual memory, the UNIX kernel might decide to kill one or" 73echo "more system processes that you've grown attached to, like the X" 74echo "server. The question you may want to ask yourself before running a" 75echo "large test is: Do you feel lucky?" 76echo "" 77echo "OK, now that we have the Dirty Harry quote out of the way, please" 78echo "choose the type of test you wish to perform:" 79echo "" 80echo "0 - No testing, keep the scheduler running for me (all systems)" 81echo "1 - Basic conformance test, no load testing (all systems)" 82echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)" 83echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)" 84echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)" 85echo "" 86echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c" 87 88if test $# -gt 0; then 89 testtype=$1 90 shift 91else 92 read testtype 93fi 94echo "" 95 96case "$testtype" in 97 0) 98 echo "Running in test mode (0)" 99 nprinters1=0 100 nprinters2=0 101 pjobs=0 102 pprinters=0 103 loglevel="debug2" 104 ;; 105 2) 106 echo "Running the medium tests (2)" 107 nprinters1=10 108 nprinters2=20 109 pjobs=20 110 pprinters=10 111 loglevel="debug" 112 ;; 113 3) 114 echo "Running the extreme tests (3)" 115 nprinters1=500 116 nprinters2=1000 117 pjobs=100 118 pprinters=50 119 loglevel="debug" 120 ;; 121 4) 122 echo "Running the torture tests (4)" 123 nprinters1=10000 124 nprinters2=20000 125 pjobs=200 126 pprinters=100 127 loglevel="debug" 128 ;; 129 *) 130 echo "Running the timid tests (1)" 131 nprinters1=0 132 nprinters2=0 133 pjobs=10 134 pprinters=0 135 loglevel="debug2" 136 ;; 137esac 138 139# 140# See if we want to do SSL testing... 141# 142 143echo "" 144echo "Now you can choose whether to create a SSL/TLS encryption key and" 145echo "certificate for testing; these tests currently require the OpenSSL" 146echo "tools:" 147echo "" 148echo "0 - Do not do SSL/TLS encryption tests" 149echo "1 - Test but do not require encryption" 150echo "2 - Test and require encryption" 151echo "" 152echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c" 153 154if test $# -gt 0; then 155 ssltype=$1 156 shift 157else 158 read ssltype 159fi 160echo "" 161 162case "$ssltype" in 163 1) 164 echo "Will test but not require encryption (1)" 165 ;; 166 2) 167 echo "Will test and require encryption (2)" 168 ;; 169 *) 170 echo "Not using SSL/TLS (0)" 171 ssltype=0 172 ;; 173esac 174 175# 176# Information for the server/tests... 177# 178 179user="$USER" 180if test -z "$user"; then 181 if test -x /usr/ucb/whoami; then 182 user=`/usr/ucb/whoami` 183 else 184 user=`whoami` 185 fi 186 187 if test -z "$user"; then 188 user="unknown" 189 fi 190fi 191 192port=8631 193cwd=`pwd` 194root=`dirname $cwd` 195CUPS_TESTROOT="$root"; export CUPS_TESTROOT 196 197if test -d /private/tmp; then 198 BASE=/private/tmp/cups-$user 199else 200 BASE=/tmp/cups-$user 201fi 202export BASE 203 204# 205# Make sure that the LPDEST and PRINTER environment variables are 206# not included in the environment that is passed to the tests. These 207# will usually cause tests to fail erroneously... 208# 209 210unset LPDEST 211unset PRINTER 212 213# 214# See if we want to use valgrind... 215# 216 217echo "" 218echo "This test script can use the Valgrind software from:" 219echo "" 220echo " http://developer.kde.org/~sewardj/" 221echo "" 222echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c" 223 224if test $# -gt 0; then 225 usevalgrind=$1 226 shift 227else 228 read usevalgrind 229fi 230echo "" 231 232case "$usevalgrind" in 233 Y* | y*) 234 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes --read-var-info=yes" 235 if test `uname` = Darwin; then 236 VALGRIND="$VALGRIND --dsymutil=yes" 237 fi 238 export VALGRIND 239 echo "Using Valgrind; log files can be found in $BASE/log..." 240 ;; 241 242 *) 243 VALGRIND="" 244 export VALGRIND 245 ;; 246esac 247 248# 249# See if we want to do debug logging of the libraries... 250# 251 252echo "" 253echo "If CUPS was built with the --enable-debug-printfs configure option, you" 254echo "can enable debug logging of the libraries." 255echo "" 256echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c" 257 258if test $# -gt 0; then 259 usedebugprintfs=$1 260 shift 261else 262 read usedebugprintfs 263fi 264echo "" 265 266case "$usedebugprintfs" in 267 Y* | y*) 268 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..." 269 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG 270 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL 271 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER 272 ;; 273 274 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9) 275 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..." 276 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG 277 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL 278 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER 279 ;; 280 281 *) 282 ;; 283esac 284 285# 286# Start by creating temporary directories for the tests... 287# 288 289echo "Creating directories for test..." 290 291rm -rf $BASE 292mkdir $BASE 293mkdir $BASE/bin 294mkdir $BASE/bin/backend 295mkdir $BASE/bin/driver 296mkdir $BASE/bin/filter 297mkdir $BASE/certs 298mkdir $BASE/share 299mkdir $BASE/share/banners 300mkdir $BASE/share/drv 301mkdir $BASE/share/locale 302for file in ../locale/cups_*.po; do 303 loc=`basename $file .po | cut -c 6-` 304 mkdir $BASE/share/locale/$loc 305 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc 306 ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc 307done 308mkdir $BASE/share/mime 309mkdir $BASE/share/model 310mkdir $BASE/share/ppdc 311mkdir $BASE/interfaces 312mkdir $BASE/log 313mkdir $BASE/ppd 314mkdir $BASE/spool 315mkdir $BASE/spool/temp 316mkdir $BASE/ssl 317 318ln -s $root/backend/dnssd $BASE/bin/backend 319ln -s $root/backend/http $BASE/bin/backend 320ln -s $root/backend/ipp $BASE/bin/backend 321ln -s $root/backend/lpd $BASE/bin/backend 322ln -s $root/backend/mdns $BASE/bin/backend 323ln -s $root/backend/pseudo $BASE/bin/backend 324ln -s $root/backend/snmp $BASE/bin/backend 325ln -s $root/backend/socket $BASE/bin/backend 326ln -s $root/backend/usb $BASE/bin/backend 327ln -s $root/cgi-bin $BASE/bin 328ln -s $root/monitor $BASE/bin 329ln -s $root/notifier $BASE/bin 330ln -s $root/scheduler $BASE/bin/daemon 331ln -s $root/filter/commandtops $BASE/bin/filter 332ln -s $root/filter/gziptoany $BASE/bin/filter 333ln -s $root/filter/pstops $BASE/bin/filter 334ln -s $root/filter/rastertoepson $BASE/bin/filter 335ln -s $root/filter/rastertohp $BASE/bin/filter 336ln -s $root/filter/rastertolabel $BASE/bin/filter 337ln -s $root/filter/rastertopwg $BASE/bin/filter 338 339ln -s $root/data/classified $BASE/share/banners 340ln -s $root/data/confidential $BASE/share/banners 341ln -s $root/data/secret $BASE/share/banners 342ln -s $root/data/standard $BASE/share/banners 343ln -s $root/data/topsecret $BASE/share/banners 344ln -s $root/data/unclassified $BASE/share/banners 345ln -s $root/data $BASE/share 346ln -s $root/ppdc/sample.drv $BASE/share/drv 347ln -s $root/conf/mime.types $BASE/share/mime 348ln -s $root/conf/mime.convs $BASE/share/mime 349ln -s $root/data/*.h $BASE/share/ppdc 350ln -s $root/data/*.defs $BASE/share/ppdc 351ln -s $root/templates $BASE/share 352 353# 354# Local filters and configuration files... 355# 356 357instfilter() { 358 # instfilter src dst format 359 # 360 # See if the filter exists in a standard location; if so, make a 361 # symlink, otherwise create a dummy script for the specified format. 362 # 363 src="$1" 364 dst="$2" 365 format="$3" 366 367 for dir in /usr/libexec/cups/filter /usr/lib/cups/filter; do 368 if test -x "$dir/$src"; then 369 ln -s "$dir/$src" "$BASE/bin/filter/$dst" 370 return 371 fi 372 done 373 374 # Source filter not present, create a dummy filter 375 case $format in 376 passthru) 377 ln -s gziptoany "$BASE/bin/filter/$dst" 378 ;; 379 pdf) 380 cat >"$BASE/bin/filter/$dst" <<EOF 381#!/bin/sh 382case "\$5" in 383 *media=a4* | *media=iso_a4* | *PageSize=A4*) 384 cat "$root/test/onepage-a4.pdf" 385 ;; 386 *) 387 cat "$root/test/onepage-letter.pdf" 388 ;; 389esac 390EOF 391 chmod +x "$BASE/bin/filter/$dst" 392 ;; 393 ps) 394 cat >"$BASE/bin/filter/$dst" <<EOF 395#!/bin/sh 396case "\$5" in 397 *media=a4* | *media=iso_a4* | *PageSize=A4*) 398 cat "$root/test/onepage-a4.ps" 399 ;; 400 *) 401 cat "$root/test/onepage-letter.ps" 402 ;; 403esac 404EOF 405 chmod +x "$BASE/bin/filter/$dst" 406 ;; 407 raster) 408 cat >"$BASE/bin/filter/$dst" <<EOF 409#!/bin/sh 410case "\$5" in 411 *media=a4* | *media=iso_a4* | *PageSize=A4*) 412 gunzip -c "$root/test/onepage-a4-300-black-1.pwg.gz" 413 ;; 414 *) 415 gunzip -c "$root/test/onepage-letter-300-black-1.pwg.gz" 416 ;; 417esac 418EOF 419 chmod +x "$BASE/bin/filter/$dst" 420 ;; 421 esac 422} 423 424ln -s $root/test/test.convs $BASE/share/mime 425 426if test `uname` = Darwin; then 427 instfilter cgbannertopdf bannertopdf pdf 428 instfilter cgimagetopdf imagetopdf pdf 429 instfilter cgpdftopdf pdftopdf passthru 430 instfilter cgpdftops pdftops ps 431 instfilter cgpdftoraster pdftoraster raster 432 instfilter cgtexttopdf texttopdf pdf 433 instfilter pstocupsraster pstoraster raster 434 instfilter pstopdffilter pstopdf pdf 435else 436 instfilter bannertopdf bannertopdf pdf 437 instfilter bannertops bannertops ps 438 instfilter imagetopdf imagetopdf pdf 439 instfilter pdftopdf pdftopdf passthru 440 instfilter pdftops pdftops ps 441 instfilter pdftoraster pdftoraster raster 442 instfilter pstoraster pstoraster raster 443 instfilter texttopdf texttopdf pdf 444 445 if test -d /usr/share/cups/charsets; then 446 ln -s /usr/share/cups/charsets $BASE/share 447 fi 448fi 449 450# 451# Then create the necessary config files... 452# 453 454echo "Creating cupsd.conf for test..." 455 456if test $ssltype = 2; then 457 encryption="Encryption Required" 458else 459 encryption="" 460fi 461 462cat >$BASE/cupsd.conf <<EOF 463StrictConformance Yes 464Browsing Off 465Listen localhost:$port 466Listen $BASE/sock 467PassEnv LOCALEDIR 468PassEnv DYLD_INSERT_LIBRARIES 469MaxSubscriptions 3 470MaxLogSize 0 471AccessLogLevel actions 472LogLevel $loglevel 473LogTimeFormat usecs 474PreserveJobHistory Yes 475PreserveJobFiles No 476<Policy default> 477<Limit All> 478Order Allow,Deny 479$encryption 480</Limit> 481</Policy> 482EOF 483 484if test $testtype = 0; then 485 echo WebInterface yes >>$BASE/cupsd.conf 486fi 487 488cat >$BASE/cups-files.conf <<EOF 489FileDevice yes 490Printcap 491User $user 492ServerRoot $BASE 493StateDir $BASE 494ServerBin $BASE/bin 495CacheDir $BASE/share 496DataDir $BASE/share 497FontPath $BASE/share/fonts 498DocumentRoot $root/doc 499RequestRoot $BASE/spool 500TempDir $BASE/spool/temp 501AccessLog $BASE/log/access_log 502ErrorLog $BASE/log/error_log 503PageLog $BASE/log/page_log 504EOF 505 506if test $ssltype != 0 -a `uname` = Darwin; then 507 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf 508fi 509 510# 511# Setup lots of test queues - half with PPD files, half without... 512# 513 514echo "Creating printers.conf for test..." 515 516i=1 517while test $i -le $nprinters1; do 518 cat >>$BASE/printers.conf <<EOF 519<Printer test-$i> 520Accepting Yes 521DeviceURI file:/dev/null 522Info Test PS printer $i 523JobSheets none none 524Location CUPS test suite 525State Idle 526StateMessage Printer $1 is idle. 527</Printer> 528EOF 529 530 cp testps.ppd $BASE/ppd/test-$i.ppd 531 532 i=`expr $i + 1` 533done 534 535while test $i -le $nprinters2; do 536 cat >>$BASE/printers.conf <<EOF 537<Printer test-$i> 538Accepting Yes 539DeviceURI file:/dev/null 540Info Test raw printer $i 541JobSheets none none 542Location CUPS test suite 543State Idle 544StateMessage Printer $1 is idle. 545</Printer> 546EOF 547 548 i=`expr $i + 1` 549done 550 551if test -f $BASE/printers.conf; then 552 cp $BASE/printers.conf $BASE/printers.conf.orig 553else 554 touch $BASE/printers.conf.orig 555fi 556 557# 558# Setup the paths... 559# 560 561echo "Setting up environment variables for test..." 562 563if test "x$LD_LIBRARY_PATH" = x; then 564 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc" 565else 566 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH" 567fi 568 569export LD_LIBRARY_PATH 570 571LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/ppdc/libcupsppdc.so.1" 572if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then 573 LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD" 574fi 575export LD_PRELOAD 576 577if test "x$DYLD_LIBRARY_PATH" = x; then 578 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc" 579else 580 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH" 581fi 582 583export DYLD_LIBRARY_PATH 584 585if test "x$SHLIB_PATH" = x; then 586 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc" 587else 588 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH" 589fi 590 591export SHLIB_PATH 592 593CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT 594CUPS_SERVER=localhost:8631; export CUPS_SERVER 595CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT 596CUPS_STATEDIR=$BASE; export CUPS_STATEDIR 597CUPS_DATADIR=$BASE/share; export CUPS_DATADIR 598LOCALEDIR=$BASE/share/locale; export LOCALEDIR 599 600# 601# Set a new home directory to avoid getting user options mixed in... 602# 603 604HOME=$BASE 605export HOME 606 607# 608# Force POSIX locale for tests... 609# 610 611LANG=C 612export LANG 613 614LC_MESSAGES=C 615export LC_MESSAGES 616 617# 618# Start the server; run as foreground daemon in the background... 619# 620 621echo "Starting scheduler:" 622echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &" 623echo "" 624 625if test `uname` = Darwin -a "x$VALGRIND" = x; then 626 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 & 627else 628 $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 & 629fi 630 631cupsd=$! 632 633if test "x$testtype" = x0; then 634 # Not running tests... 635 echo "Scheduler is PID $cupsd and is listening on port 8631." 636 echo "" 637 638 # Create a helper script to run programs with... 639 runcups="$BASE/runcups" 640 641 echo "#!/bin/sh" >$runcups 642 echo "# Helper script for running CUPS test instance." >>$runcups 643 echo "" >>$runcups 644 echo "# Set required environment variables..." >>$runcups 645 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups 646 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups 647 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups 648 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups 649 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups 650 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups 651 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups 652 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups 653 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups 654 if test "x$CUPS_DEBUG_LEVEL" != x; then 655 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups 656 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups 657 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups 658 fi 659 echo "" >>$runcups 660 echo "# Run command..." >>$runcups 661 echo "exec \"\$@\"" >>$runcups 662 663 chmod +x $runcups 664 665 echo "The $runcups helper script can be used to test programs" 666 echo "with the server." 667 exit 0 668fi 669 670if test $argcount -eq 0; then 671 echo "Scheduler is PID $cupsd; run debugger now if you need to." 672 echo "" 673 echo $ac_n "Press ENTER to continue... $ac_c" 674 read junk 675else 676 echo "Scheduler is PID $cupsd." 677 sleep 2 678fi 679 680IPP_PORT=$port; export IPP_PORT 681 682while true; do 683 running=`../systemv/lpstat -r 2>/dev/null` 684 if test "x$running" = "xscheduler is running"; then 685 break 686 fi 687 688 echo "Waiting for scheduler to become ready..." 689 sleep 10 690done 691 692# 693# Create the test report source file... 694# 695 696date=`date "+%Y-%m-%d"` 697strfile=$BASE/cups-str-2.0-$date-$user.html 698 699rm -f $strfile 700cat str-header.html >$strfile 701 702# 703# Run the IPP tests... 704# 705 706echo "" 707echo "Running IPP compliance tests..." 708 709echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile 710echo "<P>This section provides the results to the IPP compliance tests" >>$strfile 711echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile 712echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile 713echo "<PRE>" >>$strfile 714 715fail=0 716for file in 4*.test ipp-2.1.test; do 717 echo $ac_n "Performing $file: $ac_c" 718 echo "" >>$strfile 719 720 if test $file = ipp-2.1.test; then 721 uri="ipp://localhost:$port/printers/Test1" 722 options="-V 2.1 -d NOPRINT=1 -f testfile.ps" 723 else 724 uri="ipp://localhost:$port/printers" 725 options="" 726 fi 727 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile 728 status=$? 729 730 if test $status != 0; then 731 echo FAIL 732 fail=`expr $fail + 1` 733 else 734 echo PASS 735 fi 736done 737 738echo "</PRE>" >>$strfile 739 740# 741# Run the command tests... 742# 743 744echo "" 745echo "Running command tests..." 746 747echo "<H1>2 - Command Tests</H1>" >>$strfile 748echo "<P>This section provides the results to the command tests" >>$strfile 749echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile 750echo $date by $user on `hostname`. >>$strfile 751echo "<PRE>" >>$strfile 752 753for file in 5*.sh; do 754 echo $ac_n "Performing $file: $ac_c" 755 echo "" >>$strfile 756 echo "\"$file\":" >>$strfile 757 758 sh $file $pjobs $pprinters >> $strfile 759 status=$? 760 761 if test $status != 0; then 762 echo FAIL 763 fail=`expr $fail + 1` 764 else 765 echo PASS 766 fi 767done 768 769# 770# Log all allocations made by the scheduler... 771# 772if test `uname` = Darwin -a "x$VALGRIND" = x; then 773 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1 774fi 775 776# 777# Restart the server... 778# 779 780echo $ac_n "Performing restart test: $ac_c" 781echo "" >>$strfile 782echo "\"5.10-restart\":" >>$strfile 783 784kill -HUP $cupsd 785 786while true; do 787 sleep 10 788 789 running=`../systemv/lpstat -r 2>/dev/null` 790 if test "x$running" = "xscheduler is running"; then 791 break 792 fi 793done 794 795description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`" 796if test "x$description" != "xTest Printer 1"; then 797 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile 798 echo "FAIL (got '$description', expected 'Test Printer 1')" 799 fail=`expr $fail + 1` 800else 801 echo "Passed." >>$strfile 802 echo PASS 803fi 804 805echo "</PRE>" >>$strfile 806 807# 808# Stop the server... 809# 810 811kill $cupsd 812 813# 814# Append the log files for post-mortim... 815# 816 817echo "<H1>3 - Log Files</H1>" >>$strfile 818 819# 820# Verify counts... 821# 822 823echo "Test Summary" 824echo "" 825echo "<H2>Summary</H2>" >>$strfile 826 827# Job control files 828count=`ls -1 $BASE/spool | wc -l` 829count=`expr $count - 1` 830if test $count != 0; then 831 echo "FAIL: $count job control files were not purged." 832 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile 833 fail=`expr $fail + 1` 834else 835 echo "PASS: All job control files purged." 836 echo "<P>PASS: All job control files purged.</P>" >>$strfile 837fi 838 839# Pages printed on Test1 (within 1 page for timing-dependent cancel issues) 840count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'` 841expected=`expr $pjobs \* 2 + 34` 842expected2=`expr $expected + 2` 843if test $count -lt $expected -a $count -gt $expected2; then 844 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected." 845 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile 846 fail=`expr $fail + 1` 847else 848 echo "PASS: Printer 'Test1' correctly produced $count page(s)." 849 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile 850fi 851 852# Paged printed on Test2 853count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'` 854expected=`expr $pjobs \* 2 + 3` 855if test $count != $expected; then 856 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected." 857 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile 858 fail=`expr $fail + 1` 859else 860 echo "PASS: Printer 'Test2' correctly produced $count page(s)." 861 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile 862fi 863 864# Paged printed on Test3 865count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'` 866expected=2 867if test $count != $expected; then 868 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected." 869 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile 870 fail=`expr $fail + 1` 871else 872 echo "PASS: Printer 'Test3' correctly produced $count page(s)." 873 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile 874fi 875 876# Requests logged 877count=`wc -l $BASE/log/access_log | awk '{print $1}'` 878expected=`expr 37 + 18 + 28 + $pjobs \* 8 + $pprinters \* $pjobs \* 4` 879if test $count != $expected; then 880 echo "FAIL: $count requests logged, expected $expected." 881 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile 882 fail=`expr $fail + 1` 883else 884 echo "PASS: $count requests logged." 885 echo "<P>PASS: $count requests logged.</P>" >>$strfile 886fi 887 888# Did CUPS-Get-Default get logged? 889if $GREP -q CUPS-Get-Default $BASE/log/access_log; then 890 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'" 891 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile 892 echo "<PRE>" >>$strfile 893 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 894 echo "</PRE>" >>$strfile 895 fail=`expr $fail + 1` 896else 897 echo "PASS: CUPS-Get-Default not logged." 898 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile 899fi 900 901# Emergency log messages 902count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'` 903if test $count != 0; then 904 echo "FAIL: $count emergency messages, expected 0." 905 $GREP '^X ' $BASE/log/error_log 906 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile 907 echo "<PRE>" >>$strfile 908 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 909 echo "</PRE>" >>$strfile 910 fail=`expr $fail + 1` 911else 912 echo "PASS: $count emergency messages." 913 echo "<P>PASS: $count emergency messages.</P>" >>$strfile 914fi 915 916# Alert log messages 917count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'` 918if test $count != 0; then 919 echo "FAIL: $count alert messages, expected 0." 920 $GREP '^A ' $BASE/log/error_log 921 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile 922 echo "<PRE>" >>$strfile 923 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 924 echo "</PRE>" >>$strfile 925 fail=`expr $fail + 1` 926else 927 echo "PASS: $count alert messages." 928 echo "<P>PASS: $count alert messages.</P>" >>$strfile 929fi 930 931# Critical log messages 932count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'` 933if test $count != 0; then 934 echo "FAIL: $count critical messages, expected 0." 935 $GREP '^C ' $BASE/log/error_log 936 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile 937 echo "<PRE>" >>$strfile 938 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 939 echo "</PRE>" >>$strfile 940 fail=`expr $fail + 1` 941else 942 echo "PASS: $count critical messages." 943 echo "<P>PASS: $count critical messages.</P>" >>$strfile 944fi 945 946# Error log messages 947count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'` 948if test $count != 33; then 949 echo "FAIL: $count error messages, expected 33." 950 $GREP '^E ' $BASE/log/error_log 951 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile 952 echo "<PRE>" >>$strfile 953 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 954 echo "</PRE>" >>$strfile 955 fail=`expr $fail + 1` 956else 957 echo "PASS: $count error messages." 958 echo "<P>PASS: $count error messages.</P>" >>$strfile 959fi 960 961# Warning log messages 962count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'` 963if test $count != 18; then 964 echo "FAIL: $count warning messages, expected 18." 965 $GREP '^W ' $BASE/log/error_log 966 echo "<P>FAIL: $count warning messages, expected 18.</P>" >>$strfile 967 echo "<PRE>" >>$strfile 968 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 969 echo "</PRE>" >>$strfile 970 fail=`expr $fail + 1` 971else 972 echo "PASS: $count warning messages." 973 echo "<P>PASS: $count warning messages.</P>" >>$strfile 974fi 975 976# Notice log messages 977count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'` 978if test $count != 0; then 979 echo "FAIL: $count notice messages, expected 0." 980 $GREP '^N ' $BASE/log/error_log 981 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile 982 echo "<PRE>" >>$strfile 983 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 984 echo "</PRE>" >>$strfile 985 fail=`expr $fail + 1` 986else 987 echo "PASS: $count notice messages." 988 echo "<P>PASS: $count notice messages.</P>" >>$strfile 989fi 990 991# Info log messages 992count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'` 993if test $count = 0; then 994 echo "FAIL: $count info messages, expected more than 0." 995 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile 996 fail=`expr $fail + 1` 997else 998 echo "PASS: $count info messages." 999 echo "<P>PASS: $count info messages.</P>" >>$strfile 1000fi 1001 1002# Debug log messages 1003count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'` 1004if test $count = 0; then 1005 echo "FAIL: $count debug messages, expected more than 0." 1006 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile 1007 fail=`expr $fail + 1` 1008else 1009 echo "PASS: $count debug messages." 1010 echo "<P>PASS: $count debug messages.</P>" >>$strfile 1011fi 1012 1013# Debug2 log messages 1014count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'` 1015if test $count = 0; then 1016 echo "FAIL: $count debug2 messages, expected more than 0." 1017 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile 1018 fail=`expr $fail + 1` 1019else 1020 echo "PASS: $count debug2 messages." 1021 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile 1022fi 1023 1024# Log files... 1025echo "<H2>access_log</H2>" >>$strfile 1026echo "<PRE>" >>$strfile 1027sed -e '1,$s/&/&/g' -e '1,$s/</</g' $BASE/log/access_log >>$strfile 1028echo "</PRE>" >>$strfile 1029 1030echo "<H2>error_log</H2>" >>$strfile 1031echo "<PRE>" >>$strfile 1032$GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile 1033echo "</PRE>" >>$strfile 1034 1035echo "<H2>page_log</H2>" >>$strfile 1036echo "<PRE>" >>$strfile 1037sed -e '1,$s/&/&/g' -e '1,$s/</</g' $BASE/log/page_log >>$strfile 1038echo "</PRE>" >>$strfile 1039 1040# 1041# Format the reports and tell the user where to find them... 1042# 1043 1044cat str-trailer.html >>$strfile 1045 1046echo "" 1047 1048if test $fail != 0; then 1049 echo "$fail tests failed." 1050 cp $BASE/log/error_log error_log-$date-$user 1051 cp $strfile . 1052else 1053 echo "All tests were successful." 1054fi 1055 1056echo "Log files can be found in $BASE/log." 1057echo "A HTML report was created in $strfile." 1058echo "" 1059 1060if test $fail != 0; then 1061 echo "Copies of the error_log and `basename $strfile` files are in" 1062 echo "`pwd`." 1063 echo "" 1064 1065 exit 1 1066fi 1067 1068# 1069# End of "$Id: run-stp-tests.sh 12104 2014-08-20 15:23:40Z msweet $" 1070# 1071