]> git.ipfire.org Git - thirdparty/cups.git/blame - test/run-stp-tests.sh
Update software for stable draft of IPP Everywhere Printer Self-Certification
[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#
61c9d9f8 8# Copyright 2007-2015 by Apple Inc.
8fe0183a 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"
6a638e32 136 testtype="1"
ef416fc2 137 ;;
138esac
139
140#
141# See if we want to do SSL testing...
142#
143
144echo ""
145echo "Now you can choose whether to create a SSL/TLS encryption key and"
146echo "certificate for testing; these tests currently require the OpenSSL"
147echo "tools:"
148echo ""
149echo "0 - Do not do SSL/TLS encryption tests"
411affcf 150echo "1 - Test but do not require encryption"
151echo "2 - Test and require encryption"
ef416fc2 152echo ""
bd7854cb 153echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
ef416fc2 154
a74454a7 155if test $# -gt 0; then
156 ssltype=$1
157 shift
158else
159 read ssltype
160fi
bd7854cb 161echo ""
ef416fc2 162
163case "$ssltype" in
411affcf 164 1)
165 echo "Will test but not require encryption (1)"
166 ;;
167 2)
168 echo "Will test and require encryption (2)"
ef416fc2 169 ;;
ef416fc2 170 *)
411affcf 171 echo "Not using SSL/TLS (0)"
ef416fc2 172 ssltype=0
173 ;;
174esac
175
176#
177# Information for the server/tests...
178#
179
e1d6a774 180user="$USER"
181if test -z "$user"; then
182 if test -x /usr/ucb/whoami; then
183 user=`/usr/ucb/whoami`
184 else
185 user=`whoami`
186 fi
187
188 if test -z "$user"; then
189 user="unknown"
190 fi
191fi
192
95dd8876 193port="${CUPS_TESTPORT:=8631}"
ef416fc2 194cwd=`pwd`
195root=`dirname $cwd`
8fe0183a
MS
196CUPS_TESTROOT="$root"; export CUPS_TESTROOT
197
95dd8876
MS
198BASE="${CUPS_TESTBASE:=}"
199if test -z "$BASE"; then
200 if test -d /private/tmp; then
201 BASE=/private/tmp/cups-$user
202 else
203 BASE=/tmp/cups-$user
204 fi
8fe0183a 205fi
2a8db0cd 206export BASE
ef416fc2 207
208#
209# Make sure that the LPDEST and PRINTER environment variables are
210# not included in the environment that is passed to the tests. These
211# will usually cause tests to fail erroneously...
212#
213
634763e8
MS
214unset LPDEST
215unset PRINTER
ef416fc2 216
217#
218# See if we want to use valgrind...
219#
220
221echo ""
222echo "This test script can use the Valgrind software from:"
223echo ""
224echo " http://developer.kde.org/~sewardj/"
225echo ""
bd7854cb 226echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
ef416fc2 227
a74454a7 228if test $# -gt 0; then
229 usevalgrind=$1
230 shift
231else
232 read usevalgrind
233fi
bd7854cb 234echo ""
ef416fc2 235
236case "$usevalgrind" in
237 Y* | y*)
484798d8 238 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
a2326b5b
MS
239 if test `uname` = Darwin; then
240 VALGRIND="$VALGRIND --dsymutil=yes"
241 fi
242 export VALGRIND
8fe0183a 243 echo "Using Valgrind; log files can be found in $BASE/log..."
ef416fc2 244 ;;
245
246 *)
a2326b5b
MS
247 VALGRIND=""
248 export VALGRIND
ef416fc2 249 ;;
250esac
251
85dda01c
MS
252#
253# See if we want to do debug logging of the libraries...
254#
255
256echo ""
257echo "If CUPS was built with the --enable-debug-printfs configure option, you"
258echo "can enable debug logging of the libraries."
259echo ""
260echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
261
262if test $# -gt 0; then
263 usedebugprintfs=$1
264 shift
265else
266 read usedebugprintfs
267fi
268echo ""
269
270case "$usedebugprintfs" in
271 Y* | y*)
8fe0183a
MS
272 echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
273 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
85dda01c 274 CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
a2326b5b 275 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
85dda01c
MS
276 ;;
277
278 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
8fe0183a
MS
279 echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
280 CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
c41769ff 281 CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
a2326b5b 282 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
85dda01c
MS
283 ;;
284
285 *)
286 ;;
287esac
288
ef416fc2 289#
290# Start by creating temporary directories for the tests...
291#
292
a74454a7 293echo "Creating directories for test..."
294
8fe0183a
MS
295rm -rf $BASE
296mkdir $BASE
297mkdir $BASE/bin
298mkdir $BASE/bin/backend
299mkdir $BASE/bin/driver
300mkdir $BASE/bin/filter
301mkdir $BASE/certs
302mkdir $BASE/share
303mkdir $BASE/share/banners
304mkdir $BASE/share/drv
305mkdir $BASE/share/locale
4509bb49
MS
306for file in ../locale/cups_*.po; do
307 loc=`basename $file .po | cut -c 6-`
8fe0183a
MS
308 mkdir $BASE/share/locale/$loc
309 ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
310 ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
4509bb49 311done
8fe0183a
MS
312mkdir $BASE/share/mime
313mkdir $BASE/share/model
314mkdir $BASE/share/ppdc
315mkdir $BASE/interfaces
316mkdir $BASE/log
317mkdir $BASE/ppd
318mkdir $BASE/spool
319mkdir $BASE/spool/temp
320mkdir $BASE/ssl
321
322ln -s $root/backend/dnssd $BASE/bin/backend
323ln -s $root/backend/http $BASE/bin/backend
324ln -s $root/backend/ipp $BASE/bin/backend
325ln -s $root/backend/lpd $BASE/bin/backend
326ln -s $root/backend/mdns $BASE/bin/backend
327ln -s $root/backend/pseudo $BASE/bin/backend
328ln -s $root/backend/snmp $BASE/bin/backend
329ln -s $root/backend/socket $BASE/bin/backend
330ln -s $root/backend/usb $BASE/bin/backend
331ln -s $root/cgi-bin $BASE/bin
332ln -s $root/monitor $BASE/bin
333ln -s $root/notifier $BASE/bin
334ln -s $root/scheduler $BASE/bin/daemon
335ln -s $root/filter/commandtops $BASE/bin/filter
336ln -s $root/filter/gziptoany $BASE/bin/filter
337ln -s $root/filter/pstops $BASE/bin/filter
338ln -s $root/filter/rastertoepson $BASE/bin/filter
339ln -s $root/filter/rastertohp $BASE/bin/filter
340ln -s $root/filter/rastertolabel $BASE/bin/filter
341ln -s $root/filter/rastertopwg $BASE/bin/filter
1d58a957
MS
342cat >$BASE/share/banners/standard <<EOF
343 ==== Cover Page ====
8fe0183a 344
1d58a957
MS
345
346 Job: {?printer-name}-{?job-id}
347 Owner: {?job-originating-user-name}
348 Name: {?job-name}
349 Pages: {?job-impressions}
350
351
352 ==== Cover Page ====
353EOF
354cat >$BASE/share/banners/classified <<EOF
355 ==== Classified - Do Not Disclose ====
356
357
358 Job: {?printer-name}-{?job-id}
359 Owner: {?job-originating-user-name}
360 Name: {?job-name}
361 Pages: {?job-impressions}
362
363
364 ==== Classified - Do Not Disclose ====
365EOF
8fe0183a
MS
366ln -s $root/data $BASE/share
367ln -s $root/ppdc/sample.drv $BASE/share/drv
368ln -s $root/conf/mime.types $BASE/share/mime
369ln -s $root/conf/mime.convs $BASE/share/mime
370ln -s $root/data/*.h $BASE/share/ppdc
371ln -s $root/data/*.defs $BASE/share/ppdc
372ln -s $root/templates $BASE/share
ef416fc2 373
bc44d920 374#
f3c17241 375# Local filters and configuration files...
bc44d920 376#
377
79a784c4
MS
378instfilter() {
379 # instfilter src dst format
380 #
381 # See if the filter exists in a standard location; if so, make a
382 # symlink, otherwise create a dummy script for the specified format.
383 #
384 src="$1"
385 dst="$2"
386 format="$3"
387
95dd8876 388 for dir in /usr/local/libexec/cups/filter /usr/libexec/cups/filter /usr/lib/cups/filter; do
79a784c4 389 if test -x "$dir/$src"; then
8fe0183a 390 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
79a784c4
MS
391 return
392 fi
393 done
394
395 # Source filter not present, create a dummy filter
396 case $format in
397 passthru)
8fe0183a 398 ln -s gziptoany "$BASE/bin/filter/$dst"
79a784c4
MS
399 ;;
400 pdf)
8fe0183a 401 cat >"$BASE/bin/filter/$dst" <<EOF
79a784c4 402#!/bin/sh
e7061482
MS
403trap "" TERM
404trap "" PIPE
f0cd6a7c 405gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
79a784c4
MS
406case "\$5" in
407 *media=a4* | *media=iso_a4* | *PageSize=A4*)
da5f55b5 408 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.pdf"
79a784c4
MS
409 ;;
410 *)
da5f55b5 411 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.pdf"
79a784c4
MS
412 ;;
413esac
414EOF
8fe0183a 415 chmod +x "$BASE/bin/filter/$dst"
79a784c4
MS
416 ;;
417 ps)
8fe0183a 418 cat >"$BASE/bin/filter/$dst" <<EOF
79a784c4 419#!/bin/sh
e7061482
MS
420trap "" TERM
421trap "" PIPE
f0cd6a7c 422gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
79a784c4
MS
423case "\$5" in
424 *media=a4* | *media=iso_a4* | *PageSize=A4*)
da5f55b5 425 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4.ps"
79a784c4
MS
426 ;;
427 *)
da5f55b5 428 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter.ps"
79a784c4
MS
429 ;;
430esac
431EOF
8fe0183a 432 chmod +x "$BASE/bin/filter/$dst"
79a784c4
MS
433 ;;
434 raster)
8fe0183a 435 cat >"$BASE/bin/filter/$dst" <<EOF
79a784c4 436#!/bin/sh
e7061482
MS
437trap "" TERM
438trap "" PIPE
f0cd6a7c 439gziptoany "$1" "$2" "$3" "$4" "$5" \$6 >/dev/null
79a784c4
MS
440case "\$5" in
441 *media=a4* | *media=iso_a4* | *PageSize=A4*)
da5f55b5 442 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-a4-300-black-1.pwg.gz"
79a784c4
MS
443 ;;
444 *)
da5f55b5 445 gziptoany "$1" "$2" "$3" "$4" "$5" "$root/test/onepage-letter-300-black-1.pwg.gz"
79a784c4
MS
446 ;;
447esac
448EOF
8fe0183a 449 chmod +x "$BASE/bin/filter/$dst"
79a784c4
MS
450 ;;
451 esac
452}
72d05bc9 453
8fe0183a 454ln -s $root/test/test.convs $BASE/share/mime
79a784c4 455
bc44d920 456if test `uname` = Darwin; then
79a784c4
MS
457 instfilter cgimagetopdf imagetopdf pdf
458 instfilter cgpdftopdf pdftopdf passthru
459 instfilter cgpdftops pdftops ps
460 instfilter cgpdftoraster pdftoraster raster
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}'`
726 strfile=$BASE/cups-str-2.1-r$rev-$user.html
727else
728 strfile=$BASE/cups-str-2.1-$date-$user.html
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
1115
ef416fc2 1116#
79a784c4 1117# End of "$Id$"
ef416fc2 1118#