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