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