]> git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
Merge changes from CUPS 1.7svn-r10710.
[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-2012 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 PassEnv LOCALEDIR
395 PassEnv DYLD_INSERT_LIBRARIES
396 MaxSubscriptions 3
397 MaxLogSize 0
398 AccessLogLevel actions
399 LogLevel debug2
400 LogTimeFormat usecs
401 PreserveJobHistory Yes
402 <Policy default>
403 <Limit All>
404 Order Allow,Deny
405 $encryption
406 </Limit>
407 </Policy>
408 EOF
409
410 cat >/tmp/cups-$user/cups-files.conf <<EOF
411 FileDevice yes
412 Printcap
413 User $user
414 ServerRoot /tmp/cups-$user
415 StateDir /tmp/cups-$user
416 ServerBin /tmp/cups-$user/bin
417 CacheDir /tmp/cups-$user/share
418 DataDir /tmp/cups-$user/share
419 FontPath /tmp/cups-$user/share/fonts
420 DocumentRoot $root/doc
421 RequestRoot /tmp/cups-$user/spool
422 TempDir /tmp/cups-$user/spool/temp
423 AccessLog /tmp/cups-$user/log/access_log
424 ErrorLog /tmp/cups-$user/log/error_log
425 PageLog /tmp/cups-$user/log/page_log
426 EOF
427
428 #
429 # Setup lots of test queues - half with PPD files, half without...
430 #
431
432 echo "Creating printers.conf for test..."
433
434 i=1
435 while test $i -le $nprinters1; do
436 cat >>/tmp/cups-$user/printers.conf <<EOF
437 <Printer test-$i>
438 Accepting Yes
439 DeviceURI file:/dev/null
440 Info Test PS printer $i
441 JobSheets none none
442 Location CUPS test suite
443 State Idle
444 StateMessage Printer $1 is idle.
445 </Printer>
446 EOF
447
448 cp testps.ppd /tmp/cups-$user/ppd/test-$i.ppd
449
450 i=`expr $i + 1`
451 done
452
453 while test $i -le $nprinters2; do
454 cat >>/tmp/cups-$user/printers.conf <<EOF
455 <Printer test-$i>
456 Accepting Yes
457 DeviceURI file:/dev/null
458 Info Test raw printer $i
459 JobSheets none none
460 Location CUPS test suite
461 State Idle
462 StateMessage Printer $1 is idle.
463 </Printer>
464 EOF
465
466 i=`expr $i + 1`
467 done
468
469 if test -f /tmp/cups-$user/printers.conf; then
470 cp /tmp/cups-$user/printers.conf /tmp/cups-$user/printers.conf.orig
471 else
472 touch /tmp/cups-$user/printers.conf.orig
473 fi
474
475 #
476 # Setup the paths...
477 #
478
479 echo "Setting up environment variables for test..."
480
481 if test "x$LD_LIBRARY_PATH" = x; then
482 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
483 else
484 LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
485 fi
486
487 export LD_LIBRARY_PATH
488
489 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"
490 if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
491 LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
492 fi
493 export LD_PRELOAD
494
495 if test "x$DYLD_LIBRARY_PATH" = x; then
496 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
497 else
498 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
499 fi
500
501 export DYLD_LIBRARY_PATH
502
503 if test "x$SHLIB_PATH" = x; then
504 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
505 else
506 SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
507 fi
508
509 export SHLIB_PATH
510
511 CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
512 CUPS_SERVER=localhost:8631; export CUPS_SERVER
513 CUPS_SERVERROOT=/tmp/cups-$user; export CUPS_SERVERROOT
514 CUPS_STATEDIR=/tmp/cups-$user; export CUPS_STATEDIR
515 CUPS_DATADIR=/tmp/cups-$user/share; export CUPS_DATADIR
516 LOCALEDIR=/tmp/cups-$user/share/locale; export LOCALEDIR
517
518 #
519 # Set a new home directory to avoid getting user options mixed in...
520 #
521
522 HOME=/tmp/cups-$user
523 export HOME
524
525 #
526 # Force POSIX locale for tests...
527 #
528
529 LANG=C
530 export LANG
531
532 LC_MESSAGES=C
533 export LC_MESSAGES
534
535 #
536 # Start the server; run as foreground daemon in the background...
537 #
538
539 echo "Starting scheduler:"
540 echo " $VALGRIND ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &"
541 echo ""
542
543 if test `uname` = Darwin -a "x$VALGRIND" = x; then
544 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
545 ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
546 else
547 $VALGRIND ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
548 fi
549
550 cupsd=$!
551
552 if test "x$testtype" = x0; then
553 # Not running tests...
554 echo "Scheduler is PID $cupsd and is listening on port 8631."
555 echo ""
556
557 # Create a helper script to run programs with...
558 runcups="/tmp/cups-$user/runcups"
559
560 echo "#!/bin/sh" >$runcups
561 echo "# Helper script for running CUPS test instance." >>$runcups
562 echo "" >>$runcups
563 echo "# Set required environment variables..." >>$runcups
564 echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
565 echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
566 echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
567 echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
568 echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
569 echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
570 echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
571 echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
572 echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
573 if test "x$CUPS_DEBUG_LEVEL" != x; then
574 echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
575 echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
576 echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
577 fi
578 echo "" >>$runcups
579 echo "# Run command..." >>$runcups
580 echo "exec \"\$@\"" >>$runcups
581
582 chmod +x $runcups
583
584 echo "The $runcups helper script can be used to test programs"
585 echo "with the server."
586 exit 0
587 fi
588
589 if test $argcount -eq 0; then
590 echo "Scheduler is PID $cupsd; run debugger now if you need to."
591 echo ""
592 echo $ac_n "Press ENTER to continue... $ac_c"
593 read junk
594 else
595 echo "Scheduler is PID $cupsd."
596 sleep 2
597 fi
598
599 IPP_PORT=$port; export IPP_PORT
600
601 while true; do
602 running=`../systemv/lpstat -r 2>/dev/null`
603 if test "x$running" = "xscheduler is running"; then
604 break
605 fi
606
607 echo "Waiting for scheduler to become ready..."
608 sleep 10
609 done
610
611 #
612 # Create the test report source file...
613 #
614
615 date=`date "+%Y-%m-%d"`
616 strfile=/tmp/cups-$user/cups-str-1.7-$date-$user.html
617
618 rm -f $strfile
619 cat str-header.html >$strfile
620
621 #
622 # Run the IPP tests...
623 #
624
625 echo ""
626 echo "Running IPP compliance tests..."
627
628 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
629 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
630 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
631 echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
632 echo "<PRE>" >>$strfile
633
634 fail=0
635 for file in 4*.test ipp-2.1.test; do
636 echo $ac_n "Performing $file: $ac_c"
637 echo "" >>$strfile
638
639 if test $file = ipp-2.1.test; then
640 uri="ipp://localhost:$port/printers/Test1"
641 options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
642 else
643 uri="ipp://localhost:$port/printers"
644 options=""
645 fi
646 $VALGRIND ./ipptool -tI $options $uri $file >> $strfile
647 status=$?
648
649 if test $status != 0; then
650 echo FAIL
651 fail=`expr $fail + 1`
652 else
653 echo PASS
654 fi
655 done
656
657 echo "</PRE>" >>$strfile
658
659 #
660 # Run the command tests...
661 #
662
663 echo ""
664 echo "Running command tests..."
665
666 echo "<H1>2 - Command Tests</H1>" >>$strfile
667 echo "<P>This section provides the results to the command tests" >>$strfile
668 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
669 echo $date by $user on `hostname`. >>$strfile
670 echo "<PRE>" >>$strfile
671
672 for file in 5*.sh; do
673 echo $ac_n "Performing $file: $ac_c"
674 echo "" >>$strfile
675 echo "\"$file\":" >>$strfile
676
677 sh $file $pjobs $pprinters >> $strfile
678 status=$?
679
680 if test $status != 0; then
681 echo FAIL
682 fail=`expr $fail + 1`
683 else
684 echo PASS
685 fi
686 done
687
688 echo "</PRE>" >>$strfile
689
690 #
691 # Stop the server...
692 #
693
694 kill $cupsd
695
696 #
697 # Append the log files for post-mortim...
698 #
699
700 echo "<H1>3 - Log Files</H1>" >>$strfile
701
702 #
703 # Verify counts...
704 #
705
706 echo "Test Summary"
707 echo ""
708 echo "<H2>Summary</H2>" >>$strfile
709
710 # Job control files
711 count=`ls -1 /tmp/cups-$user/spool | wc -l`
712 count=`expr $count - 1`
713 if test $count != 0; then
714 echo "FAIL: $count job control files were not purged."
715 echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
716 fail=`expr $fail + 1`
717 else
718 echo "PASS: All job control files purged."
719 echo "<P>PASS: All job control files purged.</P>" >>$strfile
720 fi
721
722 # Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
723 count=`$GREP '^Test1 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
724 expected=`expr $pjobs \* 2 + 34`
725 expected2=`expr $expected + 2`
726 if test $count -lt $expected -a $count -gt $expected2; then
727 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
728 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
729 fail=`expr $fail + 1`
730 else
731 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
732 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
733 fi
734
735 # Paged printed on Test2
736 count=`$GREP '^Test2 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
737 expected=`expr $pjobs \* 2 + 3`
738 if test $count != $expected; then
739 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
740 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
741 fail=`expr $fail + 1`
742 else
743 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
744 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
745 fi
746
747 # Paged printed on Test3
748 count=`$GREP '^Test3 ' /tmp/cups-$user/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
749 expected=2
750 if test $count != $expected; then
751 echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
752 echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
753 fail=`expr $fail + 1`
754 else
755 echo "PASS: Printer 'Test3' correctly produced $count page(s)."
756 echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
757 fi
758
759 # Requests logged
760 count=`wc -l /tmp/cups-$user/log/access_log | awk '{print $1}'`
761 expected=`expr 37 + 18 + 28 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
762 if test $count != $expected; then
763 echo "FAIL: $count requests logged, expected $expected."
764 echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
765 fail=`expr $fail + 1`
766 else
767 echo "PASS: $count requests logged."
768 echo "<P>PASS: $count requests logged.</P>" >>$strfile
769 fi
770
771 # Did CUPS-Get-Default get logged?
772 if $GREP -q CUPS-Get-Default /tmp/cups-$user/log/access_log; then
773 echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
774 echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
775 echo "<PRE>" >>$strfile
776 $GREP CUPS-Get-Default /tmp/cups-$user/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
777 echo "</PRE>" >>$strfile
778 fail=`expr $fail + 1`
779 else
780 echo "PASS: CUPS-Get-Default not logged."
781 echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
782 fi
783
784 # Emergency log messages
785 count=`$GREP '^X ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
786 if test $count != 0; then
787 echo "FAIL: $count emergency messages, expected 0."
788 $GREP '^X ' /tmp/cups-$user/log/error_log
789 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
790 echo "<PRE>" >>$strfile
791 $GREP '^X ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
792 echo "</PRE>" >>$strfile
793 fail=`expr $fail + 1`
794 else
795 echo "PASS: $count emergency messages."
796 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
797 fi
798
799 # Alert log messages
800 count=`$GREP '^A ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
801 if test $count != 0; then
802 echo "FAIL: $count alert messages, expected 0."
803 $GREP '^A ' /tmp/cups-$user/log/error_log
804 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
805 echo "<PRE>" >>$strfile
806 $GREP '^A ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
807 echo "</PRE>" >>$strfile
808 fail=`expr $fail + 1`
809 else
810 echo "PASS: $count alert messages."
811 echo "<P>PASS: $count alert messages.</P>" >>$strfile
812 fi
813
814 # Critical log messages
815 count=`$GREP '^C ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
816 if test $count != 0; then
817 echo "FAIL: $count critical messages, expected 0."
818 $GREP '^C ' /tmp/cups-$user/log/error_log
819 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
820 echo "<PRE>" >>$strfile
821 $GREP '^C ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
822 echo "</PRE>" >>$strfile
823 fail=`expr $fail + 1`
824 else
825 echo "PASS: $count critical messages."
826 echo "<P>PASS: $count critical messages.</P>" >>$strfile
827 fi
828
829 # Error log messages
830 count=`$GREP '^E ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
831 if test $count != 33; then
832 echo "FAIL: $count error messages, expected 33."
833 $GREP '^E ' /tmp/cups-$user/log/error_log
834 echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
835 echo "<PRE>" >>$strfile
836 $GREP '^E ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
837 echo "</PRE>" >>$strfile
838 fail=`expr $fail + 1`
839 else
840 echo "PASS: $count error messages."
841 echo "<P>PASS: $count error messages.</P>" >>$strfile
842 fi
843
844 # Warning log messages
845 count=`$GREP '^W ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
846 if test $count != 9; then
847 echo "FAIL: $count warning messages, expected 9."
848 $GREP '^W ' /tmp/cups-$user/log/error_log
849 echo "<P>FAIL: $count warning messages, expected 9.</P>" >>$strfile
850 echo "<PRE>" >>$strfile
851 $GREP '^W ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
852 echo "</PRE>" >>$strfile
853 fail=`expr $fail + 1`
854 else
855 echo "PASS: $count warning messages."
856 echo "<P>PASS: $count warning messages.</P>" >>$strfile
857 fi
858
859 # Notice log messages
860 count=`$GREP '^N ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
861 if test $count != 0; then
862 echo "FAIL: $count notice messages, expected 0."
863 $GREP '^N ' /tmp/cups-$user/log/error_log
864 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
865 echo "<PRE>" >>$strfile
866 $GREP '^N ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
867 echo "</PRE>" >>$strfile
868 fail=`expr $fail + 1`
869 else
870 echo "PASS: $count notice messages."
871 echo "<P>PASS: $count notice messages.</P>" >>$strfile
872 fi
873
874 # Info log messages
875 count=`$GREP '^I ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
876 if test $count = 0; then
877 echo "FAIL: $count info messages, expected more than 0."
878 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
879 fail=`expr $fail + 1`
880 else
881 echo "PASS: $count info messages."
882 echo "<P>PASS: $count info messages.</P>" >>$strfile
883 fi
884
885 # Debug log messages
886 count=`$GREP '^D ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
887 if test $count = 0; then
888 echo "FAIL: $count debug messages, expected more than 0."
889 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
890 fail=`expr $fail + 1`
891 else
892 echo "PASS: $count debug messages."
893 echo "<P>PASS: $count debug messages.</P>" >>$strfile
894 fi
895
896 # Debug2 log messages
897 count=`$GREP '^d ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
898 if test $count = 0; then
899 echo "FAIL: $count debug2 messages, expected more than 0."
900 echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
901 fail=`expr $fail + 1`
902 else
903 echo "PASS: $count debug2 messages."
904 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
905 fi
906
907 # Log files...
908 echo "<H2>access_log</H2>" >>$strfile
909 echo "<PRE>" >>$strfile
910 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' /tmp/cups-$user/log/access_log >>$strfile
911 echo "</PRE>" >>$strfile
912
913 echo "<H2>error_log</H2>" >>$strfile
914 echo "<PRE>" >>$strfile
915 $GREP -v '^d' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
916 echo "</PRE>" >>$strfile
917
918 echo "<H2>page_log</H2>" >>$strfile
919 echo "<PRE>" >>$strfile
920 sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' /tmp/cups-$user/log/page_log >>$strfile
921 echo "</PRE>" >>$strfile
922
923 #
924 # Format the reports and tell the user where to find them...
925 #
926
927 cat str-trailer.html >>$strfile
928
929 echo ""
930
931 if test $fail != 0; then
932 echo "$fail tests failed."
933 cp /tmp/cups-$user/log/error_log error_log-$date-$user
934 cp $strfile .
935 else
936 echo "All tests were successful."
937 fi
938
939 echo "Log files can be found in /tmp/cups-$user/log."
940 echo "A HTML report was created in $strfile."
941 echo ""
942
943 if test $fail != 0; then
944 echo "Copies of the error_log and `basename $strfile` files are in"
945 echo "`pwd`."
946 echo ""
947
948 exit 1
949 fi
950
951 #
952 # End of "$Id: run-stp-tests.sh 9034 2010-03-09 07:03:06Z mike $"
953 #