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