]> git.ipfire.org Git - thirdparty/cups.git/blame - test/run-stp-tests.sh
Load cups into easysw/current.
[thirdparty/cups.git] / test / run-stp-tests.sh
CommitLineData
ef416fc2 1#!/bin/sh
2#
bd7854cb 3# "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"
ef416fc2 4#
5# Perform the complete set of IPP compliance tests specified in the
6# CUPS Software Test Plan.
7#
bd7854cb 8# Copyright 1997-2006 by Easy Software Products, all rights reserved.
ef416fc2 9#
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
15# at:
16#
17# Attn: CUPS Licensing Information
18# Easy Software Products
19# 44141 Airport View Drive, Suite 204
20# Hollywood, Maryland 20636 USA
21#
22# Voice: (301) 373-9600
23# EMail: cups-info@cups.org
24# WWW: http://www.cups.org
25#
26
27#
28# Make the IPP test program...
29#
30
31make
32
bd7854cb 33#
34# Figure out the proper echo options...
35#
36
37if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
38 ac_n=-n
39 ac_c=
40else
41 ac_n=
42 ac_c='\c'
43fi
44
ef416fc2 45#
46# Greet the tester...
47#
48
49echo "Welcome to the CUPS Automated Test Script."
50echo ""
51echo "Before we begin, it is important that you understand that the larger"
52echo "tests require significant amounts of RAM and disk space. If you"
53echo "attempt to run one of the big tests on a system that lacks sufficient"
54echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
55echo "more system processes that you've grown attached to, like the X"
56echo "server. The question you may want to ask yourself before running a"
57echo "large test is: Do you feel lucky?"
58echo ""
59echo "OK, now that we have the Dirty Harry quote out of the way, please"
60echo "choose the type of test you wish to perform:"
61echo ""
62echo "0 - No testing, keep the scheduler running for me (all systems)"
63echo "1 - Basic conformance test, no load testing (all systems)"
64echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
65echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
66echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
67echo ""
bd7854cb 68echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
ef416fc2 69
70read testtype
bd7854cb 71echo ""
ef416fc2 72
73case "$testtype" in
74 0)
75 echo "Running in test mode (0)"
76 nprinters1=0
77 nprinters2=0
78 pjobs=0
79 ;;
80 2)
81 echo "Running the medium tests (2)"
82 nprinters1=10
83 nprinters2=20
84 pjobs=20
85 ;;
86 3)
87 echo "Running the extreme tests (3)"
88 nprinters1=500
89 nprinters2=1000
90 pjobs=100
91 ;;
92 4)
93 echo "Running the torture tests (4)"
94 nprinters1=10000
95 nprinters2=20000
96 pjobs=200
97 ;;
98 *)
99 echo "Running the timid tests (1)"
100 nprinters1=0
101 nprinters2=0
102 pjobs=0
103 ;;
104esac
105
106#
107# See if we want to do SSL testing...
108#
109
110echo ""
111echo "Now you can choose whether to create a SSL/TLS encryption key and"
112echo "certificate for testing; these tests currently require the OpenSSL"
113echo "tools:"
114echo ""
115echo "0 - Do not do SSL/TLS encryption tests"
116echo "1 - Create a SSL/TLS certificate and key, but do not require encryption"
117echo "2 - Create a SSL/TLS certificate and key and require encryption"
118echo ""
bd7854cb 119echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
ef416fc2 120
121read ssltype
bd7854cb 122echo ""
ef416fc2 123
124case "$ssltype" in
125 1 | 2)
126 if test -f server.key; then
127 echo "Using existing SSL/TLS certificate and key..."
128 else
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
131ZZ
132Testland
133Testville
134Test Company
135
136`hostname`
137test@domain.com
138EOF
139 fi
140 ;;
141
142 *)
bd7854cb 143 echo "Not using SSL/TLS..."
ef416fc2 144 ssltype=0
145 ;;
146esac
147
148#
149# Information for the server/tests...
150#
151
152user=`whoami`
153port=8631
154cwd=`pwd`
155root=`dirname $cwd`
156
157#
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...
161#
162
163typeset +x LPDEST
164typeset +x PRINTER
165
166#
167# See if we want to use valgrind...
168#
169
170echo ""
171echo "This test script can use the Valgrind software from:"
172echo ""
173echo " http://developer.kde.org/~sewardj/"
174echo ""
bd7854cb 175echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
ef416fc2 176
177read usevalgrind
bd7854cb 178echo ""
ef416fc2 179
180case "$usevalgrind" in
181 Y* | y*)
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..."
184 ;;
185
186 *)
187 valgrind=""
188 ;;
189esac
190
191#
192# Start by creating temporary directories for the tests...
193#
194
195rm -rf /tmp/cups-$user
196mkdir /tmp/cups-$user
197mkdir /tmp/cups-$user/bin
198mkdir /tmp/cups-$user/bin/backend
199mkdir /tmp/cups-$user/bin/filter
200mkdir /tmp/cups-$user/certs
201mkdir /tmp/cups-$user/share
202mkdir /tmp/cups-$user/share/banners
203mkdir /tmp/cups-$user/share/model
204mkdir /tmp/cups-$user/interfaces
205mkdir /tmp/cups-$user/log
206mkdir /tmp/cups-$user/ppd
207mkdir /tmp/cups-$user/spool
208mkdir /tmp/cups-$user/spool/temp
209mkdir /tmp/cups-$user/ssl
210
211ln -s $root/backend/http /tmp/cups-$user/bin/backend
212ln -s $root/backend/ipp /tmp/cups-$user/bin/backend
213ln -s $root/backend/lpd /tmp/cups-$user/bin/backend
214ln -s $root/backend/parallel /tmp/cups-$user/bin/backend
215ln -s $root/backend/serial /tmp/cups-$user/bin/backend
216ln -s $root/backend/socket /tmp/cups-$user/bin/backend
217ln -s $root/backend/usb /tmp/cups-$user/bin/backend
218ln -s $root/cgi-bin /tmp/cups-$user/bin
bd7854cb 219ln -s $root/monitor /tmp/cups-$user/bin
ef416fc2 220ln -s $root/notifier /tmp/cups-$user/bin
221ln -s $root/scheduler /tmp/cups-$user/bin/daemon
222ln -s $root/filter/hpgltops /tmp/cups-$user/bin/filter
223ln -s $root/filter/imagetops /tmp/cups-$user/bin/filter
224ln -s $root/filter/imagetoraster /tmp/cups-$user/bin/filter
225ln -s $root/filter/pstops /tmp/cups-$user/bin/filter
226ln -s $root/filter/rastertoepson /tmp/cups-$user/bin/filter
227ln -s $root/filter/rastertohp /tmp/cups-$user/bin/filter
228ln -s $root/filter/texttops /tmp/cups-$user/bin/filter
229ln -s $root/pdftops/pdftops /tmp/cups-$user/bin/filter
230
231ln -s $root/data/classified /tmp/cups-$user/share/banners
232ln -s $root/data/confidential /tmp/cups-$user/share/banners
233ln -s $root/data/secret /tmp/cups-$user/share/banners
234ln -s $root/data/standard /tmp/cups-$user/share/banners
235ln -s $root/data/topsecret /tmp/cups-$user/share/banners
236ln -s $root/data/unclassified /tmp/cups-$user/share/banners
237ln -s $root/data /tmp/cups-$user/share/charsets
238ln -s $root/data /tmp/cups-$user/share
239ln -s $root/fonts /tmp/cups-$user/share
240ln -s $root/ppd/*.ppd /tmp/cups-$user/share/model
241ln -s $root/templates /tmp/cups-$user/share
242
243if test $ssltype != 0; then
244 mkdir $root/ssl
245 cp server.* $root/ssl
246fi
247
248#
249# Then create the necessary config files...
250#
251
252if test $ssltype = 2; then
253 encryption="Encryption Required"
254else
255 encryption=""
256fi
257
258cat >/tmp/cups-$user/cupsd.conf <<EOF
259Browsing Off
260FileDevice yes
261Printcap
262Listen 127.0.0.1:$port
263User $user
264ServerRoot /tmp/cups-$user
265StateDir /tmp/cups-$user
266ServerBin /tmp/cups-$user/bin
267CacheDir /tmp/cups-$user/share
268DataDir /tmp/cups-$user/share
269FontPath /tmp/cups-$user/share/fonts
270DocumentRoot $root/doc
271RequestRoot /tmp/cups-$user/spool
272TempDir /tmp/cups-$user/spool/temp
273MaxLogSize 0
274AccessLog /tmp/cups-$user/log/access_log
275ErrorLog /tmp/cups-$user/log/error_log
276PageLog /tmp/cups-$user/log/page_log
277LogLevel debug
278PreserveJobHistory Yes
279<Policy default>
280<Limit All>
281Order Deny,Allow
282Deny from all
283Allow from 127.0.0.1
284$encryption
285</Limit>
286</Policy>
287EOF
288
289touch /tmp/cups-$user/classes.conf
290touch /tmp/cups-$user/printers.conf
291
292#
293# Setup lots of test queues - 500 with PPD files, 500 without...
294#
295
296i=1
297while test $i -le $nprinters1; do
298 cat >>/tmp/cups-$user/printers.conf <<EOF
299<Printer test-$i>
300Accepting Yes
301DeviceURI file:/dev/null
302Info Test PS printer $i
303JobSheets none none
304Location CUPS test suite
305State Idle
306StateMessage Printer $1 is idle.
307</Printer>
308EOF
309
310 cp testps.ppd /tmp/cups-$user/ppd/test-$i.ppd
311
312 i=`expr $i + 1`
313done
314
315while test $i -le $nprinters2; do
316 cat >>/tmp/cups-$user/printers.conf <<EOF
317<Printer test-$i>
318Accepting Yes
319DeviceURI file:/dev/null
320Info Test raw printer $i
321JobSheets none none
322Location CUPS test suite
323State Idle
324StateMessage Printer $1 is idle.
325</Printer>
326EOF
327
328 i=`expr $i + 1`
329done
330
331cp /tmp/cups-$user/printers.conf /tmp/cups-$user/printers.conf.orig
332
333cp $root/conf/mime.types /tmp/cups-$user/mime.types
334cp $root/conf/mime.convs /tmp/cups-$user/mime.convs
335
336#
337# Setup the paths...
338#
339
340if test "x$LD_LIBRARY_PATH" = x; then
341 LD_LIBRARY_PATH="$root/cups:$root/filter"
342else
343 LD_LIBRARY_PATH="$root/cups:$root/filter:$LD_LIBRARY_PATH"
344fi
345
346export LD_LIBRARY_PATH
347
348LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
349export LD_PRELOAD
350
351if test "x$DYLD_LIBRARY_PATH" = x; then
352 DYLD_LIBRARY_PATH="$root/cups:$root/filter"
353else
354 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
355fi
356
357export DYLD_LIBRARY_PATH
358
359if test "x$SHLIB_PATH" = x; then
360 SHLIB_PATH="$root/cups:$root/filter"
361else
362 SHLIB_PATH="$root/cups:$root/filter:$SHLIB_PATH"
363fi
364
365export SHLIB_PATH
366
367CUPS_SERVER=localhost; export CUPS_SERVER
368CUPS_SERVERROOT=/tmp/cups-$user; export CUPS_SERVERROOT
369CUPS_STATEDIR=/tmp/cups-$user; export CUPS_STATEDIR
370CUPS_DATADIR=/tmp/cups-$user/share; export CUPS_DATADIR
371
372#
373# Set a new home directory to avoid getting user options mixed in...
374#
375
376HOME=/tmp/cups-$user
377export HOME
378
379#
380# Start the server; run as foreground daemon in the background...
381#
382
383echo "Starting scheduler:"
384echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &"
385echo ""
386
387$valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &
388cupsd=$!
389
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 &
393#fi
394
395if test "x$testtype" = x0; then
396 echo "Scheduler is PID $cupsd and is listening on port 8631."
397 echo ""
398 echo "Set the IPP_PORT environment variable to 8631 to test the software"
399 echo "interactively from the command-line."
400 exit 0
401fi
402
403echo "Scheduler is PID $cupsd; run debugger now if you need to."
404echo ""
bd7854cb 405echo $ac_n "Press ENTER to continue... $ac_c"
ef416fc2 406read junk
407
408IPP_PORT=$port; export IPP_PORT
409
410while true; do
411 running=`../systemv/lpstat -r 2>/dev/null`
412 if test "x$running" = "xscheduler is running"; then
413 break
414 fi
415
416 echo "Waiting for scheduler to become ready..."
417 sleep 10
418done
419
420#
421# Create the test report source file...
422#
423
bd7854cb 424strfile=cups-str-1.2-`date +%Y-%m-%d`-`whoami`.html
ef416fc2 425
426rm -f $strfile
427cat str-header.html >$strfile
428
429#
430# Run the IPP tests...
431#
432
433echo "Running IPP compliance tests..."
434
bd7854cb 435echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
ef416fc2 436echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
437echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
438echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
439echo "<PRE>" >>$strfile
440
441fail=0
442for file in 4*.test; do
443 echo "Performing $file..."
444 echo "" >>$strfile
445
446 ./ipptest ipp://localhost:$port/printers $file >>$strfile
447 status=$?
448
449 if test $status != 0; then
450 echo Test failed.
451 fail=`expr $fail + 1`
452 fi
453done
454
455echo "</PRE>" >>$strfile
456
457#
458# Run the command tests...
459#
460
461echo "Running command tests..."
462
bd7854cb 463echo "<H1>2 - Command Tests</H1>" >>$strfile
ef416fc2 464echo "<P>This section provides the results to the command tests" >>$strfile
465echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
466echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
467echo "<PRE>" >>$strfile
468
469for file in 5*.sh; do
470 echo "Performing $file..."
471 echo "" >>$strfile
472 echo "\"$file\":" >>$strfile
473
474 sh $file $pjobs >>$strfile
475 status=$?
476
477 if test $status != 0; then
478 echo Test failed.
479 fail=`expr $fail + 1`
480 fi
481done
482
483echo "</PRE>" >>$strfile
484
485#
486# Wait for jobs to complete...
487#
488
489while true; do
490 jobs=`../systemv/lpstat 2>/dev/null`
491 if test "x$jobs" = "x"; then
492 break
493 fi
494
495 echo "Waiting for jobs to complete..."
496 sleep 10
497done
498
499#
500# Stop the server...
501#
502
503kill $cupsd
504
505#
506# Append the log files for post-mortim...
507#
508
bd7854cb 509echo "<H1>3 - Log Files</H1>" >>$strfile
ef416fc2 510
511echo "<H2>access_log</H2>" >>$strfile
512echo "<PRE>" >>$strfile
513cat /tmp/cups-$user/log/access_log >>$strfile
514echo "</PRE>" >>$strfile
515
516echo "<H2>error_log</H2>" >>$strfile
517echo "<PRE>" >>$strfile
518cat /tmp/cups-$user/log/error_log >>$strfile
519echo "</PRE>" >>$strfile
520
521echo "<H2>page_log</H2>" >>$strfile
522echo "<PRE>" >>$strfile
523cat /tmp/cups-$user/log/page_log >>$strfile
524echo "</PRE>" >>$strfile
525
526if 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
531fi
532
533#
534# Format the reports and tell the user where to find them...
535#
536
537echo "Formatting reports..."
538
539cat str-trailer.html >>$strfile
540
ef416fc2 541echo ""
542
543if test $fail != 0; then
544 echo "$fail tests failed."
545else
546 echo "All tests were successful."
547fi
548
549if test "x$valgrind" != x; then
550 echo "Valgrind log files can be found in /tmp/cups-$user/log."
551fi
552
553echo ""
bd7854cb 554echo "See the following file for details:"
ef416fc2 555echo ""
bd7854cb 556echo " $strfile"
ef416fc2 557echo ""
558
559#
bd7854cb 560# End of "$Id: run-stp-tests.sh 5091 2006-02-08 18:39:56Z mike $"
ef416fc2 561#