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