# ${readsocket (Unix domain and IPv4)
need_ipv4
#
exim -be
connfail cases (no server)
1 >>${readsocket{DIR/test-socket}{QUERY-1\n}}<<
2 ${if exists{DIR/test-socket}\
  {>>${readsocket{DIR/test-socket}{QUERY-1\n}}<<}\
  {++ no socket ++}} 
****
#
# Note the difference between:
#   >*eof      => close the connection
#   *eof       => expect to read EOF from client
#
server DIR/test-socket 9
QUERY-1
>LF>ANSWER-1
>*eof
QUERY-2
>>ANSWER-2
>*eof
QUERY-3
>LF>ANSWER-3
>*eof
QUERY-4
>LF>ANSWER-4
>*eof
>>ANSWER-5
>*eof
*sleep 1
>*eof
>*eof
QUERY-8
*sleep 2
*eof
QUERY-9
*sleep 2
****
millisleep 500
exim -be
unix-socket cases
1 >>${readsocket{DIR/test-socket}{QUERY-1\n}}<<
2 >>${readsocket{DIR/test-socket}{QUERY-2\n}}<<
3 >>${readsocket{DIR/test-socket}{QUERY-3\n}{2s}{*EOL*}}<<
4 >>${readsocket{DIR/test-socket}{QUERY-4\n}{2s}{*EOL*}{sock error}}<<
5 >>${readsocket{DIR/test-socket}{}}<<
6 >>${readsocket{DIR/test-socket}{QUERY-6\n}}<<
7 >>${readsocket{DIR/test-socket}{QUERY-7\n}{1s}{}{sock error}}<<
8 >>${readsocket{DIR/test-socket}{QUERY-8\n}{1s}}<<
9 >>${readsocket{DIR/test-socket}{QUERY-9\n}{1s}{}{sock error}}<<
****
server DIR/test-socket
QUERY-ACL
*sleep 3
****
exim -odq -bs -oMa V4NET.0.0.0
quit
****
#
# Tests of IPv4 sockets
#
server PORT_S 18
QUERY-1
>LF>ANSWER-1
>*eof
QUERY-2
>>ANSWER-2
>*eof
QUERY-3
>LF>ANSWER-3
>*eof
QUERY-4
>LF>ANSWER-4
>*eof
>>ANSWER-5
>*eof
*sleep 1
>*eof
>*eof
QUERY-8
*sleep 2
*eof
QUERY-9
*sleep 2
*eof
QUERY-10
>LF>ANSWER-10
>*eof
>LF>ANSWER-11a
>*eof
QUERY-11
>LF>ANSWER-11b
>*eof
QUERY-12
>>ANSWER-12\x0d\x0aANSWER-12\x0d\x0a
>*eof
QUERY-13
>>ANSWER-13\x0d\x0aANSWER-13\x0d\x0a
>*eof
QUERY-14
>>ANSWER-14\x0d\x0aANSWER-14\x0d\x0a
>*eof
QUERY-15
>>ANSWER-15\x0d\x0aANSWER-15\x0d\x0a
>*eof
QUERY-16
>>ANSWER-16\x0d\x0aANSWER-16\x0d\x0a
>*eof
QUERY-17
>>ANSWER-17\x0d\x0aANSWER-17\x0d\x0a
>*eof
****
millisleep 500
exim -be
ipv4 cases
1  ANSWER-1      >>${readsocket{inet:thisloop:PORT_S}{QUERY-1\n}}<<
2  ANSWER-2      >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-2\n}}<<
3  ANSWER-3*EOL* >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-3\n}{2s}{*EOL*}}<<
4  ANSWER-4*EOL* >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-4\n}{2s}{*EOL*}{sock error}}<<
5  ANSWER-5      >>${readsocket{inet:127.0.0.1:PORT_S}{}}<<
6                >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-6\n}}<<
7                >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-7\n}{1s}{}{sock error}}<<
8 read timed out >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-8\n}{1s}}<<
9  sock error    >>${readsocket{inet:127.0.0.1:PORT_S}{QUERY-9\n}{1s}{}{sock error}}<<
10 ANSWER-10\\n     >>${readsocket{inet:badloop:PORT_S}{QUERY-10\n}}<<
11 ANSWER-11a    >>${readsocket{inet:thisloop:PORT_S}{QUERY-11\n}{2s:shutdown=no}}<<
11 ANSWER-11b    >>${readsocket{inet:thisloop:PORT_S}{QUERY-11\n}{2s:shutdown=no}}<<

eol-replacement arg
12 ANSWER-12x2  (no arg)     >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-12\n}{2s}}}<<
13 ANSWER-13x2  (empty arg)  >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-13\n}{2s}{}}}<<
14 ANSWER-14x2  X            >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-14\n}{2s}{X}}}<<
15 ANSWER-15x2  XYZZY        >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-15\n}{2s}{XYZZY}}}<<
16 ANSWER-16x2  (space)      >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-16\n}{2s}{ }}}<<
17 ANSWER-17x2  (newline)    >>${escape:${readsocket{inet:127.0.0.1:PORT_S}{QUERY-17\n}{2s}{\n}}}<<
****
#
exim -be
crash-regression-check >>${readsocket{inet:127.0.0.1:PORT_N}{}{}}<<
****
#
# Caching of response value
server DIR/test-socket 3
QUERY-1
>LF>ANSWER-1
>*eof
QUERY-2
>LF>ANSWER-2
>*eof
QUERY-1
>LF>ANSWER-1
>*eof
****
millisleep 500
exim -be
caching of response value
1  >>${readsocket{DIR/test-socket}{QUERY-1\n}{5s:cache=yes}}<<
1+ >>${readsocket{DIR/test-socket}{QUERY-1\n}{5s:cache=yes}}<<
2  >>${readsocket{DIR/test-socket}{QUERY-2\n}{5s:cache=yes}}<<
2- >>${readsocket{DIR/test-socket2}{QUERY-2\n}{5s:cache=yes}{}{expected failure}}<<
1- >>${readsocket{DIR/test-socket2}{QUERY-1\n}{5s:cache=yes}{}{expected failure}}<<
1+ >>${readsocket{DIR/test-socket}{QUERY-1\n}{5s:cache=yes}}<<
1- >>${readsocket{DIR/test-socket}{QUERY-1\n}{5s}}<<
****
