]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
Import CUPS v2.0.0
[thirdparty/cups.git] / test / run-stp-tests.sh
1 #!/bin/sh
2 #
3 # "$Id: run-stp-tests.sh 12151 2014-09-04 00:57:41Z 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"
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 MallocStackLogging=1 ../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 # Log all allocations made by the scheduler...
771 #
772 if test `uname` = Darwin -a "x$VALGRIND" = x; then
773 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
774 fi
775
776 #
777 # Restart the server...
778 #
779
780 echo $ac_n "Performing restart test: $ac_c"
781 echo "" >>$strfile
782 echo "\"5.10-restart\":" >>$strfile
783
784 kill -HUP $cupsd
785
786 while true; do
787 sleep 10
788
789 running=`../systemv/lpstat -r 2>/dev/null`
790 if test "x$running" = "xscheduler is running"; then
791 break
792 fi
793 done
794
795 description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
796 if test "x$description" != "xTest Printer 1"; then
797 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
798 echo "FAIL (got '$description', expected 'Test Printer 1')"
799 fail=`expr $fail + 1`
800 else
801 echo "Passed." >>$strfile
802 echo PASS
803 fi
804
805 echo "</PRE>" >>$strfile
806
807 #
808 # Stop the server...
809 #
810
811 kill $cupsd
812
813 #
814 # Append the log files for post-mortim...
815 #
816
817 echo "<H1>3 - Log Files</H1>" >>$strfile
818
819 #
820 # Verify counts...
821 #
822
823 echo "Test Summary"
824 echo ""
825 echo "<H2>Summary</H2>" >>$strfile
826
827 # Job control files
828 count=`ls -1 $BASE/spool | wc -l`
829 count=`expr $count - 1`
830 if test $count != 0; then
831 echo "FAIL: $count job control files were not purged."
832 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
833 fail=`expr $fail + 1`
834 else
835 echo "PASS: All job control files purged."
836 echo "<P>PASS: All job control files purged.</P>" >>$strfile
837 fi
838
839 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
840 count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
841 expected=`expr $pjobs \* 2 + 34`
842 expected2=`expr $expected + 2`
843 if test $count -lt $expected -a $count -gt $expected2; then
844 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
845 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
846 fail=`expr $fail + 1`
847 else
848 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
849 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
850 fi
851
852 # Paged printed on Test2
853 count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
854 expected=`expr $pjobs \* 2 + 3`
855 if test $count != $expected; then
856 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
857 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
858 fail=`expr $fail + 1`
859 else
860 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
861 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
862 fi
863
864 # Paged printed on Test3
865 count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
866 expected=2
867 if test $count != $expected; then
868 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
869 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
870 fail=`expr $fail + 1`
871 else
872 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
873 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
874 fi
875
876 # Requests logged
877 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
878 expected=`expr 37 + 18 + 28 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
879 if test $count != $expected; then
880 echo "FAIL: $count requests logged, expected $expected."
881 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
882 fail=`expr $fail + 1`
883 else
884 echo "PASS: $count requests logged."
885 echo "<P>PASS: $count requests logged.</P>" >>$strfile
886 fi
887
888 # Did CUPS-Get-Default get logged?
889 if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
890 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
891 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
892 echo "<PRE>" >>$strfile
893 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
894 echo "</PRE>" >>$strfile
895 fail=`expr $fail + 1`
896 else
897 echo "PASS: CUPS-Get-Default not logged."
898 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
899 fi
900
901 # Emergency log messages
902 count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
903 if test $count != 0; then
904 echo "FAIL: $count emergency messages, expected 0."
905 $GREP '^X ' $BASE/log/error_log
906 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
907 echo "<PRE>" >>$strfile
908 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
909 echo "</PRE>" >>$strfile
910 fail=`expr $fail + 1`
911 else
912 echo "PASS: $count emergency messages."
913 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
914 fi
915
916 # Alert log messages
917 count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
918 if test $count != 0; then
919 echo "FAIL: $count alert messages, expected 0."
920 $GREP '^A ' $BASE/log/error_log
921 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
922 echo "<PRE>" >>$strfile
923 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
924 echo "</PRE>" >>$strfile
925 fail=`expr $fail + 1`
926 else
927 echo "PASS: $count alert messages."
928 echo "<P>PASS: $count alert messages.</P>" >>$strfile
929 fi
930
931 # Critical log messages
932 count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
933 if test $count != 0; then
934 echo "FAIL: $count critical messages, expected 0."
935 $GREP '^C ' $BASE/log/error_log
936 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
937 echo "<PRE>" >>$strfile
938 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
939 echo "</PRE>" >>$strfile
940 fail=`expr $fail + 1`
941 else
942 echo "PASS: $count critical messages."
943 echo "<P>PASS: $count critical messages.</P>" >>$strfile
944 fi
945
946 # Error log messages
947 count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
948 if test $count != 33; then
949 echo "FAIL: $count error messages, expected 33."
950 $GREP '^E ' $BASE/log/error_log
951 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
952 echo "<PRE>" >>$strfile
953 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
954 echo "</PRE>" >>$strfile
955 fail=`expr $fail + 1`
956 else
957 echo "PASS: $count error messages."
958 echo "<P>PASS: $count error messages.</P>" >>$strfile
959 fi
960
961 # Warning log messages
962 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
963 if test $count != 18; then
964 echo "FAIL: $count warning messages, expected 18."
965 $GREP '^W ' $BASE/log/error_log
966 echo "<P>FAIL: $count warning messages, expected 18.</P>" >>$strfile
967 echo "<PRE>" >>$strfile
968 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
969 echo "</PRE>" >>$strfile
970 fail=`expr $fail + 1`
971 else
972 echo "PASS: $count warning messages."
973 echo "<P>PASS: $count warning messages.</P>" >>$strfile
974 fi
975
976 # Notice log messages
977 count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
978 if test $count != 0; then
979 echo "FAIL: $count notice messages, expected 0."
980 $GREP '^N ' $BASE/log/error_log
981 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
982 echo "<PRE>" >>$strfile
983 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
984 echo "</PRE>" >>$strfile
985 fail=`expr $fail + 1`
986 else
987 echo "PASS: $count notice messages."
988 echo "<P>PASS: $count notice messages.</P>" >>$strfile
989 fi
990
991 # Info log messages
992 count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
993 if test $count = 0; then
994 echo "FAIL: $count info messages, expected more than 0."
995 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
996 fail=`expr $fail + 1`
997 else
998 echo "PASS: $count info messages."
999 echo "<P>PASS: $count info messages.</P>" >>$strfile
1000 fi
1001
1002 # Debug log messages
1003 count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1004 if test $count = 0; then
1005 echo "FAIL: $count debug messages, expected more than 0."
1006 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
1007 fail=`expr $fail + 1`
1008 else
1009 echo "PASS: $count debug messages."
1010 echo "<P>PASS: $count debug messages.</P>" >>$strfile
1011 fi
1012
1013 # Debug2 log messages
1014 count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1015 if test $count = 0; then
1016 echo "FAIL: $count debug2 messages, expected more than 0."
1017 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
1018 fail=`expr $fail + 1`
1019 else
1020 echo "PASS: $count debug2 messages."
1021 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
1022 fi
1023
1024 # Log files...
1025 echo "<H2>access_log</H2>" >>$strfile
1026 echo "<PRE>" >>$strfile
1027 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
1028 echo "</PRE>" >>$strfile
1029
1030 echo "<H2>error_log</H2>" >>$strfile
1031 echo "<PRE>" >>$strfile
1032 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1033 echo "</PRE>" >>$strfile
1034
1035 echo "<H2>page_log</H2>" >>$strfile
1036 echo "<PRE>" >>$strfile
1037 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
1038 echo "</PRE>" >>$strfile
1039
1040 #
1041 # Format the reports and tell the user where to find them...
1042 #
1043
1044 cat str-trailer.html >>$strfile
1045
1046 echo ""
1047
1048 if test $fail != 0; then
1049 echo "$fail tests failed."
1050 cp $BASE/log/error_log error_log-$date-$user
1051 cp $strfile .
1052 else
1053 echo "All tests were successful."
1054 fi
1055
1056 echo "Log files can be found in $BASE/log."
1057 echo "A HTML report was created in $strfile."
1058 echo ""
1059
1060 if test $fail != 0; then
1061 echo "Copies of the error_log and `basename $strfile` files are in"
1062 echo "`pwd`."
1063 echo ""
1064
1065 exit 1
1066 fi
1067
1068 #
1069 # End of "$Id: run-stp-tests.sh 12151 2014-09-04 00:57:41Z msweet $"
1070 #