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