3 # Perform the complete set of IPP compliance tests specified in the
4 # CUPS Software Test Plan.
6 # Copyright © 2007-2018 by Apple Inc.
7 # Copyright © 1997-2007 by Easy Software Products, all rights reserved.
9 # Licensed under Apache License v2.0. See the file "LICENSE" for more
16 # Don't allow "make check" or "make test" to be run by root...
19 if test "x`id -u`" = x0
; then
20 echo Please run this as a normal user. Not supported when run as root.
25 # Force the permissions of the files we create...
31 # Make the IPP test program...
37 # Solaris has a non-POSIX grep in /bin...
40 if test -x /usr
/xpg
4/bin
/grep; then
41 GREP
=/usr
/xpg
4/bin
/grep
47 # Figure out the proper echo options...
50 if (echo "testing\c"; echo 1,2,3) |
$GREP c
>/dev
/null
; then
62 echo "Welcome to the CUPS Automated Test Script."
64 echo "Before we begin, it is important that you understand that the larger"
65 echo "tests require significant amounts of RAM and disk space. If you"
66 echo "attempt to run one of the big tests on a system that lacks sufficient"
67 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
68 echo "more system processes that you've grown attached to, like the X"
69 echo "server. The question you may want to ask yourself before running a"
70 echo "large test is: Do you feel lucky?"
72 echo "OK, now that we have the Dirty Harry quote out of the way, please"
73 echo "choose the type of test you wish to perform:"
75 echo "0 - No testing, keep the scheduler running for me (all systems)"
76 echo "1 - Basic conformance test, no load testing (all systems)"
77 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
78 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
79 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
81 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
83 if test $# -gt 0; then
93 echo "Running in test mode (0)"
101 echo "Running the medium tests (2)"
109 echo "Running the extreme tests (3)"
117 echo "Running the torture tests (4)"
125 echo "Running the timid tests (1)"
136 # See if we want to do SSL testing...
140 echo "Now you can choose whether to create a SSL/TLS encryption key and"
141 echo "certificate for testing:"
143 echo "0 - Do not do SSL/TLS encryption tests"
144 echo "1 - Test but do not require encryption"
145 echo "2 - Test and require encryption"
147 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
149 if test $# -gt 0; then
159 echo "Will test but not require encryption (1)"
162 echo "Will test and require encryption (2)"
165 echo "Not using SSL/TLS (0)"
171 # Information for the server/tests...
175 if test -z "$user"; then
176 if test -x /usr
/ucb
/whoami
; then
177 user
=`/usr/ucb/whoami`
182 if test -z "$user"; then
187 port
="${CUPS_TESTPORT:=8631}"
190 CUPS_TESTROOT
="$root"; export CUPS_TESTROOT
192 BASE
="${CUPS_TESTBASE:=}"
193 if test -z "$BASE"; then
194 if test -d /private
/tmp
; then
195 BASE
=/private
/tmp
/cups-
$user
203 # Make sure that the LPDEST and PRINTER environment variables are
204 # not included in the environment that is passed to the tests. These
205 # will usually cause tests to fail erroneously...
212 # See if we want to use valgrind...
216 echo "This test script can use the Valgrind software from:"
218 echo " http://developer.kde.org/~sewardj/"
220 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
222 if test $# -gt 0; then
230 case "$usevalgrind" in
232 VALGRIND
="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
233 if test `uname` = Darwin
; then
234 VALGRIND
="$VALGRIND --dsymutil=yes"
237 echo "Using Valgrind; log files can be found in $BASE/log..."
247 # See if we want to do debug logging of the libraries...
251 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
252 echo "can enable debug logging of the libraries."
254 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
256 if test $# -gt 0; then
264 case "$usedebugprintfs" in
266 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
267 CUPS_DEBUG_LOG
="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
268 CUPS_DEBUG_LEVEL
=5; export CUPS_DEBUG_LEVEL
269 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
272 0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9)
273 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
274 CUPS_DEBUG_LOG
="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
275 CUPS_DEBUG_LEVEL
="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
276 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
284 # Start by creating temporary directories for the tests...
287 echo "Creating directories for test..."
292 mkdir
$BASE/bin
/backend
293 mkdir
$BASE/bin
/driver
294 mkdir
$BASE/bin
/filter
297 mkdir
$BASE/share
/banners
298 mkdir
$BASE/share
/drv
299 mkdir
$BASE/share
/locale
300 for file in ..
/locale
/cups_
*.po
; do
301 loc
=`basename $file .po | cut -c 6-`
302 mkdir
$BASE/share
/locale
/$loc
303 ln -s $root/locale
/cups_
$loc.po
$BASE/share
/locale
/$loc
305 mkdir
$BASE/share
/locale
/en
306 ln -s $root/locale
/cups.pot
$BASE/share
/locale
/en
/cups_en.po
307 mkdir
$BASE/share
/mime
308 mkdir
$BASE/share
/model
309 mkdir
$BASE/share
/ppdc
310 mkdir
$BASE/interfaces
314 mkdir
$BASE/spool
/temp
317 ln -s $root/backend
/dnssd
$BASE/bin
/backend
318 ln -s $root/backend
/http
$BASE/bin
/backend
319 ln -s $root/backend
/ipp
$BASE/bin
/backend
320 ln -s ipp
$BASE/bin
/backend
/ipps
321 ln -s $root/backend
/lpd
$BASE/bin
/backend
322 ln -s $root/backend
/mdns
$BASE/bin
/backend
323 ln -s $root/backend
/pseudo
$BASE/bin
/backend
324 ln -s $root/backend
/snmp
$BASE/bin
/backend
325 ln -s $root/backend
/socket
$BASE/bin
/backend
326 ln -s $root/backend
/usb
$BASE/bin
/backend
327 ln -s $root/cgi-bin
$BASE/bin
328 ln -s $root/monitor
$BASE/bin
329 ln -s $root/notifier
$BASE/bin
330 ln -s $root/scheduler
$BASE/bin
/daemon
331 ln -s $root/filter
/commandtops
$BASE/bin
/filter
332 ln -s $root/filter
/gziptoany
$BASE/bin
/filter
333 ln -s $root/filter
/pstops
$BASE/bin
/filter
334 ln -s $root/filter
/rastertoepson
$BASE/bin
/filter
335 ln -s $root/filter
/rastertohp
$BASE/bin
/filter
336 ln -s $root/filter
/rastertolabel
$BASE/bin
/filter
337 ln -s $root/filter
/rastertopwg
$BASE/bin
/filter
338 cat >$BASE/share
/banners
/standard
<<EOF
342 Job: {?printer-name}-{?job-id}
343 Owner: {?job-originating-user-name}
345 Pages: {?job-impressions}
350 cat >$BASE/share
/banners
/classified
<<EOF
351 ==== Classified - Do Not Disclose ====
354 Job: {?printer-name}-{?job-id}
355 Owner: {?job-originating-user-name}
357 Pages: {?job-impressions}
360 ==== Classified - Do Not Disclose ====
362 ln -s $root/data
$BASE/share
363 ln -s $root/ppdc
/sample.drv
$BASE/share
/drv
364 ln -s $root/conf
/mime.types
$BASE/share
/mime
365 ln -s $root/conf
/mime.convs
$BASE/share
/mime
366 ln -s $root/data
/*.h
$BASE/share
/ppdc
367 ln -s $root/data
/*.defs
$BASE/share
/ppdc
368 ln -s $root/templates
$BASE/share
371 # Local filters and configuration files...
375 # instfilter src dst format
377 # See if the filter exists in a standard location; if so, make a
378 # symlink, otherwise create a dummy script for the specified format.
384 for dir
in /usr
/local
/libexec
/cups
/filter
/usr
/libexec
/cups
/filter
/usr
/lib
/cups
/filter
; do
385 if test -x "$dir/$src"; then
386 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
391 # Source filter not present, create a dummy filter
394 ln -s gziptoany
"$BASE/bin/filter/$dst"
397 cat >"$BASE/bin/filter/$dst" <<EOF
401 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
403 *media=a4* | *media=iso_a4* | *PageSize=A4*)
404 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
407 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
411 chmod +x
"$BASE/bin/filter/$dst"
414 cat >"$BASE/bin/filter/$dst" <<EOF
418 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
420 *media=a4* | *media=iso_a4* | *PageSize=A4*)
421 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
424 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
428 chmod +x
"$BASE/bin/filter/$dst"
431 cat >"$BASE/bin/filter/$dst" <<EOF
435 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
437 *media=a4* | *media=iso_a4* | *PageSize=A4*)
438 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
441 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
445 chmod +x
"$BASE/bin/filter/$dst"
450 ln -s $root/test
/test.convs
$BASE/share
/mime
451 ln -s $root/test
/test.types
$BASE/share
/mime
453 if test `uname` = Darwin
; then
454 instfilter cgimagetopdf imagetopdf pdf
455 instfilter cgpdftopdf pdftopdf passthru
456 instfilter cgpdftops pdftops ps
457 instfilter cgpdftoraster pdftoraster raster
458 instfilter cgpdftoraster pdftourf raster
459 instfilter cgtexttopdf texttopdf pdf
460 instfilter pstocupsraster pstoraster raster
462 instfilter imagetopdf imagetopdf pdf
463 instfilter pdftopdf pdftopdf passthru
464 instfilter pdftops pdftops ps
465 instfilter pdftoraster pdftoraster raster
466 instfilter pdftoraster pdftourf raster
467 instfilter pstoraster pstoraster raster
468 instfilter texttopdf texttopdf pdf
470 if test -d /usr
/share
/cups
/charsets
; then
471 ln -s /usr
/share
/cups
/charsets
$BASE/share
476 # Then create the necessary config files...
479 echo "Creating cupsd.conf for test..."
481 if test $ssltype = 2; then
482 encryption
="Encryption Required"
487 cat >$BASE/cupsd.conf
<<EOF
488 StrictConformance Yes
490 Listen localhost:$port
494 AccessLogLevel actions
497 PreserveJobHistory Yes
507 if test $testtype = 0; then
508 echo WebInterface
yes >>$BASE/cupsd.conf
511 cat >$BASE/cups-files.conf
<<EOF
520 FontPath $BASE/share/fonts
521 DocumentRoot $root/doc
522 RequestRoot $BASE/spool
523 TempDir $BASE/spool/temp
524 AccessLog $BASE/log/access_log
525 ErrorLog $BASE/log/error_log
526 PageLog $BASE/log/page_log
528 PassEnv DYLD_LIBRARY_PATH
529 PassEnv LD_LIBRARY_PATH
535 if test $ssltype != 0 -a `uname` = Darwin
; then
536 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
540 # Setup lots of test queues - half with PPD files, half without...
543 echo "Creating printers.conf for test..."
546 while test $i -le $nprinters1; do
547 cat >>$BASE/printers.conf
<<EOF
550 DeviceURI file:/dev/null
551 Info Test PS printer $i
553 Location CUPS test suite
555 StateMessage Printer $1 is idle.
559 cp testps.ppd
$BASE/ppd
/test-
$i.ppd
564 while test $i -le $nprinters2; do
565 cat >>$BASE/printers.conf
<<EOF
568 DeviceURI file:/dev/null
569 Info Test raw printer $i
571 Location CUPS test suite
573 StateMessage Printer $1 is idle.
580 if test -f $BASE/printers.conf
; then
581 cp $BASE/printers.conf
$BASE/printers.conf.orig
583 touch $BASE/printers.conf.orig
590 echo "Setting up environment variables for test..."
592 if test "x$LD_LIBRARY_PATH" = x
; then
593 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
595 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
598 export LD_LIBRARY_PATH
600 LD_PRELOAD
="$root/cups/libcups.so.2:$root/cups/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/ppdc/libcupsppdc.so.1"
601 if test `uname` = SunOS
-a -r /usr
/lib
/libCrun.so
.1; then
602 LD_PRELOAD
="/usr/lib/libCrun.so.1:$LD_PRELOAD"
606 if test -f $root/cups
/libcups
.2.dylib
; then
607 if test "x$DYLD_INSERT_LIBRARIES" = x
; then
608 DYLD_INSERT_LIBRARIES
="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib"
610 DYLD_INSERT_LIBRARIES
="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib:$DYLD_INSERT_LIBRARIES"
613 export DYLD_INSERT_LIBRARIES
616 if test "x$DYLD_LIBRARY_PATH" = x
; then
617 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
619 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
622 export DYLD_LIBRARY_PATH
624 if test "x$SHLIB_PATH" = x
; then
625 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
627 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
632 CUPS_DISABLE_APPLE_DEFAULT
=yes; export CUPS_DISABLE_APPLE_DEFAULT
633 CUPS_SERVER
=localhost
:$port; export CUPS_SERVER
634 CUPS_SERVERROOT
=$BASE; export CUPS_SERVERROOT
635 CUPS_STATEDIR
=$BASE; export CUPS_STATEDIR
636 CUPS_DATADIR
=$BASE/share
; export CUPS_DATADIR
637 LOCALEDIR
=$BASE/share
/locale
; export LOCALEDIR
640 # Set a new home directory to avoid getting user options mixed in...
647 # Force POSIX locale for tests...
657 # Start the server; run as foreground daemon in the background...
660 echo "Starting scheduler:"
661 echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
664 if test `uname` = Darwin
-a "x$VALGRIND" = x
; then
665 if test "x$DYLD_INSERT_LIBRARIES" = x
; then
666 insert
="/usr/lib/libgmalloc.dylib"
668 insert
="/usr/lib/libgmalloc.dylib:$DYLD_INSERT_LIBRARIES"
671 DYLD_INSERT_LIBRARIES
="$insert" MallocStackLogging
=1 ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
673 $VALGRIND ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
678 if test "x$testtype" = x0
; then
679 # Not running tests...
680 echo "Scheduler is PID $cupsd and is listening on port $port."
683 # Create a helper script to run programs with...
684 runcups
="$BASE/runcups"
686 echo "#!/bin/sh" >$runcups
687 echo "# Helper script for running CUPS test instance." >>$runcups
689 echo "# Set required environment variables..." >>$runcups
690 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
691 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
692 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
693 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
694 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
695 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
696 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
697 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
698 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
699 if test "x$CUPS_DEBUG_LEVEL" != x
; then
700 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
701 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
702 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
705 echo "# Run command..." >>$runcups
706 echo "exec \"\$@\"" >>$runcups
710 echo "The $runcups helper script can be used to test programs"
711 echo "with the server."
715 if test $argcount -eq 0; then
716 echo "Scheduler is PID $cupsd; run debugger now if you need to."
718 echo $ac_n "Press ENTER to continue... $ac_c"
721 echo "Scheduler is PID $cupsd."
725 IPP_PORT
=$port; export IPP_PORT
728 running
=`../systemv/lpstat -r 2>/dev/null`
729 if test "x$running" = "xscheduler is running"; then
733 echo "Waiting for scheduler to become ready..."
738 # Create the test report source file...
741 date=`date "+%Y-%m-%d"`
743 strfile
=$BASE/cups-str-
$date-$user.html
746 cat str-header.html
>$strfile
749 # Run the IPP tests...
753 echo "Running IPP compliance tests..."
755 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
756 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
757 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
758 echo " $date by $user on `hostname`." >>$strfile
759 echo " <pre>" >>$strfile
762 for file in 4*.
test ipp-2.1.
test; do
763 echo $ac_n "Performing $file: $ac_c"
766 if test $file = ipp-2.1.
test; then
767 uri
="ipp://localhost:$port/printers/Test1"
768 options
="-V 2.1 -d NOPRINT=1 -f testfile.ps"
770 uri
="ipp://localhost:$port/printers"
773 $VALGRIND .
/ipptool
-tI $options $uri $file >> $strfile
776 if test $status != 0; then
778 fail
=`expr $fail + 1`
784 echo " </pre>" >>$strfile
787 # Run the command tests...
791 echo "Running command tests..."
793 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
794 echo " <p>This section provides the results to the command tests" >>$strfile
795 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
796 echo " $date by $user on `hostname`." >>$strfile
797 echo " <pre>" >>$strfile
799 for file in 5*.sh
; do
800 echo $ac_n "Performing $file: $ac_c"
802 echo "\"$file\":" >>$strfile
804 sh
$file $pjobs $pprinters >> $strfile
807 if test $status != 0; then
809 fail
=`expr $fail + 1`
816 # Log all allocations made by the scheduler...
819 if test `uname` = Darwin
-a "x$VALGRIND" = x
; then
820 malloc_history
$cupsd -callTree -showContent >$BASE/log
/malloc_log
2>&1
824 # Restart the server...
827 echo $ac_n "Performing restart test: $ac_c"
829 echo "\"5.10-restart\":" >>$strfile
836 running
=`../systemv/lpstat -r 2>/dev/null`
837 if test "x$running" = "xscheduler is running"; then
842 description
="`../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
843 if test "x$description" != "xTest Printer 1"; then
844 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
845 echo "FAIL (got '$description', expected 'Test Printer 1')"
846 fail
=`expr $fail + 1`
848 echo "Passed." >>$strfile
852 echo " </pre>" >>$strfile
868 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
870 if test $cupsdstatus != 0; then
871 echo "FAIL: cupsd failed with exit status $cupsdstatus."
872 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
873 fail
=`expr $fail + 1`
875 echo "PASS: cupsd exited with no errors."
876 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
880 count
=`ls -1 $BASE/spool | wc -l`
881 count
=`expr $count - 1`
882 if test $count != 0; then
883 echo "FAIL: $count job control files were not purged."
884 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
885 fail
=`expr $fail + 1`
887 echo "PASS: All job control files purged."
888 echo " <p>PASS: All job control files purged.</p>" >>$strfile
891 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
892 count
=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
893 expected
=`expr $pjobs \* 2 + 34`
894 expected2
=`expr $expected + 2`
895 if test $count -lt $expected -a $count -gt $expected2; then
896 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
897 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
898 fail
=`expr $fail + 1`
900 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
901 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
904 # Paged printed on Test2
905 count
=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
906 expected
=`expr $pjobs \* 2 + 3`
907 if test $count != $expected; then
908 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
909 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
910 fail
=`expr $fail + 1`
912 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
913 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
916 # Paged printed on Test3
917 count
=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
919 if test $count != $expected; then
920 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
921 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
922 fail
=`expr $fail + 1`
924 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
925 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
929 count
=`wc -l $BASE/log/access_log | awk '{print $1}'`
930 expected
=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
931 if test $count != $expected; then
932 echo "FAIL: $count requests logged, expected $expected."
933 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
934 fail
=`expr $fail + 1`
936 echo "PASS: $count requests logged."
937 echo " <p>PASS: $count requests logged.</p>" >>$strfile
940 # Did CUPS-Get-Default get logged?
941 if $GREP -q CUPS-Get-Default
$BASE/log
/access_log
; then
942 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
943 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
944 echo " <pre>" >>$strfile
945 $GREP CUPS-Get-Default
$BASE/log
/access_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
946 echo " </pre>" >>$strfile
947 fail
=`expr $fail + 1`
949 echo "PASS: CUPS-Get-Default not logged."
950 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
953 # Emergency log messages
954 count
=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
955 if test $count != 0; then
956 echo "FAIL: $count emergency messages, expected 0."
957 $GREP '^X ' $BASE/log
/error_log
958 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
959 echo " <pre>" >>$strfile
960 $GREP '^X ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
961 echo " </pre>" >>$strfile
962 fail
=`expr $fail + 1`
964 echo "PASS: $count emergency messages."
965 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
969 count
=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
970 if test $count != 0; then
971 echo "FAIL: $count alert messages, expected 0."
972 $GREP '^A ' $BASE/log
/error_log
973 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
974 echo " <pre>" >>$strfile
975 $GREP '^A ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
976 echo " </pre>" >>$strfile
977 fail
=`expr $fail + 1`
979 echo "PASS: $count alert messages."
980 echo " <p>PASS: $count alert messages.</p>" >>$strfile
983 # Critical log messages
984 count
=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
985 if test $count != 0; then
986 echo "FAIL: $count critical messages, expected 0."
987 $GREP '^C ' $BASE/log
/error_log
988 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
989 echo " <pre>" >>$strfile
990 $GREP '^C ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
991 echo " </pre>" >>$strfile
992 fail
=`expr $fail + 1`
994 echo "PASS: $count critical messages."
995 echo " <p>PASS: $count critical messages.</p>" >>$strfile
999 count
=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
1000 if test $count != 33; then
1001 echo "FAIL: $count error messages, expected 33."
1002 $GREP '^E ' $BASE/log
/error_log
1003 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1004 echo " <pre>" >>$strfile
1005 $GREP '^E ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1006 echo " </pre>" >>$strfile
1007 fail
=`expr $fail + 1`
1009 echo "PASS: $count error messages."
1010 echo " <p>PASS: $count error messages.</p>" >>$strfile
1013 # Warning log messages
1014 count
=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
1015 if test $count != 8; then
1016 echo "FAIL: $count warning messages, expected 8."
1017 $GREP '^W ' $BASE/log
/error_log
1018 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
1019 echo " <pre>" >>$strfile
1020 $GREP '^W ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1021 echo " </pre>" >>$strfile
1022 fail
=`expr $fail + 1`
1024 echo "PASS: $count warning messages."
1025 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1028 # Notice log messages
1029 count
=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1030 if test $count != 0; then
1031 echo "FAIL: $count notice messages, expected 0."
1032 $GREP '^N ' $BASE/log
/error_log
1033 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1034 echo " <pre>" >>$strfile
1035 $GREP '^N ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1036 echo " </pre>" >>$strfile
1037 fail
=`expr $fail + 1`
1039 echo "PASS: $count notice messages."
1040 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1044 count
=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1045 if test $count = 0; then
1046 echo "FAIL: $count info messages, expected more than 0."
1047 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1048 fail
=`expr $fail + 1`
1050 echo "PASS: $count info messages."
1051 echo " <p>PASS: $count info messages.</p>" >>$strfile
1054 # Debug log messages
1055 count
=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1056 if test $count = 0; then
1057 echo "FAIL: $count debug messages, expected more than 0."
1058 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1059 fail
=`expr $fail + 1`
1061 echo "PASS: $count debug messages."
1062 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1065 # Debug2 log messages
1066 count
=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1067 if test $count = 0; then
1068 echo "FAIL: $count debug2 messages, expected more than 0."
1069 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1070 fail
=`expr $fail + 1`
1072 echo "PASS: $count debug2 messages."
1073 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1080 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1082 for file in $BASE/log
/*_log
; do
1083 baselog
=`basename $file`
1085 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1088 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1089 echo " <pre>" >>$strfile
1090 $GREP -v '^d' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1091 echo " </pre>" >>$strfile
1095 echo " <pre>" >>$strfile
1096 sed -e '1,$s/&/&/g' -e '1,$s/</</g' $file >>$strfile
1097 echo " </pre>" >>$strfile
1103 # Format the reports and tell the user where to find them...
1106 cat str-trailer.html
>>$strfile
1109 for file in $BASE/log
/*_log
; do
1110 baselog
=`basename $file`
1111 cp $file $baselog-$date-$user
1112 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1115 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1117 # Clean out old failure log files after 1 week...
1118 find .
-name \
*_log-\
*-$user -a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1119 find .
-name cups-str-\
*-$user.html
-a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1123 if test $fail != 0; then
1124 echo "$fail tests failed."
1127 echo "All tests were successful."