]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
37604a9aa4a08aa559652a72b23b03ca002c22a7
[thirdparty/cups.git] / test / run-stp-tests.sh
1 #!/bin/sh
2 #
3 # Perform the complete set of IPP compliance tests specified in the
4 # CUPS Software Test Plan.
5 #
6 # Copyright 2007-2017 by Apple Inc.
7 # Copyright 1997-2007 by Easy Software Products, all rights reserved.
8 #
9 # These coded instructions, statements, and computer programs are the
10 # property of Apple Inc. and are protected by Federal copyright
11 # law. Distribution and use rights are outlined in the file "LICENSE.txt"
12 # which should have been included with this file. If this file is
13 # file is missing or damaged, see the license at "http://www.cups.org/".
14 #
15
16 argcount=$#
17
18 #
19 # Don't allow "make check" or "make test" to be run by root...
20 #
21
22 if test "x`id -u`" = x0; then
23 echo Please run this as a normal user. Not supported when run as root.
24 exit 1
25 fi
26
27 #
28 # Force the permissions of the files we create...
29 #
30
31 umask 022
32
33 #
34 # Make the IPP test program...
35 #
36
37 make
38
39 #
40 # Solaris has a non-POSIX grep in /bin...
41 #
42
43 if test -x /usr/xpg4/bin/grep; then
44 GREP=/usr/xpg4/bin/grep
45 else
46 GREP=grep
47 fi
48
49 #
50 # Figure out the proper echo options...
51 #
52
53 if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then
54 ac_n=-n
55 ac_c=
56 else
57 ac_n=
58 ac_c='\c'
59 fi
60
61 #
62 # Greet the tester...
63 #
64
65 echo "Welcome to the CUPS Automated Test Script."
66 echo ""
67 echo "Before we begin, it is important that you understand that the larger"
68 echo "tests require significant amounts of RAM and disk space. If you"
69 echo "attempt to run one of the big tests on a system that lacks sufficient"
70 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
71 echo "more system processes that you've grown attached to, like the X"
72 echo "server. The question you may want to ask yourself before running a"
73 echo "large test is: Do you feel lucky?"
74 echo ""
75 echo "OK, now that we have the Dirty Harry quote out of the way, please"
76 echo "choose the type of test you wish to perform:"
77 echo ""
78 echo "0 - No testing, keep the scheduler running for me (all systems)"
79 echo "1 - Basic conformance test, no load testing (all systems)"
80 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
81 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
82 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
83 echo ""
84 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
85
86 if test $# -gt 0; then
87 testtype=$1
88 shift
89 else
90 read testtype
91 fi
92 echo ""
93
94 case "$testtype" in
95 0)
96 echo "Running in test mode (0)"
97 nprinters1=0
98 nprinters2=0
99 pjobs=0
100 pprinters=0
101 loglevel="debug2"
102 ;;
103 2)
104 echo "Running the medium tests (2)"
105 nprinters1=10
106 nprinters2=20
107 pjobs=20
108 pprinters=10
109 loglevel="debug"
110 ;;
111 3)
112 echo "Running the extreme tests (3)"
113 nprinters1=500
114 nprinters2=1000
115 pjobs=100
116 pprinters=50
117 loglevel="debug"
118 ;;
119 4)
120 echo "Running the torture tests (4)"
121 nprinters1=10000
122 nprinters2=20000
123 pjobs=200
124 pprinters=100
125 loglevel="debug"
126 ;;
127 *)
128 echo "Running the timid tests (1)"
129 nprinters1=0
130 nprinters2=0
131 pjobs=10
132 pprinters=0
133 loglevel="debug2"
134 testtype="1"
135 ;;
136 esac
137
138 #
139 # See if we want to do SSL testing...
140 #
141
142 echo ""
143 echo "Now you can choose whether to create a SSL/TLS encryption key and"
144 echo "certificate for testing:"
145 echo ""
146 echo "0 - Do not do SSL/TLS encryption tests"
147 echo "1 - Test but do not require encryption"
148 echo "2 - Test and require encryption"
149 echo ""
150 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
151
152 if test $# -gt 0; then
153 ssltype=$1
154 shift
155 else
156 read ssltype
157 fi
158 echo ""
159
160 case "$ssltype" in
161 1)
162 echo "Will test but not require encryption (1)"
163 ;;
164 2)
165 echo "Will test and require encryption (2)"
166 ;;
167 *)
168 echo "Not using SSL/TLS (0)"
169 ssltype=0
170 ;;
171 esac
172
173 #
174 # Information for the server/tests...
175 #
176
177 user="$USER"
178 if test -z "$user"; then
179 if test -x /usr/ucb/whoami; then
180 user=`/usr/ucb/whoami`
181 else
182 user=`whoami`
183 fi
184
185 if test -z "$user"; then
186 user="unknown"
187 fi
188 fi
189
190 port="${CUPS_TESTPORT:=8631}"
191 cwd=`pwd`
192 root=`dirname $cwd`
193 CUPS_TESTROOT="$root"; export CUPS_TESTROOT
194
195 BASE="${CUPS_TESTBASE:=}"
196 if test -z "$BASE"; then
197 if test -d /private/tmp; then
198 BASE=/private/tmp/cups-$user
199 else
200 BASE=/tmp/cups-$user
201 fi
202 fi
203 export BASE
204
205 #
206 # Make sure that the LPDEST and PRINTER environment variables are
207 # not included in the environment that is passed to the tests. These
208 # will usually cause tests to fail erroneously...
209 #
210
211 unset LPDEST
212 unset PRINTER
213
214 #
215 # See if we want to use valgrind...
216 #
217
218 echo ""
219 echo "This test script can use the Valgrind software from:"
220 echo ""
221 echo " http://developer.kde.org/~sewardj/"
222 echo ""
223 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
224
225 if test $# -gt 0; then
226 usevalgrind=$1
227 shift
228 else
229 read usevalgrind
230 fi
231 echo ""
232
233 case "$usevalgrind" in
234 Y* | y*)
235 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
236 if test `uname` = Darwin; then
237 VALGRIND="$VALGRIND --dsymutil=yes"
238 fi
239 export VALGRIND
240 echo "Using Valgrind; log files can be found in $BASE/log..."
241 ;;
242
243 *)
244 VALGRIND=""
245 export VALGRIND
246 ;;
247 esac
248
249 #
250 # See if we want to do debug logging of the libraries...
251 #
252
253 echo ""
254 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
255 echo "can enable debug logging of the libraries."
256 echo ""
257 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
258
259 if test $# -gt 0; then
260 usedebugprintfs=$1
261 shift
262 else
263 read usedebugprintfs
264 fi
265 echo ""
266
267 case "$usedebugprintfs" in
268 Y* | y*)
269 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
270 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
271 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
272 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
273 ;;
274
275 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
276 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
277 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
278 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
279 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
280 ;;
281
282 *)
283 ;;
284 esac
285
286 #
287 # Start by creating temporary directories for the tests...
288 #
289
290 echo "Creating directories for test..."
291
292 rm -rf $BASE
293 mkdir $BASE
294 mkdir $BASE/bin
295 mkdir $BASE/bin/backend
296 mkdir $BASE/bin/driver
297 mkdir $BASE/bin/filter
298 mkdir $BASE/certs
299 mkdir $BASE/share
300 mkdir $BASE/share/banners
301 mkdir $BASE/share/drv
302 mkdir $BASE/share/locale
303 for file in ../locale/cups_*.po; do
304 loc=`basename $file .po | cut -c 6-`
305 mkdir $BASE/share/locale/$loc
306 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
307 ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
308 done
309 mkdir $BASE/share/mime
310 mkdir $BASE/share/model
311 mkdir $BASE/share/ppdc
312 mkdir $BASE/interfaces
313 mkdir $BASE/log
314 mkdir $BASE/ppd
315 mkdir $BASE/spool
316 mkdir $BASE/spool/temp
317 mkdir $BASE/ssl
318
319 ln -s $root/backend/dnssd $BASE/bin/backend
320 ln -s $root/backend/http $BASE/bin/backend
321 ln -s $root/backend/ipp $BASE/bin/backend
322 ln -s $root/backend/lpd $BASE/bin/backend
323 ln -s $root/backend/mdns $BASE/bin/backend
324 ln -s $root/backend/pseudo $BASE/bin/backend
325 ln -s $root/backend/snmp $BASE/bin/backend
326 ln -s $root/backend/socket $BASE/bin/backend
327 ln -s $root/backend/usb $BASE/bin/backend
328 ln -s $root/cgi-bin $BASE/bin
329 ln -s $root/monitor $BASE/bin
330 ln -s $root/notifier $BASE/bin
331 ln -s $root/scheduler $BASE/bin/daemon
332 ln -s $root/filter/commandtops $BASE/bin/filter
333 ln -s $root/filter/gziptoany $BASE/bin/filter
334 ln -s $root/filter/pstops $BASE/bin/filter
335 ln -s $root/filter/rastertoepson $BASE/bin/filter
336 ln -s $root/filter/rastertohp $BASE/bin/filter
337 ln -s $root/filter/rastertolabel $BASE/bin/filter
338 ln -s $root/filter/rastertopwg $BASE/bin/filter
339 cat >$BASE/share/banners/standard <<EOF
340 ==== Cover Page ====
341
342
343 Job: {?printer-name}-{?job-id}
344 Owner: {?job-originating-user-name}
345 Name: {?job-name}
346 Pages: {?job-impressions}
347
348
349 ==== Cover Page ====
350 EOF
351 cat >$BASE/share/banners/classified <<EOF
352 ==== Classified - Do Not Disclose ====
353
354
355 Job: {?printer-name}-{?job-id}
356 Owner: {?job-originating-user-name}
357 Name: {?job-name}
358 Pages: {?job-impressions}
359
360
361 ==== Classified - Do Not Disclose ====
362 EOF
363 ln -s $root/data $BASE/share
364 ln -s $root/ppdc/sample.drv $BASE/share/drv
365 ln -s $root/conf/mime.types $BASE/share/mime
366 ln -s $root/conf/mime.convs $BASE/share/mime
367 ln -s $root/data/*.h $BASE/share/ppdc
368 ln -s $root/data/*.defs $BASE/share/ppdc
369 ln -s $root/templates $BASE/share
370
371 #
372 # Local filters and configuration files...
373 #
374
375 instfilter() {
376 # instfilter src dst format
377 #
378 # See if the filter exists in a standard location; if so, make a
379 # symlink, otherwise create a dummy script for the specified format.
380 #
381 src="$1"
382 dst="$2"
383 format="$3"
384
385 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
386 if test -x "$dir/$src"; then
387 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
388 return
389 fi
390 done
391
392 # Source filter not present, create a dummy filter
393 case $format in
394 passthru)
395 ln -s gziptoany "$BASE/bin/filter/$dst"
396 ;;
397 pdf)
398 cat >"$BASE/bin/filter/$dst" <<EOF
399 #!/bin/sh
400 trap "" TERM
401 trap "" PIPE
402 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
403 case "\$5" in
404 *media=a4* | *media=iso_a4* | *PageSize=A4*)
405 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
406 ;;
407 *)
408 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
409 ;;
410 esac
411 EOF
412 chmod +x "$BASE/bin/filter/$dst"
413 ;;
414 ps)
415 cat >"$BASE/bin/filter/$dst" <<EOF
416 #!/bin/sh
417 trap "" TERM
418 trap "" PIPE
419 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
420 case "\$5" in
421 *media=a4* | *media=iso_a4* | *PageSize=A4*)
422 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
423 ;;
424 *)
425 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
426 ;;
427 esac
428 EOF
429 chmod +x "$BASE/bin/filter/$dst"
430 ;;
431 raster)
432 cat >"$BASE/bin/filter/$dst" <<EOF
433 #!/bin/sh
434 trap "" TERM
435 trap "" PIPE
436 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
437 case "\$5" in
438 *media=a4* | *media=iso_a4* | *PageSize=A4*)
439 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
440 ;;
441 *)
442 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
443 ;;
444 esac
445 EOF
446 chmod +x "$BASE/bin/filter/$dst"
447 ;;
448 esac
449 }
450
451 ln -s $root/test/test.convs $BASE/share/mime
452 ln -s $root/test/test.types $BASE/share/mime
453
454 if test `uname` = Darwin; then
455 instfilter cgimagetopdf imagetopdf pdf
456 instfilter cgpdftopdf pdftopdf passthru
457 instfilter cgpdftops pdftops ps
458 instfilter cgpdftoraster pdftoraster raster
459 instfilter cgpdftoraster pdftourf raster
460 instfilter cgtexttopdf texttopdf pdf
461 instfilter pstocupsraster pstoraster raster
462 else
463 instfilter imagetopdf imagetopdf pdf
464 instfilter pdftopdf pdftopdf passthru
465 instfilter pdftops pdftops ps
466 instfilter pdftoraster pdftoraster raster
467 instfilter pdftoraster pdftourf raster
468 instfilter pstoraster pstoraster raster
469 instfilter texttopdf texttopdf pdf
470
471 if test -d /usr/share/cups/charsets; then
472 ln -s /usr/share/cups/charsets $BASE/share
473 fi
474 fi
475
476 #
477 # Then create the necessary config files...
478 #
479
480 echo "Creating cupsd.conf for test..."
481
482 if test $ssltype = 2; then
483 encryption="Encryption Required"
484 else
485 encryption=""
486 fi
487
488 cat >$BASE/cupsd.conf <<EOF
489 StrictConformance Yes
490 Browsing Off
491 Listen localhost:$port
492 Listen $BASE/sock
493 PassEnv DYLD_LIBRARY_PATH
494 PassEnv LD_LIBRARY_PATH
495 PassEnv LD_PRELOAD
496 PassEnv LOCALEDIR
497 PassEnv SHLIB_PATH
498 MaxSubscriptions 3
499 MaxLogSize 0
500 AccessLogLevel actions
501 LogLevel $loglevel
502 LogTimeFormat usecs
503 PreserveJobHistory Yes
504 PreserveJobFiles 5m
505 <Policy default>
506 <Limit All>
507 Order Allow,Deny
508 $encryption
509 </Limit>
510 </Policy>
511 EOF
512
513 if test $testtype = 0; then
514 echo WebInterface yes >>$BASE/cupsd.conf
515 fi
516
517 cat >$BASE/cups-files.conf <<EOF
518 FileDevice yes
519 Printcap
520 User $user
521 ServerRoot $BASE
522 StateDir $BASE
523 ServerBin $BASE/bin
524 CacheDir $BASE/share
525 DataDir $BASE/share
526 FontPath $BASE/share/fonts
527 DocumentRoot $root/doc
528 RequestRoot $BASE/spool
529 TempDir $BASE/spool/temp
530 AccessLog $BASE/log/access_log
531 ErrorLog $BASE/log/error_log
532 PageLog $BASE/log/page_log
533 EOF
534
535 if test $ssltype != 0 -a `uname` = Darwin; then
536 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
537 fi
538
539 #
540 # Setup lots of test queues - half with PPD files, half without...
541 #
542
543 echo "Creating printers.conf for test..."
544
545 i=1
546 while test $i -le $nprinters1; do
547 cat >>$BASE/printers.conf <<EOF
548 <Printer test-$i>
549 Accepting Yes
550 DeviceURI file:/dev/null
551 Info Test PS printer $i
552 JobSheets none none
553 Location CUPS test suite
554 State Idle
555 StateMessage Printer $1 is idle.
556 </Printer>
557 EOF
558
559 cp testps.ppd $BASE/ppd/test-$i.ppd
560
561 i=`expr $i + 1`
562 done
563
564 while test $i -le $nprinters2; do
565 cat >>$BASE/printers.conf <<EOF
566 <Printer test-$i>
567 Accepting Yes
568 DeviceURI file:/dev/null
569 Info Test raw printer $i
570 JobSheets none none
571 Location CUPS test suite
572 State Idle
573 StateMessage Printer $1 is idle.
574 </Printer>
575 EOF
576
577 i=`expr $i + 1`
578 done
579
580 if test -f $BASE/printers.conf; then
581 cp $BASE/printers.conf $BASE/printers.conf.orig
582 else
583 touch $BASE/printers.conf.orig
584 fi
585
586 #
587 # Setup the paths...
588 #
589
590 echo "Setting up environment variables for test..."
591
592 if test "x$LD_LIBRARY_PATH" = x; then
593 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
594 else
595 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
596 fi
597
598 export LD_LIBRARY_PATH
599
600 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"
601 if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
602 LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
603 fi
604 export LD_PRELOAD
605
606 if test -f $root/cups/libcups.2.dylib; then
607 if test "x$DYLD_INSERT_LIBRARIES" = x; then
608 DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/filter/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib"
609 else
610 DYLD_INSERT_LIBRARIES="$root/cups/libcups.2.dylib:$root/filter/libcupsimage.2.dylib:$root/cgi-bin/libcupscgi.1.dylib:$root/scheduler/libcupsmime.1.dylib:$root/ppdc/libcupsppdc.1.dylib:$DYLD_INSERT_LIBRARIES"
611 fi
612
613 export DYLD_INSERT_LIBRARIES
614 fi
615
616 if test "x$DYLD_LIBRARY_PATH" = x; then
617 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
618 else
619 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
620 fi
621
622 export DYLD_LIBRARY_PATH
623
624 if test "x$SHLIB_PATH" = x; then
625 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
626 else
627 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
628 fi
629
630 export SHLIB_PATH
631
632 CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
633 CUPS_SERVER=localhost:$port; export CUPS_SERVER
634 CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
635 CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
636 CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
637 LOCALEDIR=$BASE/share/locale; export LOCALEDIR
638
639 #
640 # Set a new home directory to avoid getting user options mixed in...
641 #
642
643 HOME=$BASE
644 export HOME
645
646 #
647 # Force POSIX locale for tests...
648 #
649
650 LANG=C
651 export LANG
652
653 LC_MESSAGES=C
654 export LC_MESSAGES
655
656 #
657 # Start the server; run as foreground daemon in the background...
658 #
659
660 echo "Starting scheduler:"
661 echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
662 echo ""
663
664 if test `uname` = Darwin -a "x$VALGRIND" = x; then
665 if test "x$DYLD_INSERT_LIBRARIES" = x; then
666 insert="/usr/lib/libgmalloc.dylib"
667 else
668 insert="/usr/lib/libgmalloc.dylib:$DYLD_INSERT_LIBRARIES"
669 fi
670
671 DYLD_INSERT_LIBRARIES="$insert" MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
672 else
673 $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
674 fi
675
676 cupsd=$!
677
678 if test "x$testtype" = x0; then
679 # Not running tests...
680 echo "Scheduler is PID $cupsd and is listening on port $port."
681 echo ""
682
683 # Create a helper script to run programs with...
684 runcups="$BASE/runcups"
685
686 echo "#!/bin/sh" >$runcups
687 echo "# Helper script for running CUPS test instance." >>$runcups
688 echo "" >>$runcups
689 echo "# Set required environment variables..." >>$runcups
690 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
691 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
692 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
693 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
694 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
695 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
696 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
697 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
698 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
699 if test "x$CUPS_DEBUG_LEVEL" != x; then
700 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
701 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
702 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
703 fi
704 echo "" >>$runcups
705 echo "# Run command..." >>$runcups
706 echo "exec \"\$@\"" >>$runcups
707
708 chmod +x $runcups
709
710 echo "The $runcups helper script can be used to test programs"
711 echo "with the server."
712 exit 0
713 fi
714
715 if test $argcount -eq 0; then
716 echo "Scheduler is PID $cupsd; run debugger now if you need to."
717 echo ""
718 echo $ac_n "Press ENTER to continue... $ac_c"
719 read junk
720 else
721 echo "Scheduler is PID $cupsd."
722 sleep 2
723 fi
724
725 IPP_PORT=$port; export IPP_PORT
726
727 while true; do
728 running=`../systemv/lpstat -r 2>/dev/null`
729 if test "x$running" = "xscheduler is running"; then
730 break
731 fi
732
733 echo "Waiting for scheduler to become ready..."
734 sleep 10
735 done
736
737 #
738 # Create the test report source file...
739 #
740
741 date=`date "+%Y-%m-%d"`
742
743 strfile=$BASE/cups-str-$date-$user.html
744
745 rm -f $strfile
746 cat str-header.html >$strfile
747
748 #
749 # Run the IPP tests...
750 #
751
752 echo ""
753 echo "Running IPP compliance tests..."
754
755 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
756 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
757 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
758 echo " $date by $user on `hostname`." >>$strfile
759 echo " <pre>" >>$strfile
760
761 fail=0
762 for file in 4*.test ipp-2.1.test; do
763 echo $ac_n "Performing $file: $ac_c"
764 echo "" >>$strfile
765
766 if test $file = ipp-2.1.test; then
767 uri="ipp://localhost:$port/printers/Test1"
768 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
769 else
770 uri="ipp://localhost:$port/printers"
771 options=""
772 fi
773 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
774 status=$?
775
776 if test $status != 0; then
777 echo FAIL
778 fail=`expr $fail + 1`
779 else
780 echo PASS
781 fi
782 done
783
784 echo " </pre>" >>$strfile
785
786 #
787 # Run the command tests...
788 #
789
790 echo ""
791 echo "Running command tests..."
792
793 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
794 echo " <p>This section provides the results to the command tests" >>$strfile
795 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
796 echo " $date by $user on `hostname`." >>$strfile
797 echo " <pre>" >>$strfile
798
799 for file in 5*.sh; do
800 echo $ac_n "Performing $file: $ac_c"
801 echo "" >>$strfile
802 echo "\"$file\":" >>$strfile
803
804 sh $file $pjobs $pprinters >> $strfile
805 status=$?
806
807 if test $status != 0; then
808 echo FAIL
809 fail=`expr $fail + 1`
810 else
811 echo PASS
812 fi
813 done
814
815 #
816 # Log all allocations made by the scheduler...
817 #
818
819 if test `uname` = Darwin -a "x$VALGRIND" = x; then
820 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
821 fi
822
823 #
824 # Restart the server...
825 #
826
827 echo $ac_n "Performing restart test: $ac_c"
828 echo "" >>$strfile
829 echo "\"5.10-restart\":" >>$strfile
830
831 kill -HUP $cupsd
832
833 while true; do
834 sleep 10
835
836 running=`../systemv/lpstat -r 2>/dev/null`
837 if test "x$running" = "xscheduler is running"; then
838 break
839 fi
840 done
841
842 description="`../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
843 if test "x$description" != "xTest Printer 1"; then
844 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
845 echo "FAIL (got '$description', expected 'Test Printer 1')"
846 fail=`expr $fail + 1`
847 else
848 echo "Passed." >>$strfile
849 echo PASS
850 fi
851
852 echo " </pre>" >>$strfile
853
854 #
855 # Stop the server...
856 #
857
858 kill $cupsd
859 wait $cupsd
860 cupsdstatus=$?
861
862 #
863 # Verify counts...
864 #
865
866 echo "Test Summary"
867 echo ""
868 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
869
870 if test $cupsdstatus != 0; then
871 echo "FAIL: cupsd failed with exit status $cupsdstatus."
872 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
873 fail=`expr $fail + 1`
874 else
875 echo "PASS: cupsd exited with no errors."
876 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
877 fi
878
879 # Job control files
880 count=`ls -1 $BASE/spool | wc -l`
881 count=`expr $count - 1`
882 if test $count != 0; then
883 echo "FAIL: $count job control files were not purged."
884 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
885 fail=`expr $fail + 1`
886 else
887 echo "PASS: All job control files purged."
888 echo " <p>PASS: All job control files purged.</p>" >>$strfile
889 fi
890
891 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
892 count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
893 expected=`expr $pjobs \* 2 + 34`
894 expected2=`expr $expected + 2`
895 if test $count -lt $expected -a $count -gt $expected2; then
896 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
897 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
898 fail=`expr $fail + 1`
899 else
900 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
901 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
902 fi
903
904 # Paged printed on Test2
905 count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
906 expected=`expr $pjobs \* 2 + 3`
907 if test $count != $expected; then
908 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
909 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
910 fail=`expr $fail + 1`
911 else
912 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
913 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
914 fi
915
916 # Paged printed on Test3
917 count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
918 expected=2
919 if test $count != $expected; then
920 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
921 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
922 fail=`expr $fail + 1`
923 else
924 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
925 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
926 fi
927
928 # Requests logged
929 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
930 expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
931 if test $count != $expected; then
932 echo "FAIL: $count requests logged, expected $expected."
933 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
934 fail=`expr $fail + 1`
935 else
936 echo "PASS: $count requests logged."
937 echo " <p>PASS: $count requests logged.</p>" >>$strfile
938 fi
939
940 # Did CUPS-Get-Default get logged?
941 if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
942 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
943 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
944 echo " <pre>" >>$strfile
945 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
946 echo " </pre>" >>$strfile
947 fail=`expr $fail + 1`
948 else
949 echo "PASS: CUPS-Get-Default not logged."
950 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
951 fi
952
953 # Emergency log messages
954 count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
955 if test $count != 0; then
956 echo "FAIL: $count emergency messages, expected 0."
957 $GREP '^X ' $BASE/log/error_log
958 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
959 echo " <pre>" >>$strfile
960 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
961 echo " </pre>" >>$strfile
962 fail=`expr $fail + 1`
963 else
964 echo "PASS: $count emergency messages."
965 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
966 fi
967
968 # Alert log messages
969 count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
970 if test $count != 0; then
971 echo "FAIL: $count alert messages, expected 0."
972 $GREP '^A ' $BASE/log/error_log
973 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
974 echo " <pre>" >>$strfile
975 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
976 echo " </pre>" >>$strfile
977 fail=`expr $fail + 1`
978 else
979 echo "PASS: $count alert messages."
980 echo " <p>PASS: $count alert messages.</p>" >>$strfile
981 fi
982
983 # Critical log messages
984 count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
985 if test $count != 0; then
986 echo "FAIL: $count critical messages, expected 0."
987 $GREP '^C ' $BASE/log/error_log
988 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
989 echo " <pre>" >>$strfile
990 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
991 echo " </pre>" >>$strfile
992 fail=`expr $fail + 1`
993 else
994 echo "PASS: $count critical messages."
995 echo " <p>PASS: $count critical messages.</p>" >>$strfile
996 fi
997
998 # Error log messages
999 count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1000 if test $count != 33; then
1001 echo "FAIL: $count error messages, expected 33."
1002 $GREP '^E ' $BASE/log/error_log
1003 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1004 echo " <pre>" >>$strfile
1005 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1006 echo " </pre>" >>$strfile
1007 fail=`expr $fail + 1`
1008 else
1009 echo "PASS: $count error messages."
1010 echo " <p>PASS: $count error messages.</p>" >>$strfile
1011 fi
1012
1013 # Warning log messages
1014 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
1015 if test $count != 8; then
1016 echo "FAIL: $count warning messages, expected 8."
1017 $GREP '^W ' $BASE/log/error_log
1018 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
1019 echo " <pre>" >>$strfile
1020 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1021 echo " </pre>" >>$strfile
1022 fail=`expr $fail + 1`
1023 else
1024 echo "PASS: $count warning messages."
1025 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1026 fi
1027
1028 # Notice log messages
1029 count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1030 if test $count != 0; then
1031 echo "FAIL: $count notice messages, expected 0."
1032 $GREP '^N ' $BASE/log/error_log
1033 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1034 echo " <pre>" >>$strfile
1035 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1036 echo " </pre>" >>$strfile
1037 fail=`expr $fail + 1`
1038 else
1039 echo "PASS: $count notice messages."
1040 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1041 fi
1042
1043 # Info log messages
1044 count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1045 if test $count = 0; then
1046 echo "FAIL: $count info messages, expected more than 0."
1047 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1048 fail=`expr $fail + 1`
1049 else
1050 echo "PASS: $count info messages."
1051 echo " <p>PASS: $count info messages.</p>" >>$strfile
1052 fi
1053
1054 # Debug log messages
1055 count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1056 if test $count = 0; then
1057 echo "FAIL: $count debug messages, expected more than 0."
1058 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1059 fail=`expr $fail + 1`
1060 else
1061 echo "PASS: $count debug messages."
1062 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1063 fi
1064
1065 # Debug2 log messages
1066 count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1067 if test $count = 0; then
1068 echo "FAIL: $count debug2 messages, expected more than 0."
1069 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1070 fail=`expr $fail + 1`
1071 else
1072 echo "PASS: $count debug2 messages."
1073 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1074 fi
1075
1076 #
1077 # Log files...
1078 #
1079
1080 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1081
1082 for file in $BASE/log/*_log; do
1083 baselog=`basename $file`
1084
1085 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1086 case $baselog in
1087 error_log)
1088 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1089 echo " <pre>" >>$strfile
1090 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1091 echo " </pre>" >>$strfile
1092 ;;
1093
1094 *)
1095 echo " <pre>" >>$strfile
1096 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $file >>$strfile
1097 echo " </pre>" >>$strfile
1098 ;;
1099 esac
1100 done
1101
1102 #
1103 # Format the reports and tell the user where to find them...
1104 #
1105
1106 cat str-trailer.html >>$strfile
1107
1108 echo ""
1109 for file in $BASE/log/*_log; do
1110 baselog=`basename $file`
1111 cp $file $baselog-$date-$user
1112 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1113 done
1114 cp $strfile .
1115 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1116
1117 # Clean out old failure log files after 1 week...
1118 find . -name \*_log-\*-$user -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1119 find . -name cups-str-\*-$user.html -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1120
1121 echo ""
1122
1123 if test $fail != 0; then
1124 echo "$fail tests failed."
1125 exit 1
1126 else
1127 echo "All tests were successful."
1128 fi