查看源码 ct_snmp (common_test v1.27.5)

Common TestSNMP 应用程序用户界面模块。

此模块的目的是简化测试用例编写者的 SNMP 配置。许多测试用例可以使用通用操作的默认值,则无需提供任何 SNMP 配置文件。当需要更改特定的配置参数时,可以通过 Common Test 的配置文件将相关 SNMP 配置文件的子集传递给 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.confstandard.confcommunity.confvacm.confusm.confnotify.conftarget_addr.conftarget_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).

请注意,USM 用户是 SNMPv3 配置所必需的,不应与用户混淆。

SNMP 陷阱、通知和报告消息由用户回调模块处理。有关详细信息,请参阅 SNMP 应用程序。

建议使用 Erlang/OTP MIB 编译器创建的 .hrl 文件来定义对象标识符 (OID)。例如,要从 OTP-MIB 中的 erlNodeTable 获取 Erlang 节点名称

Oid = ?erlNodeEntry ++ [?erlNodeName, 1]

此外,可以为 SNMP 应用程序配置参数 configservernet_if 等设置值(有关有效参数和类型的列表,请参阅 SNMP 应用程序的用户指南)。这是通过定义以下形式的配置数据变量来完成的

{snmp_app, [{manager, [snmp_app_manager_params()]},
            {agent, [snmp_app_agent_params()]}]}.

必须使用 require 在套件中分配数据名称(参见上面的示例)。将此名称作为参数 SnmpAppConfName 传递给 ct_snmp:start/3ct_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 管理器和/或代理。在管理器情况下,会执行由配置 MgrAgentConfName 指定的用户和代理的注册。使用 SNMPv3 时,还会注册调用的 USM 用户。也可以使用 ct_snmp:register_users/2ct_snmp:register_agents/2ct_snmp:register_usm_users/2 稍后注册用户、usm_users 和托管代理。

停止 SNMP 管理器和/或代理,并删除所有创建的文件。

从代理 snmp_master_agent 中卸载 MIB。

取消注册所有托管代理。

取消注册指定的托管代理。

取消注册所有用户。

取消注册指定的用户。

取消注册所有 USM 用户。

取消注册指定的 USM 用户。

类型

-type agent_config() :: {Item :: term(), Value :: term()}.
-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 ip() :: string() | {integer(), integer(), integer(), integer()}.
-type manager_ip() :: ip().
-type oid() :: [byte()].
-type oids() :: [oid()].
-type rel_path() :: string().
-type sec_type() :: none | minimum | semi.
链接到此类型

snmp_app_agent_params()

查看源码
-type snmp_app_agent_params() :: term().
链接到此类型

snmp_app_manager_params()

查看源码
-type snmp_app_manager_params() :: term().
-type snmpreply() :: {error_status(), error_index(), varbinds()}.
-type user_data() :: term().
-type user_name() :: atom().
-type usm_config() :: {Item :: term(), Value :: term()}.
-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 应用程序的文档中描述。

函数

链接到此函数

get_next_values(Agent, Oids, MgrAgentConfName)

查看源码
-spec get_next_values(Agent, Oids, MgrAgentConfName) -> SnmpReply
                         when
                             Agent :: agent_name(),
                             Oids :: oids(),
                             MgrAgentConfName :: atom(),
                             SnmpReply :: snmpreply().

发出同步 SNMP get next 请求。

链接到此函数

get_values(Agent, Oids, MgrAgentConfName)

查看源码
-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 中。

链接到此函数

register_agents(MgrAgentConfName, ManagedAgents)

查看源码
-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 中创建条目。

此函数尝试注册指定的托管代理,而不检查它们是否存在。要更改已注册的托管代理,必须先取消注册该代理。

链接到此函数

register_users(MgrAgentConfName, Users)

查看源码
-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 中创建条目。

此函数尝试注册指定的用户,而不检查它们是否存在。要更改已注册的用户,必须先取消注册该用户。

链接到此函数

register_usm_users(MgrAgentConfName, UsmUsers)

查看源码
-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 请求及其可能的副作用。

链接到此函数

set_values(Agent, VarsAndVals, MgrAgentConfName, Config)

查看源码
-spec set_values(Agent, VarsAndVals, MgrAgentConfName, Config) -> SnmpReply
                    when
                        Agent :: agent_name(),
                        VarsAndVals :: varsandvals(),
                        MgrAgentConfName :: atom(),
                        Config :: proplists:proplist(),
                        SnmpReply :: snmpreply().

发出同步 SNMP set 请求。

链接到此函数

start(Config, MgrAgentConfName)

查看源码
-spec start(Config, MgrAgentConfName) -> ok | {error, Reason}
               when Config :: proplists:proplist(), MgrAgentConfName :: atom(), Reason :: term().

等效于 start(Config, MgrAgentConfName, undefined)

链接到此函数

start(Config, MgrAgentConfName, SnmpAppConfName)

查看源码
-spec start(Config, MgrAgentConfName, SnmpAppConfName) -> ok | {error, Reason}
               when
                   Config :: proplists:proplist(),
                   MgrAgentConfName :: atom(),
                   SnmpAppConfName :: atom(),
                   Reason :: term().

启动 SNMP 管理器和/或代理。在管理器情况下,会执行由配置 MgrAgentConfName 指定的用户和代理的注册。使用 SNMPv3 时,还会注册调用的 USM 用户。也可以使用 ct_snmp:register_users/2ct_snmp:register_agents/2ct_snmp:register_usm_users/2 稍后注册用户、usm_users 和托管代理。

启动的代理称为 snmp_master_agent。使用 ct_snmp:load_mibs/1 将 MIB 加载到代理中。

使用 SnmpAppConfName,可以使用参数 configmibsnet_if 等配置 SNMP 应用程序。这些值与 ct_snmp 设置的默认值合并(并可能覆盖)。

-spec stop(Config) -> ok when Config :: proplists:proplist().

停止 SNMP 管理器和/或代理,并删除所有创建的文件。

链接到此函数

unload_mibs(Mibs)

查看源码 (自 OTP R16B 起)
-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。

链接到此函数

unregister_agents(MgrAgentConfName)

查看源码
-spec unregister_agents(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消注册所有托管代理。

链接到此函数

unregister_agents(MgrAgentConfName, ManagedAgents)

查看源代码 (自 OTP R16B 起)
-spec unregister_agents(MgrAgentConfName, ManagedAgents) -> ok
                           when MgrAgentConfName :: atom(), ManagedAgents :: [agent_name()].

取消注册指定的托管代理。

链接到此函数

unregister_users(MgrAgentConfName)

查看源码
-spec unregister_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消注册所有用户。

链接到此函数

unregister_users(MgrAgentConfName, Users)

查看源代码 (自 OTP R16B 起)
-spec unregister_users(MgrAgentConfName, Users) -> ok
                          when MgrAgentConfName :: atom(), Users :: [snmpm:user_id()].

取消注册指定的用户。

链接到此函数

unregister_usm_users(MgrAgentConfName)

查看源代码 (自 OTP R16B 起)
-spec unregister_usm_users(MgrAgentConfName) -> ok when MgrAgentConfName :: atom().

取消注册所有 USM 用户。

链接到此函数

unregister_usm_users(MgrAgentConfName, UsmUsers)

查看源代码 (自 OTP R16B 起)
-spec unregister_usm_users(MgrAgentConfName, UsmUsers) -> ok
                              when MgrAgentConfName :: atom(), UsmUsers :: [usm_user_name()].

取消注册指定的 USM 用户。