]>
git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
3 # "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"
5 # Perform the complete set of IPP compliance tests specified in the
6 # CUPS Software Test Plan.
8 # Copyright 1997-2006 by Easy Software Products, all rights reserved.
10 # These coded instructions, statements, and computer programs are the
11 # property of Easy Software Products and are protected by Federal
12 # copyright law. Distribution and use rights are outlined in the file
13 # "LICENSE.txt" which should have been included with this file. If this
14 # file is missing or damaged please contact Easy Software Products
17 # Attn: CUPS Licensing Information
18 # Easy Software Products
19 # 44141 Airport View Drive, Suite 204
20 # Hollywood, Maryland 20636 USA
22 # Voice: (301) 373-9600
23 # EMail: cups-info@cups.org
24 # WWW: http://www.cups.org
28 # Make the IPP test program...
34 # Figure out the proper echo options...
37 if (echo "testing\c"; echo 1,2,3) |
grep c
>/dev
/null
; then
49 echo "Welcome to the CUPS Automated Test Script."
51 echo "Before we begin, it is important that you understand that the larger"
52 echo "tests require significant amounts of RAM and disk space. If you"
53 echo "attempt to run one of the big tests on a system that lacks sufficient"
54 echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
55 echo "more system processes that you've grown attached to, like the X"
56 echo "server. The question you may want to ask yourself before running a"
57 echo "large test is: Do you feel lucky?"
59 echo "OK, now that we have the Dirty Harry quote out of the way, please"
60 echo "choose the type of test you wish to perform:"
62 echo "0 - No testing, keep the scheduler running for me (all systems)"
63 echo "1 - Basic conformance test, no load testing (all systems)"
64 echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
65 echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
66 echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
68 echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
75 echo "Running in test mode (0)"
81 echo "Running the medium tests (2)"
87 echo "Running the extreme tests (3)"
93 echo "Running the torture tests (4)"
99 echo "Running the timid tests (1)"
107 # See if we want to do SSL testing...
111 echo "Now you can choose whether to create a SSL/TLS encryption key and"
112 echo "certificate for testing; these tests currently require the OpenSSL"
115 echo "0 - Do not do SSL/TLS encryption tests"
116 echo "1 - Create a SSL/TLS certificate and key, but do not require encryption"
117 echo "2 - Create a SSL/TLS certificate and key and require encryption"
119 echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
126 if test -f server.key
; then
127 echo "Using existing SSL/TLS certificate and key..."
129 echo "Generating SSL/TLS certificate and key..."
130 openssl req
-new -x509 -keyout server.key
-out server.crt
-days 3650 -nodes >/dev
/null
<<EOF
143 echo "Not using SSL/TLS..."
149 # Information for the server/tests...
158 # Make sure that the LPDEST and PRINTER environment variables are
159 # not included in the environment that is passed to the tests. These
160 # will usually cause tests to fail erroneously...
167 # See if we want to use valgrind...
171 echo "This test script can use the Valgrind software from:"
173 echo " http://developer.kde.org/~sewardj/"
175 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
180 case "$usevalgrind" in
182 valgrind
="valgrind --tool=memcheck --log-file=/tmp/cups-$user/log/valgrind --error-limit=no --leak-check=yes --trace-children=yes"
183 echo "Using Valgrind; log files can be found in /tmp/cups-$user/log..."
192 # Start by creating temporary directories for the tests...
195 rm -rf /tmp
/cups-
$user
196 mkdir
/tmp
/cups-
$user
197 mkdir
/tmp
/cups-
$user/bin
198 mkdir
/tmp
/cups-
$user/bin
/backend
199 mkdir
/tmp
/cups-
$user/bin
/filter
200 mkdir
/tmp
/cups-
$user/certs
201 mkdir
/tmp
/cups-
$user/share
202 mkdir
/tmp
/cups-
$user/share
/banners
203 mkdir
/tmp
/cups-
$user/share
/model
204 mkdir
/tmp
/cups-
$user/interfaces
205 mkdir
/tmp
/cups-
$user/log
206 mkdir
/tmp
/cups-
$user/ppd
207 mkdir
/tmp
/cups-
$user/spool
208 mkdir
/tmp
/cups-
$user/spool
/temp
209 mkdir
/tmp
/cups-
$user/ssl
211 ln -s $root/backend
/http
/tmp
/cups-
$user/bin
/backend
212 ln -s $root/backend
/ipp
/tmp
/cups-
$user/bin
/backend
213 ln -s $root/backend
/lpd
/tmp
/cups-
$user/bin
/backend
214 ln -s $root/backend
/parallel
/tmp
/cups-
$user/bin
/backend
215 ln -s $root/backend
/serial
/tmp
/cups-
$user/bin
/backend
216 ln -s $root/backend
/socket
/tmp
/cups-
$user/bin
/backend
217 ln -s $root/backend
/usb
/tmp
/cups-
$user/bin
/backend
218 ln -s $root/cgi-bin
/tmp
/cups-
$user/bin
219 ln -s $root/monitor
/tmp
/cups-
$user/bin
220 ln -s $root/notifier
/tmp
/cups-
$user/bin
221 ln -s $root/scheduler
/tmp
/cups-
$user/bin
/daemon
222 ln -s $root/filter
/hpgltops
/tmp
/cups-
$user/bin
/filter
223 ln -s $root/filter
/imagetops
/tmp
/cups-
$user/bin
/filter
224 ln -s $root/filter
/imagetoraster
/tmp
/cups-
$user/bin
/filter
225 ln -s $root/filter
/pstops
/tmp
/cups-
$user/bin
/filter
226 ln -s $root/filter
/rastertoepson
/tmp
/cups-
$user/bin
/filter
227 ln -s $root/filter
/rastertohp
/tmp
/cups-
$user/bin
/filter
228 ln -s $root/filter
/texttops
/tmp
/cups-
$user/bin
/filter
229 ln -s $root/pdftops
/pdftops
/tmp
/cups-
$user/bin
/filter
231 ln -s $root/data
/classified
/tmp
/cups-
$user/share
/banners
232 ln -s $root/data
/confidential
/tmp
/cups-
$user/share
/banners
233 ln -s $root/data
/secret
/tmp
/cups-
$user/share
/banners
234 ln -s $root/data
/standard
/tmp
/cups-
$user/share
/banners
235 ln -s $root/data
/topsecret
/tmp
/cups-
$user/share
/banners
236 ln -s $root/data
/unclassified
/tmp
/cups-
$user/share
/banners
237 ln -s $root/data
/tmp
/cups-
$user/share
/charsets
238 ln -s $root/data
/tmp
/cups-
$user/share
239 ln -s $root/fonts
/tmp
/cups-
$user/share
240 ln -s $root/ppd
/*.ppd
/tmp
/cups-
$user/share
/model
241 ln -s $root/templates
/tmp
/cups-
$user/share
243 if test $ssltype != 0; then
245 cp server.
* $root/ssl
249 # Then create the necessary config files...
252 if test $ssltype = 2; then
253 encryption
="Encryption Required"
258 cat >/tmp
/cups-
$user/cupsd.conf
<<EOF
262 Listen 127.0.0.1:$port
264 ServerRoot /tmp/cups-$user
265 StateDir /tmp/cups-$user
266 ServerBin /tmp/cups-$user/bin
267 CacheDir /tmp/cups-$user/share
268 DataDir /tmp/cups-$user/share
269 FontPath /tmp/cups-$user/share/fonts
270 DocumentRoot $root/doc
271 RequestRoot /tmp/cups-$user/spool
272 TempDir /tmp/cups-$user/spool/temp
274 AccessLog /tmp/cups-$user/log/access_log
275 ErrorLog /tmp/cups-$user/log/error_log
276 PageLog /tmp/cups-$user/log/page_log
278 PreserveJobHistory Yes
289 touch /tmp
/cups-
$user/classes.conf
290 touch /tmp
/cups-
$user/printers.conf
293 # Setup lots of test queues - 500 with PPD files, 500 without...
297 while test $i -le $nprinters1; do
298 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
301 DeviceURI file:/dev/null
302 Info Test PS printer $i
304 Location CUPS test suite
306 StateMessage Printer $1 is idle.
310 cp testps.ppd
/tmp
/cups-
$user/ppd
/test-
$i.ppd
315 while test $i -le $nprinters2; do
316 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
319 DeviceURI file:/dev/null
320 Info Test raw printer $i
322 Location CUPS test suite
324 StateMessage Printer $1 is idle.
331 cp /tmp
/cups-
$user/printers.conf
/tmp
/cups-
$user/printers.conf.orig
333 cp $root/conf
/mime.types
/tmp
/cups-
$user/mime.types
334 cp $root/conf
/mime.convs
/tmp
/cups-
$user/mime.convs
340 if test "x$LD_LIBRARY_PATH" = x
; then
341 LD_LIBRARY_PATH
="$root/cups:$root/filter"
343 LD_LIBRARY_PATH
="$root/cups:$root/filter:$LD_LIBRARY_PATH"
346 export LD_LIBRARY_PATH
348 LD_PRELOAD
="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
351 if test "x$DYLD_LIBRARY_PATH" = x
; then
352 DYLD_LIBRARY_PATH
="$root/cups:$root/filter"
354 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
357 export DYLD_LIBRARY_PATH
359 if test "x$SHLIB_PATH" = x
; then
360 SHLIB_PATH
="$root/cups:$root/filter"
362 SHLIB_PATH
="$root/cups:$root/filter:$SHLIB_PATH"
367 CUPS_SERVER
=localhost
; export CUPS_SERVER
368 CUPS_SERVERROOT
=/tmp
/cups-
$user; export CUPS_SERVERROOT
369 CUPS_STATEDIR
=/tmp
/cups-
$user; export CUPS_STATEDIR
370 CUPS_DATADIR
=/tmp
/cups-
$user/share
; export CUPS_DATADIR
373 # Set a new home directory to avoid getting user options mixed in...
380 # Start the server; run as foreground daemon in the background...
383 echo "Starting scheduler:"
384 echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &"
387 $valgrind ..
/scheduler
/cupsd
-c /tmp
/cups-
$user/cupsd.conf
-f >/tmp
/cups-
$user/log
/debug_log
&
390 #if test -x /usr/bin/strace; then
391 # # Trace system calls in cupsd if we have strace...
392 # /usr/bin/strace -tt -o /tmp/cups-$user/log/cupsd.trace -p $cupsd &
395 if test "x$testtype" = x0
; then
396 echo "Scheduler is PID $cupsd and is listening on port 8631."
398 echo "Set the IPP_PORT environment variable to 8631 to test the software"
399 echo "interactively from the command-line."
403 echo "Scheduler is PID $cupsd; run debugger now if you need to."
405 echo $ac_n "Press ENTER to continue... $ac_c"
408 IPP_PORT
=$port; export IPP_PORT
411 running
=`../systemv/lpstat -r 2>/dev/null`
412 if test "x$running" = "xscheduler is running"; then
416 echo "Waiting for scheduler to become ready..."
421 # Create the test report source file...
424 strfile
=cups-str-1.2
-`date +%Y-%m-%d`-`whoami`.html
427 cat str-header.html
>$strfile
430 # Run the IPP tests...
433 echo "Running IPP compliance tests..."
435 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
436 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
437 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
438 echo `date "+%Y-%m-%d"` by
`whoami` on
`hostname`.
>>$strfile
439 echo "<PRE>" >>$strfile
442 for file in 4*.
test; do
443 echo "Performing $file..."
446 .
/ipptest ipp
://localhost
:$port/printers
$file >>$strfile
449 if test $status != 0; then
451 fail
=`expr $fail + 1`
455 echo "</PRE>" >>$strfile
458 # Run the command tests...
461 echo "Running command tests..."
463 echo "<H1>2 - Command Tests</H1>" >>$strfile
464 echo "<P>This section provides the results to the command tests" >>$strfile
465 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
466 echo `date "+%Y-%m-%d"` by
`whoami` on
`hostname`.
>>$strfile
467 echo "<PRE>" >>$strfile
469 for file in 5*.sh
; do
470 echo "Performing $file..."
472 echo "\"$file\":" >>$strfile
474 sh
$file $pjobs >>$strfile
477 if test $status != 0; then
479 fail
=`expr $fail + 1`
483 echo "</PRE>" >>$strfile
486 # Wait for jobs to complete...
490 jobs=`../systemv/lpstat 2>/dev/null`
491 if test "x$jobs" = "x"; then
495 echo "Waiting for jobs to complete..."
506 # Append the log files for post-mortim...
509 echo "<H1>3 - Log Files</H1>" >>$strfile
511 echo "<H2>access_log</H2>" >>$strfile
512 echo "<PRE>" >>$strfile
513 cat /tmp
/cups-
$user/log
/access_log
>>$strfile
514 echo "</PRE>" >>$strfile
516 echo "<H2>error_log</H2>" >>$strfile
517 echo "<PRE>" >>$strfile
518 cat /tmp
/cups-
$user/log
/error_log
>>$strfile
519 echo "</PRE>" >>$strfile
521 echo "<H2>page_log</H2>" >>$strfile
522 echo "<PRE>" >>$strfile
523 cat /tmp
/cups-
$user/log
/page_log
>>$strfile
524 echo "</PRE>" >>$strfile
526 if test -f /tmp
/cups-
$user/log
/cupsd.trace
; then
527 echo "<H2>cupsd.trace</H2>" >>$strfile
528 echo "<PRE>" >>$strfile
529 cat /tmp
/cups-
$user/log
/cupsd.trace
>>$strfile
530 echo "</PRE>" >>$strfile
534 # Format the reports and tell the user where to find them...
537 echo "Formatting reports..."
539 cat str-trailer.html
>>$strfile
543 if test $fail != 0; then
544 echo "$fail tests failed."
546 echo "All tests were successful."
549 if test "x$valgrind" != x
; then
550 echo "Valgrind log files can be found in /tmp/cups-$user/log."
554 echo "See the following file for details:"
560 # End of "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"