]> git.ipfire.org Git - thirdparty/cups.git/blame - test/run-stp-tests.sh
Import CUPS v2.0.1
[thirdparty/cups.git] / test / run-stp-tests.sh
CommitLineData
ef416fc2 1#!/bin/sh
2#
86243a75 3# "$Id: run-stp-tests.sh 12248 2014-11-12 16:32:57Z msweet $"
ef416fc2 4#
1a18c85c
MS
5# Perform the complete set of IPP compliance tests specified in the
6# CUPS Software Test Plan.
ef416fc2 7#
1a18c85c
MS
8# Copyright 2007-2014 by Apple Inc.
9# Copyright 1997-2007 by Easy Software Products, all rights reserved.
ef416fc2 10#
1a18c85c
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`
1a18c85c
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
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*)
b9367124 234 VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes"
a2326b5b
MS
235 if test `uname` = Darwin; then
236 VALGRIND="$VALGRIND --dsymutil=yes"
237 fi
238 export VALGRIND
1a18c85c 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*)
1a18c85c
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)
1a18c85c
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
1a18c85c
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-`
1a18c85c
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
1a18c85c
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
4bdbabf7
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
1a18c85c 369 ln -s "$dir/$src" "$BASE/bin/filter/$dst"
4bdbabf7
MS
370 return
371 fi
372 done
373
374 # Source filter not present, create a dummy filter
375 case $format in
376 passthru)
1a18c85c 377 ln -s gziptoany "$BASE/bin/filter/$dst"
4bdbabf7
MS
378 ;;
379 pdf)
1a18c85c 380 cat >"$BASE/bin/filter/$dst" <<EOF
4bdbabf7
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
1a18c85c 391 chmod +x "$BASE/bin/filter/$dst"
4bdbabf7
MS
392 ;;
393 ps)
1a18c85c 394 cat >"$BASE/bin/filter/$dst" <<EOF
4bdbabf7
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
1a18c85c 405 chmod +x "$BASE/bin/filter/$dst"
4bdbabf7
MS
406 ;;
407 raster)
1a18c85c 408 cat >"$BASE/bin/filter/$dst" <<EOF
4bdbabf7
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
1a18c85c 419 chmod +x "$BASE/bin/filter/$dst"
4bdbabf7
MS
420 ;;
421 esac
422}
1a18c85c
MS
423
424ln -s $root/test/test.convs $BASE/share/mime
4bdbabf7 425
bc44d920 426if test `uname` = Darwin; then
4bdbabf7
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
4bdbabf7
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
1a18c85c 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
1a18c85c 462cat >$BASE/cupsd.conf <<EOF
a29fd7dd 463StrictConformance Yes
ef416fc2 464Browsing Off
a29fd7dd 465Listen localhost:$port
1a18c85c 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
1a18c85c
MS
484if test $testtype = 0; then
485 echo WebInterface yes >>$BASE/cupsd.conf
486fi
487
488cat >$BASE/cups-files.conf <<EOF
c41769ff
MS
489FileDevice yes
490Printcap
491User $user
1a18c85c
MS
492ServerRoot $BASE
493StateDir $BASE
494ServerBin $BASE/bin
495CacheDir $BASE/share
496DataDir $BASE/share
497FontPath $BASE/share/fonts
c41769ff 498DocumentRoot $root/doc
1a18c85c
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
1a18c85c 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
1a18c85c 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
1a18c85c 530 cp testps.ppd $BASE/ppd/test-$i.ppd
ef416fc2 531
532 i=`expr $i + 1`
533done
534
535while test $i -le $nprinters2; do
1a18c85c 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
1a18c85c
MS
551if test -f $BASE/printers.conf; then
552 cp $BASE/printers.conf $BASE/printers.conf.orig
426c6a59 553else
1a18c85c 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
1a18c85c
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
1a18c85c 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:"
1a18c85c 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
5d2cc5d3 626 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
b9faaae1 627else
1a18c85c 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...
1a18c85c 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"`
1a18c85c 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
5d2cc5d3
MS
769#
770# Log all allocations made by the scheduler...
771#
772if test `uname` = Darwin -a "x$VALGRIND" = x; then
773 malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
774fi
775
1a18c85c
MS
776#
777# Restart the server...
778#
779
780echo $ac_n "Performing restart test: $ac_c"
781echo "" >>$strfile
782echo "\"5.10-restart\":" >>$strfile
783
784kill -HUP $cupsd
785
786while true; do
5d2cc5d3
MS
787 sleep 10
788
1a18c85c
MS
789 running=`../systemv/lpstat -r 2>/dev/null`
790 if test "x$running" = "xscheduler is running"; then
791 break
792 fi
1a18c85c
MS
793done
794
795description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
796if test "x$description" != "xTest Printer 1"; then
797 echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
798 echo "FAIL (got '$description', expected 'Test Printer 1')"
799 fail=`expr $fail + 1`
800else
801 echo "Passed." >>$strfile
802 echo PASS
803fi
804
ef416fc2 805echo "</PRE>" >>$strfile
806
ef416fc2 807#
808# Stop the server...
809#
810
811kill $cupsd
812
813#
814# Append the log files for post-mortim...
815#
816
bd7854cb 817echo "<H1>3 - Log Files</H1>" >>$strfile
ef416fc2 818
839a51c8
MS
819#
820# Verify counts...
821#
822
823echo "Test Summary"
824echo ""
825echo "<H2>Summary</H2>" >>$strfile
826
ba55dc12 827# Job control files
1a18c85c 828count=`ls -1 $BASE/spool | wc -l`
ba55dc12
MS
829count=`expr $count - 1`
830if test $count != 0; then
831 echo "FAIL: $count job control files were not purged."
832 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
833 fail=`expr $fail + 1`
834else
835 echo "PASS: All job control files purged."
836 echo "<P>PASS: All job control files purged.</P>" >>$strfile
837fi
838
7a14d768 839# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
1a18c85c 840count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
969307f0
MS
841expected=`expr $pjobs \* 2 + 34`
842expected2=`expr $expected + 2`
843if test $count -lt $expected -a $count -gt $expected2; then
839a51c8
MS
844 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
845 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
846 fail=`expr $fail + 1`
847else
848 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
849 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
850fi
851
852# Paged printed on Test2
1a18c85c 853count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
839a51c8
MS
854expected=`expr $pjobs \* 2 + 3`
855if test $count != $expected; then
856 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
857 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
858 fail=`expr $fail + 1`
859else
860 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
861 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
862fi
863
a29fd7dd 864# Paged printed on Test3
1a18c85c 865count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
a29fd7dd
MS
866expected=2
867if test $count != $expected; then
868 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
869 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
870 fail=`expr $fail + 1`
871else
872 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
873 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
874fi
875
e07d4801 876# Requests logged
1a18c85c 877count=`wc -l $BASE/log/access_log | awk '{print $1}'`
86243a75 878expected=`expr 37 + 18 + 29 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
e07d4801
MS
879if test $count != $expected; then
880 echo "FAIL: $count requests logged, expected $expected."
881 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
882 fail=`expr $fail + 1`
883else
884 echo "PASS: $count requests logged."
885 echo "<P>PASS: $count requests logged.</P>" >>$strfile
886fi
887
888# Did CUPS-Get-Default get logged?
1a18c85c 889if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
e07d4801
MS
890 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
891 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
892 echo "<PRE>" >>$strfile
1a18c85c 893 $GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
e07d4801
MS
894 echo "</PRE>" >>$strfile
895 fail=`expr $fail + 1`
896else
897 echo "PASS: CUPS-Get-Default not logged."
898 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
899fi
839a51c8
MS
900
901# Emergency log messages
1a18c85c 902count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
903if test $count != 0; then
904 echo "FAIL: $count emergency messages, expected 0."
1a18c85c 905 $GREP '^X ' $BASE/log/error_log
839a51c8
MS
906 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
907 echo "<PRE>" >>$strfile
1a18c85c 908 $GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
909 echo "</PRE>" >>$strfile
910 fail=`expr $fail + 1`
911else
912 echo "PASS: $count emergency messages."
913 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
914fi
915
916# Alert log messages
1a18c85c 917count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
918if test $count != 0; then
919 echo "FAIL: $count alert messages, expected 0."
1a18c85c 920 $GREP '^A ' $BASE/log/error_log
839a51c8
MS
921 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
922 echo "<PRE>" >>$strfile
1a18c85c 923 $GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
924 echo "</PRE>" >>$strfile
925 fail=`expr $fail + 1`
926else
927 echo "PASS: $count alert messages."
928 echo "<P>PASS: $count alert messages.</P>" >>$strfile
929fi
930
931# Critical log messages
1a18c85c 932count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
933if test $count != 0; then
934 echo "FAIL: $count critical messages, expected 0."
1a18c85c 935 $GREP '^C ' $BASE/log/error_log
839a51c8
MS
936 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
937 echo "<PRE>" >>$strfile
1a18c85c 938 $GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
939 echo "</PRE>" >>$strfile
940 fail=`expr $fail + 1`
941else
942 echo "PASS: $count critical messages."
943 echo "<P>PASS: $count critical messages.</P>" >>$strfile
944fi
945
946# Error log messages
1a18c85c 947count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
a29fd7dd
MS
948if test $count != 33; then
949 echo "FAIL: $count error messages, expected 33."
1a18c85c 950 $GREP '^E ' $BASE/log/error_log
a29fd7dd 951 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
839a51c8 952 echo "<PRE>" >>$strfile
1a18c85c 953 $GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
954 echo "</PRE>" >>$strfile
955 fail=`expr $fail + 1`
956else
957 echo "PASS: $count error messages."
958 echo "<P>PASS: $count error messages.</P>" >>$strfile
959fi
960
961# Warning log messages
1a18c85c
MS
962count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
963if test $count != 18; then
964 echo "FAIL: $count warning messages, expected 18."
965 $GREP '^W ' $BASE/log/error_log
966 echo "<P>FAIL: $count warning messages, expected 18.</P>" >>$strfile
839a51c8 967 echo "<PRE>" >>$strfile
1a18c85c 968 $GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
969 echo "</PRE>" >>$strfile
970 fail=`expr $fail + 1`
971else
972 echo "PASS: $count warning messages."
973 echo "<P>PASS: $count warning messages.</P>" >>$strfile
974fi
975
976# Notice log messages
1a18c85c 977count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
978if test $count != 0; then
979 echo "FAIL: $count notice messages, expected 0."
1a18c85c 980 $GREP '^N ' $BASE/log/error_log
839a51c8
MS
981 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
982 echo "<PRE>" >>$strfile
1a18c85c 983 $GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
839a51c8
MS
984 echo "</PRE>" >>$strfile
985 fail=`expr $fail + 1`
986else
987 echo "PASS: $count notice messages."
988 echo "<P>PASS: $count notice messages.</P>" >>$strfile
989fi
990
991# Info log messages
1a18c85c 992count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
993if test $count = 0; then
994 echo "FAIL: $count info messages, expected more than 0."
995 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
996 fail=`expr $fail + 1`
997else
998 echo "PASS: $count info messages."
999 echo "<P>PASS: $count info messages.</P>" >>$strfile
1000fi
1001
1002# Debug log messages
1a18c85c 1003count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
839a51c8
MS
1004if test $count = 0; then
1005 echo "FAIL: $count debug messages, expected more than 0."
1006 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
1007 fail=`expr $fail + 1`
1008else
1009 echo "PASS: $count debug messages."
1010 echo "<P>PASS: $count debug messages.</P>" >>$strfile
1011fi
1012
1013# Debug2 log messages
1a18c85c 1014count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
7a14d768
MS
1015if test $count = 0; then
1016 echo "FAIL: $count debug2 messages, expected more than 0."
1017 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
839a51c8
MS
1018 fail=`expr $fail + 1`
1019else
1020 echo "PASS: $count debug2 messages."
1021 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
1022fi
1023
1024# Log files...
ef416fc2 1025echo "<H2>access_log</H2>" >>$strfile
1026echo "<PRE>" >>$strfile
1a18c85c 1027sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
ef416fc2 1028echo "</PRE>" >>$strfile
1029
1030echo "<H2>error_log</H2>" >>$strfile
1031echo "<PRE>" >>$strfile
1a18c85c 1032$GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
ef416fc2 1033echo "</PRE>" >>$strfile
1034
1035echo "<H2>page_log</H2>" >>$strfile
1036echo "<PRE>" >>$strfile
1a18c85c 1037sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
ef416fc2 1038echo "</PRE>" >>$strfile
1039
ef416fc2 1040#
1041# Format the reports and tell the user where to find them...
1042#
1043
ef416fc2 1044cat str-trailer.html >>$strfile
1045
ef416fc2 1046echo ""
1047
1048if test $fail != 0; then
1049 echo "$fail tests failed."
1a18c85c 1050 cp $BASE/log/error_log error_log-$date-$user
dd1abb6b 1051 cp $strfile .
ef416fc2 1052else
1053 echo "All tests were successful."
1054fi
1055
1a18c85c 1056echo "Log files can be found in $BASE/log."
839a51c8 1057echo "A HTML report was created in $strfile."
ef416fc2 1058echo ""
1059
db0bd74a 1060if test $fail != 0; then
dd1abb6b
MS
1061 echo "Copies of the error_log and `basename $strfile` files are in"
1062 echo "`pwd`."
1063 echo ""
1064
db0bd74a
MS
1065 exit 1
1066fi
1067
ef416fc2 1068#
86243a75 1069# End of "$Id: run-stp-tests.sh 12248 2014-11-12 16:32:57Z msweet $"
ef416fc2 1070#