aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2019-04-29 18:38:29 +0200
committerMicael Karlberg <[email protected]>2019-05-29 18:40:07 +0200
commit6de8ee374ec1b1fba4acef1eef851c2634996fa2 (patch)
tree0fc65fb7f8edb30d568447c86e0455c496ed0b5c /erts/emulator/test
parentfb6147dbbf43b454527d07e4d007f61e6771131d (diff)
downloadotp-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.
Diffstat (limited to 'erts/emulator/test')
-rw-r--r--erts/emulator/test/socket_SUITE.erl33
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 =
[