Testsuite: Allow input lines starting with ":<cmd>:", like ":sleep:".
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Mon, 5 Oct 2020 06:59:25 +0000 (08:59 +0200)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Mon, 5 Oct 2020 08:34:45 +0000 (10:34 +0200)
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:

test/README
test/runtest
test/scripts/0000-Basic/0100
test/scripts/0000-Basic/0101
test/scripts/0000-Basic/0242
test/scripts/0000-Basic/0900
test/scripts/0000-Basic/0901
test/scripts/1100-Basic-TLS/1101
test/scripts/4030-proxy-protocol/4030
test/scripts/4030-proxy-protocol/4031

index a399765e2e9e5f1078e31591fd7b11b1f34c867a..c0f548292adf422a8ecaa47a4e239324e44f398d 100644 (file)
@@ -862,15 +862,21 @@ The remaining commands are followed by data lines for their standard input,
 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.
 
 
   background
 
 
   background
@@ -1056,10 +1062,7 @@ Lines in client scripts are of several kinds:
 
 (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
index 26a40471372a758c07c83d6899cfbd7f60903df9..5fb7cd737f8d29ce3d752801e75026d327ddd6fa 100755 (executable)
@@ -2807,12 +2807,28 @@ print ">> |${cmd}${stderrsuffix}\n" if ($debug);
 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);
-while (<SCRIPT>)
+LINE: while (<SCRIPT>)
   {
   $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;
+      };
+    }
+  }
   print CMD;
   }
 
   print CMD;
   }
 
index e31e9809d5c43631bbbd20e656d4eaff2bcabb16..7abf09143a2ee4722f87941e9792415eaa87f09e 100644 (file)
@@ -78,7 +78,7 @@ exim -odi userx@test.ex <test-data
 ****
 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: 
->>> From
+:noeol:From
 ****
 exim -odi filter-userx@test.ex
 Test message
 ****
 exim -odi filter-userx@test.ex
 Test message
@@ -91,11 +91,11 @@ From: is how headers start
 ****
 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: 
->>> From
+:noeol:From
 ****
 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:
->>> .
+:noeol:.
 ****
 exim -odi mmdf-userx@test.ex
 Line consisting of four ^A characters
 ****
 exim -odi mmdf-userx@test.ex
 Line consisting of four ^A characters
index 512a60ea8fc2f8e88696c592ec02c900c74970bf..c3143eed7d49ec8e813c7ef885ac1c9364ef2edb 100644 (file)
@@ -61,7 +61,7 @@ exim -odi userx@test.ex <test-data
 ****
 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: 
->>> From
+:noeol:From
 ****
 exim -odi filter-userx@test.ex
 Test message
 ****
 exim -odi filter-userx@test.ex
 Test message
@@ -74,11 +74,11 @@ From: is how headers start
 ****
 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: 
->>> From
+:noeol:From
 ****
 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:
->>> .
+:noeol:.
 ****
 exim -odi mmdf-userx@test.ex
 Line consisting of four ^A characters
 ****
 exim -odi mmdf-userx@test.ex
 Line consisting of four ^A characters
index 995f5cc13df59af2b2de8b94b56d01ba8e865ef1..785e8e8a6315a642d42b124723cc2a9d8753a666 100644 (file)
@@ -17,7 +17,7 @@ QUIT
 250 OK
 ****
 exim -odi abc@x.y.z
 250 OK
 ****
 exim -odi abc@x.y.z
->>> Test message
+:noeol:Test message
 ****
 server PORT_S
 220 Server ready
 ****
 server PORT_S
 220 Server ready
@@ -35,5 +35,5 @@ QUIT
 250 OK
 ****
 exim -odi abc@x.y.z
 250 OK
 ****
 exim -odi abc@x.y.z
->>> Subject: Test message
+:noeol:Subject: Test message
 ****
 ****
index af7840470ec21cd0d15e7ef1ca7c03e05a2a33d2..4503ae0c01b9419212bd4cc6f47cca9456878d9b 100644 (file)
@@ -231,7 +231,7 @@ mail from:someone@some.domain
 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
 
index 10c582a17ddbc4194f815b872d6e731f8fc263fa..f5a6fff9a7205811566dc15d7055b19415df6604 100644 (file)
@@ -58,7 +58,7 @@ mail from:someone3@some.domain
 rcpt to:CALLER@test.ex
 ??? 250
 bdat 10
 rcpt to:CALLER@test.ex
 ??? 250
 bdat 10
-\>>> To: Susan@
+>>> To: Susan@
 ??? 250
 bdat 78 last
 random.com
 ??? 250
 bdat 78 last
 random.com
@@ -103,7 +103,7 @@ mail from:someone3A@some.domain
 rcpt to:CALLER@test.ex
 ??? 250
 bdat 10
 rcpt to:CALLER@test.ex
 ??? 250
 bdat 10
-\>>> To: Susan@
+>>> To: Susan@
 ??? 250
 bdat 78 last
 random.com
 ??? 250
 bdat 78 last
 random.com
index a1ed5a43b299b7768a0eef693e00ec166211f403..41407e80b511e8f52faf9bdb45243427416fe4b0 100644 (file)
@@ -10,7 +10,7 @@ STARTTLS
 ??? 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
index 154e056d85ff18959214c058c8f02d5ffe815949..1eece11120925b250c592b79650cfe3d841721f5 100644 (file)
@@ -50,7 +50,7 @@ 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
index ecf3e827b59b964b8cc3983a4e29562158069bba..f3d2456ecd78ee7fe33191a4427c76d859229f8e 100644 (file)
@@ -14,7 +14,7 @@ QUIT
 ****
 ### 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>
@@ -27,7 +27,7 @@ QUIT
 ****
 ### 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>