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