]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
Add quotes around DYLD_INSERT_LIBRARIES value.
[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-2016 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; these tests currently require the OpenSSL"
145 echo "tools:"
146 echo ""
147 echo "0 - Do not do SSL/TLS encryption tests"
148 echo "1 - Test but do not require encryption"
149 echo "2 - Test and require encryption"
150 echo ""
151 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
152
153 if test $# -gt 0; then
154 ssltype=$1
155 shift
156 else
157 read ssltype
158 fi
159 echo ""
160
161 case "$ssltype" in
162 1)
163 echo "Will test but not require encryption (1)"
164 ;;
165 2)
166 echo "Will test and require encryption (2)"
167 ;;
168 *)
169 echo "Not using SSL/TLS (0)"
170 ssltype=0
171 ;;
172 esac
173
174 #
175 # Information for the server/tests...
176 #
177
178 user="$USER"
179 if test -z "$user"; then
180 if test -x /usr/ucb/whoami; then
181 user=`/usr/ucb/whoami`
182 else
183 user=`whoami`
184 fi
185
186 if test -z "$user"; then
187 user="unknown"
188 fi
189 fi
190
191 port="${CUPS_TESTPORT:=8631}"
192 cwd=`pwd`
193 root=`dirname $cwd`
194 CUPS_TESTROOT="$root"; export CUPS_TESTROOT
195
196 BASE="${CUPS_TESTBASE:=}"
197 if test -z "$BASE"; then
198 if test -d /private/tmp; then
199 BASE=/private/tmp/cups-$user
200 else
201 BASE=/tmp/cups-$user
202 fi
203 fi
204 export BASE
205
206 #
207 # Make sure that the LPDEST and PRINTER environment variables are
208 # not included in the environment that is passed to the tests. These
209 # will usually cause tests to fail erroneously...
210 #
211
212 unset LPDEST
213 unset PRINTER
214
215 #
216 # See if we want to use valgrind...
217 #
218
219 echo ""
220 echo "This test script can use the Valgrind software from:"
221 echo ""
222 echo " http://developer.kde.org/~sewardj/"
223 echo ""
224 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
225
226 if test $# -gt 0; then
227 usevalgrind=$1
228 shift
229 else
230 read usevalgrind
231 fi
232 echo ""
233
234 case "$usevalgrind" in
235 Y* | y*)
236 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
237 if test `uname` = Darwin; then
238 VALGRIND="$VALGRIND --dsymutil=yes"
239 fi
240 export VALGRIND
241 echo "Using Valgrind; log files can be found in $BASE/log..."
242 ;;
243
244 *)
245 VALGRIND=""
246 export VALGRIND
247 ;;
248 esac
249
250 #
251 # See if we want to do debug logging of the libraries...
252 #
253
254 echo ""
255 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
256 echo "can enable debug logging of the libraries."
257 echo ""
258 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
259
260 if test $# -gt 0; then
261 usedebugprintfs=$1
262 shift
263 else
264 read usedebugprintfs
265 fi
266 echo ""
267
268 case "$usedebugprintfs" in
269 Y* | y*)
270 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
271 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
272 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
273 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
274 ;;
275
276 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
277 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
278 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
279 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
280 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
281 ;;
282
283 *)
284 ;;
285 esac
286
287 #
288 # Start by creating temporary directories for the tests...
289 #
290
291 echo "Creating directories for test..."
292
293 rm -rf $BASE
294 mkdir $BASE
295 mkdir $BASE/bin
296 mkdir $BASE/bin/backend
297 mkdir $BASE/bin/driver
298 mkdir $BASE/bin/filter
299 mkdir $BASE/certs
300 mkdir $BASE/share
301 mkdir $BASE/share/banners
302 mkdir $BASE/share/drv
303 mkdir $BASE/share/locale
304 for file in ../locale/cups_*.po; do
305 loc=`basename $file .po | cut -c 6-`
306 mkdir $BASE/share/locale/$loc
307 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
308 ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
309 done
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 $root/backend/lpd $BASE/bin/backend
324 ln -s $root/backend/mdns $BASE/bin/backend
325 ln -s $root/backend/pseudo $BASE/bin/backend
326 ln -s $root/backend/snmp $BASE/bin/backend
327 ln -s $root/backend/socket $BASE/bin/backend
328 ln -s $root/backend/usb $BASE/bin/backend
329 ln -s $root/cgi-bin $BASE/bin
330 ln -s $root/monitor $BASE/bin
331 ln -s $root/notifier $BASE/bin
332 ln -s $root/scheduler $BASE/bin/daemon
333 ln -s $root/filter/commandtops $BASE/bin/filter
334 ln -s $root/filter/gziptoany $BASE/bin/filter
335 ln -s $root/filter/pstops $BASE/bin/filter
336 ln -s $root/filter/rastertoepson $BASE/bin/filter
337 ln -s $root/filter/rastertohp $BASE/bin/filter
338 ln -s $root/filter/rastertolabel $BASE/bin/filter
339 ln -s $root/filter/rastertopwg $BASE/bin/filter
340 cat >$BASE/share/banners/standard <<EOF
341 ==== Cover Page ====
342
343
344 Job: {?printer-name}-{?job-id}
345 Owner: {?job-originating-user-name}
346 Name: {?job-name}
347 Pages: {?job-impressions}
348
349
350 ==== Cover Page ====
351 EOF
352 cat >$BASE/share/banners/classified <<EOF
353 ==== Classified - Do Not Disclose ====
354
355
356 Job: {?printer-name}-{?job-id}
357 Owner: {?job-originating-user-name}
358 Name: {?job-name}
359 Pages: {?job-impressions}
360
361
362 ==== Classified - Do Not Disclose ====
363 EOF
364 ln -s $root/data $BASE/share
365 ln -s $root/ppdc/sample.drv $BASE/share/drv
366 ln -s $root/conf/mime.types $BASE/share/mime
367 ln -s $root/conf/mime.convs $BASE/share/mime
368 ln -s $root/data/*.h $BASE/share/ppdc
369 ln -s $root/data/*.defs $BASE/share/ppdc
370 ln -s $root/templates $BASE/share
371
372 #
373 # Local filters and configuration files...
374 #
375
376 instfilter() {
377 # instfilter src dst format
378 #
379 # See if the filter exists in a standard location; if so, make a
380 # symlink, otherwise create a dummy script for the specified format.
381 #
382 src="$1"
383 dst="$2"
384 format="$3"
385
386 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
387 if test -x "$dir/$src"; then
388 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
389 return
390 fi
391 done
392
393 # Source filter not present, create a dummy filter
394 case $format in
395 passthru)
396 ln -s gziptoany "$BASE/bin/filter/$dst"
397 ;;
398 pdf)
399 cat >"$BASE/bin/filter/$dst" <<EOF
400 #!/bin/sh
401 trap "" TERM
402 trap "" PIPE
403 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
404 case "\$5" in
405 *media=a4* | *media=iso_a4* | *PageSize=A4*)
406 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
407 ;;
408 *)
409 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
410 ;;
411 esac
412 EOF
413 chmod +x "$BASE/bin/filter/$dst"
414 ;;
415 ps)
416 cat >"$BASE/bin/filter/$dst" <<EOF
417 #!/bin/sh
418 trap "" TERM
419 trap "" PIPE
420 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
421 case "\$5" in
422 *media=a4* | *media=iso_a4* | *PageSize=A4*)
423 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
424 ;;
425 *)
426 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
427 ;;
428 esac
429 EOF
430 chmod +x "$BASE/bin/filter/$dst"
431 ;;
432 raster)
433 cat >"$BASE/bin/filter/$dst" <<EOF
434 #!/bin/sh
435 trap "" TERM
436 trap "" PIPE
437 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
438 case "\$5" in
439 *media=a4* | *media=iso_a4* | *PageSize=A4*)
440 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
441 ;;
442 *)
443 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
444 ;;
445 esac
446 EOF
447 chmod +x "$BASE/bin/filter/$dst"
448 ;;
449 esac
450 }
451
452 ln -s $root/test/test.convs $BASE/share/mime
453 ln -s $root/test/test.types $BASE/share/mime
454
455 if test `uname` = Darwin; then
456 instfilter cgimagetopdf imagetopdf pdf
457 instfilter cgpdftopdf pdftopdf passthru
458 instfilter cgpdftops pdftops ps
459 instfilter cgpdftoraster pdftoraster raster
460 instfilter cgpdftoraster pdftourf raster
461 instfilter cgtexttopdf texttopdf pdf
462 instfilter pstocupsraster pstoraster raster
463 else
464 instfilter imagetopdf imagetopdf pdf
465 instfilter pdftopdf pdftopdf passthru
466 instfilter pdftops pdftops ps
467 instfilter pdftoraster pdftoraster 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 "x$DYLD_LIBRARY_PATH" = x; then
607 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
608 else
609 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
610 fi
611
612 export DYLD_LIBRARY_PATH
613
614 if test "x$SHLIB_PATH" = x; then
615 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
616 else
617 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
618 fi
619
620 export SHLIB_PATH
621
622 CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
623 CUPS_SERVER=localhost:$port; export CUPS_SERVER
624 CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
625 CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
626 CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
627 LOCALEDIR=$BASE/share/locale; export LOCALEDIR
628
629 #
630 # Set a new home directory to avoid getting user options mixed in...
631 #
632
633 HOME=$BASE
634 export HOME
635
636 #
637 # Force POSIX locale for tests...
638 #
639
640 LANG=C
641 export LANG
642
643 LC_MESSAGES=C
644 export LC_MESSAGES
645
646 #
647 # Start the server; run as foreground daemon in the background...
648 #
649
650 echo "Starting scheduler:"
651 echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
652 echo ""
653
654 if test `uname` = Darwin -a "x$VALGRIND" = x; then
655 DYLD_INSERT_LIBRARIES="/usr/lib/libgmalloc.dylib" MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
656 else
657 $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
658 fi
659
660 cupsd=$!
661
662 if test "x$testtype" = x0; then
663 # Not running tests...
664 echo "Scheduler is PID $cupsd and is listening on port $port."
665 echo ""
666
667 # Create a helper script to run programs with...
668 runcups="$BASE/runcups"
669
670 echo "#!/bin/sh" >$runcups
671 echo "# Helper script for running CUPS test instance." >>$runcups
672 echo "" >>$runcups
673 echo "# Set required environment variables..." >>$runcups
674 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
675 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
676 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
677 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
678 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
679 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
680 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
681 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
682 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
683 if test "x$CUPS_DEBUG_LEVEL" != x; then
684 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
685 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
686 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
687 fi
688 echo "" >>$runcups
689 echo "# Run command..." >>$runcups
690 echo "exec \"\$@\"" >>$runcups
691
692 chmod +x $runcups
693
694 echo "The $runcups helper script can be used to test programs"
695 echo "with the server."
696 exit 0
697 fi
698
699 if test $argcount -eq 0; then
700 echo "Scheduler is PID $cupsd; run debugger now if you need to."
701 echo ""
702 echo $ac_n "Press ENTER to continue... $ac_c"
703 read junk
704 else
705 echo "Scheduler is PID $cupsd."
706 sleep 2
707 fi
708
709 IPP_PORT=$port; export IPP_PORT
710
711 while true; do
712 running=`../systemv/lpstat -r 2>/dev/null`
713 if test "x$running" = "xscheduler is running"; then
714 break
715 fi
716
717 echo "Waiting for scheduler to become ready..."
718 sleep 10
719 done
720
721 #
722 # Create the test report source file...
723 #
724
725 date=`date "+%Y-%m-%d"`
726
727 if test -d $root/.svn; then
728 rev=`svn info . | grep Revision: | awk '{print $2}'`
729 strfile=$BASE/cups-str-2.2-r$rev-$user.html
730 else
731 strfile=$BASE/cups-str-2.2-$date-$user.html
732 fi
733
734 rm -f $strfile
735 cat str-header.html >$strfile
736
737 #
738 # Run the IPP tests...
739 #
740
741 echo ""
742 echo "Running IPP compliance tests..."
743
744 echo "<H1><A NAME='IPP'>1 - IPP Compliance Tests</A></H1>" >>$strfile
745 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
746 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
747 echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
748 echo "<PRE>" >>$strfile
749
750 fail=0
751 for file in 4*.test ipp-2.1.test; do
752 echo $ac_n "Performing $file: $ac_c"
753 echo "" >>$strfile
754
755 if test $file = ipp-2.1.test; then
756 uri="ipp://localhost:$port/printers/Test1"
757 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
758 else
759 uri="ipp://localhost:$port/printers"
760 options=""
761 fi
762 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
763 status=$?
764
765 if test $status != 0; then
766 echo FAIL
767 fail=`expr $fail + 1`
768 else
769 echo PASS
770 fi
771 done
772
773 echo "</PRE>" >>$strfile
774
775 #
776 # Run the command tests...
777 #
778
779 echo ""
780 echo "Running command tests..."
781
782 echo "<H1><A NAME='COMMAND'>2 - Command Tests</A></H1>" >>$strfile
783 echo "<P>This section provides the results to the command tests" >>$strfile
784 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
785 echo $date by $user on `hostname`. >>$strfile
786 echo "<PRE>" >>$strfile
787
788 for file in 5*.sh; do
789 echo $ac_n "Performing $file: $ac_c"
790 echo "" >>$strfile
791 echo "\"$file\":" >>$strfile
792
793 sh $file $pjobs $pprinters >> $strfile
794 status=$?
795
796 if test $status != 0; then
797 echo FAIL
798 fail=`expr $fail + 1`
799 else
800 echo PASS
801 fi
802 done
803
804 #
805 # Log all allocations made by the scheduler...
806 #
807 if test `uname` = Darwin -a "x$VALGRIND" = x; then
808 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
809 fi
810
811 #
812 # Restart the server...
813 #
814
815 echo $ac_n "Performing restart test: $ac_c"
816 echo "" >>$strfile
817 echo "\"5.10-restart\":" >>$strfile
818
819 kill -HUP $cupsd
820
821 while true; do
822 sleep 10
823
824 running=`../systemv/lpstat -r 2>/dev/null`
825 if test "x$running" = "xscheduler is running"; then
826 break
827 fi
828 done
829
830 description="`../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
831 if test "x$description" != "xTest Printer 1"; then
832 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
833 echo "FAIL (got '$description', expected 'Test Printer 1')"
834 fail=`expr $fail + 1`
835 else
836 echo "Passed." >>$strfile
837 echo PASS
838 fi
839
840 echo "</PRE>" >>$strfile
841
842 #
843 # Stop the server...
844 #
845
846 kill $cupsd
847 wait $cupsd
848 cupsdstatus=$?
849
850 #
851 # Verify counts...
852 #
853
854 echo "Test Summary"
855 echo ""
856 echo "<H1><A NAME='SUMMARY'>3 - Test Summary</A></H1>" >>$strfile
857
858 if test $cupsdstatus != 0; then
859 echo "FAIL: cupsd failed with exit status $cupsdstatus."
860 echo "<p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
861 fail=`expr $fail + 1`
862 else
863 echo "PASS: cupsd exited with no errors."
864 echo "<p>PASS: cupsd exited with no errors.</p>" >>$strfile
865 fi
866
867 # Job control files
868 count=`ls -1 $BASE/spool | wc -l`
869 count=`expr $count - 1`
870 if test $count != 0; then
871 echo "FAIL: $count job control files were not purged."
872 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
873 fail=`expr $fail + 1`
874 else
875 echo "PASS: All job control files purged."
876 echo "<P>PASS: All job control files purged.</P>" >>$strfile
877 fi
878
879 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
880 count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
881 expected=`expr $pjobs \* 2 + 34`
882 expected2=`expr $expected + 2`
883 if test $count -lt $expected -a $count -gt $expected2; then
884 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
885 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
886 fail=`expr $fail + 1`
887 else
888 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
889 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
890 fi
891
892 # Paged printed on Test2
893 count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
894 expected=`expr $pjobs \* 2 + 3`
895 if test $count != $expected; then
896 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
897 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
898 fail=`expr $fail + 1`
899 else
900 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
901 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
902 fi
903
904 # Paged printed on Test3
905 count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
906 expected=2
907 if test $count != $expected; then
908 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
909 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
910 fail=`expr $fail + 1`
911 else
912 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
913 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
914 fi
915
916 # Requests logged
917 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
918 expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
919 if test $count != $expected; then
920 echo "FAIL: $count requests logged, expected $expected."
921 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
922 fail=`expr $fail + 1`
923 else
924 echo "PASS: $count requests logged."
925 echo "<P>PASS: $count requests logged.</P>" >>$strfile
926 fi
927
928 # Did CUPS-Get-Default get logged?
929 if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
930 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
931 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
932 echo "<PRE>" >>$strfile
933 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
934 echo "</PRE>" >>$strfile
935 fail=`expr $fail + 1`
936 else
937 echo "PASS: CUPS-Get-Default not logged."
938 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
939 fi
940
941 # Emergency log messages
942 count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
943 if test $count != 0; then
944 echo "FAIL: $count emergency messages, expected 0."
945 $GREP '^X ' $BASE/log/error_log
946 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
947 echo "<PRE>" >>$strfile
948 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
949 echo "</PRE>" >>$strfile
950 fail=`expr $fail + 1`
951 else
952 echo "PASS: $count emergency messages."
953 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
954 fi
955
956 # Alert log messages
957 count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
958 if test $count != 0; then
959 echo "FAIL: $count alert messages, expected 0."
960 $GREP '^A ' $BASE/log/error_log
961 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
962 echo "<PRE>" >>$strfile
963 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
964 echo "</PRE>" >>$strfile
965 fail=`expr $fail + 1`
966 else
967 echo "PASS: $count alert messages."
968 echo "<P>PASS: $count alert messages.</P>" >>$strfile
969 fi
970
971 # Critical log messages
972 count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
973 if test $count != 0; then
974 echo "FAIL: $count critical messages, expected 0."
975 $GREP '^C ' $BASE/log/error_log
976 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
977 echo "<PRE>" >>$strfile
978 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
979 echo "</PRE>" >>$strfile
980 fail=`expr $fail + 1`
981 else
982 echo "PASS: $count critical messages."
983 echo "<P>PASS: $count critical messages.</P>" >>$strfile
984 fi
985
986 # Error log messages
987 count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
988 if test $count != 33; then
989 echo "FAIL: $count error messages, expected 33."
990 $GREP '^E ' $BASE/log/error_log
991 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
992 echo "<PRE>" >>$strfile
993 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
994 echo "</PRE>" >>$strfile
995 fail=`expr $fail + 1`
996 else
997 echo "PASS: $count error messages."
998 echo "<P>PASS: $count error messages.</P>" >>$strfile
999 fi
1000
1001 # Warning log messages
1002 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
1003 if test $count != 8; then
1004 echo "FAIL: $count warning messages, expected 8."
1005 $GREP '^W ' $BASE/log/error_log
1006 echo "<P>FAIL: $count warning messages, expected 8.</P>" >>$strfile
1007 echo "<PRE>" >>$strfile
1008 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1009 echo "</PRE>" >>$strfile
1010 fail=`expr $fail + 1`
1011 else
1012 echo "PASS: $count warning messages."
1013 echo "<P>PASS: $count warning messages.</P>" >>$strfile
1014 fi
1015
1016 # Notice log messages
1017 count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1018 if test $count != 0; then
1019 echo "FAIL: $count notice messages, expected 0."
1020 $GREP '^N ' $BASE/log/error_log
1021 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
1022 echo "<PRE>" >>$strfile
1023 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1024 echo "</PRE>" >>$strfile
1025 fail=`expr $fail + 1`
1026 else
1027 echo "PASS: $count notice messages."
1028 echo "<P>PASS: $count notice messages.</P>" >>$strfile
1029 fi
1030
1031 # Info log messages
1032 count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1033 if test $count = 0; then
1034 echo "FAIL: $count info messages, expected more than 0."
1035 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
1036 fail=`expr $fail + 1`
1037 else
1038 echo "PASS: $count info messages."
1039 echo "<P>PASS: $count info messages.</P>" >>$strfile
1040 fi
1041
1042 # Debug log messages
1043 count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1044 if test $count = 0; then
1045 echo "FAIL: $count debug messages, expected more than 0."
1046 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
1047 fail=`expr $fail + 1`
1048 else
1049 echo "PASS: $count debug messages."
1050 echo "<P>PASS: $count debug messages.</P>" >>$strfile
1051 fi
1052
1053 # Debug2 log messages
1054 count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1055 if test $count = 0; then
1056 echo "FAIL: $count debug2 messages, expected more than 0."
1057 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
1058 fail=`expr $fail + 1`
1059 else
1060 echo "PASS: $count debug2 messages."
1061 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
1062 fi
1063
1064 #
1065 # Log files...
1066 #
1067
1068 echo "<H1><A NAME='LOGS'>4 - Log Files</A></H1>" >>$strfile
1069
1070 echo "<H2><A NAME='access_log'>access_log</A></H2>" >>$strfile
1071 echo "<PRE>" >>$strfile
1072 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
1073 echo "</PRE>" >>$strfile
1074
1075 echo "<H2><A NAME='error_log'>error_log</A></H2>" >>$strfile
1076 echo "<PRE>" >>$strfile
1077 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1078 echo "</PRE>" >>$strfile
1079
1080 echo "<H2><A NAME='page_log'>page_log</A></H2>" >>$strfile
1081 echo "<PRE>" >>$strfile
1082 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
1083 echo "</PRE>" >>$strfile
1084
1085 #
1086 # Format the reports and tell the user where to find them...
1087 #
1088
1089 cat str-trailer.html >>$strfile
1090
1091 echo ""
1092
1093 if test $fail != 0; then
1094 echo "$fail tests failed."
1095
1096 if test -d $root/.svn; then
1097 cp $BASE/log/error_log error_log-r$rev-$user
1098 else
1099 cp $BASE/log/error_log error_log-$date-$user
1100 fi
1101
1102 cp $strfile .
1103 else
1104 echo "All tests were successful."
1105 fi
1106
1107 echo "Log files can be found in $BASE/log."
1108 echo "A HTML report was created in $strfile."
1109 echo ""
1110
1111 if test $fail != 0; then
1112 echo "Copies of the error_log and `basename $strfile` files are in"
1113 echo "`pwd`."
1114 echo ""
1115
1116 exit 1
1117 fi