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