File 2072-megaco-test-Add-inet-backend-testing-for-the-transac.patch of Package erlang
From c94639fa00a8797312242a366513c73c11521363 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Wed, 11 Dec 2024 09:39:14 +0100
Subject: [PATCH 2/4] [megaco|test] Add inet-backend testing for the
transaction suite
---
lib/megaco/test/megaco_trans_SUITE.erl | 142 +++++++++++++++++++------
1 file changed, 108 insertions(+), 34 deletions(-)
diff --git a/lib/megaco/test/megaco_trans_SUITE.erl b/lib/megaco/test/megaco_trans_SUITE.erl
index 91cb68abac..2c16204417 100644
--- a/lib/megaco/test/megaco_trans_SUITE.erl
+++ b/lib/megaco/test/megaco_trans_SUITE.erl
@@ -66,6 +66,7 @@
]).
+-include_lib("common_test/include/ct.hrl").
-include_lib("megaco/include/megaco.hrl").
-include_lib("megaco/include/megaco_message_v1.hrl").
-include("megaco_test_lib.hrl").
@@ -84,8 +85,8 @@
-define(MG, megaco_test_mg).
-define(MGC, megaco_test_mgc).
--define(MGC_START(Pid, Mid, ET, Verb),
- mgc_start(Pid, Mid, ET, Verb)).
+-define(MGC_START(Pid, Mid, ET, Conf, Verb),
+ mgc_start(Pid, Mid, ET, Conf, Verb)).
-define(MGC_STOP(Pid), ?MGC:stop(Pid)).
-define(MGC_GET_STATS(Pid, No), ?MGC:get_stats(Pid, No)).
-define(MGC_RESET_STATS(Pid), ?MGC:reset_stats(Pid)).
@@ -128,6 +129,49 @@ suite() ->
[{ct_hooks, [ts_install_cth]}].
all() ->
+ %% This is a temporary messure to ensure that we can
+ %% test the socket backend without effecting *all*
+ %% applications on *all* machines.
+ %% This flag is set only for *one* host.
+ case ?TEST_INET_BACKENDS() of
+ true ->
+ [
+ {group, inet_backend_default},
+ {group, inet_backend_inet},
+ {group, inet_backend_socket}
+ ];
+ _ ->
+ [
+ {group, inet_backend_default}
+ ]
+ end.
+
+groups() ->
+ [
+ {inet_backend_default, [], inet_backend_default_cases()},
+ {inet_backend_inet, [], inet_backend_inet_cases()},
+ {inet_backend_socket, [], inet_backend_socket_cases()},
+
+ {all, [], all_cases()},
+ {ack, [], ack_cases()},
+ {trans_req, [], trans_req_cases()},
+ {trans_req_and_ack, [], trans_req_and_ack_cases()},
+ {pending, [], pending_cases()},
+ {reply, [], reply_cases()},
+ {tickets, [], tickets_cases()},
+ {otp_7192, [], otp_7192_cases()}
+ ].
+
+inet_backend_default_cases() ->
+ [{all, [], all_cases()}].
+
+inet_backend_inet_cases() ->
+ [{all, [], all_cases()}].
+
+inet_backend_socket_cases() ->
+ [{all, [], all_cases()}].
+
+all_cases() ->
[
{group, ack},
{group, trans_req},
@@ -137,17 +181,6 @@ all() ->
{group, tickets}
].
-groups() ->
- [
- {ack, [], ack_cases()},
- {trans_req, [], trans_req_cases()},
- {trans_req_and_ack, [], trans_req_and_ack_cases()},
- {pending, [], pending_cases()},
- {reply, [], reply_cases()},
- {tickets, [], tickets_cases()},
- {otp_7192, [], otp_7192_cases()}
- ].
-
ack_cases() ->
[
single_ack,
@@ -258,10 +291,38 @@ end_per_suite(Config0) when is_list(Config0) ->
%% -----
%%
+init_per_group(inet_backend_default = Group, Config) ->
+ ?ANNOUNCE_GROUP_INIT(Group),
+ [{socket_create_opts, []} | Config];
+init_per_group(inet_backend_inet = Group, Config) ->
+ ?ANNOUNCE_GROUP_INIT(Group),
+ case ?EXPLICIT_INET_BACKEND() of
+ true ->
+ %% The environment trumps us,
+ %% so only the default group should be run!
+ {skip, "explicit inet backend"};
+ false ->
+ [{socket_create_opts, [{inet_backend, inet}]} | Config]
+ end;
+init_per_group(inet_backend_socket = Group, Config) ->
+ ?ANNOUNCE_GROUP_INIT(Group),
+ case ?EXPLICIT_INET_BACKEND() of
+ true ->
+ %% The environment trumps us,
+ %% so only the default group should be run!
+ {skip, "explicit inet backend"};
+ false ->
+ [{socket_create_opts, [{inet_backend, socket}]} | Config]
+ end;
init_per_group(Group, Config) ->
?ANNOUNCE_GROUP_INIT(Group),
Config.
+end_per_group(Group, Config) when (inet_backend_default =:= Group) orelse
+ (inet_backend_init =:= Group) orelse
+ (inet_backend_socket =:= Group) ->
+ ?SLEEP(?SECS(5)),
+ Config;
end_per_group(_GroupName, Config) ->
Config.
@@ -309,6 +370,7 @@ single_ack(suite) ->
single_ack(doc) ->
[];
single_ack(Config) when is_list(Config) ->
+ SCO = ?config(socket_create_opts, Config),
Pre = fun() ->
MgcNode = make_node_name(mgc),
MgNode = make_node_name(mg),
@@ -320,23 +382,25 @@ single_ack(Config) when is_list(Config) ->
ok = ?START_NODES(Nodes),
Nodes
end,
- Case = fun do_single_ack/1,
+ Case = fun(N) -> do_single_ack(SCO, N) end,
Post = fun(Nodes) ->
d("stop nodes"),
?STOP_NODES(lists:reverse(Nodes))
end,
try_tc(rsingle_ack, Pre, Case, Post).
-do_single_ack([MgcNode, MgNode]) ->
+do_single_ack(SCO, [MgcNode, MgNode]) ->
%% Start the MGC and MGs
i("[MGC] start"),
ET = [{text,tcp}, {text,udp}, {binary,tcp}, {binary,udp}],
- Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, ?MGC_VERBOSITY),
+ Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, SCO, ?MGC_VERBOSITY),
i("[MG] start"),
%% MgConf0 = [{MgNode, "mg", text, tcp, ?MG_VERBOSITY}],
MgMid = {deviceName, "mg"},
- MgConfig = [{auto_ack, true}, {trans_timer, 5000}, {trans_ack, true}],
+ MgConfig =
+ SCO ++
+ [{auto_ack, true}, {trans_timer, 5000}, {trans_ack, true}],
Mg = ?MG_START(MgNode, MgMid, text, tcp, MgConfig, ?MG_VERBOSITY),
d("MG user info: ~p", [?MG_USER_INFO(Mg, all)]),
@@ -381,6 +445,7 @@ multi_ack_timeout(suite) ->
multi_ack_timeout(doc) ->
[];
multi_ack_timeout(Config) when is_list(Config) ->
+ SCO = ?config(socket_create_opts, Config),
Cond = fun() ->
%% Regardless of other criteria,
%% if the factor is to high => SKIP
@@ -423,7 +488,8 @@ multi_ack_timeout(Config) when is_list(Config) ->
true ->
5
end,
- #{nodes => Nodes,
+ #{sco => SCO,
+ nodes => Nodes,
max_count => MaxCount,
ttimeout => ?SECS(10),
timeout => ?SECS(60)}
@@ -435,7 +501,8 @@ multi_ack_timeout(Config) when is_list(Config) ->
end,
try_tc(multi_ack_timeout, Cond, Pre, Case, Post).
-do_multi_ack_timeout(#{nodes := [MgcNode, MgNode],
+do_multi_ack_timeout(#{sco := SCO,
+ nodes := [MgcNode, MgNode],
max_count := MaxCount,
ttimeout := TTimeout,
timeout := Timeout}) ->
@@ -443,15 +510,17 @@ do_multi_ack_timeout(#{nodes := [MgcNode, MgNode],
%% Start the MGC and MGs
i("[MGC] start"),
ET = [{text,tcp}, {text,udp}, {binary,tcp}, {binary,udp}],
- Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, ?MGC_VERBOSITY),
+ Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, SCO, ?MGC_VERBOSITY),
i("[MG] start"),
%% MgConf0 = [{MgNode, "mg", text, tcp, ?MG_VERBOSITY}],
MgMid = {deviceName, "mg"},
- MgConfig = [{auto_ack, true},
- {trans_ack, true},
- {trans_timer, TTimeout},
- {trans_ack_maxcount, MaxCount + 10}],
+ MgConfig =
+ SCO ++
+ [{auto_ack, true},
+ {trans_ack, true},
+ {trans_timer, TTimeout},
+ {trans_ack_maxcount, MaxCount + 10}],
Mg = ?MG_START(MgNode, MgMid, text, tcp, MgConfig, ?MG_VERBOSITY),
d("MG user info: ~p", [?MG_USER_INFO(Mg, all)]),
@@ -502,6 +571,7 @@ multi_ack_maxcount(suite) ->
multi_ack_maxcount(doc) ->
[];
multi_ack_maxcount(Config) when is_list(Config) ->
+ SCO = ?config(socket_create_opts, Config),
Pre = fun() ->
MgcNode = make_node_name(mgc),
MgNode = make_node_name(mg),
@@ -513,28 +583,30 @@ multi_ack_maxcount(Config) when is_list(Config) ->
ok = ?START_NODES(Nodes),
Nodes
end,
- Case = fun do_multi_ack_maxcount/1,
+ Case = fun(N) -> do_multi_ack_maxcount(SCO, N) end,
Post = fun(Nodes) ->
d("stop nodes"),
?STOP_NODES(lists:reverse(Nodes))
end,
try_tc(multi_ack_maxcount, Pre, Case, Post).
-do_multi_ack_maxcount([MgcNode, MgNode]) ->
+do_multi_ack_maxcount(SCO, [MgcNode, MgNode]) ->
MaxCount = 10,
%% Start the MGC and MGs
i("[MGC] start"),
ET = [{text,tcp}, {text,udp}, {binary,tcp}, {binary,udp}],
- Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, ?MGC_VERBOSITY),
+ Mgc = ?MGC_START(MgcNode, {deviceName, "ctrl"}, ET, SCO, ?MGC_VERBOSITY),
i("[MG] start"),
%% MgConf0 = [{MgNode, "mg", text, tcp, ?MG_VERBOSITY}],
MgMid = {deviceName, "mg"},
- MgConfig = [%% {auto_ack, true},
- %% {trans_timer, 120000},
- %% {trans_ack_maxcount, MaxCount}
- ],
+ MgConfig =
+ SCO ++
+ [%% {auto_ack, true},
+ %% {trans_timer, 120000},
+ %% {trans_ack_maxcount, MaxCount}
+ ],
Mg = ?MG_START(MgNode, MgMid, text, tcp, MgConfig, ?MG_VERBOSITY),
d("MG user info: ~p", [?MG_USER_INFO(Mg, all)]),
@@ -9676,8 +9748,9 @@ await_completion(Ids, Timeout) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-mgc_start(Pid, Mid, ET, Verb) ->
- try ?MGC:start(Pid, Mid, ET, Verb) of
+mgc_start(Pid, Mid, ET, Conf0, Verb) ->
+ Conf = Conf0 ++ [{megaco_trace, false}],
+ try ?MGC:start(Pid, Mid, ET, Conf, Verb) of
{ok, MGC} ->
MGC;
{error, StartReason} ->
@@ -9695,7 +9768,8 @@ mgc_start(Pid, Mid, ET, Verb) ->
end.
-mg_start(Pid, Mid, Enc, Transp, Conf, Verb) ->
+mg_start(Pid, Mid, Enc, Transp, Conf0, Verb) ->
+ Conf = Conf0 ++ [{megaco_trace, false}],
try ?MG:start(Pid, Mid, Enc, Transp, Conf, Verb) of
{ok, MG} ->
MG;
--
2.43.0