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