This somehow mimics the behaviour of the client tool, but works for
*any* input line that is sent to the application. This reverts the
unfortunate take abusing the client's special notation '>>> '.
Currently implemented:
- :eval:
- :neol:
- :sleep:
terminated by four asterisks ("****"). Even if no data is required for the particular
usage, the asterisks must be given.
terminated by four asterisks ("****"). Even if no data is required for the particular
usage, the asterisks must be given.
-If the input line starts with '>>> ', this prefix and any trailing spaces
-(including line feed) are removed. The reminder is processed with Perl's
-string eval() function, effectivly evaluatiing escape sequences like
-'\x41', or '\r'. If you need a line feed there, you need to encode it
-according to your needs.
+If the input line starts with ':<cmd>:', this prefix is removed and the
+line is processed by the runtest script before sending. The following
+commands are recognised:
-If the input line starts with '\>>> ', the backslash is removed and the
-rest of the line is passed as input. This is used by the client tool,
-which understands the '>>> ' prefix for similar processing.
+- "eval": process the reset of the line with Perl's string eval()
+ function. This can be used to send arbitrary data by encoding it as
+ escape sequences (e.g. "\x41\101"). If you need a line ending, you have
+ to append it accordingly (e.g. "\r\n").
+
+- "noeol": do not terminate the data sent to the application with an end
+ of line character.
+
+- "sleep": interpret the rest of the line as an integer and sleep for
+ that number of seconds before proceeding. No data will be output to
+ the application.
(5) ">>> ": If a line begins with three '>' characters and a space, the rest of the
line is input to be sent to the server. Backslash escaping is done as
(5) ">>> ": If a line begins with three '>' characters and a space, the rest of the
line is input to be sent to the server. Backslash escaping is done as
- described below, but no trailing "\r\n" is sent. As the runtest's
- input processing catches the '>>> ' for its string eval, you may
- want to escape from this first stage processing by prefixing your
- line with '\'.
+ described below, but no trailing "\r\n" is sent.
(6) "<<< ": If a line begin with three '<' characters and a space, the rest of the
line is a filename; the content of the file is inserted into the script
(6) "<<< ": If a line begin with three '<' characters and a space, the rest of the
line is a filename; the content of the file is inserted into the script
open CMD, "|${cmd}${stderrsuffix}" || tests_exit(1, "Failed to run $cmd");
CMD->autoflush(1);
open CMD, "|${cmd}${stderrsuffix}" || tests_exit(1, "Failed to run $cmd");
CMD->autoflush(1);
{
$lineno++;
last if /^\*{4}\s*$/;
do_substitute($testno);
{
$lineno++;
last if /^\*{4}\s*$/;
do_substitute($testno);
- s/^\\(>>>\s.*)/$1/ or s/^>>>\s(.*)\s*$/$1/ and $_ = eval "\"$1\"";
+ if (my ($cmd, $line) = /^(:\S+?:)(.*)/) {
+ $_ = $line;
+ {
+ $cmd eq ':eval:' and do {
+ $_ = eval "\"$_\"";
+ last;
+ };
+ $cmd eq ':noeol:' and do {
+ s/[\r\n]*$//;
+ last;
+ };
+ $cmd eq ':sleep:' and do {
+ sleep $_;
+ next LINE;
+ };
+ }
+ }
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Test message
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi filter-userx@test.ex
Last line ending without a newline and with a partial match:
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
****
exim -odi userx@test.ex
Last line ending without a newline and being a single dot:
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters
****
exim -odi mmdf-userx@test.ex
Line consisting of four ^A characters
250 OK
****
exim -odi abc@x.y.z
250 OK
****
exim -odi abc@x.y.z
****
server PORT_S
220 Server ready
****
server PORT_S
220 Server ready
250 OK
****
exim -odi abc@x.y.z
250 OK
****
exim -odi abc@x.y.z
->>> Subject: Test message
+:noeol:Subject: Test message
rcpt to:CALLER@test.ex
??? 250
bdat 87 last
rcpt to:CALLER@test.ex
??? 250
bdat 87 last
-\>>> To: Susan@random.com\n
+>>> To: Susan@random.com\n
From: Sam@random.com
Subject: This is a Bodyless test message
From: Sam@random.com
Subject: This is a Bodyless test message
rcpt to:CALLER@test.ex
??? 250
bdat 10
rcpt to:CALLER@test.ex
??? 250
bdat 10
??? 250
bdat 78 last
random.com
??? 250
bdat 78 last
random.com
rcpt to:CALLER@test.ex
??? 250
bdat 10
rcpt to:CALLER@test.ex
??? 250
bdat 10
??? 250
bdat 78 last
random.com
??? 250
bdat 78 last
random.com
??? 220
EHLO rhu.barb
????250
??? 220
EHLO rhu.barb
????250
-\>>> MAIL FROM:<>\r\nRCPT TO:test@example.com\r\n
+>>> MAIL FROM:<>\r\nRCPT TO:test@example.com\r\n
??? 250 OK
??? 250 Accepted (rcpt via callout)
QUIT
??? 250 OK
??? 250 Accepted (rcpt via callout)
QUIT
#
# protocol v2 plain receive
client HOSTIPV4 PORT_D
#
# protocol v2 plain receive
client HOSTIPV4 PORT_D
-\>>> \x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A\x21\x11\x00\x0c\x7f\x00\x00\x02\x7f\x2a\x2a\x2a\xc2\x95\x04\x01
+>>> \x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A\x21\x11\x00\x0c\x7f\x00\x00\x02\x7f\x2a\x2a\x2a\xc2\x95\x04\x01
??? 220
HELO clientname
??? 250
??? 220
HELO clientname
??? 250
****
### protocol v1 receive
exim -bh HOSTIPV4
****
### protocol v1 receive
exim -bh HOSTIPV4
->>> PROXY TCP4 127.0.0.2 127.42.42.42 64000 25\r\n
+:eval:PROXY TCP4 127.0.0.2 127.42.42.42 64000 25\r\n
HELO clientname
MAIL FROM: <a@test.ex>
RCPT TO:<b@test.ex>
HELO clientname
MAIL FROM: <a@test.ex>
RCPT TO:<b@test.ex>
****
### protocol v2 receive
exim -bh HOSTIPV4
****
### protocol v2 receive
exim -bh HOSTIPV4
->>> \x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A\x21\x11\x00\x0c\x7f\x00\x00\x02\x7f\x2a\x2a\x2a\xc2\x95\x04\x01
+:eval:\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A\x21\x11\x00\x0c\x7f\x00\x00\x02\x7f\x2a\x2a\x2a\xc2\x95\x04\x01
HELO clientname
MAIL FROM: <a@test.ex>
RCPT TO:<b@test.ex>
HELO clientname
MAIL FROM: <a@test.ex>
RCPT TO:<b@test.ex>