File 2345-kernel-sctp-test-Tweaked-xfer_min-test-case-for-Free.patch of Package erlang
From 2aa04cdf9784c99fb3ff04d28c278fb8badee7e6 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 7 May 2025 08:57:43 +0200
Subject: [PATCH 5/8] [kernel|sctp|test] Tweaked xfer_min test case for FreeBSD
---
lib/kernel/test/gen_sctp_SUITE.erl | 115 +++++++++++++++++++++++------
1 file changed, 93 insertions(+), 22 deletions(-)
diff --git a/lib/kernel/test/gen_sctp_SUITE.erl b/lib/kernel/test/gen_sctp_SUITE.erl
index 65f107069e..b3f7315727 100644
--- a/lib/kernel/test/gen_sctp_SUITE.erl
+++ b/lib/kernel/test/gen_sctp_SUITE.erl
@@ -285,25 +285,45 @@ basic(Config) when is_list(Config) ->
%% Minimal data transfer.
xfer_min(Config) when is_list(Config) ->
+ Cond = fun() -> ok end,
+ Pre = fun() -> case ?WHICH_LOCAL_ADDR(inet) of
+ {ok, Addr} ->
+ Addr;
+ {error, Reason} ->
+ throw({skip, Reason})
+ end
+ end,
+ TC = fun(Addr) -> do_xfer_min(Config, Addr) end,
+ Post = fun(_) -> ok end,
+ ?TC_TRY(?FUNCTION_NAME, Cond, Pre, TC, Post).
+
+do_xfer_min(Config, LAddr) when is_list(Config) ->
Stream = 0,
Data = <<"The quick brown fox jumps over a lazy dog 0123456789">>,
Loopback = {127,0,0,1},
StatOpts =
[recv_avg,recv_cnt,recv_max,recv_oct,
send_avg,send_cnt,send_max,send_oct],
+
+ ?P("~w -> [b] try create server socket", [?FUNCTION_NAME]),
{ok,Sb} = gen_sctp:open([{type,seqpacket}]),
{ok,SbStat1} = inet:getstat(Sb, StatOpts),
{ok,Pb} = inet:port(Sb),
ok = gen_sctp:listen(Sb, true),
+ ?P("~w -> [a] try create client socket", [?FUNCTION_NAME]),
{ok,Sa} = gen_sctp:open(),
{ok,Pa} = inet:port(Sa),
+
+ ?P("~w -> [a] try connect (to server)", [?FUNCTION_NAME]),
{ok,#sctp_assoc_change{state=comm_up,
error=0,
outbound_streams=SaOutboundStreams,
inbound_streams=SaInboundStreams,
assoc_id=SaAssocId}=SaAssocChange} =
gen_sctp:connect(Sa, Loopback, Pb, []),
+
+ ?P("~w -> [b] try accept connection", [?FUNCTION_NAME]),
{SbAssocId,SaOutboundStreams,SaInboundStreams} =
case recv_event(log_ok(gen_sctp:recv(Sb, infinity))) of
{Loopback,Pa,
@@ -329,28 +349,10 @@ xfer_min(Config) when is_list(Config) ->
end,
ok = gen_sctp:send(Sa, SaAssocId, 0, Data),
- case log_ok(gen_sctp:recv(Sb, infinity)) of
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream = Stream,
- assoc_id = SbAssocId}],
- Data} -> ok;
- Event1 ->
- case recv_event(Event1) of
- {Loopback,Pa,
- #sctp_paddr_change{addr = {Loopback,_},
- state = State,
- error = 0,
- assoc_id = SbAssocId}}
- when State =:= addr_available;
- State =:= addr_confirmed ->
- {Loopback,
- Pa,
- [#sctp_sndrcvinfo{stream=Stream,
- assoc_id=SbAssocId}],
- Data} = log_ok(gen_sctp:recv(Sb, infinity))
- end
- end,
+ ok = await_first_data(Loopback, LAddr,
+ Pa, SaAssocId,
+ Sb, Pb, SbAssocId,
+ Data),
ok = gen_sctp:send(Sb, SbAssocId, 0, Data),
case log_ok(gen_sctp:recv(Sa, infinity)) of
{Loopback,Pb,
@@ -397,6 +399,75 @@ xfer_min(Config) when is_list(Config) ->
end,
ok.
+await_first_data(Loopback, LAddr,
+ CPort, CAssocId,
+ SSock, SPort, SAssocId,
+ Data) ->
+ await_first_data(Loopback, LAddr,
+ CPort, CAssocId,
+ SSock, SPort, SAssocId,
+ Data, 2).
+
+await_first_data(Loopback, LAddr,
+ CPort, CAssocId,
+ SSock, SPort, SAssocId,
+ Data,
+ N) when (N >= 0) ->
+ case log_ok(gen_sctp:recv(SSock, infinity)) of
+ {Loopback, CPort,
+ [#sctp_sndrcvinfo{stream = Stream,
+ assoc_id = SAssocId}],
+ Data} ->
+ ?P("~w -> received expected data (sndrcvinfo) event with"
+ "~n Stream: ~p",
+ [?FUNCTION_NAME, Stream]),
+ ok;
+ %% Something else...
+ %% We *can* also first receive one or more paddr-change events...
+ Event ->
+ ?P("~w -> received other event - check", [?FUNCTION_NAME]),
+ case recv_event(Event) of
+ {Loopback, CPort,
+ #sctp_paddr_change{addr = {IPAddr, _} = Addr,
+ state = State,
+ error = 0 = Error,
+ assoc_id = SAssocId}}
+ when ((IPAddr =:= Loopback) orelse
+ (IPAddr =:= LAddr)) andalso
+ ((State =:= addr_available) orelse
+ (State =:= addr_confirmed)) ->
+ ?P("~w -> was expected paddr-change event with expected:"
+ "~n Addr: ~p"
+ "~n State: ~p"
+ "~n Error: ~p",
+ [?FUNCTION_NAME, Addr, State, Error]),
+ await_first_data(Loopback, LAddr,
+ CPort, CAssocId,
+ SSock, SPort, SAssocId,
+ Data,
+ N-1);
+ {Loopback, CPort,
+ #sctp_paddr_change{addr = Addr,
+ state = State,
+ error = Error,
+ assoc_id = AssocId}} ->
+ ?P("~w -> was expected paddr-change event with unexpected:"
+ "~n Addr: ~p"
+ "~n State: ~p"
+ "~n Error: ~p"
+ "~n AssocId: ~p",
+ [?FUNCTION_NAME, Addr, State, Error, AssocId]),
+ ct:fail({unexpected_paddr_change,
+ {Addr, State, Error, AssocId}});
+ OtherEvent ->
+ ?P("~w -> was unexpected event:"
+ "~n ~p",
+ [?FUNCTION_NAME, OtherEvent]),
+ ct:fail({unexpected_event, OtherEvent})
+ end
+ end.
+
+
filter_stat_eq([], []) ->
[];
filter_stat_eq([{Tag,Val1}=Stat|SbStat1], [{Tag,Val2}|SbStat2]) ->
--
2.43.0