summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicael Karlberg <bmk@erlang.org>2020-12-02 15:14:32 +0100
committerMicael Karlberg <bmk@erlang.org>2020-12-02 15:14:32 +0100
commit09e4df5d7dbe1ccac884800191d4aaf3b9de53be (patch)
tree896453e7c1636c9224c31a8a371f045c10b33650
parentbb9cde4f95647b6548e76df7a3404ff406f47435 (diff)
downloaderlang-09e4df5d7dbe1ccac884800191d4aaf3b9de53be.tar.gz
[snmp|agent|test] Add test cases for extended multi-threaded agent
Added another test group for multi-threaded agent. OTP-17022
-rw-r--r--lib/snmp/test/snmp_agent_SUITE.erl109
-rw-r--r--lib/snmp/test/snmp_agent_test_lib.erl18
2 files changed, 77 insertions, 50 deletions
diff --git a/lib/snmp/test/snmp_agent_SUITE.erl b/lib/snmp/test/snmp_agent_SUITE.erl
index 2a6cfbedbe..d433692b0a 100644
--- a/lib/snmp/test/snmp_agent_SUITE.erl
+++ b/lib/snmp/test/snmp_agent_SUITE.erl
@@ -204,7 +204,7 @@
v3_sha_auth/1,
v3_des_priv/1,
- %% all_tcs - test_multi_threaded
+ %% all_tcs - test_multi_threaded, test_multi_threaded_ext
multi_threaded/1,
mt_trap/1,
@@ -319,7 +319,7 @@
db_notify_client_test/0,
notify/2,
multi_threaded_test/0,
- mt_trap_test/1,
+ mt_trap_test/2,
types_v2_test/0,
implied_test/1,
sparse_table_test/0,
@@ -535,6 +535,7 @@ groups() ->
{test_v3, [], v3_cases()},
{test_v3_ipv6, [], v3_cases_ipv6()},
{test_multi_threaded, [], mt_cases()},
+ {test_multi_threaded_ext, [], mt_cases()},
{multiple_reqs, [], mul_cases()},
{multiple_reqs_2, [], mul_cases_2()},
{multiple_reqs_3, [], mul_cases_3()},
@@ -568,6 +569,7 @@ all_cases() ->
{group, test_v1_v2_ipv6},
{group, test_v3_ipv6},
{group, test_multi_threaded},
+ {group, test_multi_threaded_ext},
{group, mib_storage},
{group, tickets1}
].
@@ -654,7 +656,9 @@ init_per_group(multiple_reqs_2 = GroupName, Config) ->
init_per_group(multiple_reqs_3 = GroupName, Config) ->
init_mul(snmp_test_lib:init_group_top_dir(GroupName, Config));
init_per_group(test_multi_threaded = GroupName, Config) ->
- init_mt(snmp_test_lib:init_group_top_dir(GroupName, Config));
+ init_mt(snmp_test_lib:init_group_top_dir(GroupName, Config), true);
+init_per_group(test_multi_threaded_ext = GroupName, Config) ->
+ init_mt(snmp_test_lib:init_group_top_dir(GroupName, Config), extended);
init_per_group(test_v3 = GroupName, Config) ->
case snmp_test_lib:crypto_start() of
ok ->
@@ -764,49 +768,51 @@ end_per_group(v2_inform, Config) ->
end_per_group(v3_inform, Config) ->
finish_v3_inform(Config);
end_per_group(multiple_reqs, Config) ->
- finish_mul(Config);
+ finish_mul(Config);
end_per_group(multiple_reqs_2, Config) ->
finish_mul(Config);
end_per_group(multiple_reqs_3, Config) ->
finish_mul(Config);
end_per_group(test_multi_threaded, Config) ->
- finish_mt(Config);
+ finish_mt(Config);
+end_per_group(test_multi_threaded_ext, Config) ->
+ finish_mt(Config);
end_per_group(test_v3_ipv6, Config) ->
- finish_v3(Config);
+ finish_v3(Config);
end_per_group(test_v1_v2_ipv6, Config) ->
- finish_v1_v2(Config);
+ finish_v1_v2(Config);
end_per_group(test_v2_ipv6, Config) ->
- finish_v2(Config);
+ finish_v2(Config);
end_per_group(test_v1_ipv6, Config) ->
- finish_v1(Config);
+ finish_v1(Config);
end_per_group(test_v3, Config) ->
- finish_v3(Config);
+ finish_v3(Config);
end_per_group(test_v1_v2, Config) ->
- finish_v1_v2(Config);
+ finish_v1_v2(Config);
end_per_group(test_v2, Config) ->
- finish_v2(Config);
+ finish_v2(Config);
end_per_group(test_v1, Config) ->
- finish_v1(Config);
+ finish_v1(Config);
end_per_group(misc, Config) ->
- finish_misc(Config);
+ finish_misc(Config);
end_per_group(mib_storage_varm_mnesia, Config) ->
- finish_varm_mib_storage_mnesia(Config);
+ finish_varm_mib_storage_mnesia(Config);
end_per_group(mib_storage_varm_dets, Config) ->
- finish_varm_mib_storage_dets(Config);
+ finish_varm_mib_storage_dets(Config);
end_per_group(mib_storage_size_check_mnesia, Config) ->
- finish_size_check_msm(Config);
+ finish_size_check_msm(Config);
end_per_group(mib_storage_size_check_dets, Config) ->
- finish_size_check_msd(Config);
+ finish_size_check_msd(Config);
end_per_group(mib_storage_size_check_ets, Config) ->
- finish_size_check_mse(Config);
+ finish_size_check_mse(Config);
end_per_group(mib_storage_mnesia, Config) ->
- finish_mib_storage_mnesia(Config);
+ finish_mib_storage_mnesia(Config);
end_per_group(mib_storage_dets, Config) ->
- finish_mib_storage_dets(Config);
+ finish_mib_storage_dets(Config);
end_per_group(mib_storage_ets, Config) ->
- finish_mib_storage_ets(Config);
+ finish_mib_storage_ets(Config);
end_per_group(_GroupName, Config) ->
- Config.
+ Config.
@@ -1040,8 +1046,8 @@ start_v3_agent(Config, Opts) ->
start_bilingual_agent(Config) ->
?ALIB:start_bilingual_agent(Config).
-start_multi_threaded_agent(Config) when is_list(Config) ->
- ?ALIB:start_mt_agent(Config).
+start_multi_threaded_agent(Config, MT) when is_list(Config) ->
+ [{multi_threaded, MT} | ?ALIB:start_mt_agent(Config, MT)].
stop_agent(Config) ->
?ALIB:stop_agent(Config).
@@ -2117,7 +2123,7 @@ mt_cases() ->
mt_trap
].
-init_mt(Config) when is_list(Config) ->
+init_mt(Config, MT) when is_list(Config) ->
SaNode = ?config(snmp_sa, Config),
create_tables(SaNode),
AgentConfDir = ?config(agent_conf_dir, Config),
@@ -2125,7 +2131,7 @@ init_mt(Config) when is_list(Config) ->
Ip = ?config(ip, Config),
?line ok = config([v2], MgrDir, AgentConfDir,
tuple_to_list(Ip), tuple_to_list(Ip)),
- [{vsn, v2} | start_multi_threaded_agent(Config)].
+ [{vsn, v2} | start_multi_threaded_agent(Config, MT)].
finish_mt(Config) when is_list(Config) ->
delete_tables(),
@@ -2290,10 +2296,11 @@ mt_trap(Config) when is_list(Config) ->
?P(mt_trap),
init_case(Config),
MA = whereis(snmp_master_agent),
+ MT = ?config(multi_threaded, Config),
?line load_master("Test1"),
?line load_master("TestTrapv2"),
- try_test(mt_trap_test, [MA]),
+ try_test(mt_trap_test, [MA, MT]),
?line unload_master("TestTrapv2"),
?line unload_master("Test1"),
ok.
@@ -3959,37 +3966,51 @@ multi_threaded_test() ->
?line ?expect1([{[sysLocation,0], "kalle"}]).
%% Req. Test1, TestTrapv2
-mt_trap_test(MA) ->
- ?NPRINT("Testing trap-sending with multi threaded agent..."),
- ?DBG("mt_trap_test(01) -> issue testTrapv22 (standard trap)", []),
+mt_trap_test(MA, MT) ->
+ ?NPRINT("Testing trap-sending with multi threaded (~w) agent...", [MT]),
+ ?IPRINT("mt_trap_test(01) -> issue testTrapv22 (standard trap)", []),
snmpa:send_trap(MA, testTrapv22, "standard trap"),
- ?DBG("mt_trap_test(02) -> await v2trap", []),
+ ?IPRINT("mt_trap_test(02) -> await v2trap", []),
?line ?expect2(v2trap, [{[sysUpTime, 0], any},
{[snmpTrapOID, 0], ?system ++ [0,1]}]),
- ?DBG("mt_trap_test(03) -> issue mtTrap (standard trap)", []),
+ %% multi-threaded = true
+ %% This will *lock* the 'main thread' of a multi-threaded agent,
+ %% the worker state will be 'busy'. Therefor when a new request
+ %% arrives a new *temporary* worker will be spawned.
+ ?IPRINT("mt_trap_test(03) -> issue mtTrap (standard trap)", []),
snmpa:send_trap(MA, mtTrap, "standard trap"),
Pid = get_multi_pid(),
- ?DBG("mt_trap_test(04) -> multi pid: ~p. Now request sysUpTime...", [Pid]),
+ ?IPRINT("mt_trap_test(04) -> multi pid: ~p. Now request sysUpTime...", [Pid]),
g([[sysUpTime,0]]),
- ?DBG("mt_trap_test(06) -> await sysUpTime", []),
+ ?IPRINT("mt_trap_test(06) -> await sysUpTime", []),
?line ?expect1([{[sysUpTime,0], any}]),
- ?DBG("mt_trap_test(07) -> issue testTrapv22 (standard trap)", []),
- snmpa:send_trap(MA, testTrapv22, "standard trap"),
- ?DBG("mt_trap_test(08) -> await v2trap", []),
- ?line ?expect2(v2trap,
- [{[sysUpTime, 0], any},
- {[snmpTrapOID, 0], ?system ++ [0,1]}]),
- ?DBG("mt_trap_test(09) -> send continue to multi-pid", []),
+ %% This will *only* work if multi-threaded is 'true', not 'extended'
+ %% since in the latter case all notifications are serialized through
+ %% a dedicated worker, which is now locked (see above).
+
+ if
+ (MT =:= true) ->
+ ?IPRINT("mt_trap_test(07) -> issue testTrapv22 (standard trap)", []),
+ snmpa:send_trap(MA, testTrapv22, "standard trap"),
+ ?IPRINT("mt_trap_test(08) -> await v2trap", []),
+ ?line ?expect2(v2trap,
+ [{[sysUpTime, 0], any},
+ {[snmpTrapOID, 0], ?system ++ [0,1]}]);
+ true ->
+ ok
+ end,
+
+ ?IPRINT("mt_trap_test(09) -> send continue to multi-pid", []),
Pid ! continue,
- ?DBG("mt_trap_test(10) -> await v2trap", []),
+ ?IPRINT("mt_trap_test(10) -> await v2trap", []),
?line ?expect2(v2trap, [{[sysUpTime, 0], any},
{[snmpTrapOID, 0], ?testTrap ++ [2]},
{[multiStr,0], "ok"}]),
- ?DBG("mt_trap_test(11) -> done", []),
+ ?IPRINT("mt_trap_test(11) -> done", []),
ok.
diff --git a/lib/snmp/test/snmp_agent_test_lib.erl b/lib/snmp/test/snmp_agent_test_lib.erl
index 6a4c582f36..b3c492e4ce 100644
--- a/lib/snmp/test/snmp_agent_test_lib.erl
+++ b/lib/snmp/test/snmp_agent_test_lib.erl
@@ -26,7 +26,7 @@
start_v2_agent/1, start_v2_agent/2,
start_v3_agent/1, start_v3_agent/2,
start_bilingual_agent/1, start_bilingual_agent/2,
- start_mt_agent/1, start_mt_agent/2,
+ start_mt_agent/1, start_mt_agent/2, start_mt_agent/3,
stop_agent/1,
%% start_sup/0, stop_sup/2,
@@ -560,12 +560,18 @@ start_bilingual_agent(Config, Opts)
when is_list(Config) andalso is_list(Opts) ->
start_agent(Config, [v1,v2], Opts).
-start_mt_agent(Config) when is_list(Config) ->
- start_agent(Config, [v2], [{multi_threaded, true}]).
-
-start_mt_agent(Config, Opts) when is_list(Config) andalso is_list(Opts) ->
- start_agent(Config, [v2], [{multi_threaded, true}|Opts]).
+start_mt_agent(Config) ->
+ start_mt_agent(Config, true, []).
+start_mt_agent(Config, MT) ->
+ start_mt_agent(Config, MT, []).
+
+start_mt_agent(Config, MT, Opts)
+ when is_list(Config) andalso
+ ((MT =:= true) orelse (MT =:= extended)) andalso
+ is_list(Opts) ->
+ start_agent(Config, [v2], [{multi_threaded, MT} | Opts]).
+
start_agent(Config, Vsns) ->
start_agent(Config, Vsns, []).
start_agent(Config, Vsns, Opts) ->