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