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