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