File 0438-kernel-test-Tweaked-fill_sendq.patch of Package erlang

From 19e30141b4b9b5c7fef63378f001a63e60f94f9f Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Thu, 28 Nov 2024 14:07:48 +0100
Subject: [PATCH] [kernel|test] Tweaked fill_sendq

---
 lib/kernel/test/gen_tcp_misc_SUITE.erl | 89 +++++++++++++++++++-------
 1 file changed, 66 insertions(+), 23 deletions(-)

diff --git a/lib/kernel/test/gen_tcp_misc_SUITE.erl b/lib/kernel/test/gen_tcp_misc_SUITE.erl
index 8123aabc07..e5b9ed24f9 100644
--- a/lib/kernel/test/gen_tcp_misc_SUITE.erl
+++ b/lib/kernel/test/gen_tcp_misc_SUITE.erl
@@ -3719,7 +3719,11 @@ do_fill_sendq(Config, Addr) ->
                 case ?CONNECT(Config, Addr, ServerPort,
                               [{ip, Addr}, {active,false},binary,{packet,0}]) of
                     {ok, S} ->
-                        ?P("[client] connected"),
+                        ?P("[client] connected ~p"
+                           "~n   when"
+                           "~n      buffer sz:         ~p"
+                           "~n      receive buffer sz: ~p",
+                           [S, which_buffer(S), which_recbuf(S)]),
                         Master ! {self(), connected},
                         receive
                             {Master, close} ->
@@ -3748,59 +3752,76 @@ do_fill_sendq(Config, Addr) ->
                   fill_sendq_loop(Server, Client, Reader)
           end,
     process_flag(trap_exit, OldFlag),    
-    ?P("[master] done"),
-    Res.
+    ?P("[master] done: ~p", [Res]),
+    case Res of
+        {ok, NumSends} ->
+            {comment, "Num Sends: " ++ integer_to_list(NumSends)};
+        _ ->
+            Res
+    end.
 
 fill_sendq_loop(Server, Client, Reader) ->
+    fill_sendq_loop(Server, Client, Reader, 0).
+
+fill_sendq_loop(Server, Client, Reader, NumSent) ->
     %% Master
     %%
     receive
         {Server, send} ->
-	    fill_sendq_loop(Server, Client, Reader)
+	    fill_sendq_loop(Server, Client, Reader, NumSent + 1)
     after 2000 ->
 	    %% Send queue full, sender blocked -> close client.
-	    ?P("[master] send timeout, closing client"),
+	    ?P("[master] send timeout (~p), closing client", [NumSent]),
 	    Client ! {self(), close},
 	    receive
                 {Server, [{error,closed}] = SErrors} ->
-                    ?P("[master] got expected server closed"),
+                    ?P("[master] got expected server (~p) closed", [Server]),
                     receive
                         {Reader, [{error,closed}]} ->
                             ?P("[master] got expected reader closed"),
-                            ok;
+                            {ok, NumSent};
                         {Reader, RErrors} when is_list(RErrors) ->
-                            ct:fail([{server, SErrors}, {reader, RErrors}])
+                            ct:fail([{server,   SErrors},
+                                     {reader,   RErrors},
+                                     {num_sent, NumSent}])
                     after 3000 ->
-                            ct:fail({timeout,{closed,reader}})
+                            ct:fail({timeout, {closed, reader}, NumSent})
                     end;
 
                 {Server, SErrors} when is_list(SErrors) ->
-                    ?P("UNEXPECTED SERVER ERROR(S): "
+                    ?P("UNEXPECTED SERVER (~p) ERROR(S): "
                        "~n   ~p"
-                       "~n   ~p", [SErrors, flush([])]),
-                    ct:fail([{server, SErrors}, {reader, []}]);
+                       "~n   ~p", [Server, SErrors, flush([])]),
+                    ct:fail([{server,   SErrors},
+                             {reader,   []},
+                             {num_sent, NumSent}]);
 
                 {Reader, [{error,closed}] = RErrors} ->
-                    ?P("[master] got expected reader closed"),
+                    ?P("[master] got expected reader (~p) closed", [Reader]),
                     receive
                         {Server, [{error,closed}]} ->
-                            ?P("[master] got expected server closed"),
-                            ok;
+                            ?P("[master] got expected server (~p) closed",
+                               [Server]),
+                            {ok, NumSent};
                         {Server, SErrors} when is_list(SErrors) ->
-                            ct:fail([{server, SErrors}, {reader, RErrors}])
+                            ct:fail([{server,   SErrors},
+                                     {reader,   RErrors},
+                                     {num_sent, NumSent}])
                     after 3000 ->
-                            ct:fail({timeout,{closed,server}})
+                            ct:fail({timeout, {closed, server}, NumSent})
                     end;
 
                 {Reader, RErrors} when is_list(RErrors) ->
-                    ?P("UNEXPECTED READER ERROR(S): "
+                    ?P("UNEXPECTED READER (~p) ERROR(S): "
                        "~n   ~p"
-                       "~n   ~p", [RErrors, flush([])]),
-                    ct:fail([{server, []}, {reader, RErrors}])
+                       "~n   ~p", [Reader, RErrors, flush([])]),
+                    ct:fail([{server,   []},
+                             {reader,   RErrors},
+                             {num_sent, NumSent}])
 
             after 3000 ->
                     Msgs = flush([]),
-                    ct:fail({timeout,{closed,[server,reader]}, Msgs})
+                    ct:fail({timeout, {closed, [server,reader]}, NumSent, Msgs})
             end
     end.
 
@@ -3810,7 +3831,11 @@ fill_sendq_srv(L, Master) ->
     ?P("[server] await accept"),
     case gen_tcp:accept(L) of
 	{ok, S} ->
-            ?P("[server] accepted ~p", [S]),
+            ?P("[server] accepted ~p"
+               "~n   when"
+               "~n      buffer sz:      ~p"
+               "~n      send buffer sz: ~p",
+               [S, which_buffer(S), which_sndbuf(S)]),
 	    Master ! {self(), reader,
 		      spawn_link(fun () -> fill_sendq_read(S, Master) end)},
 	    Msg = "the quick brown fox jumps over a lazy dog~n",
@@ -3821,6 +3846,23 @@ fill_sendq_srv(L, Master) ->
 	    Master ! {self(), Error}
     end.
 
+which_recbuf(S) ->
+    which_optval(S, recbuf, undefined).
+
+which_buffer(S) ->
+    which_optval(S, buffer, undefined).
+
+which_sndbuf(S) ->
+    which_optval(S, sndbuf, undefined).
+
+which_optval(S, Tag, Default) ->
+    case inet:getopts(S, [Tag]) of
+        {ok, [{Tag, Val}]} ->
+            Val;
+        _ ->
+            Default
+    end.
+
 fill_sendq_write(S, Master, Msg) ->
     %% Server
     %%
@@ -3838,7 +3880,8 @@ fill_sendq_write(S, Master, Msg) ->
 
 fill_sendq_read(S, Master) ->
     %% Reader
-    %%
+    %% The client never send anything, so we should never get anything,
+    %% but just in case...
     ?P("[server,reader] read infinity..."),
     case gen_tcp:recv(S, 0, infinity) of
 	{ok, Data} ->
-- 
2.43.0

openSUSE Build Service is sponsored by