tests: Convert tests for signal handling to Autotest framework.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 10 Oct 2010 21:19:28 +0000 (14:19 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 11 Oct 2010 04:14:06 +0000 (21:14 -0700)
tests/automake.mk
tests/bugs/signals.sh [deleted file]
tests/ui/terminal/main.at

index 90b76d9bd692a75ab56fed07f488fe7fcd2913d7..e7a802e62cfac2794ce6493782f44d8b4d88551d 100644 (file)
@@ -27,7 +27,6 @@ dist_TESTS = \
        tests/formats/wkday-in.sh \
        tests/formats/wkday-out.sh \
        tests/formats/360.sh \
-       tests/bugs/signals.sh \
        tests/bugs/temporary.sh \
        tests/bugs/unwritable-dir.sh \
        tests/bugs/val-labs.sh \
diff --git a/tests/bugs/signals.sh b/tests/bugs/signals.sh
deleted file mode 100755 (executable)
index 20ca070..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-# This program tests that signals are properly caught and handled by PSPP
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="sending SIGINT to pspp"
-echo 'host command=["kill -INT $PPID"].' | $PSPP -o pspp.csv > /dev/null 2> $TEMPDIR/stderr1
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# SIGINT should have caused a clean shutdown
-activity="checking for absence of error messages 1"
-[ ! -s $TEMPDIR/stderr1 ]  
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="sending SIGSEGV to pspp"
-echo 'host command=["kill -SEGV $PPID"].' | $PSPP -o pspp.csv > /dev/null 2> $TEMPDIR/stderr2
-if [ $? -eq 0 ] ; then no_result ; fi
-
-# SIGSEGV should have caused an error message
-activity="checking for error messages from pspp 2"
-head -8 $TEMPDIR/stderr2 > $TEMPDIR/stderr-head
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="comparing error messages from pspp 2"
-diff $TEMPDIR/stderr-head  - << EOF
-******************************************************
-You have discovered a bug in PSPP.  Please report this
-to bug-gnu-pspp@gnu.org.  Please include this entire
-message, *plus* several lines of output just above it.
-For the best chance at having the bug fixed, also
-include the syntax file that triggered it and a sample
-of any data file used for input.
-proximate cause:     Segmentation Violation
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
index 1ee822688f30b416438d145fa79a834739a526fc..38a88eca14a779174d838d8218ad836f2690c36e 100644 (file)
@@ -5,3 +5,34 @@ AT_CHECK([pspp nonexistent], [1],
   [error: Opening `nonexistent': No such file or directory.
 ])
 AT_CLEANUP
+
+AT_SETUP([SIGTERM yields clean shutdown])
+AT_DATA([main.sps], [dnl
+INPUT PROGRAM.
+COMPUTE x = x + 1.
+DO IF x = 10000.
+END CASE.
+ELSE IF x < 0.
+END FILE.
+END IF.
+END INPUT PROGRAM.
+EXECUTE.
+])
+AT_CHECK([pspp main.sps & sleep 1; kill $!; wait $!], [143], [], [ignore])
+AT_CLEANUP
+
+AT_SETUP([SIGSEGV yields error report])
+AT_CHECK([[echo 'host command=["kill -SEGV $PPID"].' | pspp -O format=csv]],
+  [139], [], [stderr])
+AT_DATA([expout], [dnl
+******************************************************
+You have discovered a bug in PSPP.  Please report this
+to bug-gnu-pspp@gnu.org.  Please include this entire
+message, *plus* several lines of output just above it.
+For the best chance at having the bug fixed, also
+include the syntax file that triggered it and a sample
+of any data file used for input.
+proximate cause:     Segmentation Violation
+])
+AT_CHECK([sed '/proximate/q' < stderr], [0], [expout])
+AT_CLEANUP