1#!/bin/sh
2#
3# "$Id: run-stp-tests.sh 12104 2014-08-20 15:23:40Z msweet $"
4#
5# Perform the complete set of IPP compliance tests specified in the
6# CUPS Software Test Plan.
7#
8# Copyright 2007-2014 by Apple Inc.
9# Copyright 1997-2007 by Easy Software Products, all rights reserved.
10#
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/".
16#
17
18argcount=$#
19
20#
21# Don't allow "make check" or "make test" to be run by root...
22#
23
24if test "x`id -u`" = x0; then
25	echo Please run this as a normal user. Not supported when run as root.
26	exit 1
27fi
28
29#
30# Force the permissions of the files we create...
31#
32
33umask 022
34
35#
36# Make the IPP test program...
37#
38
39make
40
41#
42# Solaris has a non-POSIX grep in /bin...
43#
44
45if test -x /usr/xpg4/bin/grep; then
46	GREP=/usr/xpg4/bin/grep
47else
48	GREP=grep
49fi
50
51#
52# Figure out the proper echo options...
53#
54
55if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then
56        ac_n=-n
57        ac_c=
58else
59        ac_n=
60        ac_c='\c'
61fi
62
63#
64# Greet the tester...
65#
66
67echo "Welcome to the CUPS Automated Test Script."
68echo ""
69echo "Before we begin, it is important that you understand that the larger"
70echo "tests require significant amounts of RAM and disk space.  If you"
71echo "attempt to run one of the big tests on a system that lacks sufficient"
72echo "disk and virtual memory, the UNIX kernel might decide to kill one or"
73echo "more system processes that you've grown attached to, like the X"
74echo "server.  The question you may want to ask yourself before running a"
75echo "large test is: Do you feel lucky?"
76echo ""
77echo "OK, now that we have the Dirty Harry quote out of the way, please"
78echo "choose the type of test you wish to perform:"
79echo ""
80echo "0 - No testing, keep the scheduler running for me (all systems)"
81echo "1 - Basic conformance test, no load testing (all systems)"
82echo "2 - Basic conformance test, some load testing (minimum 256MB VM, 50MB disk)"
83echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
84echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
85echo ""
86echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
87
88if test $# -gt 0; then
89	testtype=$1
90	shift
91else
92	read testtype
93fi
94echo ""
95
96case "$testtype" in
97	0)
98		echo "Running in test mode (0)"
99		nprinters1=0
100		nprinters2=0
101		pjobs=0
102		pprinters=0
103		loglevel="debug2"
104		;;
105	2)
106		echo "Running the medium tests (2)"
107		nprinters1=10
108		nprinters2=20
109		pjobs=20
110		pprinters=10
111		loglevel="debug"
112		;;
113	3)
114		echo "Running the extreme tests (3)"
115		nprinters1=500
116		nprinters2=1000
117		pjobs=100
118		pprinters=50
119		loglevel="debug"
120		;;
121	4)
122		echo "Running the torture tests (4)"
123		nprinters1=10000
124		nprinters2=20000
125		pjobs=200
126		pprinters=100
127		loglevel="debug"
128		;;
129	*)
130		echo "Running the timid tests (1)"
131		nprinters1=0
132		nprinters2=0
133		pjobs=10
134		pprinters=0
135		loglevel="debug2"
136		;;
137esac
138
139#
140# See if we want to do SSL testing...
141#
142
143echo ""
144echo "Now you can choose whether to create a SSL/TLS encryption key and"
145echo "certificate for testing; these tests currently require the OpenSSL"
146echo "tools:"
147echo ""
148echo "0 - Do not do SSL/TLS encryption tests"
149echo "1 - Test but do not require encryption"
150echo "2 - Test and require encryption"
151echo ""
152echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
153
154if test $# -gt 0; then
155	ssltype=$1
156	shift
157else
158	read ssltype
159fi
160echo ""
161
162case "$ssltype" in
163	1)
164		echo "Will test but not require encryption (1)"
165		;;
166	2)
167		echo "Will test and require encryption (2)"
168		;;
169	*)
170		echo "Not using SSL/TLS (0)"
171		ssltype=0
172		;;
173esac
174
175#
176# Information for the server/tests...
177#
178
179user="$USER"
180if test -z "$user"; then
181	if test -x /usr/ucb/whoami; then
182		user=`/usr/ucb/whoami`
183	else
184		user=`whoami`
185	fi
186
187	if test -z "$user"; then
188		user="unknown"
189	fi
190fi
191
192port=8631
193cwd=`pwd`
194root=`dirname $cwd`
195CUPS_TESTROOT="$root"; export CUPS_TESTROOT
196
197if test -d /private/tmp; then
198	BASE=/private/tmp/cups-$user
199else
200	BASE=/tmp/cups-$user
201fi
202export BASE
203
204#
205# Make sure that the LPDEST and PRINTER environment variables are
206# not included in the environment that is passed to the tests.  These
207# will usually cause tests to fail erroneously...
208#
209
210unset LPDEST
211unset PRINTER
212
213#
214# See if we want to use valgrind...
215#
216
217echo ""
218echo "This test script can use the Valgrind software from:"
219echo ""
220echo "    http://developer.kde.org/~sewardj/"
221echo ""
222echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
223
224if test $# -gt 0; then
225	usevalgrind=$1
226	shift
227else
228	read usevalgrind
229fi
230echo ""
231
232case "$usevalgrind" in
233	Y* | y*)
234		VALGRIND="valgrind --tool=memcheck --log-file=$BASE/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes --read-var-info=yes"
235		if test `uname` = Darwin; then
236			VALGRIND="$VALGRIND --dsymutil=yes"
237		fi
238		export VALGRIND
239		echo "Using Valgrind; log files can be found in $BASE/log..."
240		;;
241
242	*)
243		VALGRIND=""
244		export VALGRIND
245		;;
246esac
247
248#
249# See if we want to do debug logging of the libraries...
250#
251
252echo ""
253echo "If CUPS was built with the --enable-debug-printfs configure option, you"
254echo "can enable debug logging of the libraries."
255echo ""
256echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
257
258if test $# -gt 0; then
259	usedebugprintfs=$1
260	shift
261else
262	read usedebugprintfs
263fi
264echo ""
265
266case "$usedebugprintfs" in
267	Y* | y*)
268		echo "Enabling debug printfs (level 5); log files can be found in $BASE/log..."
269		CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
270		CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
271		CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
272		;;
273
274	0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
275		echo "Enabling debug printfs (level $usedebugprintfs); log files can be found in $BASE/log..."
276		CUPS_DEBUG_LOG="$BASE/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
277		CUPS_DEBUG_LEVEL="$usedebugprintfs"; export CUPS_DEBUG_LEVEL
278		CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetResponse|cupsSend).*$'; export CUPS_DEBUG_FILTER
279		;;
280
281	*)
282		;;
283esac
284
285#
286# Start by creating temporary directories for the tests...
287#
288
289echo "Creating directories for test..."
290
291rm -rf $BASE
292mkdir $BASE
293mkdir $BASE/bin
294mkdir $BASE/bin/backend
295mkdir $BASE/bin/driver
296mkdir $BASE/bin/filter
297mkdir $BASE/certs
298mkdir $BASE/share
299mkdir $BASE/share/banners
300mkdir $BASE/share/drv
301mkdir $BASE/share/locale
302for file in ../locale/cups_*.po; do
303	loc=`basename $file .po | cut -c 6-`
304	mkdir $BASE/share/locale/$loc
305	ln -s $root/locale/cups_$loc.po $BASE/share/locale/$loc
306	ln -s $root/locale/ppdc_$loc.po $BASE/share/locale/$loc
307done
308mkdir $BASE/share/mime
309mkdir $BASE/share/model
310mkdir $BASE/share/ppdc
311mkdir $BASE/interfaces
312mkdir $BASE/log
313mkdir $BASE/ppd
314mkdir $BASE/spool
315mkdir $BASE/spool/temp
316mkdir $BASE/ssl
317
318ln -s $root/backend/dnssd $BASE/bin/backend
319ln -s $root/backend/http $BASE/bin/backend
320ln -s $root/backend/ipp $BASE/bin/backend
321ln -s $root/backend/lpd $BASE/bin/backend
322ln -s $root/backend/mdns $BASE/bin/backend
323ln -s $root/backend/pseudo $BASE/bin/backend
324ln -s $root/backend/snmp $BASE/bin/backend
325ln -s $root/backend/socket $BASE/bin/backend
326ln -s $root/backend/usb $BASE/bin/backend
327ln -s $root/cgi-bin $BASE/bin
328ln -s $root/monitor $BASE/bin
329ln -s $root/notifier $BASE/bin
330ln -s $root/scheduler $BASE/bin/daemon
331ln -s $root/filter/commandtops $BASE/bin/filter
332ln -s $root/filter/gziptoany $BASE/bin/filter
333ln -s $root/filter/pstops $BASE/bin/filter
334ln -s $root/filter/rastertoepson $BASE/bin/filter
335ln -s $root/filter/rastertohp $BASE/bin/filter
336ln -s $root/filter/rastertolabel $BASE/bin/filter
337ln -s $root/filter/rastertopwg $BASE/bin/filter
338
339ln -s $root/data/classified $BASE/share/banners
340ln -s $root/data/confidential $BASE/share/banners
341ln -s $root/data/secret $BASE/share/banners
342ln -s $root/data/standard $BASE/share/banners
343ln -s $root/data/topsecret $BASE/share/banners
344ln -s $root/data/unclassified $BASE/share/banners
345ln -s $root/data $BASE/share
346ln -s $root/ppdc/sample.drv $BASE/share/drv
347ln -s $root/conf/mime.types $BASE/share/mime
348ln -s $root/conf/mime.convs $BASE/share/mime
349ln -s $root/data/*.h $BASE/share/ppdc
350ln -s $root/data/*.defs $BASE/share/ppdc
351ln -s $root/templates $BASE/share
352
353#
354# Local filters and configuration files...
355#
356
357instfilter() {
358	# instfilter src dst format
359	#
360	# See if the filter exists in a standard location; if so, make a
361	# symlink, otherwise create a dummy script for the specified format.
362	#
363	src="$1"
364	dst="$2"
365	format="$3"
366
367	for dir in /usr/libexec/cups/filter /usr/lib/cups/filter; do
368		if test -x "$dir/$src"; then
369			ln -s "$dir/$src" "$BASE/bin/filter/$dst"
370			return
371		fi
372	done
373
374	# Source filter not present, create a dummy filter
375	case $format in
376		passthru)
377			ln -s gziptoany "$BASE/bin/filter/$dst"
378			;;
379		pdf)
380			cat >"$BASE/bin/filter/$dst" <<EOF
381#!/bin/sh
382case "\$5" in
383	*media=a4* | *media=iso_a4* | *PageSize=A4*)
384		cat "$root/test/onepage-a4.pdf"
385		;;
386	*)
387		cat "$root/test/onepage-letter.pdf"
388		;;
389esac
390EOF
391			chmod +x "$BASE/bin/filter/$dst"
392			;;
393		ps)
394			cat >"$BASE/bin/filter/$dst" <<EOF
395#!/bin/sh
396case "\$5" in
397	*media=a4* | *media=iso_a4* | *PageSize=A4*)
398		cat "$root/test/onepage-a4.ps"
399		;;
400	*)
401		cat "$root/test/onepage-letter.ps"
402		;;
403esac
404EOF
405			chmod +x "$BASE/bin/filter/$dst"
406			;;
407		raster)
408			cat >"$BASE/bin/filter/$dst" <<EOF
409#!/bin/sh
410case "\$5" in
411	*media=a4* | *media=iso_a4* | *PageSize=A4*)
412		gunzip -c "$root/test/onepage-a4-300-black-1.pwg.gz"
413		;;
414	*)
415		gunzip -c "$root/test/onepage-letter-300-black-1.pwg.gz"
416		;;
417esac
418EOF
419			chmod +x "$BASE/bin/filter/$dst"
420			;;
421	esac
422}
423
424ln -s $root/test/test.convs $BASE/share/mime
425
426if test `uname` = Darwin; then
427	instfilter cgbannertopdf bannertopdf pdf
428	instfilter cgimagetopdf imagetopdf pdf
429	instfilter cgpdftopdf pdftopdf passthru
430	instfilter cgpdftops pdftops ps
431	instfilter cgpdftoraster pdftoraster raster
432	instfilter cgtexttopdf texttopdf pdf
433	instfilter pstocupsraster pstoraster raster
434	instfilter pstopdffilter pstopdf pdf
435else
436	instfilter bannertopdf bannertopdf pdf
437	instfilter bannertops bannertops ps
438	instfilter imagetopdf imagetopdf pdf
439	instfilter pdftopdf pdftopdf passthru
440	instfilter pdftops pdftops ps
441	instfilter pdftoraster pdftoraster raster
442	instfilter pstoraster pstoraster raster
443	instfilter texttopdf texttopdf pdf
444
445	if test -d /usr/share/cups/charsets; then
446		ln -s /usr/share/cups/charsets $BASE/share
447	fi
448fi
449
450#
451# Then create the necessary config files...
452#
453
454echo "Creating cupsd.conf for test..."
455
456if test $ssltype = 2; then
457	encryption="Encryption Required"
458else
459	encryption=""
460fi
461
462cat >$BASE/cupsd.conf <<EOF
463StrictConformance Yes
464Browsing Off
465Listen localhost:$port
466Listen $BASE/sock
467PassEnv LOCALEDIR
468PassEnv DYLD_INSERT_LIBRARIES
469MaxSubscriptions 3
470MaxLogSize 0
471AccessLogLevel actions
472LogLevel $loglevel
473LogTimeFormat usecs
474PreserveJobHistory Yes
475PreserveJobFiles No
476<Policy default>
477<Limit All>
478Order Allow,Deny
479$encryption
480</Limit>
481</Policy>
482EOF
483
484if test $testtype = 0; then
485	echo WebInterface yes >>$BASE/cupsd.conf
486fi
487
488cat >$BASE/cups-files.conf <<EOF
489FileDevice yes
490Printcap
491User $user
492ServerRoot $BASE
493StateDir $BASE
494ServerBin $BASE/bin
495CacheDir $BASE/share
496DataDir $BASE/share
497FontPath $BASE/share/fonts
498DocumentRoot $root/doc
499RequestRoot $BASE/spool
500TempDir $BASE/spool/temp
501AccessLog $BASE/log/access_log
502ErrorLog $BASE/log/error_log
503PageLog $BASE/log/page_log
504EOF
505
506if test $ssltype != 0 -a `uname` = Darwin; then
507	echo "ServerKeychain $HOME/Library/Keychains/login.keychain" >> $BASE/cups-files.conf
508fi
509
510#
511# Setup lots of test queues - half with PPD files, half without...
512#
513
514echo "Creating printers.conf for test..."
515
516i=1
517while test $i -le $nprinters1; do
518	cat >>$BASE/printers.conf <<EOF
519<Printer test-$i>
520Accepting Yes
521DeviceURI file:/dev/null
522Info Test PS printer $i
523JobSheets none none
524Location CUPS test suite
525State Idle
526StateMessage Printer $1 is idle.
527</Printer>
528EOF
529
530	cp testps.ppd $BASE/ppd/test-$i.ppd
531
532	i=`expr $i + 1`
533done
534
535while test $i -le $nprinters2; do
536	cat >>$BASE/printers.conf <<EOF
537<Printer test-$i>
538Accepting Yes
539DeviceURI file:/dev/null
540Info Test raw printer $i
541JobSheets none none
542Location CUPS test suite
543State Idle
544StateMessage Printer $1 is idle.
545</Printer>
546EOF
547
548	i=`expr $i + 1`
549done
550
551if test -f $BASE/printers.conf; then
552	cp $BASE/printers.conf $BASE/printers.conf.orig
553else
554	touch $BASE/printers.conf.orig
555fi
556
557#
558# Setup the paths...
559#
560
561echo "Setting up environment variables for test..."
562
563if test "x$LD_LIBRARY_PATH" = x; then
564	LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
565else
566	LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$LD_LIBRARY_PATH"
567fi
568
569export LD_LIBRARY_PATH
570
571LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/ppdc/libcupsppdc.so.1"
572if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
573	LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
574fi
575export LD_PRELOAD
576
577if test "x$DYLD_LIBRARY_PATH" = x; then
578	DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
579else
580	DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$DYLD_LIBRARY_PATH"
581fi
582
583export DYLD_LIBRARY_PATH
584
585if test "x$SHLIB_PATH" = x; then
586	SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc"
587else
588	SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/ppdc:$SHLIB_PATH"
589fi
590
591export SHLIB_PATH
592
593CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
594CUPS_SERVER=localhost:8631; export CUPS_SERVER
595CUPS_SERVERROOT=$BASE; export CUPS_SERVERROOT
596CUPS_STATEDIR=$BASE; export CUPS_STATEDIR
597CUPS_DATADIR=$BASE/share; export CUPS_DATADIR
598LOCALEDIR=$BASE/share/locale; export LOCALEDIR
599
600#
601# Set a new home directory to avoid getting user options mixed in...
602#
603
604HOME=$BASE
605export HOME
606
607#
608# Force POSIX locale for tests...
609#
610
611LANG=C
612export LANG
613
614LC_MESSAGES=C
615export LC_MESSAGES
616
617#
618# Start the server; run as foreground daemon in the background...
619#
620
621echo "Starting scheduler:"
622echo "    $VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &"
623echo ""
624
625if test `uname` = Darwin -a "x$VALGRIND" = x; then
626	DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocStackLogging=1 ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
627else
628	$VALGRIND ../scheduler/cupsd -c $BASE/cupsd.conf -f >$BASE/log/debug_log 2>&1 &
629fi
630
631cupsd=$!
632
633if test "x$testtype" = x0; then
634	# Not running tests...
635	echo "Scheduler is PID $cupsd and is listening on port 8631."
636	echo ""
637
638	# Create a helper script to run programs with...
639	runcups="$BASE/runcups"
640
641	echo "#!/bin/sh" >$runcups
642	echo "# Helper script for running CUPS test instance." >>$runcups
643	echo "" >>$runcups
644	echo "# Set required environment variables..." >>$runcups
645	echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
646	echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
647	echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
648	echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
649	echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
650	echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
651	echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
652	echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
653	echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
654	if test "x$CUPS_DEBUG_LEVEL" != x; then
655		echo "CUPS_DEBUG_FILTER='$CUPS_DEBUG_FILTER'; export CUPS_DEBUG_FILTER" >>$runcups
656		echo "CUPS_DEBUG_LEVEL=$CUPS_DEBUG_LEVEL; export CUPS_DEBUG_LEVEL" >>$runcups
657		echo "CUPS_DEBUG_LOG='$CUPS_DEBUG_LOG'; export CUPS_DEBUG_LOG" >>$runcups
658	fi
659	echo "" >>$runcups
660	echo "# Run command..." >>$runcups
661	echo "exec \"\$@\"" >>$runcups
662
663	chmod +x $runcups
664
665	echo "The $runcups helper script can be used to test programs"
666	echo "with the server."
667	exit 0
668fi
669
670if test $argcount -eq 0; then
671	echo "Scheduler is PID $cupsd; run debugger now if you need to."
672	echo ""
673	echo $ac_n "Press ENTER to continue... $ac_c"
674	read junk
675else
676	echo "Scheduler is PID $cupsd."
677	sleep 2
678fi
679
680IPP_PORT=$port; export IPP_PORT
681
682while true; do
683	running=`../systemv/lpstat -r 2>/dev/null`
684	if test "x$running" = "xscheduler is running"; then
685		break
686	fi
687
688	echo "Waiting for scheduler to become ready..."
689	sleep 10
690done
691
692#
693# Create the test report source file...
694#
695
696date=`date "+%Y-%m-%d"`
697strfile=$BASE/cups-str-2.0-$date-$user.html
698
699rm -f $strfile
700cat str-header.html >$strfile
701
702#
703# Run the IPP tests...
704#
705
706echo ""
707echo "Running IPP compliance tests..."
708
709echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
710echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
711echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
712echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
713echo "<PRE>" >>$strfile
714
715fail=0
716for file in 4*.test ipp-2.1.test; do
717	echo $ac_n "Performing $file: $ac_c"
718	echo "" >>$strfile
719
720	if test $file = ipp-2.1.test; then
721		uri="ipp://localhost:$port/printers/Test1"
722		options="-V 2.1 -d NOPRINT=1 -f testfile.ps"
723	else
724		uri="ipp://localhost:$port/printers"
725		options=""
726	fi
727	$VALGRIND ./ipptool -tI $options $uri $file >> $strfile
728	status=$?
729
730	if test $status != 0; then
731		echo FAIL
732		fail=`expr $fail + 1`
733	else
734		echo PASS
735	fi
736done
737
738echo "</PRE>" >>$strfile
739
740#
741# Run the command tests...
742#
743
744echo ""
745echo "Running command tests..."
746
747echo "<H1>2 - Command Tests</H1>" >>$strfile
748echo "<P>This section provides the results to the command tests" >>$strfile
749echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
750echo $date by $user on `hostname`. >>$strfile
751echo "<PRE>" >>$strfile
752
753for file in 5*.sh; do
754	echo $ac_n "Performing $file: $ac_c"
755	echo "" >>$strfile
756	echo "\"$file\":" >>$strfile
757
758	sh $file $pjobs $pprinters >> $strfile
759	status=$?
760
761	if test $status != 0; then
762		echo FAIL
763		fail=`expr $fail + 1`
764	else
765		echo PASS
766	fi
767done
768
769#
770# Log all allocations made by the scheduler...
771#
772if test `uname` = Darwin -a "x$VALGRIND" = x; then
773	malloc_history $cupsd -callTree -showContent >$BASE/log/malloc_log 2>&1
774fi
775
776#
777# Restart the server...
778#
779
780echo $ac_n "Performing restart test: $ac_c"
781echo "" >>$strfile
782echo "\"5.10-restart\":" >>$strfile
783
784kill -HUP $cupsd
785
786while true; do
787	sleep 10
788
789	running=`../systemv/lpstat -r 2>/dev/null`
790	if test "x$running" = "xscheduler is running"; then
791		break
792	fi
793done
794
795description="`lpstat -l -p Test1 | grep Description | sed -e '1,$s/^[^:]*: //g'`"
796if test "x$description" != "xTest Printer 1"; then
797	echo "Failed, printer-info for Test1 is '$description', expected 'Test Printer 1'." >>$strfile
798	echo "FAIL (got '$description', expected 'Test Printer 1')"
799	fail=`expr $fail + 1`
800else
801	echo "Passed." >>$strfile
802	echo PASS
803fi
804
805echo "</PRE>" >>$strfile
806
807#
808# Stop the server...
809#
810
811kill $cupsd
812
813#
814# Append the log files for post-mortim...
815#
816
817echo "<H1>3 - Log Files</H1>" >>$strfile
818
819#
820# Verify counts...
821#
822
823echo "Test Summary"
824echo ""
825echo "<H2>Summary</H2>" >>$strfile
826
827# Job control files
828count=`ls -1 $BASE/spool | wc -l`
829count=`expr $count - 1`
830if test $count != 0; then
831	echo "FAIL: $count job control files were not purged."
832	echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
833	fail=`expr $fail + 1`
834else
835	echo "PASS: All job control files purged."
836	echo "<P>PASS: All job control files purged.</P>" >>$strfile
837fi
838
839# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
840count=`$GREP '^Test1 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
841expected=`expr $pjobs \* 2 + 34`
842expected2=`expr $expected + 2`
843if test $count -lt $expected -a $count -gt $expected2; then
844	echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
845	echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
846	fail=`expr $fail + 1`
847else
848	echo "PASS: Printer 'Test1' correctly produced $count page(s)."
849	echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
850fi
851
852# Paged printed on Test2
853count=`$GREP '^Test2 ' $BASE/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
854expected=`expr $pjobs \* 2 + 3`
855if test $count != $expected; then
856	echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
857	echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
858	fail=`expr $fail + 1`
859else
860	echo "PASS: Printer 'Test2' correctly produced $count page(s)."
861	echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
862fi
863
864# Paged printed on Test3
865count=`$GREP '^Test3 ' $BASE/log/page_log | grep -v total | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
866expected=2
867if test $count != $expected; then
868	echo "FAIL: Printer 'Test3' produced $count page(s), expected $expected."
869	echo "<P>FAIL: Printer 'Test3' produced $count page(s), expected $expected.</P>" >>$strfile
870	fail=`expr $fail + 1`
871else
872	echo "PASS: Printer 'Test3' correctly produced $count page(s)."
873	echo "<P>PASS: Printer 'Test3' correctly produced $count page(s).</P>" >>$strfile
874fi
875
876# Requests logged
877count=`wc -l $BASE/log/access_log | awk '{print $1}'`
878expected=`expr 37 + 18 + 28 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
879if test $count != $expected; then
880	echo "FAIL: $count requests logged, expected $expected."
881	echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
882	fail=`expr $fail + 1`
883else
884	echo "PASS: $count requests logged."
885	echo "<P>PASS: $count requests logged.</P>" >>$strfile
886fi
887
888# Did CUPS-Get-Default get logged?
889if $GREP -q CUPS-Get-Default $BASE/log/access_log; then
890	echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
891	echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
892	echo "<PRE>" >>$strfile
893	$GREP CUPS-Get-Default $BASE/log/access_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
894	echo "</PRE>" >>$strfile
895	fail=`expr $fail + 1`
896else
897	echo "PASS: CUPS-Get-Default not logged."
898	echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
899fi
900
901# Emergency log messages
902count=`$GREP '^X ' $BASE/log/error_log | wc -l | awk '{print $1}'`
903if test $count != 0; then
904	echo "FAIL: $count emergency messages, expected 0."
905	$GREP '^X ' $BASE/log/error_log
906	echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
907	echo "<PRE>" >>$strfile
908	$GREP '^X ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
909	echo "</PRE>" >>$strfile
910	fail=`expr $fail + 1`
911else
912	echo "PASS: $count emergency messages."
913	echo "<P>PASS: $count emergency messages.</P>" >>$strfile
914fi
915
916# Alert log messages
917count=`$GREP '^A ' $BASE/log/error_log | wc -l | awk '{print $1}'`
918if test $count != 0; then
919	echo "FAIL: $count alert messages, expected 0."
920	$GREP '^A ' $BASE/log/error_log
921	echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
922	echo "<PRE>" >>$strfile
923	$GREP '^A ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
924	echo "</PRE>" >>$strfile
925	fail=`expr $fail + 1`
926else
927	echo "PASS: $count alert messages."
928	echo "<P>PASS: $count alert messages.</P>" >>$strfile
929fi
930
931# Critical log messages
932count=`$GREP '^C ' $BASE/log/error_log | wc -l | awk '{print $1}'`
933if test $count != 0; then
934	echo "FAIL: $count critical messages, expected 0."
935	$GREP '^C ' $BASE/log/error_log
936	echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
937	echo "<PRE>" >>$strfile
938	$GREP '^C ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
939	echo "</PRE>" >>$strfile
940	fail=`expr $fail + 1`
941else
942	echo "PASS: $count critical messages."
943	echo "<P>PASS: $count critical messages.</P>" >>$strfile
944fi
945
946# Error log messages
947count=`$GREP '^E ' $BASE/log/error_log | wc -l | awk '{print $1}'`
948if test $count != 33; then
949	echo "FAIL: $count error messages, expected 33."
950	$GREP '^E ' $BASE/log/error_log
951	echo "<P>FAIL: $count error messages, expected 33.</P>" >>$strfile
952	echo "<PRE>" >>$strfile
953	$GREP '^E ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
954	echo "</PRE>" >>$strfile
955	fail=`expr $fail + 1`
956else
957	echo "PASS: $count error messages."
958	echo "<P>PASS: $count error messages.</P>" >>$strfile
959fi
960
961# Warning log messages
962count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
963if test $count != 18; then
964	echo "FAIL: $count warning messages, expected 18."
965	$GREP '^W ' $BASE/log/error_log
966	echo "<P>FAIL: $count warning messages, expected 18.</P>" >>$strfile
967	echo "<PRE>" >>$strfile
968	$GREP '^W ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
969	echo "</PRE>" >>$strfile
970	fail=`expr $fail + 1`
971else
972	echo "PASS: $count warning messages."
973	echo "<P>PASS: $count warning messages.</P>" >>$strfile
974fi
975
976# Notice log messages
977count=`$GREP '^N ' $BASE/log/error_log | wc -l | awk '{print $1}'`
978if test $count != 0; then
979	echo "FAIL: $count notice messages, expected 0."
980	$GREP '^N ' $BASE/log/error_log
981	echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
982	echo "<PRE>" >>$strfile
983	$GREP '^N ' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
984	echo "</PRE>" >>$strfile
985	fail=`expr $fail + 1`
986else
987	echo "PASS: $count notice messages."
988	echo "<P>PASS: $count notice messages.</P>" >>$strfile
989fi
990
991# Info log messages
992count=`$GREP '^I ' $BASE/log/error_log | wc -l | awk '{print $1}'`
993if test $count = 0; then
994	echo "FAIL: $count info messages, expected more than 0."
995	echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
996	fail=`expr $fail + 1`
997else
998	echo "PASS: $count info messages."
999	echo "<P>PASS: $count info messages.</P>" >>$strfile
1000fi
1001
1002# Debug log messages
1003count=`$GREP '^D ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1004if test $count = 0; then
1005	echo "FAIL: $count debug messages, expected more than 0."
1006	echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
1007	fail=`expr $fail + 1`
1008else
1009	echo "PASS: $count debug messages."
1010	echo "<P>PASS: $count debug messages.</P>" >>$strfile
1011fi
1012
1013# Debug2 log messages
1014count=`$GREP '^d ' $BASE/log/error_log | wc -l | awk '{print $1}'`
1015if test $count = 0; then
1016	echo "FAIL: $count debug2 messages, expected more than 0."
1017	echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
1018	fail=`expr $fail + 1`
1019else
1020	echo "PASS: $count debug2 messages."
1021	echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
1022fi
1023
1024# Log files...
1025echo "<H2>access_log</H2>" >>$strfile
1026echo "<PRE>" >>$strfile
1027sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/access_log >>$strfile
1028echo "</PRE>" >>$strfile
1029
1030echo "<H2>error_log</H2>" >>$strfile
1031echo "<PRE>" >>$strfile
1032$GREP -v '^d' $BASE/log/error_log | sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' >>$strfile
1033echo "</PRE>" >>$strfile
1034
1035echo "<H2>page_log</H2>" >>$strfile
1036echo "<PRE>" >>$strfile
1037sed -e '1,$s/&/&amp;/g' -e '1,$s/</&lt;/g' $BASE/log/page_log >>$strfile
1038echo "</PRE>" >>$strfile
1039
1040#
1041# Format the reports and tell the user where to find them...
1042#
1043
1044cat str-trailer.html >>$strfile
1045
1046echo ""
1047
1048if test $fail != 0; then
1049	echo "$fail tests failed."
1050	cp $BASE/log/error_log error_log-$date-$user
1051	cp $strfile .
1052else
1053	echo "All tests were successful."
1054fi
1055
1056echo "Log files can be found in $BASE/log."
1057echo "A HTML report was created in $strfile."
1058echo ""
1059
1060if test $fail != 0; then
1061	echo "Copies of the error_log and `basename $strfile` files are in"
1062	echo "`pwd`."
1063	echo ""
1064
1065	exit 1
1066fi
1067
1068#
1069# End of "$Id: run-stp-tests.sh 12104 2014-08-20 15:23:40Z msweet $"
1070#
1071