]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
Remove all of the Subversion keywords from various source files.
[thirdparty/cups.git] / test / run-stp-tests.sh
1 #!/bin/sh
2 #
3 # Perform the complete set of IPP compliance tests specified in the
4 # CUPS Software Test Plan.
5 #
6 # Copyright 2007-2015 by Apple Inc.
7 # Copyright 1997-2007 by Easy Software Products, all rights reserved.
8 #
9 # These coded instructions, statements, and computer programs are the
10 # property of Apple Inc. and are protected by Federal copyright
11 # law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 # which should have been included with this file. If this file is
13 # file is missing or damaged, see the license at "http://www.cups.org/".
14 #
15
16 argcount=$#
17
18 #
19 # Don't allow "make check" or "make test" to be run by root...
20 #
21
22 if test "x`id -u`" = x0; then
23 echo Please run this as a normal user. Not supported when run as root.
24 exit 1
25 fi
26
27 #
28 # Force the permissions of the files we create...
29 #
30
31 umask 022
32
33 #
34 # Make the IPP test program...
35 #
36
37 make
38
39 #
40 # Solaris has a non-POSIX grep in /bin...
41 #
42
43 if test -x /usr/xpg4/bin/grep; then
44 GREP=/usr/xpg4/bin/grep
45 else
46 GREP=grep
47 fi
48
49 #
50 # Figure out the proper echo options...
51 #
52
53 if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then
54 ac_n=-n
55 ac_c=
56 else
57 ac_n=
58 ac_c='\c'
59 fi
60
61 #
62 # Greet the tester...
63 #
64
65 echo "Welcome to the CUPS Automated Test Script."
66 echo ""
67 echo "Before we begin, it is important that you understand that the larger"
68 echo "tests require significant amounts of RAM and disk space. If you"
69 echo "attempt to run one of the big tests on a system that lacks sufficient"
70 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
71 echo "more system processes that you've grown attached to, like the X"
72 echo "server. The question you may want to ask yourself before running a"
73 echo "large test is: Do you feel lucky?"
74 echo ""
75 echo "OK, now that we have the Dirty Harry quote out of the way, please"
76 echo "choose the type of test you wish to perform:"
77 echo ""
78 echo "0 - No testing, keep the scheduler running for me (all systems)"
79 echo "1 - Basic conformance test, no load testing (all systems)"
80 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
81 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
82 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
83 echo ""
84 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
85
86 if test $# -gt 0; then
87 testtype=$1
88 shift
89 else
90 read testtype
91 fi
92 echo ""
93
94 case "$testtype" in
95 0)
96 echo "Running in test mode (0)"
97 nprinters1=0
98 nprinters2=0
99 pjobs=0
100 pprinters=0
101 loglevel="debug2"
102 ;;
103 2)
104 echo "Running the medium tests (2)"
105 nprinters1=10
106 nprinters2=20
107 pjobs=20
108 pprinters=10
109 loglevel="debug"
110 ;;
111 3)
112 echo "Running the extreme tests (3)"
113 nprinters1=500
114 nprinters2=1000
115 pjobs=100
116 pprinters=50
117 loglevel="debug"
118 ;;
119 4)
120 echo "Running the torture tests (4)"
121 nprinters1=10000
122 nprinters2=20000
123 pjobs=200
124 pprinters=100
125 loglevel="debug"
126 ;;
127 *)
128 echo "Running the timid tests (1)"
129 nprinters1=0
130 nprinters2=0
131 pjobs=10
132 pprinters=0
133 loglevel="debug2"
134 testtype="1"
135 ;;
136 esac
137
138 #
139 # See if we want to do SSL testing...
140 #
141
142 echo ""
143 echo "Now you can choose whether to create a SSL/TLS encryption key and"
144 echo "certificate for testing; these tests currently require the OpenSSL"
145 echo "tools:"
146 echo ""
147 echo "0 - Do not do SSL/TLS encryption tests"
148 echo "1 - Test but do not require encryption"
149 echo "2 - Test and require encryption"
150 echo ""
151 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
152
153 if test $# -gt 0; then
154 ssltype=$1
155 shift
156 else
157 read ssltype
158 fi
159 echo ""
160
161 case "$ssltype" in
162 1)
163 echo "Will test but not require encryption (1)"
164 ;;
165 2)
166 echo "Will test and require encryption (2)"
167 ;;
168 *)
169 echo "Not using SSL/TLS (0)"
170 ssltype=0
171 ;;
172 esac
173
174 #
175 # Information for the server/tests...
176 #
177
178 user="$USER"
179 if test -z "$user"; then
180 if test -x /usr/ucb/whoami; then
181 user=`/usr/ucb/whoami`
182 else
183 user=`whoami`
184 fi
185
186 if test -z "$user"; then
187 user="unknown"
188 fi
189 fi
190
191 port="${CUPS_TESTPORT:=8631}"
192 cwd=`pwd`
193 root=`dirname $cwd`
194 CUPS_TESTROOT="$root"; export CUPS_TESTROOT
195
196 BASE="${CUPS_TESTBASE:=}"
197 if test -z "$BASE"; then
198 if test -d /private/tmp; then
199 BASE=/private/tmp/cups-$user
200 else
201 BASE=/tmp/cups-$user
202 fi
203 fi
204 export BASE
205
206 #
207 # Make sure that the LPDEST and PRINTER environment variables are
208 # not included in the environment that is passed to the tests. These
209 # will usually cause tests to fail erroneously...
210 #
211
212 unset LPDEST
213 unset PRINTER
214
215 #
216 # See if we want to use valgrind...
217 #
218
219 echo ""
220 echo "This test script can use the Valgrind software from:"
221 echo ""
222 echo " http://developer.kde.org/~sewardj/"
223 echo ""
224 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
225
226 if test $# -gt 0; then
227 usevalgrind=$1
228 shift
229 else
230 read usevalgrind
231 fi
232 echo ""
233
234 case "$usevalgrind" in
235 Y* | y*)
236 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
237 if test `uname` = Darwin; then
238 VALGRIND="$VALGRIND --dsymutil=yes"
239 fi
240 export VALGRIND
241 echo "Using Valgrind; log files can be found in $BASE/log..."
242 ;;
243
244 *)
245 VALGRIND=""
246 export VALGRIND
247 ;;
248 esac
249
250 #
251 # See if we want to do debug logging of the libraries...
252 #
253
254 echo ""
255 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
256 echo "can enable debug logging of the libraries."
257 echo ""
258 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
259
260 if test $# -gt 0; then
261 usedebugprintfs=$1
262 shift
263 else
264 read usedebugprintfs
265 fi
266 echo ""
267
268 case "$usedebugprintfs" in
269 Y* | y*)
270 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
271 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
272 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
273 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
274 ;;
275
276 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
277 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
278 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
279 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
280 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
281 ;;
282
283 *)
284 ;;
285 esac
286
287 #
288 # Start by creating temporary directories for the tests...
289 #
290
291 echo "Creating directories for test..."
292
293 rm -rf $BASE
294 mkdir $BASE
295 mkdir $BASE/bin
296 mkdir $BASE/bin/backend
297 mkdir $BASE/bin/driver
298 mkdir $BASE/bin/filter
299 mkdir $BASE/certs
300 mkdir $BASE/share
301 mkdir $BASE/share/banners
302 mkdir $BASE/share/drv
303 mkdir $BASE/share/locale
304 for file in ../locale/cups_*.po; do
305 loc=`basename $file .po | cut -c 6-`
306 mkdir $BASE/share/locale/$loc
307 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
308 ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
309 done
310 mkdir $BASE/share/mime
311 mkdir $BASE/share/model
312 mkdir $BASE/share/ppdc
313 mkdir $BASE/interfaces
314 mkdir $BASE/log
315 mkdir $BASE/ppd
316 mkdir $BASE/spool
317 mkdir $BASE/spool/temp
318 mkdir $BASE/ssl
319
320 ln -s $root/backend/dnssd $BASE/bin/backend
321 ln -s $root/backend/http $BASE/bin/backend
322 ln -s $root/backend/ipp $BASE/bin/backend
323 ln -s $root/backend/lpd $BASE/bin/backend
324 ln -s $root/backend/mdns $BASE/bin/backend
325 ln -s $root/backend/pseudo $BASE/bin/backend
326 ln -s $root/backend/snmp $BASE/bin/backend
327 ln -s $root/backend/socket $BASE/bin/backend
328 ln -s $root/backend/usb $BASE/bin/backend
329 ln -s $root/cgi-bin $BASE/bin
330 ln -s $root/monitor $BASE/bin
331 ln -s $root/notifier $BASE/bin
332 ln -s $root/scheduler $BASE/bin/daemon
333 ln -s $root/filter/commandtops $BASE/bin/filter
334 ln -s $root/filter/gziptoany $BASE/bin/filter
335 ln -s $root/filter/pstops $BASE/bin/filter
336 ln -s $root/filter/rastertoepson $BASE/bin/filter
337 ln -s $root/filter/rastertohp $BASE/bin/filter
338 ln -s $root/filter/rastertolabel $BASE/bin/filter
339 ln -s $root/filter/rastertopwg $BASE/bin/filter
340 cat >$BASE/share/banners/standard <<EOF
341 ==== Cover Page ====
342
343
344 Job: {?printer-name}-{?job-id}
345 Owner: {?job-originating-user-name}
346 Name: {?job-name}
347 Pages: {?job-impressions}
348
349
350 ==== Cover Page ====
351 EOF
352 cat >$BASE/share/banners/classified <<EOF
353 ==== Classified - Do Not Disclose ====
354
355
356 Job: {?printer-name}-{?job-id}
357 Owner: {?job-originating-user-name}
358 Name: {?job-name}
359 Pages: {?job-impressions}
360
361
362 ==== Classified - Do Not Disclose ====
363 EOF
364 ln -s $root/data $BASE/share
365 ln -s $root/ppdc/sample.drv $BASE/share/drv
366 ln -s $root/conf/mime.types $BASE/share/mime
367 ln -s $root/conf/mime.convs $BASE/share/mime
368 ln -s $root/data/*.h $BASE/share/ppdc
369 ln -s $root/data/*.defs $BASE/share/ppdc
370 ln -s $root/templates $BASE/share
371
372 #
373 # Local filters and configuration files...
374 #
375
376 instfilter() {
377 # instfilter src dst format
378 #
379 # See if the filter exists in a standard location; if so, make a
380 # symlink, otherwise create a dummy script for the specified format.
381 #
382 src="$1"
383 dst="$2"
384 format="$3"
385
386 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
387 if test -x "$dir/$src"; then
388 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
389 return
390 fi
391 done
392
393 # Source filter not present, create a dummy filter
394 case $format in
395 passthru)
396 ln -s gziptoany "$BASE/bin/filter/$dst"
397 ;;
398 pdf)
399 cat >"$BASE/bin/filter/$dst" <<EOF
400 #!/bin/sh
401 trap "" TERM
402 trap "" PIPE
403 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
404 case "\$5" in
405 *media=a4* | *media=iso_a4* | *PageSize=A4*)
406 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
407 ;;
408 *)
409 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
410 ;;
411 esac
412 EOF
413 chmod +x "$BASE/bin/filter/$dst"
414 ;;
415 ps)
416 cat >"$BASE/bin/filter/$dst" <<EOF
417 #!/bin/sh
418 trap "" TERM
419 trap "" PIPE
420 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
421 case "\$5" in
422 *media=a4* | *media=iso_a4* | *PageSize=A4*)
423 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
424 ;;
425 *)
426 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
427 ;;
428 esac
429 EOF
430 chmod +x "$BASE/bin/filter/$dst"
431 ;;
432 raster)
433 cat >"$BASE/bin/filter/$dst" <<EOF
434 #!/bin/sh
435 trap "" TERM
436 trap "" PIPE
437 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
438 case "\$5" in
439 *media=a4* | *media=iso_a4* | *PageSize=A4*)
440 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
441 ;;
442 *)
443 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
444 ;;
445 esac
446 EOF
447 chmod +x "$BASE/bin/filter/$dst"
448 ;;
449 esac
450 }
451
452 ln -s $root/test/test.convs $BASE/share/mime
453 ln -s $root/test/test.types $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 cgpdftoraster pdftourf 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.2-r$rev-$user.html
727 else
728 strfile=$BASE/cups-str-2.2-$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