]>
git.ipfire.org Git - thirdparty/cups.git/blob - test/run-stp-tests.sh
3 # "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z 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...
153 if test -z "$user"; then
154 if test -x /usr
/ucb
/whoami
; then
155 user
=`/usr/ucb/whoami`
160 if test -z "$user"; then
170 # Make sure that the LPDEST and PRINTER environment variables are
171 # not included in the environment that is passed to the tests. These
172 # will usually cause tests to fail erroneously...
179 # See if we want to use valgrind...
183 echo "This test script can use the Valgrind software from:"
185 echo " http://developer.kde.org/~sewardj/"
187 echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
192 case "$usevalgrind" in
194 valgrind
="valgrind --tool=memcheck --log-file=/tmp/cups-$user/log/valgrind --error-limit=no --leak-check=yes --trace-children=yes"
195 echo "Using Valgrind; log files can be found in /tmp/cups-$user/log..."
204 # Start by creating temporary directories for the tests...
207 rm -rf /tmp
/cups-
$user
208 mkdir
/tmp
/cups-
$user
209 mkdir
/tmp
/cups-
$user/bin
210 mkdir
/tmp
/cups-
$user/bin
/backend
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
/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
/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 # Then create the necessary config files...
264 if test $ssltype = 2; then
265 encryption
="Encryption Required"
270 cat >/tmp
/cups-
$user/cupsd.conf
<<EOF
274 Listen 127.0.0.1:$port
276 ServerRoot /tmp/cups-$user
277 StateDir /tmp/cups-$user
278 ServerBin /tmp/cups-$user/bin
279 CacheDir /tmp/cups-$user/share
280 DataDir /tmp/cups-$user/share
281 FontPath /tmp/cups-$user/share/fonts
282 DocumentRoot $root/doc
283 RequestRoot /tmp/cups-$user/spool
284 TempDir /tmp/cups-$user/spool/temp
286 AccessLog /tmp/cups-$user/log/access_log
287 ErrorLog /tmp/cups-$user/log/error_log
288 PageLog /tmp/cups-$user/log/page_log
290 PreserveJobHistory Yes
301 touch /tmp
/cups-
$user/classes.conf
302 touch /tmp
/cups-
$user/printers.conf
305 # Setup lots of test queues - 500 with PPD files, 500 without...
309 while test $i -le $nprinters1; do
310 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
313 DeviceURI file:/dev/null
314 Info Test PS printer $i
316 Location CUPS test suite
318 StateMessage Printer $1 is idle.
322 cp testps.ppd
/tmp
/cups-
$user/ppd
/test-
$i.ppd
327 while test $i -le $nprinters2; do
328 cat >>/tmp
/cups-
$user/printers.conf
<<EOF
331 DeviceURI file:/dev/null
332 Info Test raw printer $i
334 Location CUPS test suite
336 StateMessage Printer $1 is idle.
343 cp /tmp
/cups-
$user/printers.conf
/tmp
/cups-
$user/printers.conf.orig
345 cp $root/conf
/mime.types
/tmp
/cups-
$user/mime.types
346 cp $root/conf
/mime.convs
/tmp
/cups-
$user/mime.convs
352 if test "x$LD_LIBRARY_PATH" = x
; then
353 LD_LIBRARY_PATH
="$root/cups:$root/filter"
355 LD_LIBRARY_PATH
="$root/cups:$root/filter:$LD_LIBRARY_PATH"
358 export LD_LIBRARY_PATH
360 LD_PRELOAD
="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
363 if test "x$DYLD_LIBRARY_PATH" = x
; then
364 DYLD_LIBRARY_PATH
="$root/cups:$root/filter"
366 DYLD_LIBRARY_PATH
="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
369 export DYLD_LIBRARY_PATH
371 if test "x$SHLIB_PATH" = x
; then
372 SHLIB_PATH
="$root/cups:$root/filter"
374 SHLIB_PATH
="$root/cups:$root/filter:$SHLIB_PATH"
379 CUPS_SERVER
=localhost
; export CUPS_SERVER
380 CUPS_SERVERROOT
=/tmp
/cups-
$user; export CUPS_SERVERROOT
381 CUPS_STATEDIR
=/tmp
/cups-
$user; export CUPS_STATEDIR
382 CUPS_DATADIR
=/tmp
/cups-
$user/share
; export CUPS_DATADIR
385 # Set a new home directory to avoid getting user options mixed in...
392 # Start the server; run as foreground daemon in the background...
395 echo "Starting scheduler:"
396 echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &"
399 $valgrind ..
/scheduler
/cupsd
-c /tmp
/cups-
$user/cupsd.conf
-f >/tmp
/cups-
$user/log
/debug_log
&
402 #if test -x /usr/bin/strace; then
403 # # Trace system calls in cupsd if we have strace...
404 # /usr/bin/strace -tt -o /tmp/cups-$user/log/cupsd.trace -p $cupsd &
407 if test "x$testtype" = x0
; then
408 echo "Scheduler is PID $cupsd and is listening on port 8631."
410 echo "Set the IPP_PORT environment variable to 8631 to test the software"
411 echo "interactively from the command-line."
415 echo "Scheduler is PID $cupsd; run debugger now if you need to."
417 echo $ac_n "Press ENTER to continue... $ac_c"
420 IPP_PORT
=$port; export IPP_PORT
423 running
=`../systemv/lpstat -r 2>/dev/null`
424 if test "x$running" = "xscheduler is running"; then
428 echo "Waiting for scheduler to become ready..."
433 # Create the test report source file...
436 strfile
=cups-str-1.2
-`date +%Y-%m-%d`-$user.html
439 cat str-header.html
>$strfile
442 # Run the IPP tests...
445 echo "Running IPP compliance tests..."
447 echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
448 echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
449 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
450 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
451 echo "<PRE>" >>$strfile
454 for file in 4*.
test; do
455 echo "Performing $file..."
458 .
/ipptest ipp
://localhost
:$port/printers
$file >>$strfile
461 if test $status != 0; then
463 fail
=`expr $fail + 1`
467 echo "</PRE>" >>$strfile
470 # Run the command tests...
473 echo "Running command tests..."
475 echo "<H1>2 - Command Tests</H1>" >>$strfile
476 echo "<P>This section provides the results to the command tests" >>$strfile
477 echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
478 echo `date "+%Y-%m-%d"` by
$user on
`hostname`.
>>$strfile
479 echo "<PRE>" >>$strfile
481 for file in 5*.sh
; do
482 echo "Performing $file..."
484 echo "\"$file\":" >>$strfile
486 sh
$file $pjobs >>$strfile
489 if test $status != 0; then
491 fail
=`expr $fail + 1`
495 echo "</PRE>" >>$strfile
498 # Wait for jobs to complete...
502 jobs=`../systemv/lpstat 2>/dev/null`
503 if test "x$jobs" = "x"; then
507 echo "Waiting for jobs to complete..."
518 # Append the log files for post-mortim...
521 echo "<H1>3 - Log Files</H1>" >>$strfile
523 echo "<H2>access_log</H2>" >>$strfile
524 echo "<PRE>" >>$strfile
525 cat /tmp
/cups-
$user/log
/access_log
>>$strfile
526 echo "</PRE>" >>$strfile
528 echo "<H2>error_log</H2>" >>$strfile
529 echo "<PRE>" >>$strfile
530 cat /tmp
/cups-
$user/log
/error_log
>>$strfile
531 echo "</PRE>" >>$strfile
533 echo "<H2>page_log</H2>" >>$strfile
534 echo "<PRE>" >>$strfile
535 cat /tmp
/cups-
$user/log
/page_log
>>$strfile
536 echo "</PRE>" >>$strfile
538 if test -f /tmp
/cups-
$user/log
/cupsd.trace
; then
539 echo "<H2>cupsd.trace</H2>" >>$strfile
540 echo "<PRE>" >>$strfile
541 cat /tmp
/cups-
$user/log
/cupsd.trace
>>$strfile
542 echo "</PRE>" >>$strfile
546 # Format the reports and tell the user where to find them...
549 echo "Formatting reports..."
551 cat str-trailer.html
>>$strfile
555 if test $fail != 0; then
556 echo "$fail tests failed."
558 echo "All tests were successful."
561 if test "x$valgrind" != x
; then
562 echo "Valgrind log files can be found in /tmp/cups-$user/log."
566 echo "See the following file for details:"
572 # End of "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z mike $"