diff options
author | Micael Karlberg <[email protected]> | 2019-04-03 17:53:30 +0200 |
---|---|---|
committer | Micael Karlberg <[email protected]> | 2019-04-11 18:55:44 +0200 |
commit | 8bd83e6a805ee15c52e239e8d404e1d3e1021048 (patch) | |
tree | 486f0275c4002496e4775e68c6815e5ca25f8c9b | |
parent | e7c9ded977218db7fa19c3fcc5169be08c4e7010 (diff) | |
download | otp-8bd83e6a805ee15c52e239e8d404e1d3e1021048.tar.gz otp-8bd83e6a805ee15c52e239e8d404e1d3e1021048.tar.bz2 otp-8bd83e6a805ee15c52e239e8d404e1d3e1021048.zip |
[snmp|agent|test] Agent test manager start fix
The agent test manager had a bug during start that could
potentially cause deadlock, but atleast could cause test
cases to fail because of timeouts. The test manager
(actually the "packet server") used proc_lib to start the
process but it called the init_ack function before the init
was actually complete. This was only a problem for v3 cases
(where it did a bunch of further inits, including starting
the local-db process).
Also did debug/verbosity tweaking. Added a bunch of debug
(verbosity) printouts for the agent test manager "packet server"
during v3 init. Also made sure we could distinguish the
"normal" local-db from the one used by the test manager
(this is done by using a new short-name).
-rw-r--r-- | lib/snmp/src/agent/snmpa_local_db.erl | 4 | ||||
-rw-r--r-- | lib/snmp/src/misc/snmp_verbosity.erl | 3 | ||||
-rw-r--r-- | lib/snmp/test/snmp_test_mgr_misc.erl | 23 |
3 files changed, 21 insertions, 9 deletions
diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl index eb67b9cd6f..f481fe9970 100644 --- a/lib/snmp/src/agent/snmpa_local_db.erl +++ b/lib/snmp/src/agent/snmpa_local_db.erl @@ -147,8 +147,8 @@ init([Prio, DbDir, DbInitError, Opts]) -> do_init(Prio, DbDir, DbInitError, Opts) -> process_flag(priority, Prio), process_flag(trap_exit, true), - put(sname,ldb), - put(verbosity,get_opt(verbosity, Opts, ?default_verbosity)), + put(sname, get_opt(sname, Opts, ldb)), + put(verbosity, get_opt(verbosity, Opts, ?default_verbosity)), ?vlog("starting",[]), Dets = dets_open(DbDir, DbInitError, Opts), Ets = ets:new(?ETS_TAB, [set, protected]), diff --git a/lib/snmp/src/misc/snmp_verbosity.erl b/lib/snmp/src/misc/snmp_verbosity.erl index edfb52a474..bca4bad283 100644 --- a/lib/snmp/src/misc/snmp_verbosity.erl +++ b/lib/snmp/src/misc/snmp_verbosity.erl @@ -155,7 +155,8 @@ image_of_sname(mgr) -> "MGR"; image_of_sname(mgr_misc) -> "MGR_MISC"; image_of_sname(undefined) -> ""; -image_of_sname(V) -> lists:flatten(io_lib:format("~p",[V])). +image_of_sname(N) when is_list(N) -> N; % Used in testing +image_of_sname(N) -> lists:flatten(io_lib:format("~p", [N])). validate(info) -> info; diff --git a/lib/snmp/test/snmp_test_mgr_misc.erl b/lib/snmp/test/snmp_test_mgr_misc.erl index 9e76452345..89d6f93a88 100644 --- a/lib/snmp/test/snmp_test_mgr_misc.erl +++ b/lib/snmp/test/snmp_test_mgr_misc.erl @@ -38,6 +38,7 @@ -define(SNMP_USE_V3, true). -include_lib("snmp/include/snmp_types.hrl"). +-include_lib("snmp/src/misc/snmp_verbosity.hrl"). %%---------------------------------------------------------------------- @@ -101,11 +102,11 @@ init_packet( DbgOptions, IpFamily) -> put(sname, mgr_misc), init_debug(DbgOptions), - {ok, UdpId} = - gen_udp:open(TrapUdp, [{recbuf,BufSz}, {reuseaddr, true}, IpFamily]), + UdpOpts = [{recbuf,BufSz}, {reuseaddr, true}, IpFamily], + {ok, UdpId} = gen_udp:open(TrapUdp, UdpOpts), put(msg_id, 1), - proc_lib:init_ack(Parent, self()), init_usm(Version, Dir), + proc_lib:init_ack(Parent, self()), packet_loop(SnmpMgr, UdpId, AgentIp, UdpPort, VsnHdr, Version, []). init_debug(Dbg) when is_atom(Dbg) -> @@ -598,15 +599,25 @@ set_pdu(Msg, RePdu) -> init_usm('version-3', Dir) -> + ?vlog("init_usm -> create (and init) fake \"agent\" table", []), ets:new(snmp_agent_table, [set, public, named_table]), ets:insert(snmp_agent_table, {agent_mib_storage, persistent}), - snmpa_local_db:start_link(normal, Dir, [{verbosity,trace}]), + ?vlog("init_usm -> try start fake local-db", []), + {ok, _} = snmpa_local_db:start_link(normal, Dir, + [{sname, "MGR-LOCAL-DB"}, + {verbosity, trace}]), NameDb = snmpa_agent:db(snmpEngineID), + ?vlog("init_usm -> try set manager engine-id", []), R = snmp_generic:variable_set(NameDb, "mgrEngine"), - io:format("~w:init_usm -> engine-id set result: ~p~n", [?MODULE,R]), + snmp_verbosity:print(info, info, "init_usm -> engine-id set result: ~p", [R]), + ?vlog("init_usm -> try set engine boots (framework-mib)", []), snmp_framework_mib:set_engine_boots(1), + ?vlog("init_usm -> try set engine time (framework-mib)", []), snmp_framework_mib:set_engine_time(1), - snmp_user_based_sm_mib:reconfigure(Dir); + ?vlog("init_usm -> try usm (mib) reconfigure", []), + snmp_user_based_sm_mib:reconfigure(Dir), + ?vlog("init_usm -> done", []), + ok; init_usm(_Vsn, _Dir) -> ok. |