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