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