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