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)"
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
/mime.types
$BASE/share
/mime
360 ln -s $root/conf
/mime.convs
$BASE/share
/mime
361 ln -s $root/data
/*.h
$BASE/share
/ppdc
362 ln -s $root/data
/*.defs
$BASE/share
/ppdc
363 ln -s $root/templates
$BASE/share
366 # Local filters and configuration files...
370 # instfilter src dst format
372 # See if the filter exists in a standard location; if so, make a
373 # symlink, otherwise create a dummy script for the specified format.
379 for dir
in /usr
/local
/libexec
/cups
/filter
/usr
/libexec
/cups
/filter
/usr
/lib
/cups
/filter
; do
380 if test -x "$dir/$src"; then
381 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
386 # Source filter not present, create a dummy filter
389 ln -s gziptoany
"$BASE/bin/filter/$dst"
392 cat >"$BASE/bin/filter/$dst" <<EOF
396 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
398 *media=a4* | *media=iso_a4* | *PageSize=A4*)
399 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
402 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
406 chmod +x
"$BASE/bin/filter/$dst"
409 cat >"$BASE/bin/filter/$dst" <<EOF
413 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
415 *media=a4* | *media=iso_a4* | *PageSize=A4*)
416 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
419 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
423 chmod +x
"$BASE/bin/filter/$dst"
426 cat >"$BASE/bin/filter/$dst" <<EOF
430 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
432 *media=a4* | *media=iso_a4* | *PageSize=A4*)
433 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
436 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
440 chmod +x
"$BASE/bin/filter/$dst"
445 ln -s $root/test
/test.convs
$BASE/share
/mime
446 ln -s $root/test
/test.types
$BASE/share
/mime
448 if test `uname` = Darwin
; then
449 instfilter cgimagetopdf imagetopdf pdf
450 instfilter cgpdftopdf pdftopdf passthru
451 instfilter cgpdftops pdftops ps
452 instfilter cgpdftoraster pdftoraster raster
453 instfilter cgpdftoraster pdftourf raster
454 instfilter cgtexttopdf texttopdf pdf
455 instfilter pstocupsraster pstoraster raster
457 instfilter imagetopdf imagetopdf pdf
458 instfilter pdftopdf pdftopdf passthru
459 instfilter pdftops pdftops ps
460 instfilter pdftoraster pdftoraster raster
461 instfilter pdftoraster pdftourf raster
462 instfilter pstoraster pstoraster raster
463 instfilter texttopdf texttopdf pdf
465 if test -d /usr
/share
/cups
/charsets
; then
466 ln -s /usr
/share
/cups
/charsets
$BASE/share
471 # Then create the necessary config files...
474 echo "Creating cupsd.conf for test..."
476 if test $ssltype = 2; then
477 encryption
="Encryption Required"
482 cat >$BASE/cupsd.conf
<<EOF
483 StrictConformance Yes
485 Listen localhost:$port
489 AccessLogLevel actions
492 PreserveJobHistory Yes
502 if test $testtype = 0; then
503 echo WebInterface
yes >>$BASE/cupsd.conf
506 cat >$BASE/cups-files.conf
<<EOF
515 FontPath $BASE/share/fonts
516 DocumentRoot $root/doc
517 RequestRoot $BASE/spool
518 TempDir $BASE/spool/temp
519 AccessLog $BASE/log/access_log
520 ErrorLog $BASE/log/error_log
521 PageLog $BASE/log/page_log
523 PassEnv DYLD_INSERT_LIBRARIES
524 PassEnv DYLD_LIBRARY_PATH
525 PassEnv LD_LIBRARY_PATH
531 if test $ssltype != 0 -a `uname` = Darwin
; then
532 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
536 # Setup lots of test queues with PPD files...
539 echo "Creating printers.conf for test..."
542 while test $i -le $nprinters; do
543 cat >>$BASE/printers.conf
<<EOF
546 DeviceURI file:/dev/null
547 Info Test PS printer $i
549 Location CUPS test suite
551 StateMessage Printer $1 is idle.
555 cp testps.ppd
$BASE/ppd
/test-
$i.ppd
560 if test -f $BASE/printers.conf
; then
561 cp $BASE/printers.conf
$BASE/printers.conf.orig
563 touch $BASE/printers.conf.orig
567 # Create a helper script to run programs with...
570 echo "Setting up environment variables for test..."
572 if test "x$LD_LIBRARY_PATH" = x
; then
573 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
575 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
578 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"
579 if test `uname` = SunOS
-a -r /usr
/lib
/libCrun.so
.1; then
580 LD_PRELOAD
="/usr/lib/libCrun.so.1:$LD_PRELOAD"
583 if test -f $root/cups
/libcups
.2.dylib
; then
584 if test "x$DYLD_INSERT_LIBRARIES" = x
; then
585 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"
587 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"
591 if test "x$DYLD_LIBRARY_PATH" = x
; then
592 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
594 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
597 if test "x$SHLIB_PATH" = x
; then
598 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
600 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
603 # These get exported because they don't have side-effects...
604 CUPS_DISABLE_APPLE_DEFAULT
=yes; export CUPS_DISABLE_APPLE_DEFAULT
605 CUPS_SERVER
=localhost
:$port; export CUPS_SERVER
606 CUPS_SERVERROOT
=$BASE; export CUPS_SERVERROOT
607 CUPS_STATEDIR
=$BASE; export CUPS_STATEDIR
608 CUPS_DATADIR
=$BASE/share
; export CUPS_DATADIR
609 IPP_PORT
=$port; export IPP_PORT
610 LOCALEDIR
=$BASE/share
/locale
; export LOCALEDIR
612 echo "Creating wrapper script..."
614 runcups
="$BASE/runcups"; export runcups
616 echo "#!/bin/sh" >$runcups
617 echo "# Helper script for running CUPS test instance." >>$runcups
619 echo "# Set required environment variables..." >>$runcups
620 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
621 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
622 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
623 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
624 echo "DYLD_INSERT_LIBRARIES=\"$DYLD_INSERT_LIBRARIES\"; export DYLD_INSERT_LIBRARIES" >>$runcups
625 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
626 # IPP_PORT=$port; export IPP_PORT
627 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
628 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
629 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
630 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
631 if test "x$CUPS_DEBUG_LEVEL" != x
; then
632 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
633 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
634 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
637 echo "# Run command..." >>$runcups
638 echo "exec \"\$@\"" >>$runcups
643 # Set a new home directory to avoid getting user options mixed in...
650 # Force POSIX locale for tests...
660 # Start the server; run as foreground daemon in the background...
663 echo "Starting scheduler:"
664 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
667 if test `uname` = Darwin
-a "x$VALGRIND" = x
; then
668 if test "x$DYLD_INSERT_LIBRARIES" = x
; then
669 insert
="/usr/lib/libgmalloc.dylib"
671 insert
="/usr/lib/libgmalloc.dylib:$DYLD_INSERT_LIBRARIES"
674 DYLD_INSERT_LIBRARIES
="$insert" MallocStackLogging
=1 $runcups ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
676 $runcups $VALGRIND ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
681 if test "x$testtype" = x0
; then
682 # Not running tests...
683 echo "Scheduler is PID $cupsd and is listening on port $port."
686 echo "The $runcups helper script can be used to test programs"
687 echo "with the server."
691 if test $argcount -eq 0; then
692 echo "Scheduler is PID $cupsd; run debugger now if you need to."
694 echo $ac_n "Press ENTER to continue... $ac_c"
697 echo "Scheduler is PID $cupsd."
702 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
703 if test "x$running" = "xscheduler is running"; then
707 echo "Waiting for scheduler to become ready..."
712 # Create the test report source file...
715 date=`date "+%Y-%m-%d"`
717 strfile
=$BASE/cups-str-
$date-$user.html
720 cat str-header.html
>$strfile
723 # Run the IPP tests...
727 echo "Running IPP compliance tests..."
729 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
730 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
731 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
732 echo " $date by $user on `hostname`." >>$strfile
733 echo " <pre>" >>$strfile
736 for file in 4*.
test ipp-2.1.
test; do
737 echo $ac_n "Performing $file: $ac_c"
739 echo $ac_n "`date '+[%d/%b/%Y:%H:%M:%S %z]'` $ac_c" >>$strfile
741 if test $file = ipp-2.1.
test; then
742 uri
="ipp://localhost:$port/printers/Test1"
743 options
="-V 2.1 -d NOPRINT=1 -f testfile.ps"
745 uri
="ipp://localhost:$port/printers"
748 $runcups $VALGRIND .
/ipptool
-tI $options $uri $file >> $strfile
751 if test $status != 0; then
753 fail
=`expr $fail + 1`
759 echo " </pre>" >>$strfile
762 # Run the command tests...
766 echo "Running command tests..."
768 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
769 echo " <p>This section provides the results to the command tests" >>$strfile
770 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
771 echo " $date by $user on `hostname`." >>$strfile
772 echo " <pre>" >>$strfile
774 for file in 5*.sh
; do
775 echo $ac_n "Performing $file: $ac_c"
777 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"$file\":" >>$strfile
779 sh
$file $pjobs $pprinters >> $strfile
782 if test $status != 0; then
784 fail
=`expr $fail + 1`
791 # Log all allocations made by the scheduler...
794 if test `uname` = Darwin
-a "x$VALGRIND" = x
; then
795 malloc_history
$cupsd -callTree -showContent >$BASE/log
/malloc_log
2>&1
799 # Restart the server...
802 echo $ac_n "Performing restart test: $ac_c"
804 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.10-restart\":" >>$strfile
811 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
812 if test "x$running" = "xscheduler is running"; then
817 description
="`$runcups ../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
818 if test "x$description" != "xTest Printer 1"; then
819 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
820 echo "FAIL (got '$description', expected 'Test Printer 1')"
821 fail
=`expr $fail + 1`
823 echo "Passed." >>$strfile
827 echo " </pre>" >>$strfile
843 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
845 if test $cupsdstatus != 0; then
846 echo "FAIL: cupsd failed with exit status $cupsdstatus."
847 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
848 fail
=`expr $fail + 1`
850 echo "PASS: cupsd exited with no errors."
851 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
855 count
=`ls -1 $BASE/spool | wc -l`
856 count
=`expr $count - 1`
857 if test $count != 0; then
858 echo "FAIL: $count job control files were not purged."
859 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
860 fail
=`expr $fail + 1`
862 echo "PASS: All job control files purged."
863 echo " <p>PASS: All job control files purged.</p>" >>$strfile
866 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
867 count
=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
868 expected
=`expr $pjobs \* 2 + 34`
869 expected2
=`expr $expected + 2`
870 if test $count -lt $expected -a $count -gt $expected2; then
871 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
872 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
873 fail
=`expr $fail + 1`
875 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
876 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
879 # Paged printed on Test2
880 count
=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
881 expected
=`expr $pjobs \* 2 + 3`
882 if test $count != $expected; then
883 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
884 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
885 fail
=`expr $fail + 1`
887 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
888 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
891 # Paged printed on Test3
892 count
=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
894 if test $count != $expected; then
895 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
896 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
897 fail
=`expr $fail + 1`
899 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
900 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
904 count
=`wc -l $BASE/log/access_log | awk '{print $1}'`
905 expected
=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
906 if test $count != $expected; then
907 echo "FAIL: $count requests logged, expected $expected."
908 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
909 fail
=`expr $fail + 1`
911 echo "PASS: $count requests logged."
912 echo " <p>PASS: $count requests logged.</p>" >>$strfile
915 # Did CUPS-Get-Default get logged?
916 if $GREP -q CUPS-Get-Default
$BASE/log
/access_log
; then
917 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
918 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
919 echo " <pre>" >>$strfile
920 $GREP CUPS-Get-Default
$BASE/log
/access_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
921 echo " </pre>" >>$strfile
922 fail
=`expr $fail + 1`
924 echo "PASS: CUPS-Get-Default not logged."
925 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
928 # Emergency log messages
929 count
=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
930 if test $count != 0; then
931 echo "FAIL: $count emergency messages, expected 0."
932 $GREP '^X ' $BASE/log
/error_log
933 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
934 echo " <pre>" >>$strfile
935 $GREP '^X ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
936 echo " </pre>" >>$strfile
937 fail
=`expr $fail + 1`
939 echo "PASS: $count emergency messages."
940 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
944 count
=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
945 if test $count != 0; then
946 echo "FAIL: $count alert messages, expected 0."
947 $GREP '^A ' $BASE/log
/error_log
948 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
949 echo " <pre>" >>$strfile
950 $GREP '^A ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
951 echo " </pre>" >>$strfile
952 fail
=`expr $fail + 1`
954 echo "PASS: $count alert messages."
955 echo " <p>PASS: $count alert messages.</p>" >>$strfile
958 # Critical log messages
959 count
=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
960 if test $count != 0; then
961 echo "FAIL: $count critical messages, expected 0."
962 $GREP '^C ' $BASE/log
/error_log
963 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
964 echo " <pre>" >>$strfile
965 $GREP '^C ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
966 echo " </pre>" >>$strfile
967 fail
=`expr $fail + 1`
969 echo "PASS: $count critical messages."
970 echo " <p>PASS: $count critical messages.</p>" >>$strfile
974 count
=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
975 if test $count != 33; then
976 echo "FAIL: $count error messages, expected 33."
977 $GREP '^E ' $BASE/log
/error_log
978 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
979 echo " <pre>" >>$strfile
980 $GREP '^E ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
981 echo " </pre>" >>$strfile
982 fail
=`expr $fail + 1`
984 echo "PASS: $count error messages."
985 echo " <p>PASS: $count error messages.</p>" >>$strfile
988 # Warning log messages
989 count
=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
990 if test $count != 8; then
991 echo "FAIL: $count warning messages, expected 8."
992 $GREP '^W ' $BASE/log
/error_log
993 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
994 echo " <pre>" >>$strfile
995 $GREP '^W ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
996 echo " </pre>" >>$strfile
997 fail
=`expr $fail + 1`
999 echo "PASS: $count warning messages."
1000 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1003 # Notice log messages
1004 count
=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1005 if test $count != 0; then
1006 echo "FAIL: $count notice messages, expected 0."
1007 $GREP '^N ' $BASE/log
/error_log
1008 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1009 echo " <pre>" >>$strfile
1010 $GREP '^N ' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1011 echo " </pre>" >>$strfile
1012 fail
=`expr $fail + 1`
1014 echo "PASS: $count notice messages."
1015 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1019 count
=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1020 if test $count = 0; then
1021 echo "FAIL: $count info messages, expected more than 0."
1022 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1023 fail
=`expr $fail + 1`
1025 echo "PASS: $count info messages."
1026 echo " <p>PASS: $count info messages.</p>" >>$strfile
1029 # Debug log messages
1030 count
=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1031 if test $count = 0; then
1032 echo "FAIL: $count debug messages, expected more than 0."
1033 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1034 fail
=`expr $fail + 1`
1036 echo "PASS: $count debug messages."
1037 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1040 # Debug2 log messages
1041 count
=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1042 if test $count = 0; then
1043 echo "FAIL: $count debug2 messages, expected more than 0."
1044 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1045 fail
=`expr $fail + 1`
1047 echo "PASS: $count debug2 messages."
1048 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1055 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1057 for file in $BASE/log
/*_log
; do
1058 baselog
=`basename $file`
1060 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1063 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1064 echo " <pre>" >>$strfile
1065 $GREP -v '^d' $BASE/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1066 echo " </pre>" >>$strfile
1070 echo " <pre>" >>$strfile
1071 sed -e '1,$s/&/&/g' -e '1,$s/</</g' $file >>$strfile
1072 echo " </pre>" >>$strfile
1078 # Format the reports and tell the user where to find them...
1081 cat str-trailer.html
>>$strfile
1084 for file in $BASE/log
/*_log
; do
1085 baselog
=`basename $file`
1086 cp $file $baselog-$date-$user
1087 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1090 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1092 # Clean out old failure log files after 1 week...
1093 find .
-name \
*_log-\
*-$user -a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1094 find .
-name cups-str-\
*-$user.html
-a -mtime +7 -print -exec rm -f '{}' \
; |
awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1098 if test $fail != 0; then
1099 echo "$fail tests failed."
1102 echo "All tests were successful."