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