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