]>
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 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
/filter
211 mkdir
/tmp
/cups-
$user/certs
212 mkdir
/tmp
/cups-
$user/share
213 mkdir
/tmp
/cups-
$user/share
/banners
214 mkdir
/tmp
/cups-
$user/share
/model
215 mkdir
/tmp
/cups-
$user/interfaces
216 mkdir
/tmp
/cups-
$user/log
217 mkdir
/tmp
/cups-
$user/ppd
218 mkdir
/tmp
/cups-
$user/spool
219 mkdir
/tmp
/cups-
$user/spool
/temp
220 mkdir
/tmp
/cups-
$user/ssl
222 ln -s $root/backend
/http
/tmp
/cups-
$user/bin
/backend
223 ln -s $root/backend
/ipp
/tmp
/cups-
$user/bin
/backend
224 ln -s $root/backend
/lpd
/tmp
/cups-
$user/bin
/backend
225 ln -s $root/backend
/parallel
/tmp
/cups-
$user/bin
/backend
226 ln -s $root/backend
/serial
/tmp
/cups-
$user/bin
/backend
227 ln -s $root/backend
/snmp
/tmp
/cups-
$user/bin
/backend
228 ln -s $root/backend
/socket
/tmp
/cups-
$user/bin
/backend
229 ln -s $root/backend
/usb
/tmp
/cups-
$user/bin
/backend
230 ln -s $root/cgi-bin
/tmp
/cups-
$user/bin
231 ln -s $root/monitor
/tmp
/cups-
$user/bin
232 ln -s $root/notifier
/tmp
/cups-
$user/bin
233 ln -s $root/scheduler
/tmp
/cups-
$user/bin
/daemon
234 ln -s $root/filter
/hpgltops
/tmp
/cups-
$user/bin
/filter
235 ln -s $root/filter
/imagetops
/tmp
/cups-
$user/bin
/filter
236 ln -s $root/filter
/imagetoraster
/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
241 ln -s $root/pdftops
/pdftops
/tmp
/cups-
$user/bin
/filter
243 ln -s $root/data
/classified
/tmp
/cups-
$user/share
/banners
244 ln -s $root/data
/confidential
/tmp
/cups-
$user/share
/banners
245 ln -s $root/data
/secret
/tmp
/cups-
$user/share
/banners
246 ln -s $root/data
/standard
/tmp
/cups-
$user/share
/banners
247 ln -s $root/data
/topsecret
/tmp
/cups-
$user/share
/banners
248 ln -s $root/data
/unclassified
/tmp
/cups-
$user/share
/banners
249 ln -s $root/data
/tmp
/cups-
$user/share
/charmaps
250 ln -s $root/data
/tmp
/cups-
$user/share
/charsets
251 ln -s $root/data
/tmp
/cups-
$user/share
252 ln -s $root/fonts
/tmp
/cups-
$user/share
253 ln -s $root/ppd
/*.ppd
/tmp
/cups-
$user/share
/model
254 ln -s $root/templates
/tmp
/cups-
$user/share
256 if test $ssltype != 0; then
258 cp server.
* $root/ssl
262 # Mac OS X filters and configuration files...
265 if test `uname` = Darwin
; then
266 ln -s /usr
/libexec
/cups
/filter
/cgpdfto
* /tmp
/cups-
$user/bin
/filter
267 ln -s /usr
/libexec
/cups
/filter
/nsimagetopdf
/tmp
/cups-
$user/bin
/filter
268 ln -s /usr
/libexec
/cups
/filter
/nstexttopdf
/tmp
/cups-
$user/bin
/filter
269 ln -s /usr
/libexec
/cups
/filter
/pictwpstops
/tmp
/cups-
$user/bin
/filter
270 ln -s /usr
/libexec
/cups
/filter
/pstoappleps
/tmp
/cups-
$user/bin
/filter
271 ln -s /usr
/libexec
/cups
/filter
/pstocupsraster
/tmp
/cups-
$user/bin
/filter
272 ln -s /usr
/libexec
/cups
/filter
/pstopdffilter
/tmp
/cups-
$user/bin
/filter
274 ln -s /private
/etc
/cups
/apple.
* /tmp
/cups-
$user
279 # Then create the necessary config files...
282 echo "Creating cupsd.conf for test..."
284 if test $ssltype = 2; then
285 encryption
="Encryption Required"
290 cat >/tmp
/cups-
$user/cupsd.conf
<<EOF
294 Listen 127.0.0.1:$port
296 ServerRoot /tmp/cups-$user
297 StateDir /tmp/cups-$user
298 ServerBin /tmp/cups-$user/bin
299 CacheDir /tmp/cups-$user/share
300 DataDir /tmp/cups-$user/share
301 FontPath /tmp/cups-$user/share/fonts
302 DocumentRoot $root/doc
303 RequestRoot /tmp/cups-$user/spool
304 TempDir /tmp/cups-$user/spool/temp
306 AccessLog /tmp/cups-$user/log/access_log
307 ErrorLog /tmp/cups-$user/log/error_log
308 PageLog /tmp/cups-$user/log/page_log
310 PreserveJobHistory Yes
321 touch /tmp
/cups-
$user/classes.conf
322 touch /tmp
/cups-
$user/printers.conf
325 # Setup lots of test queues - 500 with PPD files, 500 without...
328 echo "Creating printers.conf for test..."
331 while test $i -le $nprinters1; do
332 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
335 DeviceURI file:/dev/null
336 Info Test PS printer $i
338 Location CUPS test suite
340 StateMessage Printer $1 is idle.
344 cp testps.ppd
/tmp
/cups-
$user/ppd
/test-
$i.ppd
349 while test $i -le $nprinters2; do
350 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
353 DeviceURI file:/dev/null
354 Info Test raw printer $i
356 Location CUPS test suite
358 StateMessage Printer $1 is idle.
365 cp /tmp
/cups-
$user/printers.conf
/tmp
/cups-
$user/printers.conf.orig
367 cp $root/conf
/mime.types
/tmp
/cups-
$user/mime.types
368 cp $root/conf
/mime.convs
/tmp
/cups-
$user/mime.convs
374 echo "Setting up environment variables for test..."
376 if test "x$LD_LIBRARY_PATH" = x
; then
377 LD_LIBRARY_PATH
="$root/cups:$root/filter"
379 LD_LIBRARY_PATH
="$root/cups:$root/filter:$LD_LIBRARY_PATH"
382 export LD_LIBRARY_PATH
384 LD_PRELOAD
="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
387 if test "x$DYLD_LIBRARY_PATH" = x
; then
388 DYLD_LIBRARY_PATH
="$root/cups:$root/filter"
390 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
393 export DYLD_LIBRARY_PATH
395 if test "x$SHLIB_PATH" = x
; then
396 SHLIB_PATH
="$root/cups:$root/filter"
398 SHLIB_PATH
="$root/cups:$root/filter:$SHLIB_PATH"
403 CUPS_SERVER
=localhost
; export CUPS_SERVER
404 CUPS_SERVERROOT
=/tmp
/cups-
$user; export CUPS_SERVERROOT
405 CUPS_STATEDIR
=/tmp
/cups-
$user; export CUPS_STATEDIR
406 CUPS_DATADIR
=/tmp
/cups-
$user/share
; export CUPS_DATADIR
409 # Set a new home directory to avoid getting user options mixed in...
416 # Force POSIX locale for tests...
423 # Start the server; run as foreground daemon in the background...
426 echo "Starting scheduler:"
427 echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &"
430 $valgrind ..
/scheduler
/cupsd
-c /tmp
/cups-
$user/cupsd.conf
-f >/tmp
/cups-
$user/log
/debug_log
2>&1 &
433 #if test -x /usr/bin/strace; then
434 # # Trace system calls in cupsd if we have strace...
435 # /usr/bin/strace -tt -o /tmp/cups-$user/log/cupsd.trace -p $cupsd &
438 if test "x$testtype" = x0
; then
439 echo "Scheduler is PID $cupsd and is listening on port 8631."
441 echo "Set the IPP_PORT environment variable to 8631 to test the software"
442 echo "interactively from the command-line."
446 if test $argcount -eq 0; then
447 echo "Scheduler is PID $cupsd; run debugger now if you need to."
449 echo $ac_n "Press ENTER to continue... $ac_c"
452 echo "Scheduler is PID $cupsd."
456 IPP_PORT
=$port; export IPP_PORT
459 running
=`../systemv/lpstat -r 2>/dev/null`
460 if test "x$running" = "xscheduler is running"; then
464 echo "Waiting for scheduler to become ready..."
469 # Create the test report source file...
472 strfile
=cups-str-1.3
-`date +%Y-%m-%d`-$user.html
475 cat str-header.html
>$strfile
478 # Run the IPP tests...
482 echo "Running IPP compliance tests..."
484 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
485 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
486 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
487 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
488 echo "<PRE>" >>$strfile
491 for file in 4*.
test; do
492 echo "Performing $file..."
495 .
/ipptest ipp
://localhost
:$port/printers
$file >>$strfile
498 if test $status != 0; then
500 fail
=`expr $fail + 1`
504 echo "</PRE>" >>$strfile
507 # Run the command tests...
511 echo "Running command tests..."
513 echo "<H1>2 - Command Tests</H1>" >>$strfile
514 echo "<P>This section provides the results to the command tests" >>$strfile
515 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
516 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
517 echo "<PRE>" >>$strfile
519 for file in 5*.sh
; do
520 echo "Performing $file..."
522 echo "\"$file\":" >>$strfile
524 sh
$file $pjobs >>$strfile
527 if test $status != 0; then
529 fail
=`expr $fail + 1`
533 echo "</PRE>" >>$strfile
536 # Wait for jobs to complete...
540 jobs=`../systemv/lpstat 2>/dev/null`
541 if test "x$jobs" = "x"; then
545 echo "Waiting for jobs to complete..."
556 # Append the log files for post-mortim...
559 echo "<H1>3 - Log Files</H1>" >>$strfile
561 echo "<H2>access_log</H2>" >>$strfile
562 echo "<PRE>" >>$strfile
563 cat /tmp
/cups-
$user/log
/access_log
>>$strfile
564 echo "</PRE>" >>$strfile
566 echo "<H2>error_log</H2>" >>$strfile
567 echo "<PRE>" >>$strfile
568 cat /tmp
/cups-
$user/log
/error_log
>>$strfile
569 echo "</PRE>" >>$strfile
571 echo "<H2>page_log</H2>" >>$strfile
572 echo "<PRE>" >>$strfile
573 cat /tmp
/cups-
$user/log
/page_log
>>$strfile
574 echo "</PRE>" >>$strfile
576 if test -f /tmp
/cups-
$user/log
/cupsd.trace
; then
577 echo "<H2>cupsd.trace</H2>" >>$strfile
578 echo "<PRE>" >>$strfile
579 cat /tmp
/cups-
$user/log
/cupsd.trace
>>$strfile
580 echo "</PRE>" >>$strfile
584 # Format the reports and tell the user where to find them...
587 cat str-trailer.html
>>$strfile
591 if test $fail != 0; then
592 echo "$fail tests failed."
594 echo "All tests were successful."
597 echo "Log files can be found in /tmp/cups-$user/log."
598 echo "A HTML report was created in test/$strfile."
602 # End of "$Id: run-stp-tests.sh 6649 2007-07-11 21:46:42Z mike $"