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