From 8255135bf80545a31493a83348a4e8da901a4768 Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Sun, 1 Oct 2017 21:45:11 +0100 Subject: [PATCH] Testsuite: for TFO testcases manipulate the system state Linux-centric; will need elaboration for other platforms --- src/src/ip.c | 14 +++++---- test/log/4027 | 5 +++- test/scripts/1990-TCP-Fast-Open/1990 | 21 +++++++++----- test/scripts/4027-TFO-socks/4027 | 43 ++++++++++++++++++++++++++++ test/stdout/4027 | 32 +++++++++++++++++++++ 5 files changed, 101 insertions(+), 14 deletions(-) diff --git a/src/src/ip.c b/src/src/ip.c index eb01229e6..e11aef985 100644 --- a/src/src/ip.c +++ b/src/src/ip.c @@ -237,26 +237,28 @@ if (fastopen) if ((rc = sendto(sock, fastopen->data, fastopen->len, MSG_FASTOPEN | MSG_DONTWAIT, s_ptr, s_len)) >= 0) /* seen for with-data, experimental TFO option, with-cookie case */ + /* seen for with-data, proper TFO opt, with-cookie case */ { DEBUG(D_transport|D_v) debug_printf("TFO mode connection attempt, %s data\n", fastopen->len > 0 ? "with" : "no"); tcp_out_fastopen = fastopen->len > 0 ? 2 : 1; } - else if (errno == EINPROGRESS) /* expected for nonready peer */ + else if (errno == EINPROGRESS) /* expected if we had no cookie for peer */ /* seen for no-data, proper TFO option, both cookie-request and with-cookie cases */ /* apparently no visibility of the diffference at this point */ + /* seen for with-data, proper TFO opt, cookie-req */ /* with netwk delay, post-conn tcp_info sees unacked 1 for R, 2 for C; code in smtp_out.c */ /* ? older Experimental TFO option behaviour ? */ { /* queue unsent data */ + DEBUG(D_transport|D_v) debug_printf("TFO mode sendto, %s data: EINPROGRESS\n", + fastopen->len > 0 ? "with" : "no"); if (!fastopen->data) { - tcp_out_fastopen = 1; /* we tried; unknown if useful yet */ + tcp_out_fastopen = 1; /* we tried; unknown if useful yet */ rc = 0; } - else if ( (rc = send(sock, fastopen->data, fastopen->len, 0)) < 0 - && errno == EINPROGRESS /* expected for nonready peer */ - ) - rc = 0; + else + rc = send(sock, fastopen->data, fastopen->len, 0); } else if(errno == EOPNOTSUPP) { diff --git a/test/log/4027 b/test/log/4027 index 3af3f325b..7df91966f 100644 --- a/test/log/4027 +++ b/test/log/4027 @@ -1,6 +1,9 @@ 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss -1999-03-02 09:44:33 10HmaX-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK" +1999-03-02 09:44:33 10HmaX-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 C="250 accepted OK" 1999-03-02 09:44:33 10HmaX-0005vi-00 Completed 1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss 1999-03-02 09:44:33 10HmaY-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK" 1999-03-02 09:44:33 10HmaY-0005vi-00 Completed +1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss +1999-03-02 09:44:33 10HmaZ-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK" +1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed diff --git a/test/scripts/1990-TCP-Fast-Open/1990 b/test/scripts/1990-TCP-Fast-Open/1990 index 4f5758f5a..3fffce2d4 100644 --- a/test/scripts/1990-TCP-Fast-Open/1990 +++ b/test/scripts/1990-TCP-Fast-Open/1990 @@ -7,11 +7,15 @@ # A packet capture on the loopback interface will show the TFO # option on the SYN, but the fast-output SMTP banner will not # be seen unless you also deliberately emulate a long path: -# 'sudo tc qdisc add dev lo root netem delay 100ms' +# 'sudo tc qdisc add dev lo root netem delay 50ms' # You'll need kernel-modules-extra installed, or you get # an unhelpful error from RTNETLINK. # To tidy up: 'sudo tc qdisc delete dev lo root' # +sudo perl +system ("tc qdisc add dev lo root netem delay 50ms"); +**** +# # First time runs will see a TFO request option only; subsequent # ones should see the TFO cookie and fast-output SMTP banner # (currently on a separate packet after the server SYN,ACK but before @@ -20,16 +24,14 @@ # The client log => lint.ex should have a "TFO" element. # Assuming this is the first run since boot, the a@test recipient will not. # +sudo perl +system ("ip tcp_metrics delete 127.0.0.1"); +**** +# # The server log <= line for b@test.ex should have a "TFO" element, but # this will only be obtained when the above delay is inserted into the # loopback net path. # -# this attempt to tidy up does not work -#sudo perl -#open (my $fh, "/proc/sys/net/ipv4/tcp_fastopen_key"); -#print $fh "00000000-00000000-00000000-00000000"; -#close $fh; -#**** # # # FreeBSD: it looks like you have to compile a custom kernel, with @@ -50,5 +52,10 @@ Testing **** sleep 3 # +# +sudo perl +system ("tc qdisc delete dev lo root"); +**** +# killdaemon no_msglog_check diff --git a/test/scripts/4027-TFO-socks/4027 b/test/scripts/4027-TFO-socks/4027 index 533021cbf..3cfb43ee4 100644 --- a/test/scripts/4027-TFO-socks/4027 +++ b/test/scripts/4027-TFO-socks/4027 @@ -3,6 +3,48 @@ munge loopback # # +# TFO both clients and server, no cookie yet +sudo perl +system ("ip tcp_metrics delete 127.0.0.1"); +**** +# +server -tfo PORT_D +<<\x05\x01\x00 +>>\x05\x00 +<<\x05\x01\x00\x01\x7f\x00\x00\x01\x04\xc8 +>>\x05\x00\x00\x01\x7f\x00\x00\x01\xbe\xef +220 Connected OK +EHLO +250-server id +250 +MAIL FROM +250 +RCPT TO +250 +DATA +354 go ahead +. +250 accepted OK +QUIT +250 bye +**** +# +# +exim -odi -bs -DOPT= +ehlo test.ex +mail from:<> +rcpt to: +data +Date: Fri, 17 Dec 2004 14:35:01 +0100 +Subject: message should be sent + +connection trying TFO via proxy; no cookie yet +. +quit +**** +# +# +# # TFO client, not server server PORT_D <<\x05\x01\x00 @@ -79,5 +121,6 @@ via null-auth proxy quit **** # +millisleep 500 # # Ends diff --git a/test/stdout/4027 b/test/stdout/4027 index 74837c4ac..79950e97f 100644 --- a/test/stdout/4027 +++ b/test/stdout/4027 @@ -20,6 +20,17 @@ 354 Enter message, ending with "." on a line by itself 250 OK id=10HmaY-0005vi-00 221 myhost.test.ex closing connection +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +250-myhost.test.ex Hello CALLER at test.ex +250-SIZE 52428800 +250-8BITMIME +250-PIPELINING +250 HELP +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmaZ-0005vi-00 +221 myhost.test.ex closing connection ******** SERVER ******** Listening on port 1225 ... @@ -37,6 +48,27 @@ MAIL FROM RCPT TO 250 DATA +354 go ahead +R +250 accepted OK +QUIT +250 bye +End of script +Listening on port 1225 ... +Connection request from [ip4.ip4.ip4.ip4] +<<\x05\x01\x00 +>>\x05\x00 +<<\x05\x01\x00\x01\x7f\x00\x00\x01\x04\xc8 +>>\x05\x00\x00\x01\x7f\x00\x00\x01\xbe\xef +220 Connected OK +EHLO +250-server id +250 +MAIL FROM +250 +RCPT TO +250 +DATA 354 do me R 250 accepted OK -- 2.25.1