diff options
author | Micael Karlberg <[email protected]> | 2019-04-29 18:38:29 +0200 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2019-05-29 18:40:07 +0200 |
commit | 6de8ee374ec1b1fba4acef1eef851c2634996fa2 (patch) | |
tree | 0fc65fb7f8edb30d568447c86e0455c496ed0b5c | |
parent | fb6147dbbf43b454527d07e4d007f61e6771131d (diff) | |
download | otp-6de8ee374ec1b1fba4acef1eef851c2634996fa2.tar.gz otp-6de8ee374ec1b1fba4acef1eef851c2634996fa2.tar.bz2 otp-6de8ee374ec1b1fba4acef1eef851c2634996fa2.zip |
[esock|test] Add multi async recvmsg UDP test case
Add recvmsg test case testing the abort message received
when "another" process closes a socket. Multiple readers
for good measure.
-rw-r--r-- | erts/emulator/test/socket_SUITE.erl | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/erts/emulator/test/socket_SUITE.erl b/erts/emulator/test/socket_SUITE.erl index 1dfd541f27..079ed76f41 100644 --- a/erts/emulator/test/socket_SUITE.erl +++ b/erts/emulator/test/socket_SUITE.erl @@ -92,6 +92,7 @@ api_a_recv_cancel_tcp4/1, api_a_recvmsg_cancel_tcp4/1, api_a_mrecvfrom_cancel_udp4/1, + api_a_mrecvmsg_cancel_udp4/1, %% *** API Options *** @@ -685,7 +686,8 @@ api_async_cases() -> api_a_accept_cancel_tcp4, api_a_recv_cancel_tcp4, api_a_recvmsg_cancel_tcp4, - api_a_mrecvfrom_cancel_udp4 + api_a_mrecvfrom_cancel_udp4, + api_a_mrecvmsg_cancel_udp4 ]. api_options_cases() -> @@ -4606,6 +4608,35 @@ api_a_mrecvfrom_cancel_udp4(_Config) when is_list(_Config) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Basically we make multiple async (Timeout = nowait) call to recvmsg +%% (from *several* processes), wait some time and then cancel. +%% This should result in abort messages to the 'other' processes. +%% +api_a_mrecvmsg_cancel_udp4(suite) -> + []; +api_a_mrecvmsg_cancel_udp4(doc) -> + []; +api_a_mrecvmsg_cancel_udp4(_Config) when is_list(_Config) -> + ?TT(?SECS(20)), + tc_try(api_a_mrecvmsg_cancel_udp4, + fun() -> + Recv = fun(Sock) -> + case socket:recvmsg(Sock, nowait) of + {ok, _} = OK -> + OK; + {error, _} = ERROR -> + ERROR + end + end, + InitState = #{domain => inet, + recv => Recv}, + ok = api_a_mrecv_cancel_udp(InitState) + end). + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + api_a_mrecv_cancel_udp(InitState) -> ServerSeq = [ |