]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
Update copyrights and license text on files that were missed.
[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 nprinters1=0
95 nprinters2=0
96 pjobs=0
97 pprinters=0
98 loglevel="debug2"
99 ;;
100 2)
101 echo "Running the medium tests (2)"
102 nprinters1=10
103 nprinters2=20
104 pjobs=20
105 pprinters=10
106 loglevel="debug"
107 ;;
108 3)
109 echo "Running the extreme tests (3)"
110 nprinters1=500
111 nprinters2=1000
112 pjobs=100
113 pprinters=50
114 loglevel="debug"
115 ;;
116 4)
117 echo "Running the torture tests (4)"
118 nprinters1=10000
119 nprinters2=20000
120 pjobs=200
121 pprinters=100
122 loglevel="debug"
123 ;;
124 *)
125 echo "Running the timid tests (1)"
126 nprinters1=0
127 nprinters2=0
128 pjobs=10
129 pprinters=0
130 loglevel="debug2"
131 testtype="1"
132 ;;
133 esac
134
135 #
136 # See if we want to do SSL testing...
137 #
138
139 echo ""
140 echo "Now you can choose whether to create a SSL/TLS encryption key and"
141 echo "certificate for testing:"
142 echo ""
143 echo "0 - Do not do SSL/TLS encryption tests"
144 echo "1 - Test but do not require encryption"
145 echo "2 - Test and require encryption"
146 echo ""
147 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
148
149 if test $# -gt 0; then
150 ssltype=$1
151 shift
152 else
153 read ssltype
154 fi
155 echo ""
156
157 case "$ssltype" in
158 1)
159 echo "Will test but not require encryption (1)"
160 ;;
161 2)
162 echo "Will test and require encryption (2)"
163 ;;
164 *)
165 echo "Not using SSL/TLS (0)"
166 ssltype=0
167 ;;
168 esac
169
170 #
171 # Information for the server/tests...
172 #
173
174 user="$USER"
175 if test -z "$user"; then
176 if test -x /usr/ucb/whoami; then
177 user=`/usr/ucb/whoami`
178 else
179 user=`whoami`
180 fi
181
182 if test -z "$user"; then
183 user="unknown"
184 fi
185 fi
186
187 port="${CUPS_TESTPORT:=8631}"
188 cwd=`pwd`
189 root=`dirname $cwd`
190 CUPS_TESTROOT="$root"; export CUPS_TESTROOT
191
192 BASE="${CUPS_TESTBASE:=}"
193 if test -z "$BASE"; then
194 if test -d /private/tmp; then
195 BASE=/private/tmp/cups-$user
196 else
197 BASE=/tmp/cups-$user
198 fi
199 fi
200 export BASE
201
202 #
203 # Make sure that the LPDEST and PRINTER environment variables are
204 # not included in the environment that is passed to the tests. These
205 # will usually cause tests to fail erroneously...
206 #
207
208 unset LPDEST
209 unset PRINTER
210
211 #
212 # See if we want to use valgrind...
213 #
214
215 echo ""
216 echo "This test script can use the Valgrind software from:"
217 echo ""
218 echo " http://developer.kde.org/~sewardj/"
219 echo ""
220 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
221
222 if test $# -gt 0; then
223 usevalgrind=$1
224 shift
225 else
226 read usevalgrind
227 fi
228 echo ""
229
230 case "$usevalgrind" in
231 Y* | y*)
232 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
233 if test `uname` = Darwin; then
234 VALGRIND="$VALGRIND --dsymutil=yes"
235 fi
236 export VALGRIND
237 echo "Using Valgrind; log files can be found in $BASE/log..."
238 ;;
239
240 *)
241 VALGRIND=""
242 export VALGRIND
243 ;;
244 esac
245
246 #
247 # See if we want to do debug logging of the libraries...
248 #
249
250 echo ""
251 echo "If CUPS was built with the --enable-debug-printfs configure option, you"
252 echo "can enable debug logging of the libraries."
253 echo ""
254 echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
255
256 if test $# -gt 0; then
257 usedebugprintfs=$1
258 shift
259 else
260 read usedebugprintfs
261 fi
262 echo ""
263
264 case "$usedebugprintfs" in
265 Y* | y*)
266 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
267 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
268 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
269 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
270 ;;
271
272 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
273 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
274 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
275 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
276 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; export CUPS_DEBUG_FILTER
277 ;;
278
279 *)
280 ;;
281 esac
282
283 #
284 # Start by creating temporary directories for the tests...
285 #
286
287 echo "Creating directories for test..."
288
289 rm -rf $BASE
290 mkdir $BASE
291 mkdir $BASE/bin
292 mkdir $BASE/bin/backend
293 mkdir $BASE/bin/driver
294 mkdir $BASE/bin/filter
295 mkdir $BASE/certs
296 mkdir $BASE/share
297 mkdir $BASE/share/banners
298 mkdir $BASE/share/drv
299 mkdir $BASE/share/locale
300 for file in ../locale/cups_*.po; do
301 loc=`basename $file .po | cut -c 6-`
302 mkdir $BASE/share/locale/$loc
303 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
304 done
305 mkdir $BASE/share/locale/en
306 ln -s $root/locale/cups.pot $BASE/share/locale/en/cups_en.po
307 mkdir $BASE/share/mime
308 mkdir $BASE/share/model
309 mkdir $BASE/share/ppdc
310 mkdir $BASE/interfaces
311 mkdir $BASE/log
312 mkdir $BASE/ppd
313 mkdir $BASE/spool
314 mkdir $BASE/spool/temp
315 mkdir $BASE/ssl
316
317 ln -s $root/backend/dnssd $BASE/bin/backend
318 ln -s $root/backend/http $BASE/bin/backend
319 ln -s $root/backend/ipp $BASE/bin/backend
320 ln -s ipp $BASE/bin/backend/ipps
321 ln -s $root/backend/lpd $BASE/bin/backend
322 ln -s $root/backend/mdns $BASE/bin/backend
323 ln -s $root/backend/pseudo $BASE/bin/backend
324 ln -s $root/backend/snmp $BASE/bin/backend
325 ln -s $root/backend/socket $BASE/bin/backend
326 ln -s $root/backend/usb $BASE/bin/backend
327 ln -s $root/cgi-bin $BASE/bin
328 ln -s $root/monitor $BASE/bin
329 ln -s $root/notifier $BASE/bin
330 ln -s $root/scheduler $BASE/bin/daemon
331 ln -s $root/filter/commandtops $BASE/bin/filter
332 ln -s $root/filter/gziptoany $BASE/bin/filter
333 ln -s $root/filter/pstops $BASE/bin/filter
334 ln -s $root/filter/rastertoepson $BASE/bin/filter
335 ln -s $root/filter/rastertohp $BASE/bin/filter
336 ln -s $root/filter/rastertolabel $BASE/bin/filter
337 ln -s $root/filter/rastertopwg $BASE/bin/filter
338 cat >$BASE/share/banners/standard <<EOF
339 ==== Cover Page ====
340
341
342 Job: {?printer-name}-{?job-id}
343 Owner: {?job-originating-user-name}
344 Name: {?job-name}
345 Pages: {?job-impressions}
346
347
348 ==== Cover Page ====
349 EOF
350 cat >$BASE/share/banners/classified <<EOF
351 ==== Classified - Do Not Disclose ====
352
353
354 Job: {?printer-name}-{?job-id}
355 Owner: {?job-originating-user-name}
356 Name: {?job-name}
357 Pages: {?job-impressions}
358
359
360 ==== Classified - Do Not Disclose ====
361 EOF
362 ln -s $root/data $BASE/share
363 ln -s $root/ppdc/sample.drv $BASE/share/drv
364 ln -s $root/conf/mime.types $BASE/share/mime
365 ln -s $root/conf/mime.convs $BASE/share/mime
366 ln -s $root/data/*.h $BASE/share/ppdc
367 ln -s $root/data/*.defs $BASE/share/ppdc
368 ln -s $root/templates $BASE/share
369
370 #
371 # Local filters and configuration files...
372 #
373
374 instfilter() {
375 # instfilter src dst format
376 #
377 # See if the filter exists in a standard location; if so, make a
378 # symlink, otherwise create a dummy script for the specified format.
379 #
380 src="$1"
381 dst="$2"
382 format="$3"
383
384 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
385 if test -x "$dir/$src"; then
386 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
387 return
388 fi
389 done
390
391 # Source filter not present, create a dummy filter
392 case $format in
393 passthru)
394 ln -s gziptoany "$BASE/bin/filter/$dst"
395 ;;
396 pdf)
397 cat >"$BASE/bin/filter/$dst" <<EOF
398 #!/bin/sh
399 trap "" TERM
400 trap "" PIPE
401 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
402 case "\$5" in
403 *media=a4* | *media=iso_a4* | *PageSize=A4*)
404 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
405 ;;
406 *)
407 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
408 ;;
409 esac
410 EOF
411 chmod +x "$BASE/bin/filter/$dst"
412 ;;
413 ps)
414 cat >"$BASE/bin/filter/$dst" <<EOF
415 #!/bin/sh
416 trap "" TERM
417 trap "" PIPE
418 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
419 case "\$5" in
420 *media=a4* | *media=iso_a4* | *PageSize=A4*)
421 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
422 ;;
423 *)
424 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
425 ;;
426 esac
427 EOF
428 chmod +x "$BASE/bin/filter/$dst"
429 ;;
430 raster)
431 cat >"$BASE/bin/filter/$dst" <<EOF
432 #!/bin/sh
433 trap "" TERM
434 trap "" PIPE
435 gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
436 case "\$5" in
437 *media=a4* | *media=iso_a4* | *PageSize=A4*)
438 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
439 ;;
440 *)
441 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
442 ;;
443 esac
444 EOF
445 chmod +x "$BASE/bin/filter/$dst"
446 ;;
447 esac
448 }
449
450 ln -s $root/test/test.convs $BASE/share/mime
451 ln -s $root/test/test.types $BASE/share/mime
452
453 if test `uname` = Darwin; then
454 instfilter cgimagetopdf imagetopdf pdf
455 instfilter cgpdftopdf pdftopdf passthru
456 instfilter cgpdftops pdftops ps
457 instfilter cgpdftoraster pdftoraster raster
458 instfilter cgpdftoraster pdftourf raster
459 instfilter cgtexttopdf texttopdf pdf
460 instfilter pstocupsraster pstoraster raster
461 else
462 instfilter imagetopdf imagetopdf pdf
463 instfilter pdftopdf pdftopdf passthru
464 instfilter pdftops pdftops ps
465 instfilter pdftoraster pdftoraster raster
466 instfilter pdftoraster pdftourf 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/cups/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/cups/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/cups/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 strfile=$BASE/cups-str-$date-$user.html
743
744 rm -f $strfile
745 cat str-header.html >$strfile
746
747 #
748 # Run the IPP tests...
749 #
750
751 echo ""
752 echo "Running IPP compliance tests..."
753
754 echo " <h1><a name='IPP'>1 - IPP Compliance Tests</a></h1>" >>$strfile
755 echo " <p>This section provides the results to the IPP compliance tests" >>$strfile
756 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
757 echo " $date by $user on `hostname`." >>$strfile
758 echo " <pre>" >>$strfile
759
760 fail=0
761 for file in 4*.test ipp-2.1.test; do
762 echo $ac_n "Performing $file: $ac_c"
763 echo "" >>$strfile
764
765 if test $file = ipp-2.1.test; then
766 uri="ipp://localhost:$port/printers/Test1"
767 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
768 else
769 uri="ipp://localhost:$port/printers"
770 options=""
771 fi
772 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
773 status=$?
774
775 if test $status != 0; then
776 echo FAIL
777 fail=`expr $fail + 1`
778 else
779 echo PASS
780 fi
781 done
782
783 echo " </pre>" >>$strfile
784
785 #
786 # Run the command tests...
787 #
788
789 echo ""
790 echo "Running command tests..."
791
792 echo " <h1><a name='COMMAND'>2 - Command Tests</a></h1>" >>$strfile
793 echo " <p>This section provides the results to the command tests" >>$strfile
794 echo " outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
795 echo " $date by $user on `hostname`." >>$strfile
796 echo " <pre>" >>$strfile
797
798 for file in 5*.sh; do
799 echo $ac_n "Performing $file: $ac_c"
800 echo "" >>$strfile
801 echo "\"$file\":" >>$strfile
802
803 sh $file $pjobs $pprinters >> $strfile
804 status=$?
805
806 if test $status != 0; then
807 echo FAIL
808 fail=`expr $fail + 1`
809 else
810 echo PASS
811 fi
812 done
813
814 #
815 # Log all allocations made by the scheduler...
816 #
817
818 if test `uname` = Darwin -a "x$VALGRIND" = x; then
819 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
820 fi
821
822 #
823 # Restart the server...
824 #
825
826 echo $ac_n "Performing restart test: $ac_c"
827 echo "" >>$strfile
828 echo "\"5.10-restart\":" >>$strfile
829
830 kill -HUP $cupsd
831
832 while true; do
833 sleep 10
834
835 running=`../systemv/lpstat -r 2>/dev/null`
836 if test "x$running" = "xscheduler is running"; then
837 break
838 fi
839 done
840
841 description="`../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
842 if test "x$description" != "xTest Printer 1"; then
843 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
844 echo "FAIL (got '$description', expected 'Test Printer 1')"
845 fail=`expr $fail + 1`
846 else
847 echo "Passed." >>$strfile
848 echo PASS
849 fi
850
851 echo " </pre>" >>$strfile
852
853 #
854 # Stop the server...
855 #
856
857 kill $cupsd
858 wait $cupsd
859 cupsdstatus=$?
860
861 #
862 # Verify counts...
863 #
864
865 echo "Test Summary"
866 echo ""
867 echo " <h1><a name='SUMMARY'>3 - Test Summary</a></h1>" >>$strfile
868
869 if test $cupsdstatus != 0; then
870 echo "FAIL: cupsd failed with exit status $cupsdstatus."
871 echo " <p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
872 fail=`expr $fail + 1`
873 else
874 echo "PASS: cupsd exited with no errors."
875 echo " <p>PASS: cupsd exited with no errors.</p>" >>$strfile
876 fi
877
878 # Job control files
879 count=`ls -1 $BASE/spool | wc -l`
880 count=`expr $count - 1`
881 if test $count != 0; then
882 echo "FAIL: $count job control files were not purged."
883 echo " <p>FAIL: $count job control files were not purged.</p>" >>$strfile
884 fail=`expr $fail + 1`
885 else
886 echo "PASS: All job control files purged."
887 echo " <p>PASS: All job control files purged.</p>" >>$strfile
888 fi
889
890 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
891 count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
892 expected=`expr $pjobs \* 2 + 34`
893 expected2=`expr $expected + 2`
894 if test $count -lt $expected -a $count -gt $expected2; then
895 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
896 echo " <p>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</p>" >>$strfile
897 fail=`expr $fail + 1`
898 else
899 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
900 echo " <p>PASS: Printer 'Test1' correctly produced $count page(s).</p>" >>$strfile
901 fi
902
903 # Paged printed on Test2
904 count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
905 expected=`expr $pjobs \* 2 + 3`
906 if test $count != $expected; then
907 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
908 echo " <p>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</p>" >>$strfile
909 fail=`expr $fail + 1`
910 else
911 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
912 echo " <p>PASS: Printer 'Test2' correctly produced $count page(s).</p>" >>$strfile
913 fi
914
915 # Paged printed on Test3
916 count=`$GREP '^Test3 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
917 expected=2
918 if test $count != $expected; then
919 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
920 echo " <p>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</p>" >>$strfile
921 fail=`expr $fail + 1`
922 else
923 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
924 echo " <p>PASS: Printer 'Test3' correctly produced $count page(s).</p>" >>$strfile
925 fi
926
927 # Requests logged
928 count=`wc -l $BASE/log/access_log | awk '{print $1}'`
929 expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
930 if test $count != $expected; then
931 echo "FAIL: $count requests logged, expected $expected."
932 echo " <p>FAIL: $count requests logged, expected $expected.</p>" >>$strfile
933 fail=`expr $fail + 1`
934 else
935 echo "PASS: $count requests logged."
936 echo " <p>PASS: $count requests logged.</p>" >>$strfile
937 fi
938
939 # Did CUPS-Get-Default get logged?
940 if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
941 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
942 echo " <p>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</p>" >>$strfile
943 echo " <pre>" >>$strfile
944 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
945 echo " </pre>" >>$strfile
946 fail=`expr $fail + 1`
947 else
948 echo "PASS: CUPS-Get-Default not logged."
949 echo " <p>PASS: CUPS-Get-Default not logged.</p>" >>$strfile
950 fi
951
952 # Emergency log messages
953 count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
954 if test $count != 0; then
955 echo "FAIL: $count emergency messages, expected 0."
956 $GREP '^X ' $BASE/log/error_log
957 echo " <p>FAIL: $count emergency messages, expected 0.</p>" >>$strfile
958 echo " <pre>" >>$strfile
959 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
960 echo " </pre>" >>$strfile
961 fail=`expr $fail + 1`
962 else
963 echo "PASS: $count emergency messages."
964 echo " <p>PASS: $count emergency messages.</p>" >>$strfile
965 fi
966
967 # Alert log messages
968 count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
969 if test $count != 0; then
970 echo "FAIL: $count alert messages, expected 0."
971 $GREP '^A ' $BASE/log/error_log
972 echo " <p>FAIL: $count alert messages, expected 0.</p>" >>$strfile
973 echo " <pre>" >>$strfile
974 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
975 echo " </pre>" >>$strfile
976 fail=`expr $fail + 1`
977 else
978 echo "PASS: $count alert messages."
979 echo " <p>PASS: $count alert messages.</p>" >>$strfile
980 fi
981
982 # Critical log messages
983 count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
984 if test $count != 0; then
985 echo "FAIL: $count critical messages, expected 0."
986 $GREP '^C ' $BASE/log/error_log
987 echo " <p>FAIL: $count critical messages, expected 0.</p>" >>$strfile
988 echo " <pre>" >>$strfile
989 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
990 echo " </pre>" >>$strfile
991 fail=`expr $fail + 1`
992 else
993 echo "PASS: $count critical messages."
994 echo " <p>PASS: $count critical messages.</p>" >>$strfile
995 fi
996
997 # Error log messages
998 count=`$GREP '^E ' $BASE/log/error_log | $GREP -v 'Unknown default SystemGroup' | wc -l | awk '{print $1}'`
999 if test $count != 33; then
1000 echo "FAIL: $count error messages, expected 33."
1001 $GREP '^E ' $BASE/log/error_log
1002 echo " <p>FAIL: $count error messages, expected 33.</p>" >>$strfile
1003 echo " <pre>" >>$strfile
1004 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1005 echo " </pre>" >>$strfile
1006 fail=`expr $fail + 1`
1007 else
1008 echo "PASS: $count error messages."
1009 echo " <p>PASS: $count error messages.</p>" >>$strfile
1010 fi
1011
1012 # Warning log messages
1013 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
1014 if test $count != 8; then
1015 echo "FAIL: $count warning messages, expected 8."
1016 $GREP '^W ' $BASE/log/error_log
1017 echo " <p>FAIL: $count warning messages, expected 8.</p>" >>$strfile
1018 echo " <pre>" >>$strfile
1019 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1020 echo " </pre>" >>$strfile
1021 fail=`expr $fail + 1`
1022 else
1023 echo "PASS: $count warning messages."
1024 echo " <p>PASS: $count warning messages.</p>" >>$strfile
1025 fi
1026
1027 # Notice log messages
1028 count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1029 if test $count != 0; then
1030 echo "FAIL: $count notice messages, expected 0."
1031 $GREP '^N ' $BASE/log/error_log
1032 echo " <p>FAIL: $count notice messages, expected 0.</p>" >>$strfile
1033 echo " <pre>" >>$strfile
1034 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1035 echo " </pre>" >>$strfile
1036 fail=`expr $fail + 1`
1037 else
1038 echo "PASS: $count notice messages."
1039 echo " <p>PASS: $count notice messages.</p>" >>$strfile
1040 fi
1041
1042 # Info log messages
1043 count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1044 if test $count = 0; then
1045 echo "FAIL: $count info messages, expected more than 0."
1046 echo " <p>FAIL: $count info messages, expected more than 0.</p>" >>$strfile
1047 fail=`expr $fail + 1`
1048 else
1049 echo "PASS: $count info messages."
1050 echo " <p>PASS: $count info messages.</p>" >>$strfile
1051 fi
1052
1053 # Debug 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 debug messages, expected more than 0."
1057 echo " <p>FAIL: $count debug messages, expected more than 0.</p>" >>$strfile
1058 fail=`expr $fail + 1`
1059 else
1060 echo "PASS: $count debug messages."
1061 echo " <p>PASS: $count debug messages.</p>" >>$strfile
1062 fi
1063
1064 # Debug2 log messages
1065 count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1066 if test $count = 0; then
1067 echo "FAIL: $count debug2 messages, expected more than 0."
1068 echo " <p>FAIL: $count debug2 messages, expected more than 0.</p>" >>$strfile
1069 fail=`expr $fail + 1`
1070 else
1071 echo "PASS: $count debug2 messages."
1072 echo " <p>PASS: $count debug2 messages.</p>" >>$strfile
1073 fi
1074
1075 #
1076 # Log files...
1077 #
1078
1079 echo " <h1><a name='LOGS'>4 - Log Files</a></h1>" >>$strfile
1080
1081 for file in $BASE/log/*_log; do
1082 baselog=`basename $file`
1083
1084 echo " <h2><a name=\"$baselog\">$baselog</a></h2>" >>$strfile
1085 case $baselog in
1086 error_log)
1087 echo " <blockquote>Note: debug2 messages have been filtered out of the HTML report.</blockquote>" >>$strfile
1088 echo " <pre>" >>$strfile
1089 $GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1090 echo " </pre>" >>$strfile
1091 ;;
1092
1093 *)
1094 echo " <pre>" >>$strfile
1095 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $file >>$strfile
1096 echo " </pre>" >>$strfile
1097 ;;
1098 esac
1099 done
1100
1101 #
1102 # Format the reports and tell the user where to find them...
1103 #
1104
1105 cat str-trailer.html >>$strfile
1106
1107 echo ""
1108 for file in $BASE/log/*_log; do
1109 baselog=`basename $file`
1110 cp $file $baselog-$date-$user
1111 echo "Copied log file \"$baselog-$date-$user\" to test directory."
1112 done
1113 cp $strfile .
1114 echo "Copied report file \"cups-str-$date-$user.html\" to test directory."
1115
1116 # Clean out old failure log files after 1 week...
1117 find . -name \*_log-\*-$user -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old log file \"" substr($1,3) "\" from test directory."}'
1118 find . -name cups-str-\*-$user.html -a -mtime +7 -print -exec rm -f '{}' \; | awk '{print "Removed old report file \"" $1 "\" from test directory."}'
1119
1120 echo ""
1121
1122 if test $fail != 0; then
1123 echo "$fail tests failed."
1124 exit 1
1125 else
1126 echo "All tests were successful."
1127 fi