diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/.gitignore | 1 | ||||
-rw-r--r-- | tests/Makefile.am | 9 | ||||
-rwxr-xr-x | tests/aux/in.test | 22 | ||||
-rw-r--r-- | tests/inet.at | 38 | ||||
-rw-r--r-- | tests/iobuf.h | 141 | ||||
-rw-r--r-- | tests/nt.c | 339 | ||||
-rw-r--r-- | tests/testsuite.at | 1 | ||||
-rw-r--r-- | tests/to.c | 50 |
8 files changed, 590 insertions, 11 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index 459fa44..68159e3 100644 --- a/tests/.gitignore +++ b/tests/.gitignore | |||
@@ -4,6 +4,7 @@ envtest | |||
4 | lines | 4 | lines |
5 | package.m4 | 5 | package.m4 |
6 | testsuite | 6 | testsuite |
7 | testsuite.dir | 7 | testsuite.dir |
8 | testsuite.log | 8 | testsuite.log |
9 | to | 9 | to |
10 | nt | ||
diff --git a/tests/Makefile.am b/tests/Makefile.am index 14f5b4f..0290f61 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am | |||
@@ -17,13 +17,14 @@ | |||
17 | AUXTOOLS = \ | 17 | AUXTOOLS = \ |
18 | aux/respawn\ | 18 | aux/respawn\ |
19 | aux/retcode\ | 19 | aux/retcode\ |
20 | aux/mailer\ | 20 | aux/mailer\ |
21 | aux/touchfile\ | 21 | aux/touchfile\ |
22 | aux/sleepexit\ | 22 | aux/sleepexit\ |
23 | aux/startcheck | 23 | aux/startcheck\ |
24 | aux/in.test | ||
24 | 25 | ||
25 | EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 $(AUXTOOLS) | 26 | EXTRA_DIST = $(TESTSUITE_AT) testsuite package.m4 $(AUXTOOLS) |
26 | DISTCLEANFILES = atconfig $(check_SCRIPTS) | 27 | DISTCLEANFILES = atconfig $(check_SCRIPTS) |
27 | MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) | 28 | MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) |
28 | 29 | ||
29 | ## ------------ ## | 30 | ## ------------ ## |
@@ -49,27 +50,31 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac | |||
49 | TESTSUITE_AT = \ | 50 | TESTSUITE_AT = \ |
50 | testsuite.at\ | 51 | testsuite.at\ |
51 | control.at\ | 52 | control.at\ |
52 | cyclic.at\ | 53 | cyclic.at\ |
53 | env.at\ | 54 | env.at\ |
54 | envop.at\ | 55 | envop.at\ |
56 | inet.at\ | ||
55 | respawn.at\ | 57 | respawn.at\ |
56 | redirect.at\ | 58 | redirect.at\ |
57 | ret-exec.at\ | 59 | ret-exec.at\ |
58 | ret-notify.at\ | 60 | ret-notify.at\ |
59 | shell.at\ | 61 | shell.at\ |
60 | startup.at\ | 62 | startup.at\ |
61 | shutdown.at\ | 63 | shutdown.at\ |
62 | version.at | 64 | version.at |
63 | 65 | ||
64 | TESTSUITE = $(srcdir)/testsuite | 66 | TESTSUITE = $(srcdir)/testsuite |
65 | M4=m4 | 67 | M4=m4 |
66 | 68 | ||
67 | noinst_PROGRAMS = envtest to lines | 69 | noinst_PROGRAMS = envtest to lines nt |
70 | nt_SOURCES = nt.c iobuf.h | ||
68 | AM_CPPFLAGS = \ | 71 | AM_CPPFLAGS = \ |
69 | -I$(top_srcdir)/lib\ | 72 | -I$(top_srcdir)/lib\ |
73 | -I$(top_srcdir)/gnu\ | ||
74 | -I$(top_builddir)/gnu\ | ||
70 | @GRECS_INCLUDES@ | 75 | @GRECS_INCLUDES@ |
71 | 76 | ||
72 | LDADD = \ | 77 | LDADD = \ |
73 | ../lib/libpies.a\ | 78 | ../lib/libpies.a\ |
74 | @GRECS_LDADD@ | 79 | @GRECS_LDADD@ |
75 | 80 | ||
diff --git a/tests/aux/in.test b/tests/aux/in.test new file mode 100755 index 0000000..4a98763 --- /dev/null +++ b/tests/aux/in.test | |||
@@ -0,0 +1,22 @@ | |||
1 | #! /bin/sh | ||
2 | |||
3 | FILE=${1:?} | ||
4 | IFS=' | ||
5 | ' | ||
6 | while read COMMAND ARG | ||
7 | do | ||
8 | echo $COMMAND $ARG >> $FILE | ||
9 | case $COMMAND in | ||
10 | stop) if [ -n "$STOPCMD" ]; then | ||
11 | echo "STOP" | ||
12 | $STOPCMD | ||
13 | else | ||
14 | echo "OK $COMMAND $ARG" | ||
15 | fi | ||
16 | ;; | ||
17 | quit) exit $ARG;; | ||
18 | *) echo "OK $COMMAND $ARG" | ||
19 | ;; | ||
20 | esac | ||
21 | done | ||
22 | |||
diff --git a/tests/inet.at b/tests/inet.at new file mode 100644 index 0000000..41cae6a --- /dev/null +++ b/tests/inet.at | |||
@@ -0,0 +1,38 @@ | |||
1 | AT_SETUP([inet component]) | ||
2 | AT_CHECK([ | ||
3 | PIES_XFAIL_CHECK | ||
4 | PIES_CONTROL_INIT | ||
5 | AT_DATA([input], | ||
6 | [line 1 | ||
7 | line 2 | ||
8 | stop | ||
9 | ]) | ||
10 | : ${PIES_TEST_INET_SOCKET:=unix://$PWD/in.sock} | ||
11 | cat > pies.conf <<_EOT | ||
12 | component in { | ||
13 | command "$auxdir/in.test $PWD/inlog"; | ||
14 | env { | ||
15 | set "STOPCMD=piesctl --url unix:///$PWD/pies.ctl --no-netrc shutdown"; | ||
16 | } | ||
17 | mode inetd; | ||
18 | socket "$PIES_TEST_INET_SOCKET"; | ||
19 | stderr file "$PWD/log.err"; | ||
20 | } | ||
21 | component controller { | ||
22 | command "nt $PIES_TEST_INET_SOCKET -i input"; | ||
23 | } | ||
24 | _EOT | ||
25 | set -e | ||
26 | to 10 \ | ||
27 | pies --foreground --stderr \ | ||
28 | --config-file control.conf --config-file pies.conf --debug 1 2>errlog | ||
29 | |||
30 | cat inlog | ||
31 | cat log.err >&2 | ||
32 | ], | ||
33 | [0], | ||
34 | [line 1 | ||
35 | line 2 | ||
36 | stop | ||
37 | ]) | ||
38 | AT_CLEANUP | ||
diff --git a/tests/iobuf.h b/tests/iobuf.h new file mode 100644 index 0000000..4e43338 --- /dev/null +++ b/tests/iobuf.h | |||
@@ -0,0 +1,141 @@ | |||
1 | /* This file is part of GNU Pies. | ||
2 | Copyright (C) 2019 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 | |||
17 | #define IO_BUF_SIZE 512 | ||
18 | |||
19 | struct iobuf | ||
20 | { | ||
21 | char buf[IO_BUF_SIZE]; /* Initial line buffer */ | ||
22 | size_t start; /* Start of data */ | ||
23 | size_t avail; /* Start of available space */ | ||
24 | }; | ||
25 | |||
26 | static inline void | ||
27 | iobuf_reset (struct iobuf *bp) | ||
28 | { | ||
29 | bp->start = bp->avail = 0; | ||
30 | } | ||
31 | |||
32 | /* Return the count of data bytes in the buffer */ | ||
33 | static inline size_t | ||
34 | iobuf_data_size (struct iobuf *bp) | ||
35 | { | ||
36 | return bp->avail - bp->start; | ||
37 | } | ||
38 | |||
39 | static inline char * | ||
40 | iobuf_data_ptr (struct iobuf *bp) | ||
41 | { | ||
42 | return bp->buf + bp->start; | ||
43 | } | ||
44 | |||
45 | static inline void | ||
46 | iobuf_data_advance (struct iobuf *bp, size_t n) | ||
47 | { | ||
48 | bp->start += n; | ||
49 | if (bp->start == bp->avail) | ||
50 | iobuf_reset (bp); | ||
51 | } | ||
52 | |||
53 | static inline int | ||
54 | iobuf_putback (struct iobuf *bp) | ||
55 | { | ||
56 | return bp->buf[--bp->start-1]; | ||
57 | } | ||
58 | |||
59 | static inline int | ||
60 | iobuf_getc (struct iobuf *bp) | ||
61 | { | ||
62 | int c = -1; | ||
63 | if (iobuf_data_size (bp) > 0) | ||
64 | { | ||
65 | c = *iobuf_data_ptr (bp); | ||
66 | iobuf_data_advance(bp, 1); | ||
67 | } | ||
68 | return c; | ||
69 | } | ||
70 | |||
71 | /* Return the count of available bytes in the buffer */ | ||
72 | static inline size_t | ||
73 | iobuf_avail_size (struct iobuf *bp) | ||
74 | { | ||
75 | return sizeof (bp->buf) - bp->avail; | ||
76 | } | ||
77 | |||
78 | static inline char * | ||
79 | iobuf_avail_ptr (struct iobuf *bp) | ||
80 | { | ||
81 | return bp->buf + bp->avail; | ||
82 | } | ||
83 | |||
84 | static inline void | ||
85 | iobuf_avail_advance (struct iobuf *bp, size_t n) | ||
86 | { | ||
87 | bp->avail += n; | ||
88 | if (iobuf_avail_size (bp) == 0 && iobuf_data_size (bp) == 0) | ||
89 | iobuf_reset (bp); | ||
90 | } | ||
91 | |||
92 | static inline int | ||
93 | iobuf_putc (struct iobuf *bp, int c) | ||
94 | { | ||
95 | if (iobuf_avail_size (bp) > 0) | ||
96 | { | ||
97 | *iobuf_avail_ptr (bp) = c; | ||
98 | iobuf_avail_advance (bp, 1); | ||
99 | return c; | ||
100 | } | ||
101 | return -1; | ||
102 | } | ||
103 | |||