File 7752-kernel-test-Add-simple-test-case-for-UDP-options-pro.patch of Package erlang
From daeb6283ede55594ac0719a6c8427ad48888faeb Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 16 Nov 2022 16:29:38 +0100
Subject: [PATCH 2/5] [kernel|test] Add simple test case for UDP options
processing
Add simple test case for UDP options processing verification.
Testing that options do not get "eaten" by add_membership and
drop_membership.
OTP-18323
---
lib/kernel/test/gen_udp_SUITE.erl | 51 +++++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 2 deletions(-)
diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index 075dd84b64..80b5a7ec26 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -58,9 +58,13 @@
t_simple_local_sockaddr_in_send_recv/1,
t_simple_link_local_sockaddr_in_send_recv/1,
t_simple_local_sockaddr_in6_send_recv/1,
- t_simple_link_local_sockaddr_in6_send_recv/1
+ t_simple_link_local_sockaddr_in6_send_recv/1,
+
+ otp_18323/1
+
]).
+-include_lib("kernel/src/inet_int.hrl").
-define(TRY_TC(F), try_tc(F)).
@@ -128,7 +128,8 @@ all_cases() ->
recv_close,
{group, socket_monitor},
otp_17492,
- {group, sockaddr}
+ {group, sockaddr},
+ otp_18323
].
recv_and_send_opts_cases() ->
@@ -2782,6 +2787,48 @@ do_simple_sockaddr_send_recv(#{family := _Fam} = SockAddr, _) ->
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Verify that the options [add|drop]_membership do not mess up
+%% the "previous" options.
+otp_18323(Config) when is_list(Config) ->
+ ct:timetrap(?MINS(1)),
+ ?TC_TRY(?FUNCTION_NAME, fun() -> do_otp_18323(Config) end).
+
+do_otp_18323(_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}}}),
+
+ ?P("done"),
+ ok.
+
+do_otp_18323_verify(MembershipOpt) ->
+ Port = 4321,
+ RecBuf = 123456,
+ Active = 10,
+ Opts = [binary, MembershipOpt, {active, Active}],
+
+ case inet:udp_options([{port, Port}, {recbuf, RecBuf} | Opts], inet_udp) of
+ {ok, #udp_opts{port = Port,
+ opts = SockOpts}} ->
+ ?P("Processed Socket Options: "
+ "~n Port: ~p"
+ "~n Sock Opts: ~p", [Port, SockOpts]),
+ %% Check that the recbuf and mode options are as expected
+ %% The option 'binary' is shorthand for {mode, binary}
+ {value, {recbuf, RecBuf}} = lists:keysearch(recbuf, 1, SockOpts),
+ {value, {mode, binary}} = lists:keysearch(mode, 1, SockOpts),
+ {value, {active, Active}} = lists:keysearch(active, 1, SockOpts),
+ ok;
+ {error, Reason} ->
+ exit(?F("Failed processing options: ~p", [Reason]))
+ end.
+
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ok({ok,V}) -> V;
--
2.35.3