File 7755-kernel-test-gen-udp-Add-explicit-open-test-case.patch of Package erlang
From 99196b99f2f8d44cc1922a89625394a2a25fb19d Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 18 Nov 2022 18:59:22 +0100
Subject: [PATCH 5/5] [kernel|test|gen-udp] Add explicit open test case
Add test case that explicitly opens a UDP socket with the
add_mebership option.
OTP-18323
---
lib/kernel/test/gen_udp_SUITE.erl | 82 +++++++++++++++++++++++++++----
1 file changed, 72 insertions(+), 10 deletions(-)
diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index f708300663..47292fedf9 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -60,7 +60,8 @@
t_simple_local_sockaddr_in6_send_recv/1,
t_simple_link_local_sockaddr_in6_send_recv/1,
- otp_18323/1
+ otp_18323_opts_processing/1,
+ otp_18323_open/1
]).
@@ -100,7 +101,8 @@ groups() ->
{local, [], local_cases()},
{socket_monitor, [], socket_monitor_cases()},
- {sockaddr, [], sockaddr_cases()}
+ {sockaddr, [], sockaddr_cases()},
+ {otp18323, [], otp18323_cases()}
].
inet_backend_default_cases() ->
@@ -133,7 +135,7 @@ all_cases() ->
{group, socket_monitor},
otp_17492,
{group, sockaddr},
- otp_18323
+ {group, otp18323}
].
recv_and_send_opts_cases() ->
@@ -164,6 +166,12 @@ sockaddr_cases() ->
t_simple_link_local_sockaddr_in6_send_recv
].
+otp18323_cases() ->
+ [
+ otp_18323_opts_processing,
+ otp_18323_open
+ ].
+
init_per_suite(Config0) ->
@@ -247,6 +255,14 @@ init_per_group(sockaddr = _GroupName, Config) ->
?P("init_per_group(sockaddr) -> 'socket' not configured"),
{skip, "esock not configured"}
end;
+init_per_group(otp18323 = _GroupName, Config) ->
+ ?P("init_per_group(otp18323) -> inet-drv specific bug(s)"),
+ case ?IS_SOCKET_BACKEND(Config) of
+ true ->
+ {skip, "Inet Drv specific bugs"};
+ false ->
+ ok
+ end;
init_per_group(_GroupName, Config) ->
Config.
@@ -2791,20 +2807,24 @@ do_simple_sockaddr_send_recv(#{family := _Fam} = SockAddr, _) ->
%% Verify that the options [add|drop]_membership do not mess up
%% the options (including 'ip' which could not be added *after*).
-otp_18323(Config) when is_list(Config) ->
+%% This just attempts to very that the option processing is ok.
+otp_18323_opts_processing(Config) when is_list(Config) ->
ct:timetrap(?MINS(1)),
- ?TC_TRY(?FUNCTION_NAME, fun() -> do_otp_18323(Config) end).
+ ?TC_TRY(?FUNCTION_NAME, fun() -> do_otp_18323_opts_processing(Config) end).
-do_otp_18323(_Config) ->
+do_otp_18323_opts_processing(_Config) ->
?P("begin"),
- do_otp_18323_verify({add_membership, {{239,1,2,3},{0,0,0,0}}}),
- do_otp_18323_verify({drop_membership, {{239,1,2,3},{0,0,0,0}}}),
+ do_otp_18323_opts_processing_verify(
+ {add_membership, {{239,1,2,3},{0,0,0,0}}}),
+
+ do_otp_18323_opts_processing_verify(
+ {drop_membership, {{239,1,2,3},{0,0,0,0}}}),
?P("done"),
ok.
-do_otp_18323_verify(MembershipOpt) ->
+do_otp_18323_opts_processing_verify(MembershipOpt) ->
Port = 4321,
RecBuf = 123456,
Active = 10,
@@ -2828,10 +2848,52 @@ do_otp_18323_verify(MembershipOpt) ->
{error, Reason} ->
exit(?F("Failed processing options: ~p", [Reason]))
end.
-
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Verify that the options [add|drop]_membership do not mess up
+%% the options (including 'ip' which could not be added *after*).
+otp_18323_open(Config) when is_list(Config) ->
+ ct:timetrap(?MINS(1)),
+ Pre = fun() ->
+ {ok, Addr} = ?LIB:which_local_addr(inet),
+ #{local_addr => Addr}
+ end,
+ Case = fun(State) -> do_otp_18323_open(State) end,
+ Post = fun(_) -> ok end,
+ ?TC_TRY(?FUNCTION_NAME, Pre, Case, Post).
+
+do_otp_18323_open(#{local_addr := Addr}) ->
+ ?P("begin"),
+
+ ROpts = [binary,
+ {add_membership, {Addr,{0,0,0,0}}},
+ {ip, Addr},
+ {active,false},
+ {debug, true}],
+ SOpts = [{reuseaddr, true}, binary],
+
+ ?P("create received socket"),
+ {ok, R} = gen_udp:open(0, ROpts),
+ ?P("extract received socket port"),
+ {ok, RPort} = inet:port(R),
+
+ ?P("create sender socket"),
+ {ok, S} = gen_udp:open(0, SOpts),
+
+ ?P("send to receiver (at port ~w)", [RPort]),
+ ok = gen_udp:send(S, Addr, RPort, <<"aaaaa">>),
+
+ ?P("attempt to receive data on specified format binary)"),
+ {ok, {_,_,<<"aaaaa">>}} = gen_udp:recv(R, 0, 200),
+
+ ?P("done"),
+ ok.
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ok({ok,V}) -> V;
--
2.35.3