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