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