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