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