summaryrefslogtreecommitdiffabout
path: root/tests
authorSergey Poznyakoff <gray@gnu.org>2016-03-19 12:58:27 (GMT)
committer Sergey Poznyakoff <gray@gnu.org>2016-03-19 14:30:41 (GMT)
commitd6102982ae0e69a2c75cd2a499ba3909516cc0ae (patch) (unidiff)
tree054f8a27dc1eb92497d9bb357f2cde7f0d823fac /tests
parent60b43ae490f52a783a34c8d77baaa695f7c32f01 (diff)
downloadpies-d6102982ae0e69a2c75cd2a499ba3909516cc0ae.tar.gz
pies-d6102982ae0e69a2c75cd2a499ba3909516cc0ae.tar.bz2
Add testsute
Diffstat (limited to 'tests') (more/less context) (ignore whitespace changes)
-rw-r--r--tests/.gitignore6
-rw-r--r--tests/Makefile.am71
-rw-r--r--tests/atlocal.in6
-rw-r--r--tests/control.at55
-rwxr-xr-xtests/mailer7
-rw-r--r--tests/redirect.at60
-rwxr-xr-xtests/respawn63
-rw-r--r--tests/respawn.at52
-rw-r--r--tests/ret-exec.at68
-rw-r--r--tests/ret-notify.at68
-rwxr-xr-xtests/retcode9
-rw-r--r--tests/testsuite.at65
-rw-r--r--tests/version.at28
13 files changed, 558 insertions, 0 deletions
diff --git a/tests/.gitignore b/tests/.gitignore
new file mode 100644
index 0000000..93f8f46
--- a/dev/null
+++ b/tests/.gitignore
@@ -0,0 +1,6 @@
1atconfig
2atlocal
3package.m4
4testsuite
5testsuite.dir
6testsuite.log
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644
index 0000000..668fe5e
--- a/dev/null
+++ b/tests/Makefile.am
@@ -0,0 +1,71 @@
1# This file is part of GNU Pies.
2# Copyright (C) 2008-2016 Sergey Poznyakoff
3#
4# GNU Pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU Pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU Pies. If not, see <http://www.gnu.org/licenses/>.
16
17EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 respawn retcode mailer
18DISTCLEANFILES = atconfig $(check_SCRIPTS)
19MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
20
21## ------------ ##
22## package.m4. ##
23## ------------ ##
24
25$(srcdir)/package.m4: $(top_srcdir)/configure.ac
26 { \
27 echo '# Signature of the current package.'; \
28 echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \
29 echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \
30 echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \
31 echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \
32 echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \
33 } >$(srcdir)/package.m4
34
35#
36
37## ------------ ##
38## Test suite. ##
39## ------------ ##
40
41TESTSUITE_AT = \
42 testsuite.at\
43 control.at\
44 respawn.at\
45 redirect.at\
46 ret-exec.at\
47 ret-notify.at\
48 version.at
49
50TESTSUITE = $(srcdir)/testsuite
51M4=m4
52
53AUTOTEST = $(AUTOM4TE) --language=autotest
54$(TESTSUITE): package.m4 $(TESTSUITE_AT)
55 $(AM_V_GEN)$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
56 $(AM_V_at)mv $@.tmp $@
57
58atconfig: $(top_builddir)/config.status
59 cd $(top_builddir) && ./config.status tests/$@
60
61clean-local:
62 @test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean
63
64check-local: atconfig atlocal $(TESTSUITE)
65 @$(SHELL) $(TESTSUITE)
66
67# Run the test suite on the *installed* tree.
68#installcheck-local:
69 #$(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin
70
71
diff --git a/tests/atlocal.in b/tests/atlocal.in
new file mode 100644
index 0000000..6cb3c43
--- a/dev/null
+++ b/tests/atlocal.in
@@ -0,0 +1,6 @@
1# @configure_input@ -*- shell-script -*-
2# Configurable variable values for GNU Pies test suite.
3# Copyright (C) 2016 Sergey Poznyakoff
4
5PATH=@abs_builddir@:@abs_top_builddir@/src:$srcdir:$PATH
6XFAILFILE=$abs_builddir/.badversion
diff --git a/tests/control.at b/tests/control.at
new file mode 100644
index 0000000..95befdf
--- a/dev/null
+++ b/tests/control.at
@@ -0,0 +1,55 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([Control interface])
18
19AT_CHECK([
20PIES_XFAIL_CHECK
21PIES_CONTROL_INIT
22
23pies --config-file control.conf
24
25sleep 1
26if test -f $pidfile; then
27 pid0=`head -1 $pidfile`
28 pid1=`piesctl --url "$ctlsock" id PID|sed 's/^PID: //'`
29 if test "$pid1" = "$pid0"; then
30 if piesctl --url "$ctlsock" shutdown; then
31 sleep 1
32 if test -f $pidfile; then
33 PIES_XFAIL_MSG([pies does not respond to control commands])
34 kill -9 $pid0
35 exit 1
36 else
37 exit 0
38 fi
39 else
40 PIES_XFAIL_MSG([can't send control commands])
41 kill -9 $pid0
42 exit 1
43 fi
44 else
45 PIES_XFAIL_MSG([Control interface non-functional])
46 exit 1
47 fi
48else
49 PIES_XFAIL_MSG([pies failed to start])
50 exit 1
51fi
52],
53[0])
54
55AT_CLEANUP
diff --git a/tests/mailer b/tests/mailer
new file mode 100755
index 0000000..f832ff5
--- a/dev/null
+++ b/tests/mailer
@@ -0,0 +1,7 @@
1#! /bin/sh
2
3exec >${1:?}
4shift
5echo $*
6cat -
7
diff --git a/tests/redirect.at b/tests/redirect.at
new file mode 100644
index 0000000..e8d98d8
--- a/dev/null
+++ b/tests/redirect.at
@@ -0,0 +1,60 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([stdout redirection])
18
19AT_CHECK([
20PIES_XFAIL_CHECK
21PIES_CONTROL_INIT
22comp_pid_file=$PWD/comp.pid
23outfile=$PWD/out
24cat > pies.conf <<_EOT
25component test {
26 mode respawn;
27 command "$abs_srcdir/respawn -tag respawn -append -pid $comp_pid_file";
28 stdout file "$outfile";
29}
30_EOT
31
32pies --config-file control.conf --config-file pies.conf
33
34n=0
35while :
36do
37 if test -f $comp_pid_file; then
38 lines=`wc -l $comp_pid_file | awk '{print $1}'`
39 if test "$lines" -ge 2 ; then
40 break
41 fi
42 fi
43 sleep 1
44 n=$(($n + 1))
45 if test $n -gt 25; then
46 echo >&2 "timed out"
47 break
48 fi
49done
50
51PIES_STOP
52
53cat $outfile
54],
55[0],
56[respawn: start
57respawn: stop
58])
59
60AT_CLEANUP
diff --git a/tests/respawn b/tests/respawn
new file mode 100755
index 0000000..11d59f6
--- a/dev/null
+++ b/tests/respawn
@@ -0,0 +1,63 @@
1#! /bin/sh
2
3# usage: respawn [-append] [-stderr FILE] [-stdout FILE] [-sleep TIME]
4# [-pid FILE] [-tag STRING] [-exit CODE]
5
6append=0
7unset name
8time=10
9tag=$0
10code=0
11
12while [ $# -ne 0 ]
13do
14 arg=$1
15 shift
16 case $arg in
17 -append)
18 append=1;;
19 -stderr)
20 name=${1:?missing argument for -stderr}
21 shift
22 if [ $append -eq 1 ]; then
23 exec 2>>$name
24 append=0
25 else
26 exec 2>$name
27 fi;;
28 -stdout)
29 name=${1:?missing argument for -stdout}
30 shift
31 if [ $append -eq 1 ]; then
32 exec >>$name
33 append=0
34 else
35 exec >$name
36 fi;;
37 -sleep)
38 time=${1:?missing argument for -sleep}
39 shift;;
40 -pid)
41 name=${1:?missing argument for -pid}
42 shift
43 if [ $append -eq 1 ]; then
44 echo $$ >>$name
45 append=0
46 else
47 echo $$ >$name
48 fi;;
49 -tag)
50 tag=${1:?missing argument for -tag}
51 shift;;
52 -exit)
53 code=${1:?missing argument for -exit}
54 shift;;
55 *) echo >&2 "$tag: invalid argument: $arg"
56 exit 1
57 esac
58done
59
60echo "$tag: start"
61sleep $time
62echo "$tag: stop"
63exit $code
diff --git a/tests/respawn.at b/tests/respawn.at
new file mode 100644
index 0000000..5b0082c
--- a/dev/null
+++ b/tests/respawn.at
@@ -0,0 +1,52 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([Respawn components])
18
19AT_CHECK([
20PIES_XFAIL_CHECK
21PIES_CONTROL_INIT
22comp_pid_file=$PWD/comp.pid
23cat > pies.conf <<_EOT
24component test {
25 mode respawn;
26 command "$abs_srcdir/respawn -append -pid $comp_pid_file";
27}
28_EOT
29
30pies --config-file control.conf --config-file pies.conf
31
32n=0
33while :
34do
35 if test -f $comp_pid_file; then
36 lines=`wc -l $comp_pid_file | awk '{print $1}'`
37 if test "$lines" -ge 3 ; then
38 break
39 fi
40 fi
41 sleep 1
42 n=$(($n + 1))
43 if test $n -gt 35; then
44 echo >&2 "timed out"
45 break
46 fi
47done
48
49PIES_STOP
50])
51
52AT_CLEANUP
diff --git a/tests/ret-exec.at b/tests/ret-exec.at
new file mode 100644
index 0000000..f674d84
--- a/dev/null
+++ b/tests/ret-exec.at
@@ -0,0 +1,68 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([Exec on return code])
18AT_KEYWORDS([ret-exec])
19
20AT_CHECK([
21PIES_XFAIL_CHECK
22PIES_CONTROL_INIT
23comp_pid_file=$PWD/comp.pid
24report_file=$PWD/report
25cat > pies.conf <<_EOT
26component test {
27 mode respawn;
28 return-code 10 {
29 exec "$abs_srcdir/retcode $report_file";
30 action disable;
31 }
32 command "$abs_srcdir/respawn -sleep 2 -pid $comp_pid_file -exit 10";
33}
34_EOT
35
36>$report_file
37
38pies --config-file control.conf --config-file pies.conf
39
40n=0
41while test ! -s $report_file
42do
43 sleep 1
44 n=$(($n + 1))
45 if test $n -gt 4; then
46 echo >&2 "timed out"
47 break
48 fi
49done
50
51PIES_STOP
52
53if test -f $report_file; then
54 pid=`head $comp_pid_file`
55 sed "s/$pid/PID/" $report_file
56else
57 echo >&2 "no report file"
58fi
59],
60[0],
61[AT_PACKAGE_VERSION
62test
63PID
6410
65No signal
66])
67
68AT_CLEANUP
diff --git a/tests/ret-notify.at b/tests/ret-notify.at
new file mode 100644
index 0000000..2119ed5
--- a/dev/null
+++ b/tests/ret-notify.at
@@ -0,0 +1,68 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([Notify on return code])
18AT_KEYWORDS([ret-notify])
19
20AT_CHECK([
21PIES_XFAIL_CHECK
22PIES_CONTROL_INIT
23report_file=$PWD/report
24cat > pies.conf <<_EOT
25mailer-program "$abs_srcdir/mailer";
26mailer-command-line "$abs_srcdir/mailer $report_file";
27component test {
28 mode respawn;
29 return-code 10 {
30 notify root;
31 action disable;
32 }
33 command "$abs_srcdir/respawn -sleep 2 -exit 10";
34}
35_EOT
36
37>$report_file
38
39pies --config-file control.conf --config-file pies.conf
40
41n=0
42while test ! -s $report_file
43do
44 sleep 1
45 n=$(($n + 1))
46 if test $n -gt 4; then
47 echo >&2 "timed out"
48 break
49 fi
50done
51sleep 1
52PIES_STOP
53
54if test -f $report_file; then
55 cat $report_file
56else
57 echo >&2 "no report file"
58fi
59],
60[0],
61[root
62From: <>
63X-Agent: pies (AT_PACKAGE_NAME AT_PACKAGE_VERSION)
64Subject: Component test exited with code 10.
65
66])
67
68AT_CLEANUP
diff --git a/tests/retcode b/tests/retcode
new file mode 100755
index 0000000..b827ba9
--- a/dev/null
+++ b/tests/retcode
@@ -0,0 +1,9 @@
1#! /bin/sh
2
3exec >${1:?}
4
5echo $PIES_VERSION
6echo $PIES_COMPONENT
7echo $PIES_PID
8echo $PIES_STATUS
9echo ${PIES_SIGNAL:-No signal}
diff --git a/tests/testsuite.at b/tests/testsuite.at
new file mode 100644
index 0000000..fda54e0
--- a/dev/null
+++ b/tests/testsuite.at
@@ -0,0 +1,65 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17m4_version_prereq([2.69])
18
19m4_define([PIES_SGN],[pies (AT_PACKAGE_NAME) AT_PACKAGE_VERSION])
20
21m4_define([PIES_XFAIL_MSG],[cat >$[]XFAILFILE <<'_EOT'
22==============================================================
23$*
24==============================================================
25_EOT
26])
27
28m4_define([PIES_XFAIL_CHECK],[AT_XFAIL_IF([test -f $[]XFAILFILE])])
29
30m4_define([PIES_CONTROL_INIT],[
31pidfile="$PWD/pies.pid"
32ctlsock="unix://$PWD/pies.ctl";
33cat > control.conf <<_EOT
34pidfile "$pidfile";
35control {
36 socket "$ctlsock";
37}
38_EOT
39])
40
41m4_define([PIES_STOP],[
42piesctl --url "$ctlsock" shutdown
43pies_stop_spinner=0
44while test -f $pidfile
45do
46 sleep 1
47 pies_stop_spinner=$(($pies_stop_spinner + 1))
48 if test $pies_stop_spinner -gt 3; then
49 kill `cat $pidfile`
50 echo >&2 "timed out waiting for shutdown"
51 fi
52done])
53
54AT_INIT
55
56AT_TESTED([pies])
57
58AT_BANNER([Initial])
59m4_include([version.at])
60m4_include([control.at])
61AT_BANNER([Components])
62m4_include([respawn.at])
63m4_include([redirect.at])
64m4_include([ret-exec.at])
65m4_include([ret-notify.at])
diff --git a/tests/version.at b/tests/version.at
new file mode 100644
index 0000000..31debce
--- a/dev/null
+++ b/tests/version.at
@@ -0,0 +1,28 @@
1# This file is part of GNU pies testsuite. -*- Autotest -*-
2# Copyright (C) 2016 Sergey Poznyakoff
3#
4# GNU pies is free software; you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation; either version 3, or (at your option)
7# any later version.
8#
9# GNU pies is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with GNU pies. If not, see <http://www.gnu.org/licenses/>.
16
17AT_SETUP([GNU pies version])
18
19AT_CHECK([pies --version | sed '1{s/ *[\[.*\]]//;q}' ],
20 [0],
21 [pies (AT_PACKAGE_NAME) AT_PACKAGE_VERSION
22],
23[],
24[PIES_XFAIL_MSG([WARNING: Not using the proper version, *all* checks dubious...])
25],
26[rm -f $[]XFAILFILE])
27
28AT_CLEANUP

Return to:

Send suggestions and report system problems to the System administrator.