檢視原始碼 ct_snmp (common_test v1.27.5)
Common Test
的使用者介面模組,用於 SNMP
應用程式。
此模組的目的是簡化測試案例撰寫者的 SNMP 設定。許多測試案例可以使用常見操作的預設值,而無需提供 SNMP 設定檔。當需要變更特定的設定參數時,可以將相關 SNMP 設定檔的子集,透過 Common Test
設定檔傳遞給 ct_snmp
。對於更專業的設定參數,可以將簡單的 SNMP 設定檔放置在測試套件的資料目錄中。為了簡化測試套件,Common Test
會追蹤一些 SNMP 管理器的資訊。這樣,測試套件就不需要像直接與 OTP SNMP 管理器介接時那樣處理許多輸入參數。
可設定的 SNMP 管理器和代理程式參數
管理器設定
[{start_manager, boolean()}
- 選用。預設值為true
。{users, [{user_name(), [call_back_module(), user_data()]}]}
- 選用。{usm_users, [{usm_user_name(), [usm_config()]}]}
- 選用。僅限 SNMPv3。{managed_agents,[{agent_name(), [user_name(), agent_ip(), agent_port(), [agent_config()]]}]}
-managed_agents
是選用的。{max_msg_size, integer()}
- 選用。預設值為484
。{mgr_port, integer()}
- 選用。預設值為5000
。{engine _id, string()}
- 選用。預設值為"mgrEngine"
。
代理程式設定
{start_agent, boolean()}
- 選用。預設值為false
。{agent_sysname, string()}
- 選用。預設值為"ct_test"
。{agent_manager_ip, manager_ip()}
- 選用。預設值為localhost
。{agent_vsns, list()}
- 選用。預設值為[v2]
。{agent_trap_udp, integer()}
- 選用。預設值為5000
。{agent_udp, integer()}
- 選用。預設值為4000
。{agent_notify_type, atom()}
- 選用。預設值為trap
。{agent_sec_type, sec_type()}
- 選用。預設值為none
。{agent_passwd, string()}
- 選用。預設值為""
。{agent_engine_id, string()}
- 選用。預設值為"agentEngine"
。{agent_max_msg_size, string()}
- 選用。預設值為484
。
以下參數代表 SNMP 設定檔 context.conf
、standard.conf
、community.conf
、vacm.conf
、usm.conf
、notify.conf
、target_addr.conf
和 target_params.conf
。請注意,agent.conf
中的所有值都可以透過上面列出的參數進行修改。所有這些設定檔都由 SNMP
應用程式設定了預設值。這些值可以透過提供有效的設定值清單或位於測試套件資料目錄中的檔案來覆寫。如果您將函式 file:consult/1
應用於該檔案,則可以產生有效的設定值清單。
{agent_contexts, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_community, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_sysinfo, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_vacm, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_usm, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_notify_def, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_target_address_def, [term()] | {data_dir_file, rel_path()}}
- 選用。{agent_target_param_def, [term()] | {data_dir_file, rel_path()}}
- 選用。
函式中的參數 MgrAgentConfName
是您在測試套件中使用 require
陳述式分配的名稱。範例 (其中 MgrAgentConfName = snmp_mgr_agent
)
suite() -> [{require, snmp_mgr_agent, snmp}].
或
ct:require(snmp_mgr_agent, snmp).
請注意,SNMPv3 設定需要 USM 使用者,並且不要與使用者混淆。
SNMP 陷阱、通知和報告訊息由使用者回呼模組處理。詳情請參閱 SNMP
應用程式。
建議使用 Erlang/OTP MIB 編譯器建立的 .hrl
檔案來定義物件識別碼 (OID)。例如,要從 OTP-MIB 中的 erlNodeTable
取得 Erlang 節點名稱
Oid = ?erlNodeEntry ++ [?erlNodeName, 1]
此外,可以為 SNMP
應用程式設定參數設定值,例如 config
、server
、net_if
等等 (有關有效參數和類型的列表,請參閱 SNMP 應用程式的使用者指南
)。這是透過定義以下形式的設定資料變數來完成的
{snmp_app, [{manager, [snmp_app_manager_params()]},
{agent, [snmp_app_agent_params()]}]}.
必須在套件中使用 require
分配資料的名稱 (請參閱上面的範例)。將此名稱作為引數 SnmpAppConfName
傳遞給 ct_snmp:start/3
。ct_snmp
為一些 SNMP
應用程式設定參數指定預設值 (例如,參數 config
的 {verbosity,trace}
)。這組預設值與使用者指定的參數合併。使用者值會覆寫 ct_snmp
預設值。
摘要
函式
發出同步 SNMP get next
請求。
發出同步 SNMP get
請求。
將 MIB 載入代理程式 snmp_master_agent
。
明確指示管理器處理此代理程式。相當於在 agents.conf
中建立一個條目。
註冊負責特定代理程式的管理員實體 (= 使用者)。相當於在 users.conf
中建立一個條目。
明確指示管理器處理此 USM 使用者。相當於在 usm.conf
中建立一個條目。
以相反的順序傳回在測試案例中執行的所有成功 set
請求的清單。該清單包含涉及的使用者和代理程式、set
之前的值,以及新值。這旨在簡化函式 end_per_testcase
中的清除,也就是還原 set
請求及其可能產生的副作用。
發出同步 SNMP set
請求。
啟動 SNMP 管理器和/或代理程式。在管理器的情況下,將執行由組態 MgrAgentConfName
指定的使用者和代理程式註冊。使用 SNMPv3 時,也會註冊所謂的 USM 使用者。使用者、usm_users
和受管理的代理程式也可以稍後使用 ct_snmp:register_users/2
、ct_snmp:register_agents/2
和 ct_snmp:register_usm_users/2
註冊。
停止 SNMP 管理器和/或代理程式,並移除建立的所有檔案。
從代理程式 snmp_master_agent
卸載 MIB。
取消註冊所有受管理的代理程式。
取消註冊指定的受管理代理程式。
取消註冊所有使用者。
取消註冊指定的使用者。
取消註冊所有 USM 使用者。
取消註冊指定的 USM 使用者。
類型
-type agent_ip() :: ip().
-type agent_name() :: atom().
-type agent_port() :: integer().
-type call_back_module() :: atom().
-type error_index() :: integer().
-type error_status() :: noError | atom().
-type manager_ip() :: ip().
-type oid() :: [byte()].
-type oids() :: [oid()].
-type rel_path() :: string().
-type sec_type() :: none | minimum | semi.
-type snmp_app_agent_params() :: term().
-type snmp_app_manager_params() :: term().
-type snmpreply() :: {error_status(), error_index(), varbinds()}.
-type user_data() :: term().
-type user_name() :: atom().
-type usm_user_name() :: string().
-type value_type() :: o | i | u | g | s.
-type var_and_val() :: {oid(), value_type(), term()}.
-type varbind() :: term().
-type varbinds() :: [varbind()].
-type varsandvals() :: [var_and_val()].
這些資料類型在 SNMP
應用程式的文件中有所說明。
函式
-spec get_next_values(Agent, Oids, MgrAgentConfName) -> SnmpReply when Agent :: agent_name(), Oids :: oids(), MgrAgentConfName :: atom(), SnmpReply :: snmpreply().
發出同步 SNMP get next
請求。
-spec get_values(Agent, Oids, MgrAgentConfName) -> SnmpReply when Agent :: agent_name(), Oids :: oids(), MgrAgentConfName :: atom(), SnmpReply :: snmpreply().
發出同步 SNMP get
請求。
-spec load_mibs(Mibs) -> ok | {error, Reason} when Mibs :: [MibName], MibName :: string(), Reason :: {'load aborted at', MibName, InternalReason}, InternalReason :: already_loaded | term().
將 MIB 載入代理程式 snmp_master_agent
。
-spec register_agents(MgrAgentConfName, ManagedAgents) -> ok | {error, Reason} when MgrAgentConfName :: atom(), ManagedAgents :: [{AgentName, [Uid | AgentIp | AgentUdpPort | AgentConf]}], AgentName :: agent_name(), Uid :: snmpm:user_id(), AgentIp :: agent_ip(), AgentUdpPort :: inet:port_number(), AgentConf :: [agent_config()], Reason :: term().
明確指示管理器處理此代理程式。相當於在 agents.conf
中建立一個條目。
此函式嘗試註冊指定的受管理代理程式,而不檢查其中任何一個是否存在。要變更已註冊的受管理代理程式,必須先取消註冊該代理程式。
-spec register_users(MgrAgentConfName, Users) -> ok | {error, Reason} when MgrAgentConfName :: atom(), Users :: [{Id, [Module | Data]}], Id :: snmpm:user_id(), Module :: user_name(), Data :: user_data(), Reason :: term().
註冊負責特定代理程式的管理員實體 (= 使用者)。相當於在 users.conf
中建立一個條目。
此函式嘗試註冊指定的使用者,而不檢查其中任何一個是否存在。要變更已註冊的使用者,必須先取消註冊該使用者。
-spec register_usm_users(MgrAgentConfName, UsmUsers) -> ok | {error, Reason} when MgrAgentConfName :: atom(), UsmUsers :: [{UsmUserName, UsmConfig}], UsmUserName :: usm_user_name(), UsmConfig :: [usm_config()], Reason :: term().
明確指示管理器處理此 USM 使用者。相當於在 usm.conf
中建立一個條目。
此函式嘗試註冊指定的使用者,而不檢查其中任何一個是否存在。要變更已註冊的使用者,必須先取消註冊該使用者。
-spec set_info(Config) -> [{Agent, OldVarsAndVals, NewVarsAndVals}] when Config :: proplists:proplist(), Agent :: agent_name(), OldVarsAndVals :: varsandvals(), NewVarsAndVals :: varsandvals().
以相反的順序傳回在測試案例中執行的所有成功 set
請求的清單。該清單包含涉及的使用者和代理程式、set
之前的值,以及新值。這旨在簡化函式 end_per_testcase
中的清除,也就是還原 set
請求及其可能產生的副作用。
-spec set_values(Agent, VarsAndVals, MgrAgentConfName, Config) -> SnmpReply when Agent :: agent_name(), VarsAndVals :: varsandvals(), MgrAgentConfName :: atom(), Config :: proplists:proplist(), SnmpReply :: snmpreply().
發出同步 SNMP set
請求。
-spec start(Config, MgrAgentConfName) -> ok | {error, Reason} when Config :: proplists:proplist(), MgrAgentConfName :: atom(), Reason :: term().
-spec start(Config, MgrAgentConfName, SnmpAppConfName) -> ok | {error, Reason} when Config :: proplists:proplist(), MgrAgentConfName :: atom(), SnmpAppConfName :: atom(), Reason :: term().
啟動 SNMP 管理器和/或代理程式。在管理器的情況下,將執行由組態 MgrAgentConfName
指定的使用者和代理程式註冊。使用 SNMPv3 時,也會註冊所謂的 USM 使用者。使用者、usm_users
和受管理的代理程式也可以稍後使用 ct_snmp:register_users/2
、ct_snmp:register_agents/2
和 ct_snmp:register_usm_users/2
註冊。
啟動的代理程式稱為 snmp_master_agent
。使用 ct_snmp:load_mibs/1
將 MIB 載入到代理程式中。
透過 SnmpAppConfName
,可以使用參數 config
、mibs
、net_if
等來設定 SNMP 應用程式。這些值會與 ct_snmp
設定的預設值合併(並可能覆蓋)。
-spec stop(Config) -> ok when Config :: proplists:proplist().
停止 SNMP 管理器和/或代理程式,並移除建立的所有檔案。
-spec unload_mibs(Mibs) -> ok | {error, Reason} when Mibs :: [MibName], MibName :: string(), Reason :: {'unload aborted at', MibName, InternalReason}, InternalReason :: not_loaded | term().
從代理程式 snmp_master_agent
卸載 MIB。
-spec unregister_agents(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消註冊所有受管理的代理程式。
-spec unregister_agents(MgrAgentConfName, ManagedAgents) -> ok when MgrAgentConfName :: atom(), ManagedAgents :: [agent_name()].
取消註冊指定的受管理代理程式。
-spec unregister_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消註冊所有使用者。
-spec unregister_users(MgrAgentConfName, Users) -> ok when MgrAgentConfName :: atom(), Users :: [snmpm:user_id()].
取消註冊指定的使用者。
-spec unregister_usm_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().
取消註冊所有 USM 使用者。
-spec unregister_usm_users(MgrAgentConfName, UsmUsers) -> ok when MgrAgentConfName :: atom(), UsmUsers :: [usm_user_name()].
取消註冊指定的 USM 使用者。