]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
More bogus indentation.
[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-2018 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 cat >$BASE/cupsd.conf <<EOF
483 StrictConformance Yes
484 Browsing Off
485 Listen localhost:$port
486 Listen $BASE/sock
487 MaxSubscriptions 3
488 MaxLogSize 0
489 AccessLogLevel actions
490 LogLevel $loglevel
491 LogTimeFormat usecs
492 PreserveJobHistory Yes
493 PreserveJobFiles 5m
494 <Policy default>
495 <Limit All>
496 Order Allow,Deny
497 $encryption
498 </Limit>
499 </Policy>
500 EOF
501
502 if test $testtype = 0; then
503 echo WebInterface yes >>$BASE/cupsd.conf
504 fi
505
506 cat >$BASE/cups-files.conf <<EOF
507 FileDevice yes
508 Printcap
509 User $user
510 ServerRoot $BASE
511 StateDir $BASE
512 ServerBin $BASE/bin
513 CacheDir $BASE/share
514 DataDir $BASE/share
515 FontPath $BASE/share/fonts
516 DocumentRoot $root/doc
517 RequestRoot $BASE/spool
518 TempDir $BASE/spool/temp
519 AccessLog $BASE/log/access_log
520 ErrorLog $BASE/log/error_log
521 PageLog $BASE/log/page_log
522
523 PassEnv DYLD_INSERT_LIBRARIES
524 PassEnv DYLD_LIBRARY_PATH
525 PassEnv LD_LIBRARY_PATH
526 PassEnv LD_PRELOAD
527 PassEnv LOCALEDIR
528 PassEnv ASAN_OPTIONS
529
530 Sandboxing Off
531 EOF
532
533 if test $ssltype != 0 -a `uname` = Darwin; then
534 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
535 fi
536
537 #
538 # Setup lots of test queues with PPD files...
539 #
540
541 echo "Creating printers.conf for test..."
542
543 i=1
544 while test $i -le $nprinters; do
545 cat >>$BASE/printers.conf <<EOF
546 <Printer test-$i>
547 Accepting Yes
548 DeviceURI file:/dev/null
549 Info Test PS printer $i
550 JobSheets none none
551 Location CUPS test suite
552 State Idle
553 StateMessage Printer $1 is idle.
554 </Printer>
555 EOF
556
557 cp testps.ppd $BASE/ppd/test-$i.ppd
558
559 i=`expr $i + 1`
560 done
561
562 if test -f $BASE/printers.conf; then
563 cp $BASE/printers.conf $BASE/printers.conf.orig
564 else
565 touch $BASE/printers.conf.orig
566 fi
567
568 #
569 # Create a helper script to run programs with...
570 #
571
572 echo "Setting up environment variables for test..."
573
574 if 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
581 fi
582
583 if 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
594 fi
595
596 if 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
608 fi
609
610 # These get exported because they don't have side-effects...
611 CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
612 CUPS_SERVER=localhost:$port; export CUPS_SERVER
613 CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
614 CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
615 CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
616 IPP_PORT=$port; export IPP_PORT
617 LOCALEDIR=$BASE/share/locale; export LOCALEDIR
618
619 echo "Creating wrapper script..."
620
621 runcups="$BASE/runcups"; export runcups
622
623 echo "#!/bin/sh" >$runcups
624 echo "# Helper script for running CUPS test instance." >>$runcups
625 echo "" >>$runcups
626 echo "# Set required environment variables..." >>$runcups
627 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
628 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
629 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
630 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
631 echo "DYLD_INSERT_LIBRARIES=\"$DYLD_INSERT_LIBRARIES\"; export DYLD_INSERT_LIBRARIES" >>$runcups
632 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
633 # IPP_PORT=$port; export IPP_PORT
634 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
635 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
636 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
637 if 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
641 fi
642 echo "" >>$runcups
643 echo "# Run command..." >>$runcups
644 echo "exec \"\$@\"" >>$runcups
645
646 chmod +x $runcups
647
648 #
649 # Set a new home directory to avoid getting user options mixed in...
650 #
651
652 HOME=$BASE
653 export HOME
654
655 #
656 # Force POSIX locale for tests...
657 #
658
659 LANG=C
660 export LANG
661
662 LC_MESSAGES=C
663 export LC_MESSAGES
664
665 #
666 # Start the server; run as foreground daemon in the background...
667 #
668
669 echo "Starting scheduler:"
670 echo " $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
671 echo ""
672
673 $runcups $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
674
675 cupsd=$!
676
677 if 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
685 fi
686
687 if 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
692 else
693 echo "Scheduler is PID $cupsd."
694 sleep 2
695 fi
696
697 while true; do
698 running=`$runcups ../systemv/lpstat -r 2>/dev/null`
699 if test "x$running" = "xscheduler is running"; then
700 break
701 fi
702
703 echo "Waiting for scheduler to become ready..."
704 sleep 10
705 done
706
707 #
708 # Create the test report source file...
709 #
710
711 date=`date "+%Y-%m-%d"`
712
713 strfile=$BASE/cups-str-$date-$user.html
714
715 rm -f $strfile
716 cat str-header.html >$strfile
717
718 #
719 # Run the IPP tests...
720 #
721
722 echo ""
723 echo "Running IPP compliance tests..."
724
725 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
726 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
727 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
728 echo " $date by $user on `hostname`." >>$strfile
729 echo " <pre>" >>$strfile
730
731 fail=0
732 for file in 4*.test ipp-2.1.test; do
733 echo $ac_n "Performing $file: $ac_c"
734 echo "" >>$strfile
735 echo $ac_n "`date '+[%d/%b/%Y:%H:%M:%S %z]'` $ac_c" >>$strfile
736
737 if test $file = ipp-2.1.test; then
738 uri="ipp://localhost:$port/printers/Test1"
739 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
740 else
741 uri="ipp://localhost:$port/printers"
742 options=""
743 fi
744 $runcups $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
745 status=$?
746
747 if test $status != 0; then
748 echo FAIL
749 fail=`expr $fail + 1`
750 else
751 echo PASS
752 fi
753 done
754
755 echo " </pre>" >>$strfile
756
757 #
758 # Run the command tests...
759 #
760
761 echo ""
762 echo "Running command tests..."
763
764 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
765 echo " <p>This section provides the results to the command tests" >>$strfile
766 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
767 echo " $date by $user on `hostname`." >>$strfile
768 echo " <pre>" >>$strfile
769
770 for file in 5*.sh; do
771 echo $ac_n "Performing $file: $ac_c"
772 echo "" >>$strfile
773 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"$file\":" >>$strfile
774
775 sh $file $pjobs $pprinters >> $strfile
776 status=$?
777
778 if test $status != 0; then
779 echo FAIL
780 fail=`expr $fail + 1`
781 else
782 echo PASS
783 fi
784 done
785
786 #
787 # Restart the server...
788 #
789
790 echo $ac_n "Performing restart test: $ac_c"
791 echo "" >>$strfile
792 echo "`date '+[%d/%b/%Y:%H:%M:%S %z]'` \"5.10-restart\":" >>$strfile
793
794 kill -HUP $cupsd
795
796 while true; do
797 sleep 10
798
799 running=`$runcups ../systemv/lpstat -r 2>/dev/null`
800 if test "x$running" = "xscheduler is running"; then
801 break
802 fi
803 done
804
805 description="`$runcups ../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
806 if test "x$description" != "xTest Printer 1"; then
807 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
808 echo "FAIL (got '$description', expected 'Test Printer 1')"
809 fail=`expr $fail + 1`
810 else
811 echo "Passed." >>$strfile
812 echo PASS
813 fi
814
815 echo " </pre>" >>$strfile
816
817 #
818 # Stop the server...
819 #
820
821 kill $cupsd
822 wait $cupsd
823 cupsdstatus=$?
824
825 #
826 # Verify counts...
827 #
828
829 echo "Test Summary"
830 echo ""
831 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
832
833 if test $cupsdstatus != 0; then
834 echo "FAIL: cupsd failed with exit status $cupsdstatus."
835 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
836 fail=`expr $fail + 1`
837 else
838 echo "PASS: cupsd exited with no errors."
839 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
840 fi
841
842 # Job control files
843 count=`ls -1 $BASE/spool | wc -l`
844 count=`expr $count - 1`
845 if test $count != 0; then
846 echo "FAIL: $count job control files were not purged."
847 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
848 fail=`expr $fail + 1`
849 else
850 echo "PASS: All job control files purged."
851 echo " <p>PASS: All job control files purged.</p>" >>$strfile
852 fi
853
854 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
855 count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
856 expected=`expr $pjobs \* 2 + 34`
857 expected2=`expr $expected + 2`
858 if test $count -lt $expected -a $count -gt $expected2; then
859 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
860 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
861 fail=`expr $fail + 1`
862 else
863 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
864 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
865 fi
866
867 # Paged printed on Test2
868 count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
869 expected=`expr $pjobs \* 2 + 3`
870 if test $count != $expected; then
871 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
872 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
873 fail=`expr $fail + 1`
874 else
875 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
876 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
877 fi
878
879 # Paged printed on Test3
880 count=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
881 expected=2
882 if test $count != $expected; then
883 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
884 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
885 fail=`expr $fail + 1`
886 else
887 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
888 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
889 fi
890
891 # Requests logged
892 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
893 expected=`expr 35 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
894 if test $count != $expected; then
895 echo "FAIL: $count requests logged, expected $expected."
896 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
897 fail=`expr $fail + 1`
898 else
899 echo "PASS: $count requests logged."
900 echo " <p>PASS: $count requests logged.</p>" >>$strfile
901 fi
902
903 # Did CUPS-Get-Default get logged?
904 if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
905 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
906 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
907 echo " <pre>" >>$strfile
908 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
909 echo " </pre>" >>$strfile
910 fail=`expr $fail + 1`
911 else
912 echo "PASS: CUPS-Get-Default not logged."
913 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
914 fi
915
916 # Emergency log messages
917 count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
918 if test $count != 0; then
919 echo "FAIL: $count emergency messages, expected 0."
920 $GREP '^X ' $BASE/log/error_log
921 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
922 echo " <pre>" >>$strfile
923 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
924 echo " </pre>" >>$strfile
925 fail=`expr $fail + 1`
926 else
927 echo "PASS: $count emergency messages."
928 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
929 fi
930
931 # Alert log messages
932 count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
933 if test $count != 0; then
934 echo "FAIL: $count alert messages, expected 0."
935 $GREP '^A ' $BASE/log/error_log
936 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
937 echo " <pre>" >>$strfile
938 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
939 echo " </pre>" >>$strfile
940 fail=`expr $fail + 1`
941 else
942 echo "PASS: $count alert messages."
943 echo " <p>PASS: $count alert messages.</p>" >>$strfile
944 fi
945
946 # Critical log messages
947 count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
948 if test $count != 0; then
949 echo "FAIL: $count critical messages, expected 0."
950 $GREP '^C ' $BASE/log/error_log
951 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
952 echo " <pre>" >>$strfile
953 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
954 echo " </pre>" >>$strfile
955 fail=`expr $fail + 1`
956 else
957 echo "PASS: $count critical messages."
958 echo " <p>PASS: $count critical messages.</p>" >>$strfile
959 fi
960
961 # Error log messages
962 count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
963 if test $count != 33; then
964 echo "FAIL: $count error messages, expected 33."
965 $GREP '^E ' $BASE/log/error_log
966 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
967 echo " <pre>" >>$strfile
968 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
969 echo " </pre>" >>$strfile
970 fail=`expr $fail + 1`
971 else
972 echo "PASS: $count error messages."
973 echo " <p>PASS: $count error messages.</p>" >>$strfile
974 fi
975
976 # Warning log messages
977 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
978 if test $count != 8; then
979 echo "FAIL: $count warning messages, expected 8."
980 $GREP '^W ' $BASE/log/error_log
981 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
982 echo " <pre>" >>$strfile
983 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
984 echo " </pre>" >>$strfile
985 fail=`expr $fail + 1`
986 else
987 echo "PASS: $count warning messages."
988 echo " <p>PASS: $count warning messages.</p>" >>$strfile
989 fi
990
991 # Notice log messages
992 count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
993 if test $count != 0; then
994 echo "FAIL: $count notice messages, expected 0."
995 $GREP '^N ' $BASE/log/error_log
996 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
997 echo " <pre>" >>$strfile
998 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
999 echo " </pre>" >>$strfile
1000 fail=`expr $fail + 1`
1001 else
1002 echo "PASS: $count notice messages."
1003 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1004 fi
1005
1006 # Info log messages
1007 count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1008 if test $count = 0; then
1009 echo "FAIL: $count info messages, expected more than 0."
1010 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1011 fail=`expr $fail + 1`
1012 else
1013 echo "PASS: $count info messages."
1014 echo " <p>PASS: $count info messages.</p>" >>$strfile
1015 fi
1016
1017 # Debug log messages
1018 count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1019 if test $count = 0; then
1020 echo "FAIL: $count debug messages, expected more than 0."
1021 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1022 fail=`expr $fail + 1`
1023 else
1024 echo "PASS: $count debug messages."
1025 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1026 fi
1027
1028 # Debug2 log messages
1029 count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1030 if test $count = 0; then
1031 echo "FAIL: $count debug2 messages, expected more than 0."
1032 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1033 fail=`expr $fail + 1`
1034 else
1035 echo "PASS: $count debug2 messages."
1036 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1037 fi
1038
1039 #
1040 # Log files...
1041 #
1042
1043 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1044
1045 for file in $BASE/log/*_log; do
1046 baselog=`basename $file`
1047
1048 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1049 case $baselog in
1050 error_log)
1051 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1052 echo " <pre>" >>$strfile
1053 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1054 echo " </pre>" >>$strfile
1055 ;;
1056
1057 *)
1058 echo " <pre>" >>$strfile
1059 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $file >>$strfile
1060 echo " </pre>" >>$strfile
1061 ;;
1062 esac
1063 done
1064
1065 #
1066 # Format the reports and tell the user where to find them...
1067 #
1068
1069 cat str-trailer.html >>$strfile
1070
1071 echo ""
1072 for file in $BASE/log/*_log; do
1073 baselog=`basename $file`
1074 cp $file $baselog-$date-$user
1075 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1076 done
1077 cp $strfile .
1078 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1079
1080 # Clean out old failure log files after 1 week...
1081 find . -name \*_log-\*-$user -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1082 find . -name cups-str-\*-$user.html -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1083
1084 echo ""
1085
1086 if test $fail != 0; then
1087 echo "$fail tests failed."
1088 exit 1
1089 else
1090 echo "All tests were successful."
1091 fi