]> git.ipfire.org Git - thirdparty/cups.git/blame - test/run-stp-tests.sh
Import experimental work-in-progress HTTP/2 branch
[thirdparty/cups.git] / test / run-stp-tests.sh
CommitLineData
ef416fc2 1#!/bin/sh
2#
354aadbe 3# "$Id: run-stp-tests.sh 13138 2016-03-15 14:59:54Z msweet $"
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
830cfed9 282 CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend|mime).*$'; 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
830cfed9 455ln -s $root/test/test.types $BASE/share/mime
79a784c4 456
bc44d920 457if test `uname` = Darwin; then
79a784c4
MS
458 instfilter cgimagetopdf imagetopdf pdf
459 instfilter cgpdftopdf pdftopdf passthru
460 instfilter cgpdftops pdftops ps
461 instfilter cgpdftoraster pdftoraster raster
830cfed9 462 instfilter cgpdftoraster pdftourf raster
79a784c4
MS
463 instfilter cgtexttopdf texttopdf pdf
464 instfilter pstocupsraster pstoraster raster
839a51c8 465else
79a784c4
MS
466 instfilter imagetopdf imagetopdf pdf
467 instfilter pdftopdf pdftopdf passthru
468 instfilter pdftops pdftops ps
469 instfilter pdftoraster pdftoraster raster
470 instfilter pstoraster pstoraster raster
471 instfilter texttopdf texttopdf pdf
472
473 if test -d /usr/share/cups/charsets; then
8fe0183a 474 ln -s /usr/share/cups/charsets $BASE/share
5a9febac 475 fi
bc44d920 476fi
477
ef416fc2 478#
479# Then create the necessary config files...
480#
481
a74454a7 482echo "Creating cupsd.conf for test..."
483
ef416fc2 484if test $ssltype = 2; then
485 encryption="Encryption Required"
486else
487 encryption=""
488fi
489
8fe0183a 490cat >$BASE/cupsd.conf <<EOF
a29fd7dd 491StrictConformance Yes
ef416fc2 492Browsing Off
a29fd7dd 493Listen localhost:$port
8fe0183a 494Listen $BASE/sock
4509bb49 495PassEnv LOCALEDIR
85dda01c 496PassEnv DYLD_INSERT_LIBRARIES
52f6f666 497MaxSubscriptions 3
ef416fc2 498MaxLogSize 0
e07d4801 499AccessLogLevel actions
766a8229 500LogLevel $loglevel
b9faaae1 501LogTimeFormat usecs
ef416fc2 502PreserveJobHistory Yes
237b42e9 503PreserveJobFiles 5m
ef416fc2 504<Policy default>
505<Limit All>
a29fd7dd 506Order Allow,Deny
ef416fc2 507$encryption
508</Limit>
509</Policy>
510EOF
511
72d05bc9 512if test $testtype = 0; then
8fe0183a 513 echo WebInterface yes >>$BASE/cupsd.conf
72d05bc9
MS
514fi
515
8fe0183a 516cat >$BASE/cups-files.conf <<EOF
c41769ff
MS
517FileDevice yes
518Printcap
519User $user
8fe0183a
MS
520ServerRoot $BASE
521StateDir $BASE
522ServerBin $BASE/bin
523CacheDir $BASE/share
524DataDir $BASE/share
525FontPath $BASE/share/fonts
c41769ff 526DocumentRoot $root/doc
8fe0183a
MS
527RequestRoot $BASE/spool
528TempDir $BASE/spool/temp
529AccessLog $BASE/log/access_log
530ErrorLog $BASE/log/error_log
531PageLog $BASE/log/page_log
c41769ff
MS
532EOF
533
c1420c87 534if test $ssltype != 0 -a `uname` = Darwin; then
8fe0183a 535 echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
c1420c87
MS
536fi
537
ef416fc2 538#
75bd9771 539# Setup lots of test queues - half with PPD files, half without...
ef416fc2 540#
541
a74454a7 542echo "Creating printers.conf for test..."
543
ef416fc2 544i=1
545while test $i -le $nprinters1; do
8fe0183a 546 cat >>$BASE/printers.conf <<EOF
ef416fc2 547<Printer test-$i>
548Accepting Yes
549DeviceURI file:/dev/null
550Info Test PS printer $i
551JobSheets none none
552Location CUPS test suite
553State Idle
554StateMessage Printer $1 is idle.
555</Printer>
556EOF
557
8fe0183a 558 cp testps.ppd $BASE/ppd/test-$i.ppd
ef416fc2 559
560 i=`expr $i + 1`
561done
562
563while test $i -le $nprinters2; do
8fe0183a 564 cat >>$BASE/printers.conf <<EOF
ef416fc2 565<Printer test-$i>
566Accepting Yes
567DeviceURI file:/dev/null
568Info Test raw printer $i
569JobSheets none none
570Location CUPS test suite
571State Idle
572StateMessage Printer $1 is idle.
573</Printer>
574EOF
575
576 i=`expr $i + 1`
577done
578
8fe0183a
MS
579if test -f $BASE/printers.conf; then
580 cp $BASE/printers.conf $BASE/printers.conf.orig
426c6a59 581else
8fe0183a 582 touch $BASE/printers.conf.orig
426c6a59 583fi
ef416fc2 584
ef416fc2 585#
586# Setup the paths...
587#
588
a74454a7 589echo "Setting up environment variables for test..."
590
ef416fc2 591if test "x$LD_LIBRARY_PATH" = x; then
82cc1f9a 592 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
ef416fc2 593else
82cc1f9a 594 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
ef416fc2 595fi
596
597export LD_LIBRARY_PATH
598
83e08001 599LD_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
600if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
601 LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
602fi
ef416fc2 603export LD_PRELOAD
604
605if test "x$DYLD_LIBRARY_PATH" = x; then
82cc1f9a 606 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
ef416fc2 607else
82cc1f9a 608 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
ef416fc2 609fi
610
611export DYLD_LIBRARY_PATH
612
613if test "x$SHLIB_PATH" = x; then
82cc1f9a 614 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
ef416fc2 615else
82cc1f9a 616 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
ef416fc2 617fi
618
619export SHLIB_PATH
620
ef55b745 621CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
95dd8876 622CUPS_SERVER=localhost:$port; export CUPS_SERVER
8fe0183a
MS
623CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
624CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
625CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
626LOCALEDIR=$BASE/share/locale; export LOCALEDIR
ef416fc2 627
628#
629# Set a new home directory to avoid getting user options mixed in...
630#
631
8fe0183a 632HOME=$BASE
ef416fc2 633export HOME
634
f42414bf 635#
636# Force POSIX locale for tests...
637#
638
639LANG=C
640export LANG
641
0268488e
MS
642LC_MESSAGES=C
643export LC_MESSAGES
644
ef416fc2 645#
646# Start the server; run as foreground daemon in the background...
647#
648
649echo "Starting scheduler:"
8fe0183a 650echo " $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
ef416fc2 651echo ""
652
a2326b5b 653if test `uname` = Darwin -a "x$VALGRIND" = x; then
dc69e13a 654 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
b9faaae1 655else
8fe0183a 656 $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
b9faaae1
MS
657fi
658
ef416fc2 659cupsd=$!
660
ef416fc2 661if test "x$testtype" = x0; then
b19ccc9e 662 # Not running tests...
6f260d7d 663 echo "Scheduler is PID $cupsd and is listening on port $port."
ef416fc2 664 echo ""
b19ccc9e
MS
665
666 # Create a helper script to run programs with...
8fe0183a 667 runcups="$BASE/runcups"
b19ccc9e
MS
668
669 echo "#!/bin/sh" >$runcups
670 echo "# Helper script for running CUPS test instance." >>$runcups
671 echo "" >>$runcups
672 echo "# Set required environment variables..." >>$runcups
673 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
674 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
675 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
676 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
677 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
678 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
679 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
680 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
681 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
c41769ff
MS
682 if test "x$CUPS_DEBUG_LEVEL" != x; then
683 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
684 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
685 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
686 fi
b19ccc9e
MS
687 echo "" >>$runcups
688 echo "# Run command..." >>$runcups
689 echo "exec \"\$@\"" >>$runcups
690
691 chmod +x $runcups
692
693 echo "The $runcups helper script can be used to test programs"
694 echo "with the server."
ef416fc2 695 exit 0
696fi
697
a74454a7 698if test $argcount -eq 0; then
699 echo "Scheduler is PID $cupsd; run debugger now if you need to."
700 echo ""
701 echo $ac_n "Press ENTER to continue... $ac_c"
702 read junk
703else
704 echo "Scheduler is PID $cupsd."
705 sleep 2
706fi
ef416fc2 707
708IPP_PORT=$port; export IPP_PORT
709
710while true; do
711 running=`../systemv/lpstat -r 2>/dev/null`
712 if test "x$running" = "xscheduler is running"; then
713 break
714 fi
715
716 echo "Waiting for scheduler to become ready..."
717 sleep 10
718done
719
720#
721# Create the test report source file...
722#
723
dd1abb6b 724date=`date "+%Y-%m-%d"`
6015e919
MS
725
726if test -d $root/.svn; then
727 rev=`svn info . | grep Revision: | awk '{print $2}'`
6d7669cc 728 strfile=$BASE/cups-str-2.2-r$rev-$user.html
6015e919 729else
6d7669cc 730 strfile=$BASE/cups-str-2.2-$date-$user.html
6015e919 731fi
ef416fc2 732
733rm -f $strfile
734cat str-header.html >$strfile
735
736#
737# Run the IPP tests...
738#
739
a74454a7 740echo ""
ef416fc2 741echo "Running IPP compliance tests..."
742
87f8ade3 743echo "<H1><A NAME='IPP'>1 - IPP Compliance Tests</A></H1>" >>$strfile
ef416fc2 744echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
745echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
e1d6a774 746echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
ef416fc2 747echo "<PRE>" >>$strfile
748
749fail=0
a29fd7dd 750for file in 4*.test ipp-2.1.test; do
a2326b5b 751 echo $ac_n "Performing $file: $ac_c"
ef416fc2 752 echo "" >>$strfile
753
a29fd7dd
MS
754 if test $file = ipp-2.1.test; then
755 uri="ipp://localhost:$port/printers/Test1"
756 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
757 else
758 uri="ipp://localhost:$port/printers"
759 options=""
760 fi
761 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
ef416fc2 762 status=$?
763
764 if test $status != 0; then
a2326b5b 765 echo FAIL
ef416fc2 766 fail=`expr $fail + 1`
a2326b5b
MS
767 else
768 echo PASS
ef416fc2 769 fi
770done
771
772echo "</PRE>" >>$strfile
773
774#
775# Run the command tests...
776#
777
a74454a7 778echo ""
ef416fc2 779echo "Running command tests..."
780
87f8ade3 781echo "<H1><A NAME='COMMAND'>2 - Command Tests</A></H1>" >>$strfile
ef416fc2 782echo "<P>This section provides the results to the command tests" >>$strfile
783echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
dd1abb6b 784echo $date by $user on `hostname`. >>$strfile
ef416fc2 785echo "<PRE>" >>$strfile
786
787for file in 5*.sh; do
a2326b5b 788 echo $ac_n "Performing $file: $ac_c"
ef416fc2 789 echo "" >>$strfile
790 echo "\"$file\":" >>$strfile
791
a2326b5b 792 sh $file $pjobs $pprinters >> $strfile
ef416fc2 793 status=$?
794
795 if test $status != 0; then
a2326b5b 796 echo FAIL
ef416fc2 797 fail=`expr $fail + 1`
a2326b5b
MS
798 else
799 echo PASS
ef416fc2 800 fi
801done
802
8e8d3a71
MS
803#
804# Log all allocations made by the scheduler...
805#
806if test `uname` = Darwin -a "x$VALGRIND" = x; then
807 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
808fi
809
698fa0aa
MS
810#
811# Restart the server...
812#
813
814echo $ac_n "Performing restart test: $ac_c"
815echo "" >>$strfile
816echo "\"5.10-restart\":" >>$strfile
817
818kill -HUP $cupsd
819
820while true; do
8e8d3a71
MS
821 sleep 10
822
698fa0aa
MS
823 running=`../systemv/lpstat -r 2>/dev/null`
824 if test "x$running" = "xscheduler is running"; then
825 break
826 fi
698fa0aa
MS
827done
828
e0f0a3d5 829description="`../systemv/lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
698fa0aa
MS
830if test "x$description" != "xTest Printer 1"; then
831 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
832 echo "FAIL (got '$description', expected 'Test Printer 1')"
833 fail=`expr $fail + 1`
834else
835 echo "Passed." >>$strfile
836 echo PASS
837fi
838
ef416fc2 839echo "</PRE>" >>$strfile
840
ef416fc2 841#
842# Stop the server...
843#
844
845kill $cupsd
87f8ade3
MS
846wait $cupsd
847cupsdstatus=$?
ef416fc2 848
839a51c8
MS
849#
850# Verify counts...
851#
852
853echo "Test Summary"
854echo ""
87f8ade3
MS
855echo "<H1><A NAME='SUMMARY'>3 - Test Summary</A></H1>" >>$strfile
856
857if test $cupsdstatus != 0; then
858 echo "FAIL: cupsd failed with exit status $cupsdstatus."
859 echo "<p>FAIL: cupsd failed with exit status $cupsdstatus.</p>" >>$strfile
860 fail=`expr $fail + 1`
861else
862 echo "PASS: cupsd exited with no errors."
863 echo "<p>PASS: cupsd exited with no errors.</p>" >>$strfile
864fi
839a51c8 865
ba55dc12 866# Job control files
8fe0183a 867count=`ls -1 $BASE/spool | wc -l`
ba55dc12
MS
868count=`expr $count - 1`
869if test $count != 0; then
870 echo "FAIL: $count job control files were not purged."
871 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
872 fail=`expr $fail + 1`
873else
874 echo "PASS: All job control files purged."
875 echo "<P>PASS: All job control files purged.</P>" >>$strfile
876fi
877
7a14d768 878# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
8fe0183a 879count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
969307f0
MS
880expected=`expr $pjobs \* 2 + 34`
881expected2=`expr $expected + 2`
882if test $count -lt $expected -a $count -gt $expected2; then
839a51c8
MS
883 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
884 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
885 fail=`expr $fail + 1`
886else
887 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
888 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
889fi
890
891# Paged printed on Test2
8fe0183a 892count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
839a51c8
MS
893expected=`expr $pjobs \* 2 + 3`
894if test $count != $expected; then
895 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
896 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
897 fail=`expr $fail + 1`
898else
899 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
900 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
901fi
902
a29fd7dd 903# Paged printed on Test3
8fe0183a 904count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
a29fd7dd
MS
905expected=2
906if test $count != $expected; then
907 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
908 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
909 fail=`expr $fail + 1`
910else
911 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
912 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
913fi
914
e07d4801 915# Requests logged
8fe0183a 916count=`wc -l $BASE/log/access_log | awk '{print $1}'`
61c9d9f8 917expected=`expr 37 + 18 + 30 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
e07d4801
MS
918if test $count != $expected; then
919 echo "FAIL: $count requests logged, expected $expected."
920 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
921 fail=`expr $fail + 1`
922else
923 echo "PASS: $count requests logged."
924 echo "<P>PASS: $count requests logged.</P>" >>$strfile
925fi
926
927# Did CUPS-Get-Default get logged?
8fe0183a 928if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
e07d4801
MS
929 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
930 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
931 echo "<PRE>" >>$strfile
8fe0183a 932 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
e07d4801
MS
933 echo "</PRE>" >>$strfile
934 fail=`expr $fail + 1`
935else
936 echo "PASS: CUPS-Get-Default not logged."
937 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
938fi
839a51c8
MS
939
940# Emergency log messages
8fe0183a 941count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
942if test $count != 0; then
943 echo "FAIL: $count emergency messages, expected 0."
8fe0183a 944 $GREP '^X ' $BASE/log/error_log
839a51c8
MS
945 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
946 echo "<PRE>" >>$strfile
8fe0183a 947 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
948 echo "</PRE>" >>$strfile
949 fail=`expr $fail + 1`
950else
951 echo "PASS: $count emergency messages."
952 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
953fi
954
955# Alert log messages
8fe0183a 956count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
957if test $count != 0; then
958 echo "FAIL: $count alert messages, expected 0."
8fe0183a 959 $GREP '^A ' $BASE/log/error_log
839a51c8
MS
960 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
961 echo "<PRE>" >>$strfile
8fe0183a 962 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
963 echo "</PRE>" >>$strfile
964 fail=`expr $fail + 1`
965else
966 echo "PASS: $count alert messages."
967 echo "<P>PASS: $count alert messages.</P>" >>$strfile
968fi
969
970# Critical log messages
8fe0183a 971count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
972if test $count != 0; then
973 echo "FAIL: $count critical messages, expected 0."
8fe0183a 974 $GREP '^C ' $BASE/log/error_log
839a51c8
MS
975 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
976 echo "<PRE>" >>$strfile
8fe0183a 977 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
978 echo "</PRE>" >>$strfile
979 fail=`expr $fail + 1`
980else
981 echo "PASS: $count critical messages."
982 echo "<P>PASS: $count critical messages.</P>" >>$strfile
983fi
984
985# Error log messages
8fe0183a 986count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
a29fd7dd
MS
987if test $count != 33; then
988 echo "FAIL: $count error messages, expected 33."
8fe0183a 989 $GREP '^E ' $BASE/log/error_log
a29fd7dd 990 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
839a51c8 991 echo "<PRE>" >>$strfile
8fe0183a 992 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
993 echo "</PRE>" >>$strfile
994 fail=`expr $fail + 1`
995else
996 echo "PASS: $count error messages."
997 echo "<P>PASS: $count error messages.</P>" >>$strfile
998fi
999
1000# Warning log messages
8fe0183a 1001count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
3fc450cd 1002if test $count != 8; then
ea99768e 1003 echo "FAIL: $count warning messages, expected 8."
8fe0183a 1004 $GREP '^W ' $BASE/log/error_log
ea99768e 1005 echo "<P>FAIL: $count warning messages, expected 8.</P>" >>$strfile
839a51c8 1006 echo "<PRE>" >>$strfile
8fe0183a 1007 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
1008 echo "</PRE>" >>$strfile
1009 fail=`expr $fail + 1`
1010else
1011 echo "PASS: $count warning messages."
1012 echo "<P>PASS: $count warning messages.</P>" >>$strfile
1013fi
1014
1015# Notice log messages
8fe0183a 1016count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
1017if test $count != 0; then
1018 echo "FAIL: $count notice messages, expected 0."
8fe0183a 1019 $GREP '^N ' $BASE/log/error_log
839a51c8
MS
1020 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
1021 echo "<PRE>" >>$strfile
8fe0183a 1022 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
1023 echo "</PRE>" >>$strfile
1024 fail=`expr $fail + 1`
1025else
1026 echo "PASS: $count notice messages."
1027 echo "<P>PASS: $count notice messages.</P>" >>$strfile
1028fi
1029
1030# Info log messages
8fe0183a 1031count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
1032if test $count = 0; then
1033 echo "FAIL: $count info messages, expected more than 0."
1034 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
1035 fail=`expr $fail + 1`
1036else
1037 echo "PASS: $count info messages."
1038 echo "<P>PASS: $count info messages.</P>" >>$strfile
1039fi
1040
1041# Debug log messages
8fe0183a 1042count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
1043if test $count = 0; then
1044 echo "FAIL: $count debug messages, expected more than 0."
1045 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
1046 fail=`expr $fail + 1`
1047else
1048 echo "PASS: $count debug messages."
1049 echo "<P>PASS: $count debug messages.</P>" >>$strfile
1050fi
1051
1052# Debug2 log messages
8fe0183a 1053count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
7a14d768
MS
1054if test $count = 0; then
1055 echo "FAIL: $count debug2 messages, expected more than 0."
1056 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
839a51c8
MS
1057 fail=`expr $fail + 1`
1058else
1059 echo "PASS: $count debug2 messages."
1060 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
1061fi
1062
87f8ade3 1063#
839a51c8 1064# Log files...
87f8ade3
MS
1065#
1066
1067echo "<H1><A NAME='LOGS'>4 - Log Files</A></H1>" >>$strfile
1068
1069echo "<H2><A NAME='access_log'>access_log</A></H2>" >>$strfile
ef416fc2 1070echo "<PRE>" >>$strfile
8fe0183a 1071sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
ef416fc2 1072echo "</PRE>" >>$strfile
1073
87f8ade3 1074echo "<H2><A NAME='error_log'>error_log</A></H2>" >>$strfile
ef416fc2 1075echo "<PRE>" >>$strfile
8fe0183a 1076$GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
ef416fc2 1077echo "</PRE>" >>$strfile
1078
87f8ade3 1079echo "<H2><A NAME='page_log'>page_log</A></H2>" >>$strfile
ef416fc2 1080echo "<PRE>" >>$strfile
8fe0183a 1081sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
ef416fc2 1082echo "</PRE>" >>$strfile
1083
ef416fc2 1084#
1085# Format the reports and tell the user where to find them...
1086#
1087
ef416fc2 1088cat str-trailer.html >>$strfile
1089
ef416fc2 1090echo ""
1091
1092if test $fail != 0; then
1093 echo "$fail tests failed."
6015e919
MS
1094
1095 if test -d $root/.svn; then
1096 cp $BASE/log/error_log error_log-r$rev-$user
1097 else
1098 cp $BASE/log/error_log error_log-$date-$user
1099 fi
1100
dd1abb6b 1101 cp $strfile .
ef416fc2 1102else
1103 echo "All tests were successful."
1104fi
1105
8fe0183a 1106echo "Log files can be found in $BASE/log."
839a51c8 1107echo "A HTML report was created in $strfile."
ef416fc2 1108echo ""
1109
db0bd74a 1110if test $fail != 0; then
dd1abb6b
MS
1111 echo "Copies of the error_log and `basename $strfile` files are in"
1112 echo "`pwd`."
1113 echo ""
1114
db0bd74a
MS
1115 exit 1
1116fi
1117
ef416fc2 1118#
354aadbe 1119# End of "$Id: run-stp-tests.sh 13138 2016-03-15 14:59:54Z msweet $"
ef416fc2 1120#