]> 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#
e1d6a774 3# "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z 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
e1d6a774 152user="$USER"
153if test -z "$user"; then
154 if test -x /usr/ucb/whoami; then
155 user=`/usr/ucb/whoami`
156 else
157 user=`whoami`
158 fi
159
160 if test -z "$user"; then
161 user="unknown"
162 fi
163fi
164
ef416fc2 165port=8631
166cwd=`pwd`
167root=`dirname $cwd`
168
169#
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...
173#
174
175typeset +x LPDEST
176typeset +x PRINTER
177
178#
179# See if we want to use valgrind...
180#
181
182echo ""
183echo "This test script can use the Valgrind software from:"
184echo ""
185echo " http://developer.kde.org/~sewardj/"
186echo ""
bd7854cb 187echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
ef416fc2 188
189read usevalgrind
bd7854cb 190echo ""
ef416fc2 191
192case "$usevalgrind" in
193 Y* | y*)
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..."
196 ;;
197
198 *)
199 valgrind=""
200 ;;
201esac
202
203#
204# Start by creating temporary directories for the tests...
205#
206
207rm -rf /tmp/cups-$user
208mkdir /tmp/cups-$user
209mkdir /tmp/cups-$user/bin
210mkdir /tmp/cups-$user/bin/backend
211mkdir /tmp/cups-$user/bin/filter
212mkdir /tmp/cups-$user/certs
213mkdir /tmp/cups-$user/share
214mkdir /tmp/cups-$user/share/banners
215mkdir /tmp/cups-$user/share/model
216mkdir /tmp/cups-$user/interfaces
217mkdir /tmp/cups-$user/log
218mkdir /tmp/cups-$user/ppd
219mkdir /tmp/cups-$user/spool
220mkdir /tmp/cups-$user/spool/temp
221mkdir /tmp/cups-$user/ssl
222
223ln -s $root/backend/http /tmp/cups-$user/bin/backend
224ln -s $root/backend/ipp /tmp/cups-$user/bin/backend
225ln -s $root/backend/lpd /tmp/cups-$user/bin/backend
226ln -s $root/backend/parallel /tmp/cups-$user/bin/backend
227ln -s $root/backend/serial /tmp/cups-$user/bin/backend
228ln -s $root/backend/socket /tmp/cups-$user/bin/backend
229ln -s $root/backend/usb /tmp/cups-$user/bin/backend
230ln -s $root/cgi-bin /tmp/cups-$user/bin
bd7854cb 231ln -s $root/monitor /tmp/cups-$user/bin
ef416fc2 232ln -s $root/notifier /tmp/cups-$user/bin
233ln -s $root/scheduler /tmp/cups-$user/bin/daemon
234ln -s $root/filter/hpgltops /tmp/cups-$user/bin/filter
235ln -s $root/filter/imagetops /tmp/cups-$user/bin/filter
236ln -s $root/filter/imagetoraster /tmp/cups-$user/bin/filter
237ln -s $root/filter/pstops /tmp/cups-$user/bin/filter
238ln -s $root/filter/rastertoepson /tmp/cups-$user/bin/filter
239ln -s $root/filter/rastertohp /tmp/cups-$user/bin/filter
240ln -s $root/filter/texttops /tmp/cups-$user/bin/filter
241ln -s $root/pdftops/pdftops /tmp/cups-$user/bin/filter
242
243ln -s $root/data/classified /tmp/cups-$user/share/banners
244ln -s $root/data/confidential /tmp/cups-$user/share/banners
245ln -s $root/data/secret /tmp/cups-$user/share/banners
246ln -s $root/data/standard /tmp/cups-$user/share/banners
247ln -s $root/data/topsecret /tmp/cups-$user/share/banners
248ln -s $root/data/unclassified /tmp/cups-$user/share/banners
249ln -s $root/data /tmp/cups-$user/share/charsets
250ln -s $root/data /tmp/cups-$user/share
251ln -s $root/fonts /tmp/cups-$user/share
252ln -s $root/ppd/*.ppd /tmp/cups-$user/share/model
253ln -s $root/templates /tmp/cups-$user/share
254
255if test $ssltype != 0; then
256 mkdir $root/ssl
257 cp server.* $root/ssl
258fi
259
260#
261# Then create the necessary config files...
262#
263
264if test $ssltype = 2; then
265 encryption="Encryption Required"
266else
267 encryption=""
268fi
269
270cat >/tmp/cups-$user/cupsd.conf <<EOF
271Browsing Off
272FileDevice yes
273Printcap
274Listen 127.0.0.1:$port
275User $user
276ServerRoot /tmp/cups-$user
277StateDir /tmp/cups-$user
278ServerBin /tmp/cups-$user/bin
279CacheDir /tmp/cups-$user/share
280DataDir /tmp/cups-$user/share
281FontPath /tmp/cups-$user/share/fonts
282DocumentRoot $root/doc
283RequestRoot /tmp/cups-$user/spool
284TempDir /tmp/cups-$user/spool/temp
285MaxLogSize 0
286AccessLog /tmp/cups-$user/log/access_log
287ErrorLog /tmp/cups-$user/log/error_log
288PageLog /tmp/cups-$user/log/page_log
289LogLevel debug
290PreserveJobHistory Yes
291<Policy default>
292<Limit All>
293Order Deny,Allow
294Deny from all
295Allow from 127.0.0.1
296$encryption
297</Limit>
298</Policy>
299EOF
300
301touch /tmp/cups-$user/classes.conf
302touch /tmp/cups-$user/printers.conf
303
304#
305# Setup lots of test queues - 500 with PPD files, 500 without...
306#
307
308i=1
309while test $i -le $nprinters1; do
310 cat >>/tmp/cups-$user/printers.conf <<EOF
311<Printer test-$i>
312Accepting Yes
313DeviceURI file:/dev/null
314Info Test PS printer $i
315JobSheets none none
316Location CUPS test suite
317State Idle
318StateMessage Printer $1 is idle.
319</Printer>
320EOF
321
322 cp testps.ppd /tmp/cups-$user/ppd/test-$i.ppd
323
324 i=`expr $i + 1`
325done
326
327while test $i -le $nprinters2; do
328 cat >>/tmp/cups-$user/printers.conf <<EOF
329<Printer test-$i>
330Accepting Yes
331DeviceURI file:/dev/null
332Info Test raw printer $i
333JobSheets none none
334Location CUPS test suite
335State Idle
336StateMessage Printer $1 is idle.
337</Printer>
338EOF
339
340 i=`expr $i + 1`
341done
342
343cp /tmp/cups-$user/printers.conf /tmp/cups-$user/printers.conf.orig
344
345cp $root/conf/mime.types /tmp/cups-$user/mime.types
346cp $root/conf/mime.convs /tmp/cups-$user/mime.convs
347
348#
349# Setup the paths...
350#
351
352if test "x$LD_LIBRARY_PATH" = x; then
353 LD_LIBRARY_PATH="$root/cups:$root/filter"
354else
355 LD_LIBRARY_PATH="$root/cups:$root/filter:$LD_LIBRARY_PATH"
356fi
357
358export LD_LIBRARY_PATH
359
360LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
361export LD_PRELOAD
362
363if test "x$DYLD_LIBRARY_PATH" = x; then
364 DYLD_LIBRARY_PATH="$root/cups:$root/filter"
365else
366 DYLD_LIBRARY_PATH="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
367fi
368
369export DYLD_LIBRARY_PATH
370
371if test "x$SHLIB_PATH" = x; then
372 SHLIB_PATH="$root/cups:$root/filter"
373else
374 SHLIB_PATH="$root/cups:$root/filter:$SHLIB_PATH"
375fi
376
377export SHLIB_PATH
378
379CUPS_SERVER=localhost; export CUPS_SERVER
380CUPS_SERVERROOT=/tmp/cups-$user; export CUPS_SERVERROOT
381CUPS_STATEDIR=/tmp/cups-$user; export CUPS_STATEDIR
382CUPS_DATADIR=/tmp/cups-$user/share; export CUPS_DATADIR
383
384#
385# Set a new home directory to avoid getting user options mixed in...
386#
387
388HOME=/tmp/cups-$user
389export HOME
390
391#
392# Start the server; run as foreground daemon in the background...
393#
394
395echo "Starting scheduler:"
396echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &"
397echo ""
398
399$valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &
400cupsd=$!
401
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 &
405#fi
406
407if test "x$testtype" = x0; then
408 echo "Scheduler is PID $cupsd and is listening on port 8631."
409 echo ""
410 echo "Set the IPP_PORT environment variable to 8631 to test the software"
411 echo "interactively from the command-line."
412 exit 0
413fi
414
415echo "Scheduler is PID $cupsd; run debugger now if you need to."
416echo ""
bd7854cb 417echo $ac_n "Press ENTER to continue... $ac_c"
ef416fc2 418read junk
419
420IPP_PORT=$port; export IPP_PORT
421
422while true; do
423 running=`../systemv/lpstat -r 2>/dev/null`
424 if test "x$running" = "xscheduler is running"; then
425 break
426 fi
427
428 echo "Waiting for scheduler to become ready..."
429 sleep 10
430done
431
432#
433# Create the test report source file...
434#
435
e1d6a774 436strfile=cups-str-1.2-`date +%Y-%m-%d`-$user.html
ef416fc2 437
438rm -f $strfile
439cat str-header.html >$strfile
440
441#
442# Run the IPP tests...
443#
444
445echo "Running IPP compliance tests..."
446
bd7854cb 447echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
ef416fc2 448echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
449echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
e1d6a774 450echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
ef416fc2 451echo "<PRE>" >>$strfile
452
453fail=0
454for file in 4*.test; do
455 echo "Performing $file..."
456 echo "" >>$strfile
457
458 ./ipptest ipp://localhost:$port/printers $file >>$strfile
459 status=$?
460
461 if test $status != 0; then
462 echo Test failed.
463 fail=`expr $fail + 1`
464 fi
465done
466
467echo "</PRE>" >>$strfile
468
469#
470# Run the command tests...
471#
472
473echo "Running command tests..."
474
bd7854cb 475echo "<H1>2 - Command Tests</H1>" >>$strfile
ef416fc2 476echo "<P>This section provides the results to the command tests" >>$strfile
477echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
e1d6a774 478echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
ef416fc2 479echo "<PRE>" >>$strfile
480
481for file in 5*.sh; do
482 echo "Performing $file..."
483 echo "" >>$strfile
484 echo "\"$file\":" >>$strfile
485
486 sh $file $pjobs >>$strfile
487 status=$?
488
489 if test $status != 0; then
490 echo Test failed.
491 fail=`expr $fail + 1`
492 fi
493done
494
495echo "</PRE>" >>$strfile
496
497#
498# Wait for jobs to complete...
499#
500
501while true; do
502 jobs=`../systemv/lpstat 2>/dev/null`
503 if test "x$jobs" = "x"; then
504 break
505 fi
506
507 echo "Waiting for jobs to complete..."
508 sleep 10
509done
510
511#
512# Stop the server...
513#
514
515kill $cupsd
516
517#
518# Append the log files for post-mortim...
519#
520
bd7854cb 521echo "<H1>3 - Log Files</H1>" >>$strfile
ef416fc2 522
523echo "<H2>access_log</H2>" >>$strfile
524echo "<PRE>" >>$strfile
525cat /tmp/cups-$user/log/access_log >>$strfile
526echo "</PRE>" >>$strfile
527
528echo "<H2>error_log</H2>" >>$strfile
529echo "<PRE>" >>$strfile
530cat /tmp/cups-$user/log/error_log >>$strfile
531echo "</PRE>" >>$strfile
532
533echo "<H2>page_log</H2>" >>$strfile
534echo "<PRE>" >>$strfile
535cat /tmp/cups-$user/log/page_log >>$strfile
536echo "</PRE>" >>$strfile
537
538if 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
543fi
544
545#
546# Format the reports and tell the user where to find them...
547#
548
549echo "Formatting reports..."
550
551cat str-trailer.html >>$strfile
552
ef416fc2 553echo ""
554
555if test $fail != 0; then
556 echo "$fail tests failed."
557else
558 echo "All tests were successful."
559fi
560
561if test "x$valgrind" != x; then
562 echo "Valgrind log files can be found in /tmp/cups-$user/log."
563fi
564
565echo ""
bd7854cb 566echo "See the following file for details:"
ef416fc2 567echo ""
bd7854cb 568echo " $strfile"
ef416fc2 569echo ""
570
571#
e1d6a774 572# End of "$Id: run-stp-tests.sh 5262 2006-03-09 21:26:27Z mike $"
ef416fc2 573#