3 # Perform the complete set of IPP compliance tests specified in the
4 # CUPS Software Test Plan.
6 # Copyright © 2020-2025 by OpenPrinting
7 # Copyright © 2007-2021 by Apple Inc.
8 # Copyright © 1997-2007 by Easy Software Products, all rights reserved.
10 # Licensed under Apache License v2.0. See the file "LICENSE" for more
17 # Don't allow "make check" or "make test" to be run by root...
20 if test "x`id -u`" = x0
; then
21 echo Please run this as a normal user. Not supported when run as root.
26 # Force the permissions of the files we create...
32 # Solaris has a non-POSIX grep in /bin...
35 if test -x /usr
/xpg
4/bin
/grep; then
36 GREP
=/usr
/xpg
4/bin
/grep
42 # Figure out the proper echo options...
45 if (echo "testing\c"; echo 1,2,3) | $GREP c
>/dev
/null
; then
57 echo "Welcome to the CUPS Automated Test Script."
59 echo "Before we begin, it is important that you understand that the larger"
60 echo "tests require significant amounts of RAM and disk space. If you"
61 echo "attempt to run one of the big tests on a system that lacks sufficient"
62 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
63 echo "more system processes that you've grown attached to, like the X"
64 echo "server. The question you may want to ask yourself before running a"
65 echo "large test is: Do you feel lucky?"
67 echo "OK, now that we have the Dirty Harry quote out of the way, please"
68 echo "choose the type of test you wish to perform:"
70 echo "0 - No testing, keep the scheduler running for me (all systems)"
71 echo "1 - Basic conformance test, no load testing (all systems)"
72 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
73 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
74 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
76 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
78 if test $# -gt 0; then
88 echo "Running in test mode (0)"
95 echo "Running the medium tests (2)"
102 echo "Running the extreme tests (3)"
109 echo "Running the torture tests (4)"
116 echo "Running the timid tests (1)"
126 # See if we want to do SSL testing...
130 echo "Now you can choose whether to create a SSL/TLS encryption key and"
131 echo "certificate for testing:"
133 echo "0 - Do not do SSL/TLS encryption tests"
134 echo "1 - Test but do not require encryption"
135 echo "2 - Test and require encryption"
137 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
139 if test $# -gt 0; then
149 echo "Will test but not require encryption (1)"
152 echo "Will test and require encryption (2)"
155 echo "Not using SSL/TLS (0)"
161 # Information for the server/tests...
165 if test -z "$user"; then
166 if test -x /usr
/ucb
/whoami
; then
167 user
=`/usr/ucb/whoami`
172 if test -z "$user"; then
177 port
="${CUPS_TESTPORT:=8631}"
180 CUPS_TESTROOT
="$root"; export CUPS_TESTROOT
182 BASE
="${CUPS_TESTBASE:=}"
183 if test -z "$BASE"; then
184 if test -d /private
/tmp
; then
185 BASE
=/private
/tmp
/cups
-$user
193 # Make sure that the LPDEST and PRINTER environment variables are
194 # not included in the environment that is passed to the tests. These
195 # will usually cause tests to fail erroneously...
202 # See if we want to use valgrind...
206 echo "This test script can use the Valgrind software from:"
208 echo " http://developer.kde.org/~sewardj/"
210 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
212 if test $# -gt 0; then
220 case "$usevalgrind" in
222 VALGRIND
="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
223 if test `uname` = Darwin
; then
224 VALGRIND
="$VALGRIND --dsymutil=yes"
227 echo "Using Valgrind; log files can be found in $BASE/log..."
237 # See if we want to do debug logging of the libraries...
241 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
242 echo "can enable debug logging of the libraries."
244 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
246 if test $# -gt 0; then
254 case "$usedebugprintfs" in
256 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
257 CUPS_DEBUG_LOG
="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
258 CUPS_DEBUG_LEVEL
=5; export CUPS_DEBUG_LEVEL
259 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cupsCreate|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
262 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
263 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
264 CUPS_DEBUG_LOG
="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
265 CUPS_DEBUG_LEVEL
="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
266 CUPS_DEBUG_FILTER
='^(http|_http|ipp|_ipp|cupsCreate|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
274 # Start by creating temporary directories for the tests...
277 echo "Creating directories for test..."
282 mkdir $BASE/bin
/backend
283 mkdir $BASE/bin
/driver
284 mkdir $BASE/bin
/filter
287 mkdir $BASE/share
/banners
288 mkdir $BASE/share
/drv
289 mkdir $BASE/share
/locale
290 for file in ..
/locale
/cups_
*.po
; do
291 loc
=`basename $file .po | cut -c 6-`
292 mkdir $BASE/share
/locale
/$loc
293 ln -s $root/locale
/cups_
$loc.po
$BASE/share
/locale
/$loc
295 mkdir $BASE/share
/locale
/en
296 ln -s $root/locale
/cups.pot
$BASE/share
/locale
/en
/cups_en.po
297 mkdir $BASE/share
/mime
298 mkdir $BASE/share
/model
299 mkdir $BASE/share
/ppdc
300 mkdir $BASE/interfaces
304 mkdir $BASE/spool
/temp
307 ln -s $root/backend
/dnssd
$BASE/bin
/backend
308 ln -s $root/backend
/http
$BASE/bin
/backend
309 ln -s $root/backend
/ipp
$BASE/bin
/backend
310 ln -s ipp
$BASE/bin
/backend
/ipps
311 ln -s $root/backend
/lpd
$BASE/bin
/backend
312 ln -s $root/backend
/mdns
$BASE/bin
/backend
313 ln -s $root/backend
/pseudo
$BASE/bin
/backend
314 ln -s $root/backend
/snmp
$BASE/bin
/backend
315 ln -s $root/backend
/socket
$BASE/bin
/backend
316 ln -s $root/backend
/usb
$BASE/bin
/backend
317 ln -s $root/cgi
-bin $BASE/bin
318 ln -s $root/monitor
$BASE/bin
319 ln -s $root/notifier
$BASE/bin
320 ln -s $root/scheduler
$BASE/bin
/daemon
321 ln -s $root/filter
/commandtops
$BASE/bin
/filter
322 ln -s $root/filter
/gziptoany
$BASE/bin
/filter
323 ln -s $root/filter
/pstops
$BASE/bin
/filter
324 ln -s $root/filter
/rastertoepson
$BASE/bin
/filter
325 ln -s $root/filter
/rastertohp
$BASE/bin
/filter
326 ln -s $root/filter
/rastertolabel
$BASE/bin
/filter
327 ln -s $root/filter
/rastertopwg
$BASE/bin
/filter
328 cat >$BASE/share
/banners
/standard
<<EOF
332 Job: {?printer-name}-{?job-id}
333 Owner: {?job-originating-user-name}
335 Pages: {?job-impressions}
340 cat >$BASE/share
/banners
/classified
<<EOF
341 ==== Classified - Do Not Disclose ====
344 Job: {?printer-name}-{?job-id}
345 Owner: {?job-originating-user-name}
347 Pages: {?job-impressions}
350 ==== Classified - Do Not Disclose ====
352 ln -s $root/data
$BASE/share
353 ln -s $root/ppdc
/sample.drv
$BASE/share
/drv
354 ln -s $root/conf
/cgi.types
$BASE/share
/mime
355 ln -s $root/conf
/mime.types
$BASE/share
/mime
356 ln -s $root/conf
/mime.convs
$BASE/share
/mime
357 ln -s $root/data
/*.h
$BASE/share
/ppdc
358 ln -s $root/data
/*.defs
$BASE/share
/ppdc
359 ln -s $root/templates
$BASE/share
362 # Local filters and configuration files...
366 # instfilter src dst format
368 # Create a dummy script for the specified format.
376 ln -s gziptoany
"$BASE/bin/filter/$dst"
379 cat >"$BASE/bin/filter/$dst" <<EOF
383 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
385 *media=a4* | *media=iso_a4* | *PageSize=A4*)
386 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.pdf"
389 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.pdf"
393 chmod +x
"$BASE/bin/filter/$dst"
396 cat >"$BASE/bin/filter/$dst" <<EOF
400 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
402 *media=a4* | *media=iso_a4* | *PageSize=A4*)
403 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.ps"
406 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.ps"
410 chmod +x
"$BASE/bin/filter/$dst"
413 cat >"$BASE/bin/filter/$dst" <<EOF
417 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
419 *media=a4* | *media=iso_a4* | *PageSize=A4*)
420 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4-300-black-1.pwg"
423 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter-300-black-1.pwg"
427 chmod +x
"$BASE/bin/filter/$dst"
432 ln -s $root/test
/test.convs
$BASE/share
/mime
434 if test `uname` = Darwin
; then
435 instfilter cgimagetopdf imagetopdf pdf
436 instfilter cgpdftopdf pdftopdf passthru
437 instfilter cgpdftops pdftops ps
438 instfilter cgpdftoraster pdftoraster raster
439 instfilter cgtexttopdf texttopdf pdf
440 instfilter pstocupsraster pstoraster raster
442 instfilter imagetopdf imagetopdf pdf
443 instfilter pdftopdf pdftopdf passthru
444 instfilter pdftops pdftops ps
445 instfilter pdftoraster pdftoraster raster
446 instfilter pstoraster pstoraster raster
447 instfilter texttopdf texttopdf pdf
449 if test -d /usr
/share
/cups
/charsets
; then
450 ln -s /usr
/share
/cups
/charsets
$BASE/share
455 # Then create the necessary config files...
458 echo "Creating cupsd.conf for test..."
460 if test $ssltype = 2; then
461 encryption
="Encryption Required"
466 if test $testtype = 0; then
474 cat >$BASE/cupsd.conf
<<EOF
475 StrictConformance Yes
477 Listen localhost:$port
481 AccessLogLevel actions
484 PreserveJobHistory $jobhistory
485 PreserveJobFiles $jobfiles
494 if test $testtype = 0; then
495 echo WebInterface
yes >>$BASE/cupsd.conf
498 cat >$BASE/cups
-files.conf
<<EOF
507 DocumentRoot $root/doc
508 RequestRoot $BASE/spool
509 TempDir $BASE/spool/temp
510 AccessLog $BASE/log/access_log
511 ErrorLog $BASE/log/error_log
512 PageLog $BASE/log/page_log
514 PassEnv DYLD_INSERT_LIBRARIES
515 PassEnv DYLD_LIBRARY_PATH
516 PassEnv LD_LIBRARY_PATH
525 # Setup lots of test queues with PPD files...
528 echo "Creating printers.conf for test..."
531 while test $i -le $nprinters; do
532 cat >>$BASE/printers.conf
<<EOF
535 DeviceURI file:/dev/null
536 Info Test PS printer $i
538 Location CUPS test suite
540 StateMessage Printer $1 is idle.
544 cp testps.ppd
$BASE/ppd
/test-$i.ppd
549 if test -f $BASE/printers.conf
; then
550 cp $BASE/printers.conf
$BASE/printers.conf.orig
552 touch $BASE/printers.conf.orig
556 # Create a helper script to run programs with...
559 echo "Setting up environment variables for test..."
561 if test "x$ASAN_OPTIONS" = x
; then
562 # AddressSanitizer on Linux reports memory leaks from the main function
563 # which is basically useless - in general, programs do not need to free
564 # every object before exit since the OS will recover the process's
566 ASAN_OPTIONS
="detect_leaks=false"
570 if test -f "$root/cups/libcups.so.2"; then
571 if test "x$LD_LIBRARY_PATH" = x
; then
572 LD_LIBRARY_PATH
="$root/cups"
574 LD_LIBRARY_PATH
="$root/cups:$LD_LIBRARY_PATH"
577 LD_PRELOAD
="$root/cups/libcups.so.2:$root/cups/libcupsimage.so.2"
578 if test `uname` = SunOS
-a -r /usr
/lib
/libCrun.so
.1; then
579 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"
587 DYLD_INSERT_LIBRARIES
="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib:$DYLD_INSERT_LIBRARIES"
590 if test "x$DYLD_LIBRARY_PATH" = x
; then
591 DYLD_LIBRARY_PATH
="$root/cups"
593 DYLD_LIBRARY_PATH
="$root/cups:$DYLD_LIBRARY_PATH"
597 # These get exported because they don't have side-effects...
598 CUPS_DISABLE_APPLE_DEFAULT
=yes; export CUPS_DISABLE_APPLE_DEFAULT
599 CUPS_SERVER
=localhost
:$port; export CUPS_SERVER
600 CUPS_SERVERROOT
=$BASE; export CUPS_SERVERROOT
601 CUPS_STATEDIR
=$BASE; export CUPS_STATEDIR
602 CUPS_DATADIR
=$BASE/share
; export CUPS_DATADIR
603 IPP_PORT
=$port; export IPP_PORT
604 LOCALEDIR
=$BASE/share
/locale
; export LOCALEDIR
606 echo "Creating wrapper script..."
608 runcups
="$BASE/runcups"; export runcups
610 echo "#!/bin/sh" >$runcups
611 echo "# Helper script for running CUPS test instance." >>$runcups
613 echo "# Set required environment variables..." >>$runcups
614 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
615 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
616 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
617 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
618 echo "DYLD_INSERT_LIBRARIES=\"$DYLD_INSERT_LIBRARIES\"; export DYLD_INSERT_LIBRARIES" >>$runcups
619 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
620 # IPP_PORT=$port; export IPP_PORT
621 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
622 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
623 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
624 if test "x$CUPS_DEBUG_LEVEL" != x
; then
625 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
626 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
627 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
630 echo "# Run command..." >>$runcups
631 echo "exec \"\$@\"" >>$runcups
636 # Set a new home directory to avoid getting user options mixed in...
643 # Force POSIX locale for tests...
653 # Start the server; run as foreground daemon in the background...
656 echo "Starting scheduler:"
657 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
660 $runcups $VALGRIND ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >$BASE/log
/debug_log
2>&1 &
664 if test "x$testtype" = x0
; then
665 # Not running tests...
666 echo "Scheduler is PID $cupsd and is listening on port $port."
669 echo "The $runcups helper script can be used to test programs"
670 echo "with the server."
674 if test $argcount -eq 0; then
675 echo "Scheduler is PID $cupsd; run debugger now if you need to."
677 echo $ac_n "Press ENTER to continue... $ac_c"
680 echo "Scheduler is PID $cupsd."
685 while test $tries -lt 30; do
686 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
687 if test "x$running" = "xscheduler is running"; then
691 echo "Waiting for scheduler to become ready..."
694 tries
=`expr $tries + 1`
698 # Create the test report source file...
701 date=`date "+%Y-%m-%d"`
703 strfile
=$BASE/cups
-str-$date-$user.html
706 cat str
-header.html
>$strfile
709 # Run the IPP tests...
713 echo "Running IPP compliance tests..."
715 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
716 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
717 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
718 echo " $date by $user on `hostname`." >>$strfile
719 echo " <pre>" >>$strfile
722 for file in 4*.
test ..
/examples
/ipp
-2.1.
test; do
723 echo $ac_n "Performing `basename $file`: $ac_c"
726 if test $file = ..
/examples
/ipp
-2.1.
test; then
727 uri
="ipp://localhost:$port/printers/Test1"
728 options
="-V 2.1 -d NOPRINT=1 -f testfile.ps"
730 uri
="ipp://localhost:$port/printers"
733 echo "$(date '+[%d/%b/%Y:%H:%M:%S %z]') ../tools/ipptool -tI $options $uri $file" >>$strfile
734 $runcups $VALGRIND ..
/tools
/ipptool
-tI $options $uri $file >> $strfile
737 if test $status != 0; then
739 fail
=`expr $fail + 1`
745 echo " </pre>" >>$strfile
748 # Run the command tests...
752 echo "Running command tests..."
754 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
755 echo " <p>This section provides the results to the command tests" >>$strfile
756 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
757 echo " $date by $user on `hostname`." >>$strfile
758 echo " <pre>" >>$strfile
760 for file in 5*.sh
; do
761 # Wait for jobs from the previous test to complete before running the
763 if test $file != 5.1-lpadmin.sh
; then
768 echo $ac_n "Performing $file: $ac_c"
770 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"$file\":" >>$strfile
772 sh
$file $pjobs $pprinters >> $strfile
775 if test $status != 0; then
777 fail
=`expr $fail + 1`
784 # Restart the server...
787 echo $ac_n "Performing restart test: $ac_c"
789 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.10-restart\":" >>$strfile
796 running
=`$runcups ../systemv/lpstat -r 2>/dev/null`
797 if test "x$running" = "xscheduler is running"; then
802 description
="`$runcups ../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
803 if test "x$description" != "xTest Printer 1"; then
804 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
805 echo "FAIL (got '$description', expected 'Test Printer 1')"
806 fail
=`expr $fail + 1`
808 echo "Passed." >>$strfile
814 # Perform job history test...
817 echo $ac_n "Starting history test: $ac_c"
819 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history\":" >>$strfile
821 echo " lp -d Test1 testfile.jpg" >>$strfile
823 $runcups ..
/systemv
/lp -d Test1 ..
/examples
/testfile.jpg
2>&1 >>$strfile
824 if test $?
!= 0; then
825 echo "FAIL (unable to queue test job)"
826 echo " FAILED" >>$strfile
827 fail
=`expr $fail + 1`
830 echo " PASSED" >>$strfile
833 .
/waitjobs.sh
>>$strfile
835 echo $ac_n "Verifying that history still exists: $ac_c"
837 echo " ls -l $BASE/spool" >>$strfile
838 count
=`ls -1 $BASE/spool | wc -l`
839 if test $count = 1; then
840 echo "FAIL (job control files not present)"
842 echo " FAILED (job control files not present)" >>$strfile
843 ls -l $BASE/spool
>>$strfile
844 fail
=`expr $fail + 1`
847 echo " PASSED" >>$strfile
849 echo $ac_n "Waiting for job history to expire: $ac_c"
851 echo " sleep 35" >>$strfile
854 echo " lpstat" >>$strfile
855 $runcups ..
/systemv
/lpstat
2>&1 >>$strfile
857 echo " ls -l $BASE/spool" >>$strfile
858 count
=`ls -1 $BASE/spool | wc -l`
859 if test $count != 1; then
860 echo "FAIL (job control files still present)"
862 echo " FAILED (job control files still present)" >>$strfile
863 ls -l $BASE/spool
>>$strfile
864 fail
=`expr $fail + 1`
867 echo " PASSED" >>$strfile
874 # Perform job history test with cupsd restart...
877 echo $ac_n "Starting history test with cupsd restart: $ac_c"
879 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history-cupsd-restart\":" >>$strfile
881 echo " lp -d Test1 testfile.jpg" >>$strfile
883 $runcups ..
/systemv
/lp -d Test1 ..
/examples
/testfile.jpg
2>&1 >>$strfile
884 if test $?
!= 0; then
885 echo "FAIL (unable to queue test job)"
886 echo " FAILED" >>$strfile
887 fail
=`expr $fail + 1`
890 echo " PASSED" >>$strfile
893 .
/waitjobs.sh
>>$strfile
895 echo $ac_n "Verifying that history still exists: $ac_c"
897 echo " ls -l $BASE/spool" >>$strfile
898 count
=`ls -1 $BASE/spool | wc -l`
899 if test $count = 1; then
900 echo "FAIL (job control files not present)"
902 echo " FAILED (job control files not present)" >>$strfile
903 ls -l $BASE/spool
>>$strfile
904 fail
=`expr $fail + 1`
907 echo " PASSED" >>$strfile
909 echo "Restarting cupsd:"
914 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >>$BASE/log/debug_log 2>&1 &"
917 $runcups $VALGRIND ..
/scheduler
/cupsd
-c $BASE/cupsd.conf
-f >>$BASE/log
/debug_log
2>&1 &
921 echo $ac_n "Waiting for job history to expire: $ac_c"
923 echo " sleep 35" >>$strfile
926 echo " ls -l $BASE/spool" >>$strfile
927 count
=`ls -1 $BASE/spool | wc -l`
928 if test $count != 1; then
929 echo "FAIL (job control files still present)"
931 echo " FAILED (job control files still present)" >>$strfile
932 ls -l $BASE/spool
>>$strfile
933 fail
=`expr $fail + 1`
936 echo " PASSED" >>$strfile
946 echo " </pre>" >>$strfile
958 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
960 if test $cupsdstatus != 0; then
961 echo "FAIL: cupsd failed with exit status $cupsdstatus."
962 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
963 fail
=`expr $fail + 1`
965 echo "PASS: cupsd exited with no errors."
966 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
970 count
=`ls -1 $BASE/spool | wc -l`
971 count
=`expr $count - 1`
972 if test $count != 0; then
973 echo "FAIL: $count job control files were not purged."
974 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
975 fail
=`expr $fail + 1`
977 echo "PASS: All job control files purged."
978 echo " <p>PASS: All job control files purged.</p>" >>$strfile
981 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
982 count
=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
983 # expected numbers of pages from page ranges tests:
984 # - 5 pages for the job with a lower limit undefined (-5)
985 # - 4 pages for the job with a upper limit undefined (5-)
986 expected
=`expr $pjobs \* 2 + 34 + 5 + 4`
987 expected2
=`expr $expected + 2`
988 if test $count -lt $expected -a $count -gt $expected2; then
989 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
990 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
991 fail
=`expr $fail + 1`
993 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
994 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
997 # Paged printed on Test2
998 count
=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
999 expected
=`expr $pjobs \* 2 + 3`
1000 if test $count != $expected; then
1001 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
1002 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
1003 fail
=`expr $fail + 1`
1005 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
1006 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
1009 # Paged printed on Test3
1010 count
=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
1012 if test $count != $expected; then
1013 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
1014 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
1015 fail
=`expr $fail + 1`
1017 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
1018 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
1021 # Number of requests from 5.1-lpadmin.sh: cupsSNMP/IPPSupplies tests - total 5 in 'expected':
1022 # - 2 requests for creating a queue - CUPS-Get-PPD and CUPS-Add-Modify-Printer
1023 # - 1 request for setting cupsSNMP/IPPSupplies to True - CUPS-Add-Modify-Printer
1024 # - 1 request for setting cupsSNMP/IPPSupplies to False - CUPS-Add-Modify-Printer
1025 # - 1 request for deleting the queue - CUPS-Delete-Printer
1027 # Number of requests related to undefined page range limits - total 4 in 'expected'
1028 # 2 requests (Create-Job, Send-Document) * number of jobs (2 - one for undefined
1029 # low limit, one for undefined upper limit)
1032 count
=`wc -l $BASE/log/access_log | awk '{print $1}'`
1033 expected
=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2 + 2 + 5 + 4`
1034 if test $count != $expected; then
1035 echo "FAIL: $count requests logged, expected $expected."
1036 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
1037 fail
=`expr $fail + 1`
1039 echo "PASS: $count requests logged."
1040 echo " <p>PASS: $count requests logged.</p>" >>$strfile
1043 # Did CUPS-Get-Default get logged?
1044 if $GREP -q CUPS
-Get-Default $BASE/log
/access_log
; then
1045 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
1046 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
1047 echo " <pre>" >>$strfile
1048 $GREP CUPS
-Get-Default $BASE/log
/access_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1049 echo " </pre>" >>$strfile
1050 fail
=`expr $fail + 1`
1052 echo "PASS: CUPS-Get-Default not logged."
1053 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
1056 # Emergency log messages
1057 count
=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1058 if test $count != 0; then
1059 echo "FAIL: $count emergency messages, expected 0."
1060 $GREP '^X ' $BASE/log
/error_log
1061 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
1062 echo " <pre>" >>$strfile
1063 $GREP '^X ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1064 echo " </pre>" >>$strfile
1065 fail
=`expr $fail + 1`
1067 echo "PASS: $count emergency messages."
1068 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
1071 # Alert log messages
1072 count
=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1073 if test $count != 0; then
1074 echo "FAIL: $count alert messages, expected 0."
1075 $GREP '^A ' $BASE/log
/error_log
1076 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
1077 echo " <pre>" >>$strfile
1078 $GREP '^A ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1079 echo " </pre>" >>$strfile
1080 fail
=`expr $fail + 1`
1082 echo "PASS: $count alert messages."
1083 echo " <p>PASS: $count alert messages.</p>" >>$strfile
1086 # Critical log messages
1087 count
=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1088 if test $count != 0; then
1089 echo "FAIL: $count critical messages, expected 0."
1090 $GREP '^C ' $BASE/log
/error_log
1091 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
1092 echo " <pre>" >>$strfile
1093 $GREP '^C ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1094 echo " </pre>" >>$strfile
1095 fail
=`expr $fail + 1`
1097 echo "PASS: $count critical messages."
1098 echo " <p>PASS: $count critical messages.</p>" >>$strfile
1101 # Error log messages
1102 count
=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
1103 if test $count != 33; then
1104 echo "FAIL: $count error messages, expected 33."
1105 $GREP '^E ' $BASE/log
/error_log
1106 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1107 echo " <pre>" >>$strfile
1108 $GREP '^E ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1109 echo " </pre>" >>$strfile
1110 fail
=`expr $fail + 1`
1112 echo "PASS: $count error messages."
1113 echo " <p>PASS: $count error messages.</p>" >>$strfile
1116 # Warning log messages
1117 count
=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | $GREP -v 'libusb error' | $GREP -v ColorManager | $GREP -v 'Avahi client failed' | wc -l | awk '{print $1}'`
1118 if test $count != 14; then
1119 echo "FAIL: $count warning messages, expected 14."
1120 $GREP '^W ' $BASE/log
/error_log
1121 echo " <p>FAIL: $count warning messages, expected 14.</p>" >>$strfile
1122 echo " <pre>" >>$strfile
1123 $GREP '^W ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1124 echo " </pre>" >>$strfile
1125 fail
=`expr $fail + 1`
1127 echo "PASS: $count warning messages."
1128 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1131 # Notice log messages
1132 count
=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1133 if test $count != 0; then
1134 echo "FAIL: $count notice messages, expected 0."
1135 $GREP '^N ' $BASE/log
/error_log
1136 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1137 echo " <pre>" >>$strfile
1138 $GREP '^N ' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1139 echo " </pre>" >>$strfile
1140 fail
=`expr $fail + 1`
1142 echo "PASS: $count notice messages."
1143 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1147 count
=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1148 if test $count = 0; then
1149 echo "FAIL: $count info messages, expected more than 0."
1150 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1151 fail
=`expr $fail + 1`
1153 echo "PASS: $count info messages."
1154 echo " <p>PASS: $count info messages.</p>" >>$strfile
1157 # Debug log messages
1158 count
=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1159 if test $count = 0; then
1160 echo "FAIL: $count debug messages, expected more than 0."
1161 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1162 fail
=`expr $fail + 1`
1164 echo "PASS: $count debug messages."
1165 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1168 # Debug2 log messages
1169 count
=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1170 if test $count = 0 -a $loglevel = debug2
; then
1171 echo "FAIL: $count debug2 messages, expected more than 0."
1172 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1173 fail
=`expr $fail + 1`
1174 elif test $count != 0 -a $loglevel = debug
; then
1175 echo "FAIL: $count debug2 messages, expected 0."
1176 echo " <p>FAIL: $count debug2 messages, expected 0.</p>" >>$strfile
1177 fail
=`expr $fail + 1`
1179 echo "PASS: $count debug2 messages."
1180 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1187 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1189 for file in $BASE/log
/*_log
; do
1190 baselog
=`basename $file`
1192 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1195 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1196 echo " <pre>" >>$strfile
1197 $GREP -v '^d' $BASE/log
/error_log
| sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
1198 echo " </pre>" >>$strfile
1202 echo " <pre>" >>$strfile
1203 sed -e '1,$s/&/&/g' -e '1,$s/</</g' $file >>$strfile
1204 echo " </pre>" >>$strfile
1210 # Format the reports and tell the user where to find them...
1213 cat str
-trailer.html
>>$strfile
1216 for file in $BASE/log
/*_log
; do
1217 baselog
=`basename $file`
1218 cp $file $baselog-$date-$user
1219 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1222 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1224 # Clean out old failure log files after 1 week...
1225 find .
-name \
*_log
-\
*-$user -a -mtime +7 -print -exec rm -f '{}' \
; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1226 find .
-name cups
-str-\
*-$user.html
-a -mtime +7 -print -exec rm -f '{}' \
; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1230 if test $fail != 0; then
1231 echo "$fail tests failed."
1234 echo "All tests were successful."