]> git.ipfire.org Git - thirdparty/cups.git/blame_incremental - test/run-stp-tests.sh
Merge pull request #1310 from weblate/weblate-cups-cups
[thirdparty/cups.git] / test / run-stp-tests.sh
... / ...
CommitLineData
1#!/bin/sh
2#
3# Perform the complete set of IPP compliance tests specified in the
4# CUPS Software Test Plan.
5#
6# Copyright © 2020-2025 by OpenPrinting
7# Copyright © 2007-2021 by Apple Inc.
8# Copyright © 1997-2007 by Easy Software Products, all rights reserved.
9#
10# Licensed under Apache License v2.0. See the file "LICENSE" for more
11# information.
12#
13
14argcount=$#
15
16#
17# Don't allow "make check" or "make test" to be run by root...
18#
19
20if test "x`id -u`" = x0; then
21 echo Please run this as a normal user. Not supported when run as root.
22 exit 1
23fi
24
25#
26# Force the permissions of the files we create...
27#
28
29umask 022
30
31#
32# Solaris has a non-POSIX grep in /bin...
33#
34
35if test -x /usr/xpg4/bin/grep; then
36 GREP=/usr/xpg4/bin/grep
37else
38 GREP=grep
39fi
40
41#
42# Figure out the proper echo options...
43#
44
45if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then
46 ac_n=-n
47 ac_c=
48else
49 ac_n=
50 ac_c='\c'
51fi
52
53#
54# Greet the tester...
55#
56
57echo "Welcome to the CUPS Automated Test Script."
58echo ""
59echo "Before we begin, it is important that you understand that the larger"
60echo "tests require significant amounts of RAM and disk space. If you"
61echo "attempt to run one of the big tests on a system that lacks sufficient"
62echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
63echo "more system processes that you've grown attached to, like the X"
64echo "server. The question you may want to ask yourself before running a"
65echo "large test is: Do you feel lucky?"
66echo ""
67echo "OK, now that we have the Dirty Harry quote out of the way, please"
68echo "choose the type of test you wish to perform:"
69echo ""
70echo "0 - No testing, keep the scheduler running for me (all systems)"
71echo "1 - Basic conformance test, no load testing (all systems)"
72echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
73echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
74echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
75echo ""
76echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
77
78if test $# -gt 0; then
79 testtype=$1
80 shift
81else
82 read testtype
83fi
84echo ""
85
86case "$testtype" in
87 0)
88 echo "Running in test mode (0)"
89 nprinters=0
90 pjobs=0
91 pprinters=0
92 loglevel="debug2"
93 ;;
94 2)
95 echo "Running the medium tests (2)"
96 nprinters=20
97 pjobs=20
98 pprinters=10
99 loglevel="debug"
100 ;;
101 3)
102 echo "Running the extreme tests (3)"
103 nprinters=1000
104 pjobs=100
105 pprinters=50
106 loglevel="debug"
107 ;;
108 4)
109 echo "Running the torture tests (4)"
110 nprinters=20000
111 pjobs=200
112 pprinters=100
113 loglevel="debug"
114 ;;
115 *)
116 echo "Running the timid tests (1)"
117 nprinters=0
118 pjobs=10
119 pprinters=0
120 loglevel="debug2"
121 testtype="1"
122 ;;
123esac
124
125#
126# See if we want to do SSL testing...
127#
128
129echo ""
130echo "Now you can choose whether to create a SSL/TLS encryption key and"
131echo "certificate for testing:"
132echo ""
133echo "0 - Do not do SSL/TLS encryption tests"
134echo "1 - Test but do not require encryption"
135echo "2 - Test and require encryption"
136echo ""
137echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
138
139if test $# -gt 0; then
140 ssltype=$1
141 shift
142else
143 read ssltype
144fi
145echo ""
146
147case "$ssltype" in
148 1)
149 echo "Will test but not require encryption (1)"
150 ;;
151 2)
152 echo "Will test and require encryption (2)"
153 ;;
154 *)
155 echo "Not using SSL/TLS (0)"
156 ssltype=0
157 ;;
158esac
159
160#
161# Information for the server/tests...
162#
163
164user="$USER"
165if test -z "$user"; then
166 if test -x /usr/ucb/whoami; then
167 user=`/usr/ucb/whoami`
168 else
169 user=`whoami`
170 fi
171
172 if test -z "$user"; then
173 user="unknown"
174 fi
175fi
176
177port="${CUPS_TESTPORT:=8631}"
178cwd=`pwd`
179root=`dirname $cwd`
180CUPS_TESTROOT="$root"; export CUPS_TESTROOT
181
182BASE="${CUPS_TESTBASE:=}"
183if test -z "$BASE"; then
184 if test -d /private/tmp; then
185 BASE=/private/tmp/cups-$user
186 else
187 BASE=/tmp/cups-$user
188 fi
189fi
190export BASE
191
192#
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...
196#
197
198unset LPDEST
199unset PRINTER
200
201#
202# See if we want to use valgrind...
203#
204
205echo ""
206echo "This test script can use the Valgrind software from:"
207echo ""
208echo " http://developer.kde.org/~sewardj/"
209echo ""
210echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
211
212if test $# -gt 0; then
213 usevalgrind=$1
214 shift
215else
216 read usevalgrind
217fi
218echo ""
219
220case "$usevalgrind" in
221 Y* | y*)
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"
225 fi
226 export VALGRIND
227 echo "Using Valgrind; log files can be found in $BASE/log..."
228 ;;
229
230 *)
231 VALGRIND=""
232 export VALGRIND
233 ;;
234esac
235
236#
237# See if we want to do debug logging of the libraries...
238#
239
240echo ""
241echo "If CUPS was built with the --enable-debug-printfs configure option, you"
242echo "can enable debug logging of the libraries."
243echo ""
244echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
245
246if test $# -gt 0; then
247 usedebugprintfs=$1
248 shift
249else
250 read usedebugprintfs
251fi
252echo ""
253
254case "$usedebugprintfs" in
255 Y* | y*)
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|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
260 ;;
261
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|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
267 ;;
268
269 *)
270 ;;
271esac
272
273#
274# Start by creating temporary directories for the tests...
275#
276
277echo "Creating directories for test..."
278
279rm -rf $BASE
280mkdir $BASE
281mkdir $BASE/bin
282mkdir $BASE/bin/backend
283mkdir $BASE/bin/driver
284mkdir $BASE/bin/filter
285mkdir $BASE/certs
286mkdir $BASE/share
287mkdir $BASE/share/banners
288mkdir $BASE/share/drv
289mkdir $BASE/share/locale
290for 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
294done
295mkdir $BASE/share/locale/en
296ln -s $root/locale/cups.pot $BASE/share/locale/en/cups_en.po
297mkdir $BASE/share/mime
298mkdir $BASE/share/model
299mkdir $BASE/share/ppdc
300mkdir $BASE/interfaces
301mkdir $BASE/log
302mkdir $BASE/ppd
303mkdir $BASE/spool
304mkdir $BASE/spool/temp
305mkdir $BASE/ssl
306
307ln -s $root/backend/dnssd $BASE/bin/backend
308ln -s $root/backend/http $BASE/bin/backend
309ln -s $root/backend/ipp $BASE/bin/backend
310ln -s ipp $BASE/bin/backend/ipps
311ln -s $root/backend/lpd $BASE/bin/backend
312ln -s $root/backend/mdns $BASE/bin/backend
313ln -s $root/backend/pseudo $BASE/bin/backend
314ln -s $root/backend/snmp $BASE/bin/backend
315ln -s $root/backend/socket $BASE/bin/backend
316ln -s $root/backend/usb $BASE/bin/backend
317ln -s $root/cgi-bin $BASE/bin
318ln -s $root/monitor $BASE/bin
319ln -s $root/notifier $BASE/bin
320ln -s $root/scheduler $BASE/bin/daemon
321ln -s $root/filter/commandtops $BASE/bin/filter
322ln -s $root/filter/gziptoany $BASE/bin/filter
323ln -s $root/filter/pstops $BASE/bin/filter
324ln -s $root/filter/rastertoepson $BASE/bin/filter
325ln -s $root/filter/rastertohp $BASE/bin/filter
326ln -s $root/filter/rastertolabel $BASE/bin/filter
327ln -s $root/filter/rastertopwg $BASE/bin/filter
328cat >$BASE/share/banners/standard <<EOF
329 ==== Cover Page ====
330
331
332 Job: {?printer-name}-{?job-id}
333 Owner: {?job-originating-user-name}
334 Name: {?job-name}
335 Pages: {?job-impressions}
336
337
338 ==== Cover Page ====
339EOF
340cat >$BASE/share/banners/classified <<EOF
341 ==== Classified - Do Not Disclose ====
342
343
344 Job: {?printer-name}-{?job-id}
345 Owner: {?job-originating-user-name}
346 Name: {?job-name}
347 Pages: {?job-impressions}
348
349
350 ==== Classified - Do Not Disclose ====
351EOF
352ln -s $root/data $BASE/share
353ln -s $root/ppdc/sample.drv $BASE/share/drv
354ln -s $root/conf/cgi.types $BASE/share/mime
355ln -s $root/conf/mime.types $BASE/share/mime
356ln -s $root/conf/mime.convs $BASE/share/mime
357ln -s $root/data/*.h $BASE/share/ppdc
358ln -s $root/data/*.defs $BASE/share/ppdc
359ln -s $root/templates $BASE/share
360
361#
362# Local filters and configuration files...
363#
364
365instfilter() {
366 # instfilter src dst format
367 #
368 # See if the filter exists in a standard location; if so, make a
369 # symlink, otherwise create a dummy script for the specified format.
370 #
371 src="$1"
372 dst="$2"
373 format="$3"
374
375 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
376 if test -x "$dir/$src"; then
377 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
378 return
379 fi
380 done
381
382 # Source filter not present, create a dummy filter
383 case $format in
384 passthru)
385 ln -s gziptoany "$BASE/bin/filter/$dst"
386 ;;
387 pdf)
388 cat >"$BASE/bin/filter/$dst" <<EOF
389#!/bin/sh
390trap "" TERM
391trap "" PIPE
392gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
393case "\$5" in
394 *media=a4* | *media=iso_a4* | *PageSize=A4*)
395 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.pdf"
396 ;;
397 *)
398 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.pdf"
399 ;;
400esac
401EOF
402 chmod +x "$BASE/bin/filter/$dst"
403 ;;
404 ps)
405 cat >"$BASE/bin/filter/$dst" <<EOF
406#!/bin/sh
407trap "" TERM
408trap "" PIPE
409gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
410case "\$5" in
411 *media=a4* | *media=iso_a4* | *PageSize=A4*)
412 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4.ps"
413 ;;
414 *)
415 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter.ps"
416 ;;
417esac
418EOF
419 chmod +x "$BASE/bin/filter/$dst"
420 ;;
421 raster)
422 cat >"$BASE/bin/filter/$dst" <<EOF
423#!/bin/sh
424trap "" TERM
425trap "" PIPE
426gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
427case "\$5" in
428 *media=a4* | *media=iso_a4* | *PageSize=A4*)
429 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-a4-300-black-1.pwg"
430 ;;
431 *)
432 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/examples/onepage-letter-300-black-1.pwg"
433 ;;
434esac
435EOF
436 chmod +x "$BASE/bin/filter/$dst"
437 ;;
438 esac
439}
440
441ln -s $root/test/test.convs $BASE/share/mime
442
443if test `uname` = Darwin; then
444 instfilter cgimagetopdf imagetopdf pdf
445 instfilter cgpdftopdf pdftopdf passthru
446 instfilter cgpdftops pdftops ps
447 instfilter cgpdftoraster pdftoraster raster
448 instfilter cgtexttopdf texttopdf pdf
449 instfilter pstocupsraster pstoraster raster
450else
451 instfilter imagetopdf imagetopdf pdf
452 instfilter pdftopdf pdftopdf passthru
453 instfilter pdftops pdftops ps
454 instfilter pdftoraster pdftoraster raster
455 instfilter pstoraster pstoraster raster
456 instfilter texttopdf texttopdf pdf
457
458 if test -d /usr/share/cups/charsets; then
459 ln -s /usr/share/cups/charsets $BASE/share
460 fi
461fi
462
463#
464# Then create the necessary config files...
465#
466
467echo "Creating cupsd.conf for test..."
468
469if test $ssltype = 2; then
470 encryption="Encryption Required"
471else
472 encryption=""
473fi
474
475if test $testtype = 0; then
476 jobhistory="30m"
477 jobfiles="5m"
478else
479 jobhistory="30"
480 jobfiles="Off"
481fi
482
483cat >$BASE/cupsd.conf <<EOF
484StrictConformance Yes
485Browsing Off
486Listen localhost:$port
487Listen $BASE/sock
488MaxSubscriptions 3
489MaxLogSize 0
490AccessLogLevel actions
491LogLevel $loglevel
492LogTimeFormat usecs
493PreserveJobHistory $jobhistory
494PreserveJobFiles $jobfiles
495<Policy default>
496<Limit All>
497Order Allow,Deny
498$encryption
499</Limit>
500</Policy>
501EOF
502
503if test $testtype = 0; then
504 echo WebInterface yes >>$BASE/cupsd.conf
505fi
506
507cat >$BASE/cups-files.conf <<EOF
508FileDevice yes
509Printcap
510User $user
511ServerRoot $BASE
512StateDir $BASE
513ServerBin $BASE/bin
514CacheDir $BASE/share
515DataDir $BASE/share
516DocumentRoot $root/doc
517RequestRoot $BASE/spool
518TempDir $BASE/spool/temp
519AccessLog $BASE/log/access_log
520ErrorLog $BASE/log/error_log
521PageLog $BASE/log/page_log
522
523PassEnv DYLD_INSERT_LIBRARIES
524PassEnv DYLD_LIBRARY_PATH
525PassEnv LD_LIBRARY_PATH
526PassEnv LD_PRELOAD
527PassEnv LOCALEDIR
528PassEnv ASAN_OPTIONS
529
530Sandboxing Off
531EOF
532
533if test $ssltype != 0 -a `uname` = Darwin; then
534 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
535fi
536
537#
538# Setup lots of test queues with PPD files...
539#
540
541echo "Creating printers.conf for test..."
542
543i=1
544while test $i -le $nprinters; do
545 cat >>$BASE/printers.conf <<EOF
546<Printer test-$i>
547Accepting Yes
548DeviceURI file:/dev/null
549Info Test PS printer $i
550JobSheets none none
551Location CUPS test suite
552State Idle
553StateMessage Printer $1 is idle.
554</Printer>
555EOF
556
557 cp testps.ppd $BASE/ppd/test-$i.ppd
558
559 i=`expr $i + 1`
560done
561
562if test -f $BASE/printers.conf; then
563 cp $BASE/printers.conf $BASE/printers.conf.orig
564else
565 touch $BASE/printers.conf.orig
566fi
567
568#
569# Create a helper script to run programs with...
570#
571
572echo "Setting up environment variables for test..."
573
574if test "x$ASAN_OPTIONS" = x; then
575 # AddressSanitizer on Linux reports memory leaks from the main function
576 # which is basically useless - in general, programs do not need to free
577 # every object before exit since the OS will recover the process's
578 # memory.
579 ASAN_OPTIONS="detect_leaks=false"
580 export ASAN_OPTIONS
581fi
582
583if test -f "$root/cups/libcups.so.2"; then
584 if test "x$LD_LIBRARY_PATH" = x; then
585 LD_LIBRARY_PATH="$root/cups"
586 else
587 LD_LIBRARY_PATH="$root/cups:$LD_LIBRARY_PATH"
588 fi
589
590 LD_PRELOAD="$root/cups/libcups.so.2:$root/cups/libcupsimage.so.2"
591 if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
592 LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
593 fi
594fi
595
596if test -f "$root/cups/libcups.2.dylib"; then
597 if test "x$DYLD_INSERT_LIBRARIES" = x; then
598 DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib"
599 else
600 DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/cups/libcupsimage.2.dylib:$DYLD_INSERT_LIBRARIES"
601 fi
602
603 if test "x$DYLD_LIBRARY_PATH" = x; then
604 DYLD_LIBRARY_PATH="$root/cups"
605 else
606 DYLD_LIBRARY_PATH="$root/cups:$DYLD_LIBRARY_PATH"
607 fi
608fi
609
610# These get exported because they don't have side-effects...
611CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
612CUPS_SERVER=localhost:$port; export CUPS_SERVER
613CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
614CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
615CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
616IPP_PORT=$port; export IPP_PORT
617LOCALEDIR=$BASE/share/locale; export LOCALEDIR
618
619echo "Creating wrapper script..."
620
621runcups="$BASE/runcups"; export runcups
622
623echo "#!/bin/sh" >$runcups
624echo "# Helper script for running CUPS test instance." >>$runcups
625echo "" >>$runcups
626echo "# Set required environment variables..." >>$runcups
627echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
628echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
629echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
630echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
631echo "DYLD_INSERT_LIBRARIES=\"$DYLD_INSERT_LIBRARIES\"; export DYLD_INSERT_LIBRARIES" >>$runcups
632echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
633# IPP_PORT=$port; export IPP_PORT
634echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
635echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
636echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
637if test "x$CUPS_DEBUG_LEVEL" != x; then
638 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
639 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
640 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
641fi
642echo "" >>$runcups
643echo "# Run command..." >>$runcups
644echo "exec \"\$@\"" >>$runcups
645
646chmod +x $runcups
647
648#
649# Set a new home directory to avoid getting user options mixed in...
650#
651
652HOME=$BASE
653export HOME
654
655#
656# Force POSIX locale for tests...
657#
658
659LANG=C
660export LANG
661
662LC_MESSAGES=C
663export LC_MESSAGES
664
665#
666# Start the server; run as foreground daemon in the background...
667#
668
669echo "Starting scheduler:"
670echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
671echo ""
672
673$runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
674
675cupsd=$!
676
677if test "x$testtype" = x0; then
678 # Not running tests...
679 echo "Scheduler is PID $cupsd and is listening on port $port."
680 echo ""
681
682 echo "The $runcups helper script can be used to test programs"
683 echo "with the server."
684 exit 0
685fi
686
687if test $argcount -eq 0; then
688 echo "Scheduler is PID $cupsd; run debugger now if you need to."
689 echo ""
690 echo $ac_n "Press ENTER to continue... $ac_c"
691 read junk
692else
693 echo "Scheduler is PID $cupsd."
694 sleep 2
695fi
696
697tries=0
698while test $tries -lt 30; do
699 running=`$runcups ../systemv/lpstat -r 2>/dev/null`
700 if test "x$running" = "xscheduler is running"; then
701 break
702 fi
703
704 echo "Waiting for scheduler to become ready..."
705 sleep 10
706
707 tries=`expr $tries + 1`
708done
709
710#
711# Create the test report source file...
712#
713
714date=`date "+%Y-%m-%d"`
715
716strfile=$BASE/cups-str-$date-$user.html
717
718rm -f $strfile
719cat str-header.html >$strfile
720
721#
722# Run the IPP tests...
723#
724
725echo ""
726echo "Running IPP compliance tests..."
727
728echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
729echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
730echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
731echo " $date by $user on `hostname`." >>$strfile
732echo " <pre>" >>$strfile
733
734fail=0
735for file in 4*.test ../examples/ipp-2.1.test; do
736 echo $ac_n "Performing `basename $file`: $ac_c"
737 echo "" >>$strfile
738
739 if test $file = ../examples/ipp-2.1.test; then
740 uri="ipp://localhost:$port/printers/Test1"
741 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
742 else
743 uri="ipp://localhost:$port/printers"
744 options=""
745 fi
746 echo "$(date '+[%d/%b/%Y:%H:%M:%S %z]') ../tools/ipptool -tI $options $uri $file" >>$strfile
747 $runcups $VALGRIND ../tools/ipptool -tI $options $uri $file >> $strfile
748 status=$?
749
750 if test $status != 0; then
751 echo FAIL
752 fail=`expr $fail + 1`
753 else
754 echo PASS
755 fi
756done
757
758echo " </pre>" >>$strfile
759
760#
761# Run the command tests...
762#
763
764echo ""
765echo "Running command tests..."
766
767echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
768echo " <p>This section provides the results to the command tests" >>$strfile
769echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
770echo " $date by $user on `hostname`." >>$strfile
771echo " <pre>" >>$strfile
772
773for file in 5*.sh; do
774 # Wait for jobs from the previous test to complete before running the
775 # next test...
776 if test $file != 5.1-lpadmin.sh; then
777 ./waitjobs.sh 1800
778 fi
779
780 # Run the test...
781 echo $ac_n "Performing $file: $ac_c"
782 echo "" >>$strfile
783 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"$file\":" >>$strfile
784
785 sh $file $pjobs $pprinters >> $strfile
786 status=$?
787
788 if test $status != 0; then
789 echo FAIL
790 fail=`expr $fail + 1`
791 else
792 echo PASS
793 fi
794done
795
796#
797# Restart the server...
798#
799
800echo $ac_n "Performing restart test: $ac_c"
801echo "" >>$strfile
802echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.10-restart\":" >>$strfile
803
804kill -HUP $cupsd
805
806while true; do
807 sleep 10
808
809 running=`$runcups ../systemv/lpstat -r 2>/dev/null`
810 if test "x$running" = "xscheduler is running"; then
811 break
812 fi
813done
814
815description="`$runcups ../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
816if test "x$description" != "xTest Printer 1"; then
817 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
818 echo "FAIL (got '$description', expected 'Test Printer 1')"
819 fail=`expr $fail + 1`
820else
821 echo "Passed." >>$strfile
822 echo PASS
823fi
824
825
826#
827# Perform job history test...
828#
829
830echo $ac_n "Starting history test: $ac_c"
831echo "" >>$strfile
832echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history\":" >>$strfile
833
834echo " lp -d Test1 testfile.jpg" >>$strfile
835
836$runcups ../systemv/lp -d Test1 ../examples/testfile.jpg 2>&1 >>$strfile
837if test $? != 0; then
838 echo "FAIL (unable to queue test job)"
839 echo " FAILED" >>$strfile
840 fail=`expr $fail + 1`
841else
842 echo "PASS"
843 echo " PASSED" >>$strfile
844
845 sleep 5
846 ./waitjobs.sh >>$strfile
847
848 echo $ac_n "Verifying that history still exists: $ac_c"
849
850 echo " ls -l $BASE/spool" >>$strfile
851 count=`ls -1 $BASE/spool | wc -l`
852 if test $count = 1; then
853 echo "FAIL (job control files not present)"
854 ls -l $BASE/spool
855 echo " FAILED (job control files not present)" >>$strfile
856 ls -l $BASE/spool >>$strfile
857 fail=`expr $fail + 1`
858 else
859 echo "PASS"
860 echo " PASSED" >>$strfile
861
862 echo $ac_n "Waiting for job history to expire: $ac_c"
863 echo "" >>$strfile
864 echo " sleep 35" >>$strfile
865 sleep 35
866
867 echo " lpstat" >>$strfile
868 $runcups ../systemv/lpstat 2>&1 >>$strfile
869
870 echo " ls -l $BASE/spool" >>$strfile
871 count=`ls -1 $BASE/spool | wc -l`
872 if test $count != 1; then
873 echo "FAIL (job control files still present)"
874 ls -l $BASE/spool
875 echo " FAILED (job control files still present)" >>$strfile
876 ls -l $BASE/spool >>$strfile
877 fail=`expr $fail + 1`
878 else
879 echo "PASS"
880 echo " PASSED" >>$strfile
881 fi
882 fi
883fi
884
885
886#
887# Perform job history test with cupsd restart...
888#
889
890echo $ac_n "Starting history test with cupsd restart: $ac_c"
891echo "" >>$strfile
892echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.11-history-cupsd-restart\":" >>$strfile
893
894echo " lp -d Test1 testfile.jpg" >>$strfile
895
896$runcups ../systemv/lp -d Test1 ../examples/testfile.jpg 2>&1 >>$strfile
897if test $? != 0; then
898 echo "FAIL (unable to queue test job)"
899 echo " FAILED" >>$strfile
900 fail=`expr $fail + 1`
901else
902 echo "PASS"
903 echo " PASSED" >>$strfile
904
905 sleep 5
906 ./waitjobs.sh >>$strfile
907
908 echo $ac_n "Verifying that history still exists: $ac_c"
909
910 echo " ls -l $BASE/spool" >>$strfile
911 count=`ls -1 $BASE/spool | wc -l`
912 if test $count = 1; then
913 echo "FAIL (job control files not present)"
914 ls -l $BASE/spool
915 echo " FAILED (job control files not present)" >>$strfile
916 ls -l $BASE/spool >>$strfile
917 fail=`expr $fail + 1`
918 else
919 echo "PASS"
920 echo " PASSED" >>$strfile
921
922 echo "Restarting cupsd:"
923 echo "" >>$strfile
924 kill $cupsd
925 wait $cupsd
926
927 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >>$BASE/log/debug_log 2>&1 &"
928 echo ""
929
930 $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >>$BASE/log/debug_log 2>&1 &
931
932 cupsd=$!
933
934 echo $ac_n "Waiting for job history to expire: $ac_c"
935 echo "" >>$strfile
936 echo " sleep 35" >>$strfile
937 sleep 35
938
939 echo " ls -l $BASE/spool" >>$strfile
940 count=`ls -1 $BASE/spool | wc -l`
941 if test $count != 1; then
942 echo "FAIL (job control files still present)"
943 ls -l $BASE/spool
944 echo " FAILED (job control files still present)" >>$strfile
945 ls -l $BASE/spool >>$strfile
946 fail=`expr $fail + 1`
947 else
948 echo "PASS"
949 echo " PASSED" >>$strfile
950 fi
951 fi
952fi
953
954
955#
956# Stop the server...
957#
958
959echo " </pre>" >>$strfile
960
961kill $cupsd
962wait $cupsd
963cupsdstatus=$?
964
965#
966# Verify counts...
967#
968
969echo "Test Summary"
970echo ""
971echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
972
973if test $cupsdstatus != 0; then
974 echo "FAIL: cupsd failed with exit status $cupsdstatus."
975 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
976 fail=`expr $fail + 1`
977else
978 echo "PASS: cupsd exited with no errors."
979 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
980fi
981
982# Job control files
983count=`ls -1 $BASE/spool | wc -l`
984count=`expr $count - 1`
985if test $count != 0; then
986 echo "FAIL: $count job control files were not purged."
987 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
988 fail=`expr $fail + 1`
989else
990 echo "PASS: All job control files purged."
991 echo " <p>PASS: All job control files purged.</p>" >>$strfile
992fi
993
994# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
995count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
996# expected numbers of pages from page ranges tests:
997# - 5 pages for the job with a lower limit undefined (-5)
998# - 4 pages for the job with a upper limit undefined (5-)
999expected=`expr $pjobs \* 2 + 34 + 5 + 4`
1000expected2=`expr $expected + 2`
1001if test $count -lt $expected -a $count -gt $expected2; then
1002 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
1003 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
1004 fail=`expr $fail + 1`
1005else
1006 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
1007 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
1008fi
1009
1010# Paged printed on Test2
1011count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
1012expected=`expr $pjobs \* 2 + 3`
1013if test $count != $expected; then
1014 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
1015 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
1016 fail=`expr $fail + 1`
1017else
1018 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
1019 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
1020fi
1021
1022# Paged printed on Test3
1023count=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
1024expected=2
1025if test $count != $expected; then
1026 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
1027 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
1028 fail=`expr $fail + 1`
1029else
1030 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
1031 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
1032fi
1033
1034# Number of requests from 5.1-lpadmin.sh: cupsSNMP/IPPSupplies tests - total 5 in 'expected':
1035# - 2 requests for creating a queue - CUPS-Get-PPD and CUPS-Add-Modify-Printer
1036# - 1 request for setting cupsSNMP/IPPSupplies to True - CUPS-Add-Modify-Printer
1037# - 1 request for setting cupsSNMP/IPPSupplies to False - CUPS-Add-Modify-Printer
1038# - 1 request for deleting the queue - CUPS-Delete-Printer
1039
1040# Number of requests related to undefined page range limits - total 4 in 'expected'
1041# 2 requests (Create-Job, Send-Document) * number of jobs (2 - one for undefined
1042# low limit, one for undefined upper limit)
1043
1044# Requests logged
1045count=`wc -l $BASE/log/access_log | awk '{print $1}'`
1046expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4 + 2 + 2 + 5 + 4`
1047if test $count != $expected; then
1048 echo "FAIL: $count requests logged, expected $expected."
1049 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
1050 fail=`expr $fail + 1`
1051else
1052 echo "PASS: $count requests logged."
1053 echo " <p>PASS: $count requests logged.</p>" >>$strfile
1054fi
1055
1056# Did CUPS-Get-Default get logged?
1057if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
1058 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
1059 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
1060 echo " <pre>" >>$strfile
1061 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1062 echo " </pre>" >>$strfile
1063 fail=`expr $fail + 1`
1064else
1065 echo "PASS: CUPS-Get-Default not logged."
1066 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
1067fi
1068
1069# Emergency log messages
1070count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1071if test $count != 0; then
1072 echo "FAIL: $count emergency messages, expected 0."
1073 $GREP '^X ' $BASE/log/error_log
1074 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
1075 echo " <pre>" >>$strfile
1076 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1077 echo " </pre>" >>$strfile
1078 fail=`expr $fail + 1`
1079else
1080 echo "PASS: $count emergency messages."
1081 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
1082fi
1083
1084# Alert log messages
1085count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1086if test $count != 0; then
1087 echo "FAIL: $count alert messages, expected 0."
1088 $GREP '^A ' $BASE/log/error_log
1089 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
1090 echo " <pre>" >>$strfile
1091 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1092 echo " </pre>" >>$strfile
1093 fail=`expr $fail + 1`
1094else
1095 echo "PASS: $count alert messages."
1096 echo " <p>PASS: $count alert messages.</p>" >>$strfile
1097fi
1098
1099# Critical log messages
1100count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1101if test $count != 0; then
1102 echo "FAIL: $count critical messages, expected 0."
1103 $GREP '^C ' $BASE/log/error_log
1104 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
1105 echo " <pre>" >>$strfile
1106 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1107 echo " </pre>" >>$strfile
1108 fail=`expr $fail + 1`
1109else
1110 echo "PASS: $count critical messages."
1111 echo " <p>PASS: $count critical messages.</p>" >>$strfile
1112fi
1113
1114# Error log messages
1115count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
1116if test $count != 33; then
1117 echo "FAIL: $count error messages, expected 33."
1118 $GREP '^E ' $BASE/log/error_log
1119 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1120 echo " <pre>" >>$strfile
1121 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1122 echo " </pre>" >>$strfile
1123 fail=`expr $fail + 1`
1124else
1125 echo "PASS: $count error messages."
1126 echo " <p>PASS: $count error messages.</p>" >>$strfile
1127fi
1128
1129# Warning log messages
1130count=`$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}'`
1131if test $count != 14; then
1132 echo "FAIL: $count warning messages, expected 14."
1133 $GREP '^W ' $BASE/log/error_log
1134 echo " <p>FAIL: $count warning messages, expected 14.</p>" >>$strfile
1135 echo " <pre>" >>$strfile
1136 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1137 echo " </pre>" >>$strfile
1138 fail=`expr $fail + 1`
1139else
1140 echo "PASS: $count warning messages."
1141 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1142fi
1143
1144# Notice log messages
1145count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1146if test $count != 0; then
1147 echo "FAIL: $count notice messages, expected 0."
1148 $GREP '^N ' $BASE/log/error_log
1149 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1150 echo " <pre>" >>$strfile
1151 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1152 echo " </pre>" >>$strfile
1153 fail=`expr $fail + 1`
1154else
1155 echo "PASS: $count notice messages."
1156 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1157fi
1158
1159# Info log messages
1160count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1161if test $count = 0; then
1162 echo "FAIL: $count info messages, expected more than 0."
1163 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1164 fail=`expr $fail + 1`
1165else
1166 echo "PASS: $count info messages."
1167 echo " <p>PASS: $count info messages.</p>" >>$strfile
1168fi
1169
1170# Debug log messages
1171count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1172if test $count = 0; then
1173 echo "FAIL: $count debug messages, expected more than 0."
1174 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1175 fail=`expr $fail + 1`
1176else
1177 echo "PASS: $count debug messages."
1178 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1179fi
1180
1181# Debug2 log messages
1182count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1183if test $count = 0 -a $loglevel = debug2; then
1184 echo "FAIL: $count debug2 messages, expected more than 0."
1185 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1186 fail=`expr $fail + 1`
1187elif test $count != 0 -a $loglevel = debug; then
1188 echo "FAIL: $count debug2 messages, expected 0."
1189 echo " <p>FAIL: $count debug2 messages, expected 0.</p>" >>$strfile
1190 fail=`expr $fail + 1`
1191else
1192 echo "PASS: $count debug2 messages."
1193 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1194fi
1195
1196#
1197# Log files...
1198#
1199
1200echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1201
1202for file in $BASE/log/*_log; do
1203 baselog=`basename $file`
1204
1205 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1206 case $baselog in
1207 error_log)
1208 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1209 echo " <pre>" >>$strfile
1210 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1211 echo " </pre>" >>$strfile
1212 ;;
1213
1214 *)
1215 echo " <pre>" >>$strfile
1216 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $file >>$strfile
1217 echo " </pre>" >>$strfile
1218 ;;
1219 esac
1220done
1221
1222#
1223# Format the reports and tell the user where to find them...
1224#
1225
1226cat str-trailer.html >>$strfile
1227
1228echo ""
1229for file in $BASE/log/*_log; do
1230 baselog=`basename $file`
1231 cp $file $baselog-$date-$user
1232 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1233done
1234cp $strfile .
1235echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1236
1237# Clean out old failure log files after 1 week...
1238find . -name \*_log-\*-$user -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1239find . -name cups-str-\*-$user.html -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1240
1241echo ""
1242
1243if test $fail != 0; then
1244 echo "$fail tests failed."
1245 exit 1
1246else
1247 echo "All tests were successful."
1248fi