File 2303-kernel-test-Debug-printouts-in-the-buffer_size-test-.patch of Package erlang
From 1b0a42b8432b1980ae0486f187c2a9c016cdde12 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 11 Apr 2025 12:43:54 +0200
Subject: [PATCH 3/3] [kernel|test] Debug printouts in the buffer_size test
case
---
lib/kernel/test/gen_udp_SUITE.erl | 116 +++++++++++++++++++++---------
1 file changed, 82 insertions(+), 34 deletions(-)
diff --git a/lib/kernel/test/gen_udp_SUITE.erl b/lib/kernel/test/gen_udp_SUITE.erl
index 199cf73277..cf6ee2faf6 100644
--- a/lib/kernel/test/gen_udp_SUITE.erl
+++ b/lib/kernel/test/gen_udp_SUITE.erl
@@ -493,6 +493,9 @@ buffer_size(Config) when is_list(Config) ->
TC = fun() -> do_buffer_size(Config) end,
?TC_TRY(?FUNCTION_NAME, Cond, TC).
+-define(BF_NUM_K(N), (N*1024)).
+-define(BF_8K, ?BF_NUM_K(8)).
+-define(BF_9K, ?BF_NUM_K(9)).
do_buffer_size(Config) when is_list(Config) ->
{ok, Addr} = ?LIB:which_local_addr(inet),
ClientIP = Addr,
@@ -521,17 +524,30 @@ do_buffer_size(Config) when is_list(Config) ->
end || {Tag,Val} <- Spec0],
%%
{ok, ClientSocket} = ?OPEN(Config, 0, [binary, {ip, ClientIP}]),
+ ?P("buffer_size[client] -> socket created"),
{ok, ClientPort} = inet:port(ClientSocket),
Client = self(),
- ?P("Client: {~p, ~p}, ~p", [ClientIP, ClientPort, ClientSocket]),
+ ?P("Client: {~p, ~p}, ~p: "
+ "~n Socket Info: ~p"
+ "~n Socket Opts: ~p",
+ [ClientIP, ClientPort, ClientSocket,
+ inet:info(ClientSocket),
+ inet:getopts(ClientSocket, [buffer, recbuf, sndbuf])]),
Server =
spawn_link(
fun () ->
?P("buffer_size[server] -> starting"),
{ok, ServerSocket} =
?OPEN(Config, 0, [binary, {ip, ServerIP}]),
+ ?P("buffer_size[server] -> socket created"),
{ok, ServerPort} =
inet:port(ServerSocket),
+ ?P("buffer_size[server] -> {~p, ~p}, ~p: "
+ "~n Socket Info: ~p"
+ "~n Socket Bufs: ~s",
+ [ServerIP, ServerPort, ServerSocket,
+ inet:info(ServerSocket),
+ sock_bufs_str(ServerSocket)]),
Client ! {self(),port,ServerPort},
buffer_size_server(Client, ClientIP, ClientPort,
ServerSocket, 1, Spec),
@@ -554,29 +570,38 @@ buffer_size_client(_, _, _, _, _, []) ->
ok;
buffer_size_client(Server, IP, Port,
Socket, Cnt, [Opts|T]) when is_list(Opts) ->
- ?P("buffer_size_client(~w) -> entry with"
- "~n Opts: ~p", [Cnt, Opts]),
+ ?P("~w(~w) -> entry with"
+ "~n Opts: ~p"
+ "~nwhen"
+ "~n Sock Info: ~p"
+ "~n Sock Bufs: ~s",
+ [?FUNCTION_NAME, Cnt, Opts, inet:info(Socket), sock_bufs_str(Socket)]),
ok = inet:setopts(Socket, Opts),
GOpts = [K || {K, _} <- Opts],
- ?P("buffer_size_client(~w) -> options after set: "
- "~n ~p", [Cnt, inet:getopts(Socket, GOpts)]),
+ ?P("~w(~w) -> options after set: "
+ "~n ~p", [?FUNCTION_NAME, Cnt, inet:getopts(Socket, GOpts)]),
Server ! {self(),setopts,Cnt},
receive {Server,setopts,Cnt} -> ok end,
buffer_size_client(Server, IP, Port, Socket, Cnt+1, T);
buffer_size_client(Server, IP, Port,
Socket, Cnt, [{B,Replies}|T]=Opts) when is_binary(B) ->
- ?P("buffer_size_client(~w) -> entry with"
+ ?P("~w(~w) -> entry with"
"~n send size: ~w"
"~n expecting: ~p"
"~nwhen"
- "~n Socket Info: ~p",
- [Cnt, byte_size(B), Replies, inet:info(Socket)]),
+ "~n Socket Info: ~p"
+ "~n Socket Bufs: ~s",
+ [?FUNCTION_NAME,
+ Cnt, byte_size(B), Replies, inet:info(Socket), sock_bufs_str(Socket)]),
case gen_udp:send(Socket, IP, Port, <<Cnt,B/binary>>) of
ok ->
receive
{Server, Cnt, Reply} ->
- ?P("buffer_size_client(~w) -> "
- "~n Reply: ~p", [Cnt, Reply]),
+ ?P("~w(~w) -> received"
+ "~n Reply: ~p"
+ "~nwhen"
+ "~n Replies: ~p", [?FUNCTION_NAME, Cnt,
+ Reply, Replies]),
Tag =
case Reply of
%% {completion_status, #{info := Tag0}}
@@ -623,28 +648,31 @@ buffer_size_server(_, _, _, _, _, []) ->
ok;
buffer_size_server(Client, IP, Port,
Socket, Cnt, [Opts|T]) when is_list(Opts) ->
- ?P("buffer_size_server(~w) -> entry when await client setopts", [Cnt]),
+ ?P("~w(~w) -> entry when await client setopts", [?FUNCTION_NAME, Cnt]),
receive {Client, setopts, Cnt} -> ok end,
- ?P("buffer_size_server(~w) -> setopts with "
+ ?P("~w(~w) -> setopts with "
"~n Opts: ~p"
"~nwhen"
- "~n Socket info: ~p", [Cnt, Opts, inet:info(Socket)]),
+ "~n Socket info: ~p", [?FUNCTION_NAME, Cnt, Opts, inet:info(Socket)]),
ok = inet:setopts(Socket, Opts),
GOpts = [K || {K, _} <- Opts],
- ?P("buffer_size_server(~w) -> options after set: "
+ ?P("~w(~w) -> options after set: "
"~n ~p"
"~nwhen"
"~n Socket info: ~p",
- [Cnt, inet:getopts(Socket, GOpts), inet:info(Socket)]),
+ [?FUNCTION_NAME, Cnt, inet:getopts(Socket, GOpts), inet:info(Socket)]),
Client ! {self(), setopts, Cnt},
buffer_size_server(Client, IP, Port, Socket, Cnt+1, T);
buffer_size_server(Client, IP, Port,
Socket, Cnt, [{B,_}|T]) when is_binary(B) ->
- ?P("buffer_size_server(~w) -> entry when"
+ ?P("~w(~w) -> entry when"
"~n expect ~w bytes of data"
"~nwhen"
"~n Socket info: ~p"
- "~n MQ: ~p", [Cnt, byte_size(B), inet:info(Socket), mq()]),
+ "~n Socket Bufs: ~s"
+ "~n MQ: ~p",
+ [?FUNCTION_NAME, Cnt,
+ byte_size(B), inet:info(Socket), sock_bufs_str(Socket), mq()]),
Reply = case buffer_size_server_recv(Socket, IP, Port, Cnt) of
D when is_binary(D) ->
SizeD = byte_size(D),
@@ -653,10 +681,13 @@ buffer_size_server(Client, IP, Port,
"~n Socket Info: ~p", [Cnt, SizeD, inet:info(Socket)]),
case B of
D ->
+ ?P("~w(~w) -> correct", [?FUNCTION_NAME, Cnt]),
correct;
<<D:SizeD/binary,_/binary>> ->
+ ?P("~w(~w) -> trucated", [?FUNCTION_NAME, Cnt]),
truncated;
_ ->
+ ?P("~w(~w) -> unexpected", [?FUNCTION_NAME, Cnt]),
{unexpected,D}
end;
Error ->
@@ -667,64 +698,81 @@ buffer_size_server(Client, IP, Port,
[Cnt, Error, inet:info(Socket)]),
Error
end,
- ?P("buffer_size_server(~w) -> send reply '~p' when"
- "~n Socket Info: ~p", [Cnt, Reply, inet:info(Socket)]),
+ ?P("~w(~w) -> send reply '~p' when"
+ "~n Socket Info: ~p"
+ "~n Socket Bufs: ~s",
+ [?FUNCTION_NAME, Cnt,
+ Reply, inet:info(Socket), sock_bufs_str(Socket)]),
Client ! {self(), Cnt, Reply},
?SLEEP(?SECS(1)),
buffer_size_server(Client, IP, Port, Socket, Cnt+1, T).
buffer_size_server_recv(Socket, IP, Port, Cnt) ->
- ?P("buffer_size_server(~w) -> await data: "
+ ?P("~w(~w) -> await data: "
"~n Socket: ~p"
"~n IP: ~p"
"~n Port: ~p"
"~nwhen"
- "~n Socket Info: ~p", [Cnt, Socket, IP, Port, inet:info(Socket)]),
+ "~n Socket Info: ~p"
+ "~n Socket Bufs: ~s",
+ [?FUNCTION_NAME, Cnt,
+ Socket, IP, Port, inet:info(Socket), sock_bufs_str(Socket)]),
receive
{udp, Socket, IP, Port, <<Cnt, B/binary>>} ->
- ?P("buffer_size_server(~w) -> received ~w bytes",
- [Cnt, byte_size(B)]),
+ ?P("~w(~w) -> received ~w bytes",
+ [?FUNCTION_NAME, Cnt, byte_size(B)]),
B;
{udp, Socket, IP, Port, <<_B/binary>>} ->
- ?P("buffer_size_server(~w) -> received unexpected ~w bytes",
- [Cnt, byte_size(_B)]),
+ ?P("~w(~w) -> received unexpected ~w bytes",
+ [?FUNCTION_NAME, Cnt, byte_size(_B)]),
buffer_size_server_recv(Socket, IP, Port, Cnt);
{udp, Socket, IP, Port, _CRAP} ->
- ?P("buffer_size_server(~w) -> received unexpected crap", [Cnt]),
+ ?P("~w(~w) -> received unexpected crap", [?FUNCTION_NAME, Cnt]),
buffer_size_server_recv(Socket, IP, Port, Cnt);
{udp, XSocket, XIP, XPort, _CRAP} ->
- ?P("buffer_size_server(~w) -> received unexpected udp message: "
+ ?P("~w(~w) -> received unexpected udp message: "
"~n XSocket: ~p"
"~n Socket: ~p"
"~n XIP: ~p"
"~n IP: ~p"
"~n XPort: ~p"
"~n Port: ~p",
- [Cnt, XSocket, Socket, XIP, IP, XPort, Port]),
+ [?FUNCTION_NAME, Cnt, XSocket, Socket, XIP, IP, XPort, Port]),
buffer_size_server_recv(Socket, IP, Port, Cnt);
{udp_closed, Socket} ->
- ?P("buffer_size_server(~w) -> received unexpected 'closed'", [Cnt]),
+ ?P("~w(~w) -> received unexpected 'closed'", [?FUNCTION_NAME, Cnt]),
closed;
{udp_error, Socket, Error} ->
- ?P("buffer_size_server(~w) -> error: "
- "~n ~p", [Cnt, Error]),
+ ?P("~w(~w) -> error: "
+ "~n ~p", [?FUNCTION_NAME, Cnt, Error]),
ok = inet:setopts(Socket, [{active, true}]),
Error
after 5000 ->
- ?P("buffer_size_server(~w) -> timeout: "
+ ?P("~w(~w) -> timeout: "
"~n Socket: ~p"
"~n Socket Info: ~p"
+ "~n Socket Bufs: ~s"
"~n Process Info: ~p",
- [Cnt,
- Socket, inet:info(Socket), erlang:process_info(self())]),
+ [?FUNCTION_NAME, Cnt,
+ Socket, inet:info(Socket), sock_bufs_str(Socket),
+ erlang:process_info(self())]),
{timeout, mq()}
end.
+sock_bufs_str(S) ->
+ case inet:getopts(S, [buffer, recbuf, sndbuf]) of
+ {ok, Bufs} ->
+ ?F("~p", [Bufs]);
+ _ ->
+ "-"
+ end.
+
+
%%-------------------------------------------------------------
%% OTP-15206: Keep buffer small for udp
--
2.43.0