3 # Perform the complete set of IPP compliance tests specified in the
4 # CUPS Software Test Plan.
6 # Copyright © 2007-2021 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)"
100 echo "Running the medium tests (2)"
107 echo "Running the extreme tests (3)"
114 echo "Running the torture tests (4)"
121 echo "Running the timid tests (1)"
131 # See if we want to do SSL testing...
135 echo "Now you can choose whether to create a SSL/TLS encryption key and"
136 echo "certificate for testing:"
138 echo "0 - Do not do SSL/TLS encryption tests"
139 echo "1 - Test but do not require encryption"
140 echo "2 - Test and require encryption"
142 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
144 if test $# -gt 0; then
154 echo "Will test but not require encryption (1)"
157 echo "Will test and require encryption (2)"
160 echo "Not using SSL/TLS (0)"
166 # Information for the server/tests...
170 if test -z "$user"; then
171 if test -x /usr
/ucb
/whoami
; then
172 user
=`/usr/ucb/whoami`
177 if test -z "$user"; then
182 port
="${CUPS_TESTPORT:=8631}"
185 CUPS_TESTROOT
="$root"; export CUPS_TESTROOT
187 BASE
="${CUPS_TESTBASE:=}"
188 if test -z "$BASE"; then
189 if test -d /private
/tmp
; then
190 BASE
=/private
/tmp
/cups-
$user
198 # Make sure that the LPDEST and PRINTER environment variables are
199 # not included in the environment that is passed to the tests. These
200 # will usually cause tests to fail erroneously...
207 # See if we want to use valgrind...
211 echo "This test script can use the Valgrind software from:"
213 echo " http://developer.kde.org/~sewardj/"
215 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
217 if test $# -gt 0; then
225 case "$usevalgrind" in
227 VALGRIND
="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
228 if test `uname` = Darwin
; then
229 VALGRIND
="$VALGRIND --dsymutil=yes"
232 echo "Using Valgrind; log files can be found in $BASE/log..."
242 # See if we want to do debug logging of the libraries...
246 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
247 echo "can enable debug logging of the libraries."
249 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
251 if test $# -gt 0; then
259 case "$usedebugprintfs" in
261 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
262 CUPS_DEBUG_LOG
="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
263 CUPS_DEBUG_LEVEL
=5; export CUPS_DEBUG_LEVEL
264 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
267 0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9)
268 echo "Enabling debug printfs (level $usedebugprintfs); 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
="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
271 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
279 # Start by creating temporary directories for the tests...
282 echo "Creating directories for test..."
287 mkdir
$BASE/bin
/backend
288 mkdir
$BASE/bin
/driver
289 mkdir
$BASE/bin
/filter
292 mkdir
$BASE/share
/banners
293 mkdir
$BASE/share
/drv
294 mkdir
$BASE/share
/locale
295 for file in ..
/locale
/cups_
*.po
; do
296 loc
=`basename $file .po | cut -c 6-`
297 mkdir
$BASE/share
/locale
/$loc
298 ln -s $root/locale
/cups_
$loc.po
$BASE/share
/locale
/$loc
300 mkdir
$BASE/share
/locale
/en
301 ln -s $root/locale
/cups.pot
$BASE/share
/locale
/en
/cups_en.po
302 mkdir
$BASE/share
/mime
303 mkdir
$BASE/share
/model
304 mkdir
$BASE/share
/ppdc
305 mkdir
$BASE/interfaces
309 mkdir
$BASE/spool
/temp
312 ln -s $root/backend
/dnssd
$BASE/bin
/backend
313 ln -s $root/backend
/http
$BASE/bin
/backend
314 ln -s $root/backend
/ipp
$BASE/bin
/backend
315 ln -s ipp
$BASE/bin
/backend
/ipps
316 ln -s $root/backend
/lpd
$BASE/bin
/backend
317 ln -s $root/backend
/mdns
$BASE/bin
/backend
318 ln -s $root/backend
/pseudo
$BASE/bin
/backend
319 ln -s $root/backend
/snmp
$BASE/bin
/backend
320 ln -s $root/backend
/socket
$BASE/bin
/backend
321 ln -s $root/backend
/usb
$BASE/bin
/backend
322 ln -s $root/cgi-bin
$BASE/bin
323 ln -s $root/monitor
$BASE/bin
324 ln -s $root/notifier
$BASE/bin
325 ln -s $root/scheduler
$BASE/bin
/daemon
326 ln -s $root/filter
/commandtops
$BASE/bin
/filter
327 ln -s $root/filter
/gziptoany
$BASE/bin
/filter
328 ln -s $root/filter
/pstops
$BASE/bin
/filter
329 ln -s $root/filter
/rastertoepson
$BASE/bin
/filter
330 ln -s $root/filter
/rastertohp
$BASE/bin
/filter
331 ln -s $root/filter
/rastertolabel
$BASE/bin
/filter
332 ln -s $root/filter
/rastertopwg
$BASE/bin
/filter
333 cat >$BASE/share
/banners
/standard
<<EOF
337 Job: {?printer-name}-{?job-id}
338 Owner: {?job-originating-user-name}
340 Pages: {?job-impressions}
345 cat >$BASE/share
/banners
/classified
<<EOF
346 ==== Classified - Do Not Disclose ====
349 Job: {?printer-name}-{?job-id}
350 Owner: {?job-originating-user-name}
352 Pages: {?job-impressions}
355 ==== Classified - Do Not Disclose ====
357 ln -s $root/data
$BASE/share
358 ln -s $root/ppdc
/sample.drv
$BASE/share
/drv
359 ln -s $root/conf
/cgi.types
$BASE/share
/mime
360 ln -s $root/conf
/mime.types
$BASE/share
/mime
361 ln -s $root/conf
/mime.convs
$BASE/share
/mime
362 ln -s $root/data
/*.h
$BASE/share
/ppdc
363 ln -s $root/data
/*.defs
$BASE/share
/ppdc
364 ln -s $root/templates
$BASE/share
367 # Local filters and configuration files...
371 # instfilter src dst format
373 # See if the filter exists in a standard location; if so, make a
374 # symlink, otherwise create a dummy script for the specified format.
380 for dir
in /usr
/local
/libexec
/cups
/filter
/usr
/libexec
/cups
/filter
/usr
/lib
/cups
/filter
; do
381 if test -x "$dir/$src"; then
382 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
387 # Source filter not present, create a dummy filter
390 ln -s gziptoany
"$BASE/bin/filter/$dst"
393 cat >"$BASE/bin/filter/$dst" <<EOF
397 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
399 *media=a4* | *media=iso_a4* | *PageSize=A4*)
400 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.pdf"
403 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.pdf"
407 chmod +x
"$BASE/bin/filter/$dst"
410 cat >"$BASE/bin/filter/$dst" <<EOF
414 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
416 *media=a4* | *media=iso_a4* | *PageSize=A4*)
417 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.ps"
420 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.ps"
424 chmod +x
"$BASE/bin/filter/$dst"
427 cat >"$BASE/bin/filter/$dst" <<EOF
431 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
433 *media=a4* | *media=iso_a4* | *PageSize=A4*)
434 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4-300-black-1.pwg"
437 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter-300-black-1.pwg"
441 chmod +x
"$BASE/bin/filter/$dst"
446 ln -s $root/test
/test.convs
$BASE/share
/mime
447 ln -s $root/test
/test.types
$BASE/share
/mime
449 if test `uname` = Darwin
; then
450 instfilter cgimagetopdf imagetopdf pdf
451 instfilter cgpdftopdf pdftopdf passthru
452 instfilter cgpdftops pdftops ps
453 instfilter cgpdftoraster pdftoraster raster
454 instfilter cgpdftoraster pdftourf raster
455 instfilter cgtexttopdf texttopdf pdf
456 instfilter pstocupsraster pstoraster raster
458 instfilter imagetopdf imagetopdf pdf
459 instfilter pdftopdf pdftopdf passthru
460 instfilter pdftops pdftops ps
461 instfilter pdftoraster pdftoraster raster
462 instfilter pdftoraster pdftourf raster
463 instfilter pstoraster pstoraster raster
464 instfilter texttopdf texttopdf pdf
466 if test -d /usr
/share
/cups
/charsets
; then
467 ln -s /usr
/share
/cups
/charsets
$BASE/share
472 # Then create the necessary config files...
475 echo "Creating cupsd.conf for test..."
477 if test $ssltype = 2; then
478 encryption
="Encryption Required"
483 if test $testtype = 0; then
491 cat >$BASE/cupsd.conf
<<EOF
492 StrictConformance Yes
494 Listen localhost:$port
498 AccessLogLevel actions
501 PreserveJobHistory $jobhistory
502 PreserveJobFiles $jobfiles
511 if test $testtype = 0; then
512 echo WebInterface
yes >>$BASE/cupsd.conf
515 cat >$BASE/cups-files.conf
<<EOF
524 FontPath $BASE/share/fonts
525 DocumentRoot $root/doc
526 RequestRoot $BASE/spool
527 TempDir $BASE/spool/temp
528 AccessLog $BASE/log/access_log
529 ErrorLog $BASE/log/error_log
530 PageLog $BASE/log/page_log
532 PassEnv DYLD_INSERT_LIBRARIES
533 PassEnv DYLD_LIBRARY_PATH
534 PassEnv LD_LIBRARY_PATH
542 if test $ssltype != 0 -a `uname` = Darwin
; then
543 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
547 # Setup lots of test queues with PPD files...
550 echo "Creating printers.conf for test..."
553 while test $i -le $nprinters; do
554 cat >>$BASE/printers.conf
<<EOF
557 DeviceURI file:/dev/null
558 Info Test PS printer $i
560 Location CUPS test suite
562 StateMessage Printer $1 is idle.
566 cp testps.ppd
$BASE/ppd
/test-
$i.ppd
571 if test -f $BASE/printers.conf
; then
572 cp $BASE/printers.conf
$BASE/printers.conf.orig
574 touch $BASE/printers.conf.orig
578 # Create a helper script to run programs with...
581 echo "Setting up environment variables for test..."
583 if test "x$ASAN_OPTIONS" = x
; then
584 # AddressSanitizer on Linux reports memory leaks from the main function
585 # which is basically useless - in general, programs do not need to free
586 # every object before exit since the OS will recover the process's
588 ASAN_OPTIONS
="detect_leaks=false"
592 if test -f "$root/cups/libcups.so.2"; then
593 if test "x$LD_LIBRARY_PATH" = x
; then
594 LD_LIBRARY_PATH
="$root/cups"
596 LD_LIBRARY_PATH
="$root/cups:$LD_LIBRARY_PATH"
599 LD_PRELOAD
="$root/cups/libcups.so.2:$root/cups/libcupsimage.so.2"
600 if test `uname` = SunOS
-a -r /usr
/lib
/libCrun.so
.1; then
601 LD_PRELOAD
="/usr/lib/libCrun.so.1:$LD_PRELOAD"
605 if test -f "$root/cups/libcups.2.dylib"; then
606 if test "x$DYLD_INSERT_LIBRARIES" = x
; then
607 DYLD_INSERT_LIBRARIES
="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib"
609 DYLD_INSERT_LIBRARIES
="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib:$DYLD_INSERT_LIBRARIES"
612 if test "x$DYLD_LIBRARY_PATH" = x
; then
613 DYLD_LIBRARY_PATH
="$root/cups"
615 DYLD_LIBRARY_PATH
="$root/cups:$DYLD_LIBRARY_PATH"
619 # These get exported because they don't have side-effects...
620 CUPS_DISABLE_APPLE_DEFAULT
=yes; export CUPS_DISABLE_APPLE_DEFAULT
621 CUPS_SERVER
=localhost
:$port; export CUPS_SERVER
622 CUPS_SERVERROOT
=$BASE; export CUPS_SERVERROOT
623 CUPS_STATEDIR
=$BASE; export CUPS_STATEDIR
624 CUPS_DATADIR
=$BASE/share
; export CUPS_DATADIR
625 IPP_PORT
=$port; export IPP_PORT
626 LOCALEDIR
=$BASE/share
/locale
; export LOCALEDIR
628 echo "Creating wrapper script..."
630 runcups
="$BASE/runcups"; export runcups
632 echo "#!/bin/sh" >$runcups
633 echo "# Helper script for running CUPS test instance." >>$runcups
635 echo "# Set required environment variables..." >>$runcups
636 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
637 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
638 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
639 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
640 echo "DYLD_INSERT_LIBRARIES=\"$DYLD_INSERT_LIBRARIES\"; export DYLD_INSERT_LIBRARIES" >>$runcups
641 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
642 # IPP_PORT=$port; export IPP_PORT
643 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
644 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
645 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
646 if test "x$CUPS_DEBUG_LEVEL" != x
; then
647 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
648 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
649 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
652 echo "# Run command..." >>$runcups
653 echo "exec \"\$@\"" >>$runcups
658 # Set a new home directory to avoid getting user options mixed in...
665 # Force POSIX locale for tests...
675 # Start the server; run as foreground daemon in the background...
678 echo "Starting scheduler:"
679 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
682 $runcups $VALGRIND ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
686 if test "x$testtype" = x0
; then
687 # Not running tests...
688 echo "Scheduler is PID $cupsd and is listening on port $port."
691 echo "The $runcups helper script can be used to test programs"
692 echo "with the server."
696 if test $argcount -eq 0; then
697 echo "Scheduler is PID $cupsd; run debugger now if you need to."
699 echo $ac_n "Press ENTER to continue... $ac_c"
702 echo "Scheduler is PID $cupsd."
707 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
708 if test "x$running" = "xscheduler is running"; then
712 echo "Waiting for scheduler to become ready..."
717 # Create the test report source file...
720 date=`date "+%Y-%m-%d"`
722 strfile
=$BASE/cups-str-
$date-$user.html
725 cat str-header.html
>$strfile
728 # Run the IPP tests...
732 echo "Running IPP compliance tests..."
734 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
735 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
736 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
737 echo " $date by $user on `hostname`." >>$strfile
738 echo " <pre>" >>$strfile
741 for file in 4*.
test ..
/examples
/ipp-2.1.
test; do
742 echo $ac_n "Performing `basename $file`: $ac_c"
744 echo $ac_n "`date '+[%d/%b/%Y:%H:%M:%S %z]'` $ac_c" >>$strfile
746 if test $file = ..
/examples
/ipp-2.1.
test; then
747 uri
="ipp://localhost:$port/printers/Test1"
748 options
="-V 2.1 -d NOPRINT=1 -f testfile.ps"
750 uri
="ipp://localhost:$port/printers"
753 $runcups $VALGRIND ..
/tools
/ipptool
-tI $options $uri $file >> $strfile
756 if test $status != 0; then
758 fail
=`expr $fail + 1`
764 echo " </pre>" >>$strfile
767 # Run the command tests...
771 echo "Running command tests..."
773 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
774 echo " <p>This section provides the results to the command tests" >>$strfile
775 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
776 echo " $date by $user on `hostname`." >>$strfile
777 echo " <pre>" >>$strfile
779 for file in 5*.sh
; do
780 echo $ac_n "Performing $file: $ac_c"
782 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"$file\":" >>$strfile
784 sh
$file $pjobs $pprinters >> $strfile
787 if test $status != 0; then
789 fail
=`expr $fail + 1`
796 # Restart the server...
799 echo $ac_n "Performing restart test: $ac_c"
801 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.10-restart\":" >>$strfile
808 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
809 if test "x$running" = "xscheduler is running"; then
814 description
="`$runcups ../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
815 if test "x$description" != "xTest Printer 1"; then
816 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
817 echo "FAIL (got '$description', expected 'Test Printer 1')"
818 fail
=`expr $fail + 1`
820 echo "Passed." >>$strfile
826 # Perform job history test...
829 echo $ac_n "Starting history test: $ac_c"
831 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history\":" >>$strfile
833 echo " lp -d Test1 testfile.jpg" >>$strfile
835 $runcups ..
/systemv
/lp -d Test1 ..
/examples
/testfile.jpg
2>&1 >>$strfile
836 if test $?
!= 0; then
837 echo "FAIL (unable to queue test job)"
838 echo " FAILED" >>$strfile
839 fail
=`expr $fail + 1`
842 echo " PASSED" >>$strfile
844 .
/waitjobs.sh
>>$strfile
846 echo $ac_n "Verifying that history still exists: $ac_c"
848 echo " ls -l $BASE/spool" >>$strfile
849 count
=`ls -1 $BASE/spool | wc -l`
850 if test $count = 1; then
852 echo " FAILED (job control files not present)" >>$strfile
853 ls -l $BASE/spool
>>$strfile
854 fail
=`expr $fail + 1`
857 echo " PASSED" >>$strfile
859 echo $ac_n "Waiting for job history to expire: $ac_c"
861 echo " sleep 35" >>$strfile
864 echo " lpstat" >>$strfile
865 $runcups ..
/systemv
/lpstat
2>&1 >>$strfile
867 echo " ls -l $BASE/spool" >>$strfile
868 count
=`ls -1 $BASE/spool | wc -l`
869 if test $count != 1; then
871 echo " FAILED (job control files still present)" >>$strfile
872 ls -l $BASE/spool
>>$strfile
873 fail
=`expr $fail + 1`
876 echo " PASSED" >>$strfile
886 echo " </pre>" >>$strfile
898 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
900 if test $cupsdstatus != 0; then
901 echo "FAIL: cupsd failed with exit status $cupsdstatus."
902 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
903 fail
=`expr $fail + 1`
905 echo "PASS: cupsd exited with no errors."
906 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
910 count
=`ls -1 $BASE/spool | wc -l`
911 count
=`expr $count - 1`
912 if test $count != 0; then
913 echo "FAIL: $count job control files were not purged."
914 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
915 fail
=`expr $fail + 1`
917 echo "PASS: All job control files purged."
918 echo " <p>PASS: All job control files purged.</p>" >>$strfile
921 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
922 count
=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
923 expected
=`expr $pjobs \* 2 + 34`
924 expected2
=`expr $expected + 2`
925 if test $count -lt $expected -a $count -gt $expected2; then
926 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
927 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
928 fail
=`expr $fail + 1`
930 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
931 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
934 # Paged printed on Test2
935 count
=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
936 expected
=`expr $pjobs \* 2 + 3`
937 if test $count != $expected; then
938 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
939 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
940 fail
=`expr $fail + 1`
942 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
943 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
946 # Paged printed on Test3
947 count
=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
949 if test $count != $expected; then
950 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
951 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
952 fail
=`expr $fail + 1`
954 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
955 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
959 count
=`wc -l $BASE/log/access_log | awk '{print $1}'`
960 expected
=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2`
961 if test $count != $expected; then
962 echo "FAIL: $count requests logged, expected $expected."
963 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
964 fail
=`expr $fail + 1`
966 echo "PASS: $count requests logged."
967 echo " <p>PASS: $count requests logged.</p>" >>$strfile
970 # Did CUPS-Get-Default get logged?
971 if $GREP -q CUPS-Get-Default
$BASE/log
/access_log
; then
972 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
973 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
974 echo " <pre>" >>$strfile
975 $GREP CUPS-Get-Default
$BASE/log
/access_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
976 echo " </pre>" >>$strfile
977 fail
=`expr $fail + 1`
979 echo "PASS: CUPS-Get-Default not logged."
980 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
983 # Emergency log messages
984 count
=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
985 if test $count != 0; then
986 echo "FAIL: $count emergency messages, expected 0."
987 $GREP '^X ' $BASE/log
/error_log
988 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
989 echo " <pre>" >>$strfile
990 $GREP '^X ' $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 emergency messages."
995 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
999 count
=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1000 if test $count != 0; then
1001 echo "FAIL: $count alert messages, expected 0."
1002 $GREP '^A ' $BASE/log
/error_log
1003 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
1004 echo " <pre>" >>$strfile
1005 $GREP '^A ' $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 alert messages."
1010 echo " <p>PASS: $count alert messages.</p>" >>$strfile
1013 # Critical log messages
1014 count
=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1015 if test $count != 0; then
1016 echo "FAIL: $count critical messages, expected 0."
1017 $GREP '^C ' $BASE/log
/error_log
1018 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
1019 echo " <pre>" >>$strfile
1020 $GREP '^C ' $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 critical messages."
1025 echo " <p>PASS: $count critical messages.</p>" >>$strfile
1028 # Error log messages
1029 count
=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
1030 if test $count != 33; then
1031 echo "FAIL: $count error messages, expected 33."
1032 $GREP '^E ' $BASE/log
/error_log
1033 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1034 echo " <pre>" >>$strfile
1035 $GREP '^E ' $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 error messages."
1040 echo " <p>PASS: $count error messages.</p>" >>$strfile
1043 # Warning log messages
1044 count
=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
1045 if test $count != 8; then
1046 echo "FAIL: $count warning messages, expected 8."
1047 $GREP '^W ' $BASE/log
/error_log
1048 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
1049 echo " <pre>" >>$strfile
1050 $GREP '^W ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1051 echo " </pre>" >>$strfile
1052 fail
=`expr $fail + 1`
1054 echo "PASS: $count warning messages."
1055 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1058 # Notice log messages
1059 count
=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1060 if test $count != 0; then
1061 echo "FAIL: $count notice messages, expected 0."
1062 $GREP '^N ' $BASE/log
/error_log
1063 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1064 echo " <pre>" >>$strfile
1065 $GREP '^N ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1066 echo " </pre>" >>$strfile
1067 fail
=`expr $fail + 1`
1069 echo "PASS: $count notice messages."
1070 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1074 count
=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1075 if test $count = 0; then
1076 echo "FAIL: $count info messages, expected more than 0."
1077 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1078 fail
=`expr $fail + 1`
1080 echo "PASS: $count info messages."
1081 echo " <p>PASS: $count info messages.</p>" >>$strfile
1084 # Debug log messages
1085 count
=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1086 if test $count = 0; then
1087 echo "FAIL: $count debug messages, expected more than 0."
1088 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1089 fail
=`expr $fail + 1`
1091 echo "PASS: $count debug messages."
1092 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1095 # Debug2 log messages
1096 count
=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1097 if test $count = 0 -a $loglevel = debug2
; then
1098 echo "FAIL: $count debug2 messages, expected more than 0."
1099 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1100 fail
=`expr $fail + 1`
1101 elif test $count != 0 -a $loglevel = debug
; then
1102 echo "FAIL: $count debug2 messages, expected 0."
1103 echo " <p>FAIL: $count debug2 messages, expected 0.</p>" >>$strfile
1104 fail
=`expr $fail + 1`
1106 echo "PASS: $count debug2 messages."
1107 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1114 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1116 for file in $BASE/log
/*_log
; do
1117 baselog
=`basename $file`
1119 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1122 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1123 echo " <pre>" >>$strfile
1124 $GREP -v '^d' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1125 echo " </pre>" >>$strfile
1129 echo " <pre>" >>$strfile
1130 sed -e '1,$s/&/&/g' -e '1,$s/</</g' $file >>$strfile
1131 echo " </pre>" >>$strfile
1137 # Format the reports and tell the user where to find them...
1140 cat str-trailer.html
>>$strfile
1143 for file in $BASE/log
/*_log
; do
1144 baselog
=`basename $file`
1145 cp $file $baselog-$date-$user
1146 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1149 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1151 # Clean out old failure log files after 1 week...
1152 find .
-name \
*_log-\
*-$user -a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1153 find .
-name cups-str-\
*-$user.html
-a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1157 if test $fail != 0; then
1158 echo "$fail tests failed."
1161 echo "All tests were successful."