]>
git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
3 # "$Id: run-stp-tests.sh 6649 2007-07-11 21:46:42Z mike $"
5 # Perform the complete set of IPP compliance tests specified in the
6 # CUPS Software Test Plan.
8 # Copyright 2007-2008 by Apple Inc.
9 # Copyright 1997-2007 by Easy Software Products, all rights reserved.
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/".
21 # Make the IPP test program...
27 # Figure out the proper echo options...
30 if (echo "testing\c"; echo 1,2,3) |
grep c
>/dev
/null
; then
42 echo "Welcome to the CUPS Automated Test Script."
44 echo "Before we begin, it is important that you understand that the larger"
45 echo "tests require significant amounts of RAM and disk space. If you"
46 echo "attempt to run one of the big tests on a system that lacks sufficient"
47 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
48 echo "more system processes that you've grown attached to, like the X"
49 echo "server. The question you may want to ask yourself before running a"
50 echo "large test is: Do you feel lucky?"
52 echo "OK, now that we have the Dirty Harry quote out of the way, please"
53 echo "choose the type of test you wish to perform:"
55 echo "0 - No testing, keep the scheduler running for me (all systems)"
56 echo "1 - Basic conformance test, no load testing (all systems)"
57 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
58 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
59 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
61 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
63 if test $# -gt 0; then
73 echo "Running in test mode (0)"
79 echo "Running the medium tests (2)"
85 echo "Running the extreme tests (3)"
91 echo "Running the torture tests (4)"
97 echo "Running the timid tests (1)"
105 # See if we want to do SSL testing...
109 echo "Now you can choose whether to create a SSL/TLS encryption key and"
110 echo "certificate for testing; these tests currently require the OpenSSL"
113 echo "0 - Do not do SSL/TLS encryption tests"
114 echo "1 - Test but do not require encryption"
115 echo "2 - Test and require encryption"
117 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
119 if test $# -gt 0; then
129 echo "Will test but not require encryption (1)"
132 echo "Will test and require encryption (2)"
135 echo "Not using SSL/TLS (0)"
141 # Information for the server/tests...
145 if test -z "$user"; then
146 if test -x /usr
/ucb
/whoami
; then
147 user
=`/usr/ucb/whoami`
152 if test -z "$user"; then
162 # Make sure that the LPDEST and PRINTER environment variables are
163 # not included in the environment that is passed to the tests. These
164 # will usually cause tests to fail erroneously...
171 # See if we want to use valgrind...
175 echo "This test script can use the Valgrind software from:"
177 echo " http://developer.kde.org/~sewardj/"
179 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
181 if test $# -gt 0; then
189 case "$usevalgrind" in
191 valgrind
="valgrind --tool=memcheck --log-file=/tmp/cups-$user/log/valgrind --error-limit=no --leak-check=yes --trace-children=yes"
192 echo "Using Valgrind; log files can be found in /tmp/cups-$user/log..."
201 # Start by creating temporary directories for the tests...
204 echo "Creating directories for test..."
206 rm -rf /tmp
/cups-
$user
207 mkdir
/tmp
/cups-
$user
208 mkdir
/tmp
/cups-
$user/bin
209 mkdir
/tmp
/cups-
$user/bin
/backend
210 mkdir
/tmp
/cups-
$user/bin
/driver
211 mkdir
/tmp
/cups-
$user/bin
/filter
212 mkdir
/tmp
/cups-
$user/certs
213 mkdir
/tmp
/cups-
$user/share
214 mkdir
/tmp
/cups-
$user/share
/banners
215 mkdir
/tmp
/cups-
$user/share
/model
216 mkdir
/tmp
/cups-
$user/interfaces
217 mkdir
/tmp
/cups-
$user/log
218 mkdir
/tmp
/cups-
$user/ppd
219 mkdir
/tmp
/cups-
$user/spool
220 mkdir
/tmp
/cups-
$user/spool
/temp
221 mkdir
/tmp
/cups-
$user/ssl
223 ln -s $root/backend
/http
/tmp
/cups-
$user/bin
/backend
224 ln -s $root/backend
/ipp
/tmp
/cups-
$user/bin
/backend
225 ln -s $root/backend
/lpd
/tmp
/cups-
$user/bin
/backend
226 ln -s $root/backend
/parallel
/tmp
/cups-
$user/bin
/backend
227 ln -s $root/backend
/serial
/tmp
/cups-
$user/bin
/backend
228 ln -s $root/backend
/snmp
/tmp
/cups-
$user/bin
/backend
229 ln -s $root/backend
/socket
/tmp
/cups-
$user/bin
/backend
230 ln -s $root/backend
/usb
/tmp
/cups-
$user/bin
/backend
231 ln -s $root/cgi-bin
/tmp
/cups-
$user/bin
232 ln -s $root/ppdc
/drv
/tmp
/cups-
$user/bin
/driver
233 ln -s $root/monitor
/tmp
/cups-
$user/bin
234 ln -s $root/notifier
/tmp
/cups-
$user/bin
235 ln -s $root/scheduler
/tmp
/cups-
$user/bin
/daemon
236 ln -s $root/filter
/hpgltops
/tmp
/cups-
$user/bin
/filter
237 ln -s $root/filter
/pstops
/tmp
/cups-
$user/bin
/filter
238 ln -s $root/filter
/rastertoepson
/tmp
/cups-
$user/bin
/filter
239 ln -s $root/filter
/rastertohp
/tmp
/cups-
$user/bin
/filter
240 ln -s $root/filter
/texttops
/tmp
/cups-
$user/bin
/filter
242 ln -s $root/data
/classified
/tmp
/cups-
$user/share
/banners
243 ln -s $root/data
/confidential
/tmp
/cups-
$user/share
/banners
244 ln -s $root/data
/secret
/tmp
/cups-
$user/share
/banners
245 ln -s $root/data
/standard
/tmp
/cups-
$user/share
/banners
246 ln -s $root/data
/topsecret
/tmp
/cups-
$user/share
/banners
247 ln -s $root/data
/unclassified
/tmp
/cups-
$user/share
/banners
248 ln -s $root/data
/tmp
/cups-
$user/share
/charmaps
249 ln -s $root/data
/tmp
/cups-
$user/share
/charsets
250 ln -s $root/data
/tmp
/cups-
$user/share
251 ln -s $root/fonts
/tmp
/cups-
$user/share
252 ln -s $root/ppd
/*.ppd
/tmp
/cups-
$user/share
/model
253 ln -s $root/templates
/tmp
/cups-
$user/share
255 if test $ssltype != 0; then
257 cp server.
* $root/ssl
261 # Mac OS X filters and configuration files...
264 if test `uname` = Darwin
; then
265 ln -s /usr
/libexec
/cups
/filter
/cgpdfto
* /tmp
/cups-
$user/bin
/filter
266 ln -s /usr
/libexec
/cups
/filter
/nsimagetopdf
/tmp
/cups-
$user/bin
/filter
267 ln -s /usr
/libexec
/cups
/filter
/nstexttopdf
/tmp
/cups-
$user/bin
/filter
268 ln -s /usr
/libexec
/cups
/filter
/pictwpstops
/tmp
/cups-
$user/bin
/filter
269 ln -s /usr
/libexec
/cups
/filter
/pstoappleps
/tmp
/cups-
$user/bin
/filter
270 ln -s /usr
/libexec
/cups
/filter
/pstocupsraster
/tmp
/cups-
$user/bin
/filter
271 ln -s /usr
/libexec
/cups
/filter
/pstopdffilter
/tmp
/cups-
$user/bin
/filter
273 ln -s /private
/etc
/cups
/apple.
* /tmp
/cups-
$user
275 ln -s $root/filter
/imagetops
/tmp
/cups-
$user/bin
/filter
276 ln -s $root/filter
/imagetoraster
/tmp
/cups-
$user/bin
/filter
277 ln -s $root/filter
/pdftops
/tmp
/cups-
$user/bin
/filter
281 # Then create the necessary config files...
284 echo "Creating cupsd.conf for test..."
286 if test $ssltype = 2; then
287 encryption
="Encryption Required"
292 cat >/tmp
/cups-
$user/cupsd.conf
<<EOF
296 Listen 127.0.0.1:$port
298 ServerRoot /tmp/cups-$user
299 StateDir /tmp/cups-$user
300 ServerBin /tmp/cups-$user/bin
301 CacheDir /tmp/cups-$user/share
302 DataDir /tmp/cups-$user/share
303 FontPath /tmp/cups-$user/share/fonts
304 DocumentRoot $root/doc
305 RequestRoot /tmp/cups-$user/spool
306 TempDir /tmp/cups-$user/spool/temp
308 AccessLog /tmp/cups-$user/log/access_log
309 ErrorLog /tmp/cups-$user/log/error_log
310 PageLog /tmp/cups-$user/log/page_log
312 PreserveJobHistory Yes
323 touch /tmp
/cups-
$user/classes.conf
324 touch /tmp
/cups-
$user/printers.conf
327 # Setup lots of test queues - 500 with PPD files, 500 without...
330 echo "Creating printers.conf for test..."
333 while test $i -le $nprinters1; do
334 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
337 DeviceURI file:/dev/null
338 Info Test PS printer $i
340 Location CUPS test suite
342 StateMessage Printer $1 is idle.
346 cp testps.ppd
/tmp
/cups-
$user/ppd
/test-
$i.ppd
351 while test $i -le $nprinters2; do
352 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
355 DeviceURI file:/dev/null
356 Info Test raw printer $i
358 Location CUPS test suite
360 StateMessage Printer $1 is idle.
367 cp /tmp
/cups-
$user/printers.conf
/tmp
/cups-
$user/printers.conf.orig
369 cp $root/conf
/mime.types
/tmp
/cups-
$user/mime.types
370 cp $root/conf
/mime.convs
/tmp
/cups-
$user/mime.convs
376 echo "Setting up environment variables for test..."
378 if test "x$LD_LIBRARY_PATH" = x
; then
379 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
381 LD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$LD_LIBRARY_PATH"
384 export LD_LIBRARY_PATH
386 LD_PRELOAD
="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/driver/libcupsdriver.so.1:$root/ppdc/libcupsppdc.so.1"
389 if test "x$DYLD_LIBRARY_PATH" = x
; then
390 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
392 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$DYLD_LIBRARY_PATH"
395 export DYLD_LIBRARY_PATH
397 if test "x$SHLIB_PATH" = x
; then
398 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
400 SHLIB_PATH
="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$SHLIB_PATH"
405 CUPS_SERVER
=localhost
; export CUPS_SERVER
406 CUPS_SERVERROOT
=/tmp
/cups-
$user; export CUPS_SERVERROOT
407 CUPS_STATEDIR
=/tmp
/cups-
$user; export CUPS_STATEDIR
408 CUPS_DATADIR
=/tmp
/cups-
$user/share
; export CUPS_DATADIR
411 # Set a new home directory to avoid getting user options mixed in...
418 # Force POSIX locale for tests...
425 # Start the server; run as foreground daemon in the background...
428 echo "Starting scheduler:"
429 echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &"
432 $valgrind ..
/scheduler
/cupsd
-c /tmp
/cups-
$user/cupsd.conf
-f >/tmp
/cups-
$user/log
/debug_log
2>&1 &
435 if test "x$testtype" = x0
; then
436 echo "Scheduler is PID $cupsd and is listening on port 8631."
438 echo "Set the IPP_PORT environment variable to 8631 to test the software"
439 echo "interactively from the command-line."
443 if test $argcount -eq 0; then
444 echo "Scheduler is PID $cupsd; run debugger now if you need to."
446 echo $ac_n "Press ENTER to continue... $ac_c"
449 echo "Scheduler is PID $cupsd."
453 IPP_PORT
=$port; export IPP_PORT
456 running
=`../systemv/lpstat -r 2>/dev/null`
457 if test "x$running" = "xscheduler is running"; then
461 echo "Waiting for scheduler to become ready..."
466 # Create the test report source file...
469 strfile
=/tmp
/cups-
$user/cups-str-1.4
-`date +%Y-%m-%d`-$user.html
472 cat str-header.html
>$strfile
475 # Run the IPP tests...
479 echo "Running IPP compliance tests..."
481 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
482 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
483 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
484 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
485 echo "<PRE>" >>$strfile
488 for file in 4*.
test; do
489 echo "Performing $file..."
492 .
/ipptest ipp
://localhost
:$port/printers
$file |
tee -a $strfile
495 if test $status != 0; then
497 fail
=`expr $fail + 1`
501 echo "</PRE>" >>$strfile
504 # Run the command tests...
508 echo "Running command tests..."
510 echo "<H1>2 - Command Tests</H1>" >>$strfile
511 echo "<P>This section provides the results to the command tests" >>$strfile
512 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
513 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
514 echo "<PRE>" >>$strfile
516 for file in 5*.sh
; do
517 echo "Performing $file..."
519 echo "\"$file\":" >>$strfile
521 sh
$file $pjobs |
tee -a $strfile
524 if test $status != 0; then
526 fail
=`expr $fail + 1`
530 echo "</PRE>" >>$strfile
539 # Append the log files for post-mortim...
542 echo "<H1>3 - Log Files</H1>" >>$strfile
550 echo "<H2>Summary</H2>" >>$strfile
552 # Pages printed on Test1
553 count
=`grep '^Test1 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
554 expected
=`expr $pjobs \* 2 + 35`
555 if test $count != $expected; then
556 echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
557 echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
558 fail
=`expr $fail + 1`
560 echo "PASS: Printer 'Test1' correctly produced $count page(s)."
561 echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
564 # Paged printed on Test2
565 count
=`grep '^Test2 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
566 expected
=`expr $pjobs \* 2 + 3`
567 if test $count != $expected; then
568 echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
569 echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
570 fail
=`expr $fail + 1`
572 echo "PASS: Printer 'Test2' correctly produced $count page(s)."
573 echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
576 # Requested processed
577 count
=`wc -l /tmp/cups-$user/log/access_log | awk '{print $1}'`
578 echo "PASS: $count requests processed."
579 echo "<P>PASS: $count requests processed.</P>" >>$strfile
581 # Emergency log messages
582 count
=`grep '^X ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
583 if test $count != 0; then
584 echo "FAIL: $count emergency messages, expected 0."
585 grep '^X ' /tmp
/cups-
$user/log
/error_log
586 echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
587 echo "<PRE>" >>$strfile
588 grep '^X ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
589 echo "</PRE>" >>$strfile
590 fail
=`expr $fail + 1`
592 echo "PASS: $count emergency messages."
593 echo "<P>PASS: $count emergency messages.</P>" >>$strfile
597 count
=`grep '^A ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
598 if test $count != 0; then
599 echo "FAIL: $count alert messages, expected 0."
600 grep '^A ' /tmp
/cups-
$user/log
/error_log
601 echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
602 echo "<PRE>" >>$strfile
603 grep '^A ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
604 echo "</PRE>" >>$strfile
605 fail
=`expr $fail + 1`
607 echo "PASS: $count alert messages."
608 echo "<P>PASS: $count alert messages.</P>" >>$strfile
611 # Critical log messages
612 count
=`grep '^C ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
613 if test $count != 0; then
614 echo "FAIL: $count critical messages, expected 0."
615 grep '^C ' /tmp
/cups-
$user/log
/error_log
616 echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
617 echo "<PRE>" >>$strfile
618 grep '^C ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
619 echo "</PRE>" >>$strfile
620 fail
=`expr $fail + 1`
622 echo "PASS: $count critical messages."
623 echo "<P>PASS: $count critical messages.</P>" >>$strfile
627 count
=`grep '^E ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
628 if test $count != 9; then
629 echo "FAIL: $count error messages, expected 9."
630 grep '^E ' /tmp
/cups-
$user/log
/error_log
631 echo "<P>FAIL: $count error messages, expected 9.</P>" >>$strfile
632 echo "<PRE>" >>$strfile
633 grep '^E ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
634 echo "</PRE>" >>$strfile
635 fail
=`expr $fail + 1`
637 echo "PASS: $count error messages."
638 echo "<P>PASS: $count error messages.</P>" >>$strfile
641 # Warning log messages
642 count
=`grep '^W ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
643 if test $count != 0; then
644 echo "FAIL: $count warning messages, expected 0."
645 grep '^W ' /tmp
/cups-
$user/log
/error_log
646 echo "<P>FAIL: $count warning messages, expected 0.</P>" >>$strfile
647 echo "<PRE>" >>$strfile
648 grep '^W ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
649 echo "</PRE>" >>$strfile
650 fail
=`expr $fail + 1`
652 echo "PASS: $count warning messages."
653 echo "<P>PASS: $count warning messages.</P>" >>$strfile
656 # Notice log messages
657 count
=`grep '^N ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
658 if test $count != 0; then
659 echo "FAIL: $count notice messages, expected 0."
660 grep '^N ' /tmp
/cups-
$user/log
/error_log
661 echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
662 echo "<PRE>" >>$strfile
663 grep '^N ' /tmp
/cups-
$user/log
/error_log |
sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
664 echo "</PRE>" >>$strfile
665 fail
=`expr $fail + 1`
667 echo "PASS: $count notice messages."
668 echo "<P>PASS: $count notice messages.</P>" >>$strfile
672 count
=`grep '^I ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
673 if test $count = 0; then
674 echo "FAIL: $count info messages, expected more than 0."
675 echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
676 fail
=`expr $fail + 1`
678 echo "PASS: $count info messages."
679 echo "<P>PASS: $count info messages.</P>" >>$strfile
683 count
=`grep '^D ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
684 if test $count = 0; then
685 echo "FAIL: $count debug messages, expected more than 0."
686 echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
687 fail
=`expr $fail + 1`
689 echo "PASS: $count debug messages."
690 echo "<P>PASS: $count debug messages.</P>" >>$strfile
693 # Debug2 log messages
694 count
=`grep '^d ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
695 if test $count != 0; then
696 echo "FAIL: $count debug2 messages, expected 0."
697 echo "<P>FAIL: $count debug2 messages, expected 0.</P>" >>$strfile
698 fail
=`expr $fail + 1`
700 echo "PASS: $count debug2 messages."
701 echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
705 echo "<H2>access_log</H2>" >>$strfile
706 echo "<PRE>" >>$strfile
707 sed -e '1,$s/&/&/g' -e '1,$s/</</g' /tmp
/cups-
$user/log
/access_log
>>$strfile
708 echo "</PRE>" >>$strfile
710 echo "<H2>error_log</H2>" >>$strfile
711 echo "<PRE>" >>$strfile
712 sed -e '1,$s/&/&/g' -e '1,$s/</</g' /tmp
/cups-
$user/log
/error_log
>>$strfile
713 echo "</PRE>" >>$strfile
715 echo "<H2>page_log</H2>" >>$strfile
716 echo "<PRE>" >>$strfile
717 sed -e '1,$s/&/&/g' -e '1,$s/</</g' /tmp
/cups-
$user/log
/page_log
>>$strfile
718 echo "</PRE>" >>$strfile
721 # Format the reports and tell the user where to find them...
724 cat str-trailer.html
>>$strfile
728 if test $fail != 0; then
729 echo "$fail tests failed."
731 echo "All tests were successful."
734 echo "Log files can be found in /tmp/cups-$user/log."
735 echo "A HTML report was created in $strfile."
738 if test $fail != 0; then
743 # End of "$Id: run-stp-tests.sh 6649 2007-07-11 21:46:42Z mike $"