#!/bin/sh
#
-# "$Id: run-stp-tests.sh 4891 2006-01-07 04:50:14Z mike $"
+# "$Id: run-stp-tests.sh 9034 2010-03-09 07:03:06Z mike $"
#
# Perform the complete set of IPP compliance tests specified in the
# CUPS Software Test Plan.
#
-# Copyright 1997-2005 by Easy Software Products, all rights reserved.
+# Copyright 2007-2011 by Apple Inc.
+# Copyright 1997-2007 by Easy Software Products, all rights reserved.
#
# These coded instructions, statements, and computer programs are the
-# property of Easy Software Products and are protected by Federal
-# copyright law. Distribution and use rights are outlined in the file
-# "LICENSE.txt" which should have been included with this file. If this
-# file is missing or damaged please contact Easy Software Products
-# at:
-#
-# Attn: CUPS Licensing Information
-# Easy Software Products
-# 44141 Airport View Drive, Suite 204
-# Hollywood, Maryland 20636 USA
-#
-# Voice: (301) 373-9600
-# EMail: cups-info@cups.org
-# WWW: http://www.cups.org
+# property of Apple Inc. and are protected by Federal copyright
+# law. Distribution and use rights are outlined in the file "LICENSE.txt"
+# which should have been included with this file. If this file is
+# file is missing or damaged, see the license at "http://www.cups.org/".
#
+argcount=$#
+
#
# Make the IPP test program...
#
make
+#
+# Solaris has a non-POSIX grep in /bin...
+#
+
+if test -x /usr/xpg4/bin/grep; then
+ GREP=/usr/xpg4/bin/grep
+else
+ GREP=grep
+fi
+
+#
+# Figure out the proper echo options...
+#
+
+if (echo "testing\c"; echo 1,2,3) | $GREP c >/dev/null; then
+ ac_n=-n
+ ac_c=
+else
+ ac_n=
+ ac_c='\c'
+fi
+
#
# Greet the tester...
#
echo "3 - Basic conformance test, extreme load testing (minimum 1GB VM, 500MB disk)"
echo "4 - Basic conformance test, torture load testing (minimum 2GB VM, 1GB disk)"
echo ""
-echo "Please enter the number of the test you wish to perform:"
+echo $ac_n "Enter the number of the test you wish to perform: [1] $ac_c"
-read testtype
+if test $# -gt 0; then
+ testtype=$1
+ shift
+else
+ read testtype
+fi
+echo ""
case "$testtype" in
0)
nprinters1=0
nprinters2=0
pjobs=0
+ pprinters=0
;;
2)
echo "Running the medium tests (2)"
nprinters1=10
nprinters2=20
pjobs=20
+ pprinters=10
;;
3)
echo "Running the extreme tests (3)"
nprinters1=500
nprinters2=1000
pjobs=100
+ pprinters=50
;;
4)
echo "Running the torture tests (4)"
nprinters1=10000
nprinters2=20000
pjobs=200
+ pprinters=100
;;
*)
echo "Running the timid tests (1)"
nprinters1=0
nprinters2=0
- pjobs=0
+ pjobs=10
+ pprinters=0
;;
esac
echo "tools:"
echo ""
echo "0 - Do not do SSL/TLS encryption tests"
-echo "1 - Create a SSL/TLS certificate and key, but do not require encryption"
-echo "2 - Create a SSL/TLS certificate and key and require encryption"
+echo "1 - Test but do not require encryption"
+echo "2 - Test and require encryption"
echo ""
+echo $ac_n "Enter the number of the SSL/TLS tests to perform: [0] $ac_c"
-read ssltype
+if test $# -gt 0; then
+ ssltype=$1
+ shift
+else
+ read ssltype
+fi
+echo ""
case "$ssltype" in
- 1 | 2)
- if test -f server.key; then
- echo "Using existing SSL/TLS certificate and key..."
- else
- echo "Generating SSL/TLS certificate and key..."
- openssl req -new -x509 -keyout server.key -out server.crt -days 3650 -nodes >/dev/null <<EOF
-ZZ
-Testland
-Testville
-Test Company
-
-`hostname`
-test@domain.com
-EOF
- fi
+ 1)
+ echo "Will test but not require encryption (1)"
+ ;;
+ 2)
+ echo "Will test and require encryption (2)"
;;
-
*)
- echo "Not using SSL/TLS ($ssltype)..."
+ echo "Not using SSL/TLS (0)"
ssltype=0
;;
esac
# Information for the server/tests...
#
-user=`whoami`
+user="$USER"
+if test -z "$user"; then
+ if test -x /usr/ucb/whoami; then
+ user=`/usr/ucb/whoami`
+ else
+ user=`whoami`
+ fi
+
+ if test -z "$user"; then
+ user="unknown"
+ fi
+fi
+
port=8631
cwd=`pwd`
root=`dirname $cwd`
# will usually cause tests to fail erroneously...
#
-typeset +x LPDEST
-typeset +x PRINTER
+unset LPDEST
+unset PRINTER
#
# See if we want to use valgrind...
echo ""
echo " http://developer.kde.org/~sewardj/"
echo ""
-echo "Please enter Y to use Valgrind or N to not use Valgrind:"
+echo $ac_n "Enter Y to use Valgrind or N to not use Valgrind: [N] $ac_c"
-read usevalgrind
+if test $# -gt 0; then
+ usevalgrind=$1
+ shift
+else
+ read usevalgrind
+fi
+echo ""
case "$usevalgrind" in
Y* | y*)
- valgrind="valgrind --tool=memcheck --log-file=/tmp/cups-$user/log/valgrind --error-limit=no --leak-check=yes --trace-children=yes"
+ valgrind="valgrind --tool=memcheck --log-file=/tmp/cups-$user/log/valgrind.%p --error-limit=no --leak-check=yes --trace-children=yes --read-var-info=yes"
echo "Using Valgrind; log files can be found in /tmp/cups-$user/log..."
;;
;;
esac
+#
+# See if we want to do debug logging of the libraries...
+#
+
+echo ""
+echo "If CUPS was built with the --enable-debug-printfs configure option, you"
+echo "can enable debug logging of the libraries."
+echo ""
+echo $ac_n "Enter Y or a number from 0 to 9 to enable debug logging or N to not: [N] $ac_c"
+
+if test $# -gt 0; then
+ usedebugprintfs=$1
+ shift
+else
+ read usedebugprintfs
+fi
+echo ""
+
+case "$usedebugprintfs" in
+ Y* | y*)
+ echo "Enabling debug printfs; log files can be found in /tmp/cups-$user/log..."
+ CUPS_DEBUG_LOG="/tmp/cups-$user/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
+ CUPS_DEBUG_LEVEL=5; export CUPS_DEBUG_LEVEL
+ CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetRespond|cupsSend).*$'; export CUPS_DEBUG_FILTER
+ ;;
+
+ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)
+ echo "Enabling debug printfs; log files can be found in /tmp/cups-$user/log..."
+ CUPS_DEBUG_LOG="/tmp/cups-$user/log/debug_printfs.%d"; export CUPS_DEBUG_LOG
+ CUPS_DEBUG_LEVEL=$usedebugprintf; export CUPS_DEBUG_LEVEL
+ CUPS_DEBUG_FILTER='^(http|_http|ipp|_ipp|cups.*Request|cupsGetRespond|cupsSend).*$'; export CUPS_DEBUG_FILTER
+ ;;
+
+ *)
+ ;;
+esac
+
#
# Start by creating temporary directories for the tests...
#
+echo "Creating directories for test..."
+
rm -rf /tmp/cups-$user
mkdir /tmp/cups-$user
mkdir /tmp/cups-$user/bin
mkdir /tmp/cups-$user/bin/backend
+mkdir /tmp/cups-$user/bin/driver
mkdir /tmp/cups-$user/bin/filter
mkdir /tmp/cups-$user/certs
mkdir /tmp/cups-$user/share
mkdir /tmp/cups-$user/share/banners
+mkdir /tmp/cups-$user/share/drv
+mkdir /tmp/cups-$user/share/locale
+for file in ../locale/cups_*.po; do
+ loc=`basename $file .po | cut -c 6-`
+ mkdir /tmp/cups-$user/share/locale/$loc
+ ln -s $root/locale/cups_$loc.po /tmp/cups-$user/share/locale/$loc
+ ln -s $root/locale/ppdc_$loc.po /tmp/cups-$user/share/locale/$loc
+done
+mkdir /tmp/cups-$user/share/mime
mkdir /tmp/cups-$user/share/model
+mkdir /tmp/cups-$user/share/ppdc
mkdir /tmp/cups-$user/interfaces
mkdir /tmp/cups-$user/log
mkdir /tmp/cups-$user/ppd
mkdir /tmp/cups-$user/spool/temp
mkdir /tmp/cups-$user/ssl
+ln -s $root/backend/dnssd /tmp/cups-$user/bin/backend
ln -s $root/backend/http /tmp/cups-$user/bin/backend
ln -s $root/backend/ipp /tmp/cups-$user/bin/backend
ln -s $root/backend/lpd /tmp/cups-$user/bin/backend
-ln -s $root/backend/parallel /tmp/cups-$user/bin/backend
-ln -s $root/backend/serial /tmp/cups-$user/bin/backend
+ln -s $root/backend/mdns /tmp/cups-$user/bin/backend
+ln -s $root/backend/pseudo /tmp/cups-$user/bin/backend
+ln -s $root/backend/snmp /tmp/cups-$user/bin/backend
ln -s $root/backend/socket /tmp/cups-$user/bin/backend
ln -s $root/backend/usb /tmp/cups-$user/bin/backend
ln -s $root/cgi-bin /tmp/cups-$user/bin
+ln -s $root/monitor /tmp/cups-$user/bin
ln -s $root/notifier /tmp/cups-$user/bin
ln -s $root/scheduler /tmp/cups-$user/bin/daemon
-ln -s $root/filter/hpgltops /tmp/cups-$user/bin/filter
-ln -s $root/filter/imagetops /tmp/cups-$user/bin/filter
-ln -s $root/filter/imagetoraster /tmp/cups-$user/bin/filter
+ln -s $root/filter/commandtops /tmp/cups-$user/bin/filter
+ln -s $root/filter/gziptoany /tmp/cups-$user/bin/filter
ln -s $root/filter/pstops /tmp/cups-$user/bin/filter
ln -s $root/filter/rastertoepson /tmp/cups-$user/bin/filter
ln -s $root/filter/rastertohp /tmp/cups-$user/bin/filter
-ln -s $root/filter/texttops /tmp/cups-$user/bin/filter
-ln -s $root/pdftops/pdftops /tmp/cups-$user/bin/filter
+ln -s $root/filter/rastertolabel /tmp/cups-$user/bin/filter
+ln -s $root/filter/rastertopwg /tmp/cups-$user/bin/filter
ln -s $root/data/classified /tmp/cups-$user/share/banners
ln -s $root/data/confidential /tmp/cups-$user/share/banners
ln -s $root/data/standard /tmp/cups-$user/share/banners
ln -s $root/data/topsecret /tmp/cups-$user/share/banners
ln -s $root/data/unclassified /tmp/cups-$user/share/banners
-ln -s $root/data /tmp/cups-$user/share/charsets
ln -s $root/data /tmp/cups-$user/share
-ln -s $root/fonts /tmp/cups-$user/share
-ln -s $root/ppd/*.ppd /tmp/cups-$user/share/model
+ln -s $root/ppdc/sample.drv /tmp/cups-$user/share/drv
+ln -s $root/conf/mime.types /tmp/cups-$user/share/mime
+ln -s $root/conf/mime.convs /tmp/cups-$user/share/mime
+ln -s $root/data/*.h /tmp/cups-$user/share/ppdc
+ln -s $root/data/*.defs /tmp/cups-$user/share/ppdc
ln -s $root/templates /tmp/cups-$user/share
-if test $ssltype != 0; then
- mkdir $root/ssl
- cp server.* $root/ssl
+#
+# Mac OS X filters and configuration files...
+#
+
+if test `uname` = Darwin; then
+ ln -s /usr/libexec/cups/filter/cgpdfto* /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/cgbannertopdf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/cgimagetopdf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/cgtexttopdf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/nsimagetopdf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/nstexttopdf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/pictwpstops /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/pstoappleps /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/pstocupsraster /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/pstopdffilter /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/rastertourf /tmp/cups-$user/bin/filter
+ ln -s /usr/libexec/cups/filter/xhtmltopdf /tmp/cups-$user/bin/filter
+
+ if test -f /private/etc/cups/apple.types; then
+ ln -s /private/etc/cups/apple.* /tmp/cups-$user/share/mime
+ elif test -f /usr/share/cups/mime/apple.types; then
+ ln -s /usr/share/cups/mime/apple.* /tmp/cups-$user/share/mime
+ fi
+else
+ ln -s /usr/lib/cups/filter/bannertops /tmp/cups-$user/bin/filter
+ ln -s /usr/lib/cups/filter/imagetops /tmp/cups-$user/bin/filter
+ ln -s /usr/lib/cups/filter/imagetoraster /tmp/cups-$user/bin/filter
+ ln -s /usr/lib/cups/filter/pdftops /tmp/cups-$user/bin/filter
+ ln -s /usr/lib/cups/filter/texttops /tmp/cups-$user/bin/filter
+
+ ln -s /usr/share/cups/mime/legacy.convs /tmp/cups-$user/share/mime
fi
#
# Then create the necessary config files...
#
+echo "Creating cupsd.conf for test..."
+
if test $ssltype = 2; then
encryption="Encryption Required"
else
CacheDir /tmp/cups-$user/share
DataDir /tmp/cups-$user/share
FontPath /tmp/cups-$user/share/fonts
+PassEnv LOCALEDIR
+PassEnv DYLD_INSERT_LIBRARIES
DocumentRoot $root/doc
RequestRoot /tmp/cups-$user/spool
TempDir /tmp/cups-$user/spool/temp
+MaxSubscriptions 3
MaxLogSize 0
AccessLog /tmp/cups-$user/log/access_log
ErrorLog /tmp/cups-$user/log/error_log
PageLog /tmp/cups-$user/log/page_log
-LogLevel debug
+AccessLogLevel actions
+LogLevel debug2
+LogTimeFormat usecs
PreserveJobHistory Yes
<Policy default>
<Limit All>
</Policy>
EOF
-touch /tmp/cups-$user/classes.conf
-touch /tmp/cups-$user/printers.conf
-
#
-# Setup lots of test queues - 500 with PPD files, 500 without...
+# Setup lots of test queues - half with PPD files, half without...
#
+echo "Creating printers.conf for test..."
+
i=1
while test $i -le $nprinters1; do
cat >>/tmp/cups-$user/printers.conf <<EOF
i=`expr $i + 1`
done
-cp /tmp/cups-$user/printers.conf /tmp/cups-$user/printers.conf.orig
-
-cp $root/conf/mime.types /tmp/cups-$user/mime.types
-cp $root/conf/mime.convs /tmp/cups-$user/mime.convs
+if test -f /tmp/cups-$user/printers.conf; then
+ cp /tmp/cups-$user/printers.conf /tmp/cups-$user/printers.conf.orig
+else
+ touch /tmp/cups-$user/printers.conf.orig
+fi
#
# Setup the paths...
#
+echo "Setting up environment variables for test..."
+
if test "x$LD_LIBRARY_PATH" = x; then
- LD_LIBRARY_PATH="$root/cups:$root/filter"
+ LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
else
- LD_LIBRARY_PATH="$root/cups:$root/filter:$LD_LIBRARY_PATH"
+ LD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$LD_LIBRARY_PATH"
fi
export LD_LIBRARY_PATH
-LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2"
+LD_PRELOAD="$root/cups/libcups.so.2:$root/filter/libcupsimage.so.2:$root/cgi-bin/libcupscgi.so.1:$root/scheduler/libcupsmime.so.1:$root/driver/libcupsdriver.so.1:$root/ppdc/libcupsppdc.so.1"
+if test `uname` = SunOS -a -r /usr/lib/libCrun.so.1; then
+ LD_PRELOAD="/usr/lib/libCrun.so.1:$LD_PRELOAD"
+fi
export LD_PRELOAD
if test "x$DYLD_LIBRARY_PATH" = x; then
- DYLD_LIBRARY_PATH="$root/cups:$root/filter"
+ DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
else
- DYLD_LIBRARY_PATH="$root/cups:$root/filter:$DYLD_LIBRARY_PATH"
+ DYLD_LIBRARY_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$DYLD_LIBRARY_PATH"
fi
export DYLD_LIBRARY_PATH
if test "x$SHLIB_PATH" = x; then
- SHLIB_PATH="$root/cups:$root/filter"
+ SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc"
else
- SHLIB_PATH="$root/cups:$root/filter:$SHLIB_PATH"
+ SHLIB_PATH="$root/cups:$root/filter:$root/cgi-bin:$root/scheduler:$root/driver:$root/ppdc:$SHLIB_PATH"
fi
export SHLIB_PATH
-CUPS_SERVER=localhost; export CUPS_SERVER
+CUPS_DISABLE_APPLE_DEFAULT=yes; export CUPS_DISABLE_APPLE_DEFAULT
+CUPS_SERVER=localhost:8631; export CUPS_SERVER
CUPS_SERVERROOT=/tmp/cups-$user; export CUPS_SERVERROOT
CUPS_STATEDIR=/tmp/cups-$user; export CUPS_STATEDIR
CUPS_DATADIR=/tmp/cups-$user/share; export CUPS_DATADIR
+LOCALEDIR=/tmp/cups-$user/share/locale; export LOCALEDIR
#
# Set a new home directory to avoid getting user options mixed in...
HOME=/tmp/cups-$user
export HOME
+#
+# Force POSIX locale for tests...
+#
+
+LANG=C
+export LANG
+
+LC_MESSAGES=C
+export LC_MESSAGES
+
#
# Start the server; run as foreground daemon in the background...
#
echo "Starting scheduler:"
-echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &"
+echo " $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &"
echo ""
-$valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log &
-cupsd=$!
+if test `uname` = Darwin -a "x$valgrind" = x; then
+ DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib
+ ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
+else
+ $valgrind ../scheduler/cupsd -c /tmp/cups-$user/cupsd.conf -f >/tmp/cups-$user/log/debug_log 2>&1 &
+fi
-#if test -x /usr/bin/strace; then
-# # Trace system calls in cupsd if we have strace...
-# /usr/bin/strace -tt -o /tmp/cups-$user/log/cupsd.trace -p $cupsd &
-#fi
+cupsd=$!
if test "x$testtype" = x0; then
+ # Not running tests...
echo "Scheduler is PID $cupsd and is listening on port 8631."
echo ""
- echo "Set the IPP_PORT environment variable to 8631 to test the software"
- echo "interactively from the command-line."
+
+ # Create a helper script to run programs with...
+ runcups="/tmp/cups-$user/runcups"
+
+ echo "#!/bin/sh" >$runcups
+ echo "# Helper script for running CUPS test instance." >>$runcups
+ echo "" >>$runcups
+ echo "# Set required environment variables..." >>$runcups
+ echo "CUPS_DATADIR=\"$CUPS_DATADIR\"; export CUPS_DATADIR" >>$runcups
+ echo "CUPS_SERVER=\"$CUPS_SERVER\"; export CUPS_SERVER" >>$runcups
+ echo "CUPS_SERVERROOT=\"$CUPS_SERVERROOT\"; export CUPS_SERVERROOT" >>$runcups
+ echo "CUPS_STATEDIR=\"$CUPS_STATEDIR\"; export CUPS_STATEDIR" >>$runcups
+ echo "DYLD_LIBRARY_PATH=\"$DYLD_LIBRARY_PATH\"; export DYLD_LIBRARY_PATH" >>$runcups
+ echo "LD_LIBRARY_PATH=\"$LD_LIBRARY_PATH\"; export LD_LIBRARY_PATH" >>$runcups
+ echo "LD_PRELOAD=\"$LD_PRELOAD\"; export LD_PRELOAD" >>$runcups
+ echo "LOCALEDIR=\"$LOCALEDIR\"; export LOCALEDIR" >>$runcups
+ echo "SHLIB_PATH=\"$SHLIB_PATH\"; export SHLIB_PATH" >>$runcups
+ echo "" >>$runcups
+ echo "# Run command..." >>$runcups
+ echo "exec \"\$@\"" >>$runcups
+
+ chmod +x $runcups
+
+ echo "The $runcups helper script can be used to test programs"
+ echo "with the server."
exit 0
fi
-echo "Scheduler is PID $cupsd; run debugger now if you need to."
-echo ""
-echo "Press ENTER to continue..."
-read junk
+if test $argcount -eq 0; then
+ echo "Scheduler is PID $cupsd; run debugger now if you need to."
+ echo ""
+ echo $ac_n "Press ENTER to continue... $ac_c"
+ read junk
+else
+ echo "Scheduler is PID $cupsd."
+ sleep 2
+fi
IPP_PORT=$port; export IPP_PORT
# Create the test report source file...
#
-strfile=cups-str-1.2-`date +%Y-%m-%d`-`whoami`.shtml
+date=`date "+%Y-%m-%d"`
+strfile=/tmp/cups-$user/cups-str-1.6-$date-$user.html
rm -f $strfile
cat str-header.html >$strfile
# Run the IPP tests...
#
+echo ""
echo "Running IPP compliance tests..."
-echo "<H1>IPP Compliance Tests</H1>" >>$strfile
+echo "<H1>1 - IPP Compliance Tests</H1>" >>$strfile
echo "<P>This section provides the results to the IPP compliance tests" >>$strfile
echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
-echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
+echo `date "+%Y-%m-%d"` by $user on `hostname`. >>$strfile
echo "<PRE>" >>$strfile
fail=0
echo "Performing $file..."
echo "" >>$strfile
- ./ipptest ipp://localhost:$port/printers $file >>$strfile
+ ./ipptool -t ipp://localhost:$port/printers $file | tee -a $strfile
status=$?
if test $status != 0; then
# Run the command tests...
#
+echo ""
echo "Running command tests..."
-echo "<H1>Command Tests</H1>" >>$strfile
+echo "<H1>2 - Command Tests</H1>" >>$strfile
echo "<P>This section provides the results to the command tests" >>$strfile
echo "outlined in the CUPS Software Test Plan. These tests were run on" >>$strfile
-echo `date "+%Y-%m-%d"` by `whoami` on `hostname`. >>$strfile
+echo $date by $user on `hostname`. >>$strfile
echo "<PRE>" >>$strfile
for file in 5*.sh; do
echo "" >>$strfile
echo "\"$file\":" >>$strfile
- sh $file $pjobs >>$strfile
+ sh $file $pjobs $pprinters | tee -a $strfile
status=$?
if test $status != 0; then
echo "</PRE>" >>$strfile
#
-# Wait for jobs to complete...
+# Stop the server...
#
-while true; do
- jobs=`../systemv/lpstat 2>/dev/null`
- if test "x$jobs" = "x"; then
- break
- fi
-
- echo "Waiting for jobs to complete..."
- sleep 10
-done
+kill $cupsd
#
-# Stop the server...
+# Append the log files for post-mortim...
#
-kill $cupsd
+echo "<H1>3 - Log Files</H1>" >>$strfile
#
-# Append the log files for post-mortim...
+# Verify counts...
#
-echo "<H1>Log Files</H1>" >>$strfile
+echo "Test Summary"
+echo ""
+echo "<H2>Summary</H2>" >>$strfile
+
+# Job control files
+count=`ls -1 /tmp/cups-$user/spool | wc -l`
+count=`expr $count - 1`
+if test $count != 0; then
+ echo "FAIL: $count job control files were not purged."
+ echo "<P>FAIL: $count job control files were not purged.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: All job control files purged."
+ echo "<P>PASS: All job control files purged.</P>" >>$strfile
+fi
+
+# Pages printed on Test1 (within 1 page for timing-dependent cancel issues)
+count=`$GREP '^Test1 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
+expected=`expr $pjobs \* 2 + 34`
+expected2=`expr $expected + 2`
+if test $count -lt $expected -a $count -gt $expected2; then
+ echo "FAIL: Printer 'Test1' produced $count page(s), expected $expected."
+ echo "<P>FAIL: Printer 'Test1' produced $count page(s), expected $expected.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: Printer 'Test1' correctly produced $count page(s)."
+ echo "<P>PASS: Printer 'Test1' correctly produced $count page(s).</P>" >>$strfile
+fi
+
+# Paged printed on Test2
+count=`$GREP '^Test2 ' /tmp/cups-$user/log/page_log | awk 'BEGIN{count=0}{count=count+$7}END{print count}'`
+expected=`expr $pjobs \* 2 + 3`
+if test $count != $expected; then
+ echo "FAIL: Printer 'Test2' produced $count page(s), expected $expected."
+ echo "<P>FAIL: Printer 'Test2' produced $count page(s), expected $expected.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: Printer 'Test2' correctly produced $count page(s)."
+ echo "<P>PASS: Printer 'Test2' correctly produced $count page(s).</P>" >>$strfile
+fi
+# Requests logged
+count=`wc -l /tmp/cups-$user/log/access_log | awk '{print $1}'`
+expected=`expr 37 + 18 + $pjobs \* 8 + $pprinters \* $pjobs \* 4`
+if test $count != $expected; then
+ echo "FAIL: $count requests logged, expected $expected."
+ echo "<P>FAIL: $count requests logged, expected $expected.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count requests logged."
+ echo "<P>PASS: $count requests logged.</P>" >>$strfile
+fi
+
+# Did CUPS-Get-Default get logged?
+if $GREP -q CUPS-Get-Default /tmp/cups-$user/log/access_log; then
+ echo "FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'"
+ echo "<P>FAIL: CUPS-Get-Default logged with 'AccessLogLevel actions'</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP CUPS-Get-Default /tmp/cups-$user/log/access_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: CUPS-Get-Default not logged."
+ echo "<P>PASS: CUPS-Get-Default not logged.</P>" >>$strfile
+fi
+
+# Emergency log messages
+count=`$GREP '^X ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 0; then
+ echo "FAIL: $count emergency messages, expected 0."
+ $GREP '^X ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count emergency messages, expected 0.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^X ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count emergency messages."
+ echo "<P>PASS: $count emergency messages.</P>" >>$strfile
+fi
+
+# Alert log messages
+count=`$GREP '^A ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 0; then
+ echo "FAIL: $count alert messages, expected 0."
+ $GREP '^A ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count alert messages, expected 0.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^A ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count alert messages."
+ echo "<P>PASS: $count alert messages.</P>" >>$strfile
+fi
+
+# Critical log messages
+count=`$GREP '^C ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 0; then
+ echo "FAIL: $count critical messages, expected 0."
+ $GREP '^C ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count critical messages, expected 0.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^C ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count critical messages."
+ echo "<P>PASS: $count critical messages.</P>" >>$strfile
+fi
+
+# Error log messages
+count=`$GREP '^E ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 18; then
+ echo "FAIL: $count error messages, expected 18."
+ $GREP '^E ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count error messages, expected 18.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^E ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count error messages."
+ echo "<P>PASS: $count error messages.</P>" >>$strfile
+fi
+
+# Warning log messages
+count=`$GREP '^W ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 9; then
+ echo "FAIL: $count warning messages, expected 9."
+ $GREP '^W ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count warning messages, expected 9.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^W ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count warning messages."
+ echo "<P>PASS: $count warning messages.</P>" >>$strfile
+fi
+
+# Notice log messages
+count=`$GREP '^N ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count != 0; then
+ echo "FAIL: $count notice messages, expected 0."
+ $GREP '^N ' /tmp/cups-$user/log/error_log
+ echo "<P>FAIL: $count notice messages, expected 0.</P>" >>$strfile
+ echo "<PRE>" >>$strfile
+ $GREP '^N ' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
+ echo "</PRE>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count notice messages."
+ echo "<P>PASS: $count notice messages.</P>" >>$strfile
+fi
+
+# Info log messages
+count=`$GREP '^I ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count = 0; then
+ echo "FAIL: $count info messages, expected more than 0."
+ echo "<P>FAIL: $count info messages, expected more than 0.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count info messages."
+ echo "<P>PASS: $count info messages.</P>" >>$strfile
+fi
+
+# Debug log messages
+count=`$GREP '^D ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count = 0; then
+ echo "FAIL: $count debug messages, expected more than 0."
+ echo "<P>FAIL: $count debug messages, expected more than 0.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count debug messages."
+ echo "<P>PASS: $count debug messages.</P>" >>$strfile
+fi
+
+# Debug2 log messages
+count=`$GREP '^d ' /tmp/cups-$user/log/error_log | wc -l | awk '{print $1}'`
+if test $count = 0; then
+ echo "FAIL: $count debug2 messages, expected more than 0."
+ echo "<P>FAIL: $count debug2 messages, expected more than 0.</P>" >>$strfile
+ fail=`expr $fail + 1`
+else
+ echo "PASS: $count debug2 messages."
+ echo "<P>PASS: $count debug2 messages.</P>" >>$strfile
+fi
+
+# Log files...
echo "<H2>access_log</H2>" >>$strfile
echo "<PRE>" >>$strfile
-cat /tmp/cups-$user/log/access_log >>$strfile
+sed -e '1,$s/&/&/g' -e '1,$s/</</g' /tmp/cups-$user/log/access_log >>$strfile
echo "</PRE>" >>$strfile
echo "<H2>error_log</H2>" >>$strfile
echo "<PRE>" >>$strfile
-cat /tmp/cups-$user/log/error_log >>$strfile
+$GREP -v '^d' /tmp/cups-$user/log/error_log | sed -e '1,$s/&/&/g' -e '1,$s/</</g' >>$strfile
echo "</PRE>" >>$strfile
echo "<H2>page_log</H2>" >>$strfile
echo "<PRE>" >>$strfile
-cat /tmp/cups-$user/log/page_log >>$strfile
+sed -e '1,$s/&/&/g' -e '1,$s/</</g' /tmp/cups-$user/log/page_log >>$strfile
echo "</PRE>" >>$strfile
-if test -f /tmp/cups-$user/log/cupsd.trace; then
- echo "<H2>cupsd.trace</H2>" >>$strfile
- echo "<PRE>" >>$strfile
- cat /tmp/cups-$user/log/cupsd.trace >>$strfile
- echo "</PRE>" >>$strfile
-fi
-
#
# Format the reports and tell the user where to find them...
#
-echo "Formatting reports..."
-
cat str-trailer.html >>$strfile
-htmlfile=`basename $strfile .shtml`.html
-pdffile=`basename $strfile .shtml`.pdf
-
-htmldoc --numbered --verbose --titleimage ../doc/images/cups-large.gif \
- -f $htmlfile $strfile
-htmldoc --numbered --verbose --titleimage ../doc/images/cups-large.gif \
- -f $pdffile $strfile
-
echo ""
if test $fail != 0; then
echo "$fail tests failed."
+ cp /tmp/cups-$user/log/error_log error_log-$date-$user
+ cp $strfile .
else
echo "All tests were successful."
fi
-if test "x$valgrind" != x; then
- echo "Valgrind log files can be found in /tmp/cups-$user/log."
-fi
-
-echo ""
-echo "See the following files for details:"
-echo ""
-echo " $htmlfile"
-echo " $pdffile"
+echo "Log files can be found in /tmp/cups-$user/log."
+echo "A HTML report was created in $strfile."
echo ""
+if test $fail != 0; then
+ echo "Copies of the error_log and `basename $strfile` files are in"
+ echo "`pwd`."
+ echo ""
+
+ exit 1
+fi
+
#
-# End of "$Id: run-stp-tests.sh 4891 2006-01-07 04:50:14Z mike $"
+# End of "$Id: run-stp-tests.sh 9034 2010-03-09 07:03:06Z mike $"
#