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

openSUSE Build Service is sponsored by