snmp_agent_test.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,194 行 · 第 1/5 页
ERL
2,194 行
%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %% $Id$%%%% Test: ts:run(snmp, snmp_agent_test, [batch]).%%-module(snmp_agent_test).%% TODO%% * Test fault-tolerance (kill master etc)%%-compile(export_all).-define(application, snmp).-include_lib("kernel/include/file.hrl").-include("test_server.hrl").-include("snmp_test_lib.hrl").-define(SNMP_USE_V3, true).-include_lib("snmp/include/snmp_types.hrl").%% -include_lib("snmp/include/SNMP-COMMUNITY-MIB.hrl").%% -include_lib("snmp/include/SNMP-VIEW-BASED-ACM-MIB.hrl").%% -include_lib("snmp/include/SNMP-USER-BASED-SM-MIB.hrl").-define(klas1, [1,3,6,1,2,1,7]).-define(klas2, [1,3,6,1,2,1,9]).-define(klas3, [1,3,6,1,2,1,8,1]).-define(klas4, [1,3,6,1,2,1,8,4]).-define(sa, [1,3,6,1,4,1,193,2]).-define(system, [1,3,6,1,2,1,1]).-define(snmp, [1,3,6,1,2,1,11]).-define(snmpTraps, [1,3,6,1,6,3,1,1,5]).-define(ericsson, [1,3,6,1,4,1,193]).-define(testTrap, [1,3,6,1,2,1,15,0]).-define(xDescr, [1,3,6,1,2,1,17,1]).-define(xDescr2, [1,3,6,1,2,1,17,2]).-define(active, 1).-define(notInService, 2).-define(notReady, 3).-define(createAndGo, 4).-define(createAndWait, 5).-define(destroy, 6).-define(TRAP_UDP, 5000).-define(tooBigStr, "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").-define(str(X), snmp_pdus:bits_to_str(X)).-define(break(), begin io:format(user, "break at line ~w: pid: ~p\n", [?LINE, self()]), receive cont -> ok end end).-define(v1_2(V1,V2), case get(vsn) of v1 -> V1; _ -> V2 end). -define(v1_2_3(V1,V2,V3), case get(vsn) of v1 -> V1; v2 -> V2; _ -> V3 end).all(suite) -> {req, [mnesia, distribution, {local_slave_nodes, 2}, {time, 360}], [{conf, init_all, cases(), finish_all}]}.init_per_testcase(_Case, Config) when list(Config) -> Dog = ?WD_START(?MINS(6)), [{watchdog, Dog}|Config].fin_per_testcase(_Case, Config) when list(Config) -> Dog = ?config(watchdog, Config), ?WD_STOP(Dog), Config.cases() -> case ?OSTYPE() of vxworks -> %% No crypto app, so skip v3 testcases [ misc, test_v1, test_v2, test_v1_v2, test_multi_threaded, mib_storage, tickets ]; _Else -> [ misc, test_v1, test_v2, test_v1_v2, test_v3, test_multi_threaded, mib_storage, tickets ] end.%%%-----------------------------------------------------------------%%% The test case structure is as follows:%%%%%% init_all - starts mnesia, %%% %%% init_v1 - starts agent%%% simple%%% big - e.g. starts/stops subagent, load/unloads mibs%%% init_mul%%% mul_get%%% mul_set%%% <etc>%%% finish_mul%%% <etc>%%% finish_v1%%%%%% init_v2 - starts agent%%% finish_v2%%% %%% init_bilingual - starts agent%%% finish_bilingual%%% %%% finish_all%%%%%% There is still one problem with these testsuites. If one test%%% fails, it may not be possible to run some other cases, as it%%% may have e.g. created some row or loaded some table, that it%%% didn't undo (since it failed).%%%-----------------------------------------------------------------init_all(Conf) -> snmp_agent_test_lib:init_all(Conf).finish_all(Conf) -> snmp_agent_test_lib:finish_all(Conf).start_v1_agent(Config) -> snmp_agent_test_lib:start_v1_agent(Config).start_v1_agent(Config, Opts) -> snmp_agent_test_lib:start_v1_agent(Config, Opts).start_v2_agent(Config) -> snmp_agent_test_lib:start_v2_agent(Config).start_v3_agent(Config) -> snmp_agent_test_lib:start_v3_agent(Config).start_v3_agent(Config, Opts) -> snmp_agent_test_lib:start_v3_agent(Config, Opts).start_bilingual_agent(Config) -> snmp_agent_test_lib:start_bilingual_agent(Config).start_multi_threaded_agent(Config) when list(Config) -> snmp_agent_test_lib:start_mt_agent(Config).stop_agent(Config) -> snmp_agent_test_lib:stop_agent(Config).create_tables(SaNode) -> ?line {atomic, ok} = mnesia:create_table([{name, friendsTable2}, {ram_copies, [SaNode]}, {snmp, [{key, integer}]}, {attributes, [a1,a2,a3]}]), ?line {atomic, ok} = mnesia:create_table([{name, kompissTable2}, {ram_copies, [SaNode]}, {snmp, [{key, integer}]}, {attributes, [a1,a2,a3]}]), ?line {atomic, ok} = mnesia:create_table([{name, snmp_variables}, {attributes, [a1,a2]}]).delete_tables() -> mnesia:delete_table(friendsTable2), mnesia:delete_table(kompissTable2), mnesia:delete_table(snmp_variables).%% Creation is done in runtime!delete_mib_storage_mnesia_tables() -> mnesia:delete_table(snmpa_mib_data), mnesia:delete_table(snmpa_mib_tree), mnesia:delete_table(snmpa_symbolic_store).%%-----------------------------------------------------------------%% A test case is always one of:%% - v1 specific case%% - v2 specific case%% - v1 and v2 case%% All v1 specific cases are prefixed with v1_, and all v2 with%% v2_. E.g. v1_trap/v2_trap.%%%% All other cases are shared. However, the testserver uses the name%% of the case to generate a file for that case. The same case cannot%% be used in different configurations in the same suite. Therefore%% all these functions exists in two variants, the base function%% <base>, and a second version <base>_2. There may be several%% versions as well, <base>_N.%%-----------------------------------------------------------------mib_storage(suite) -> [ mib_storage_ets, mib_storage_dets, mib_storage_mnesia, mib_storage_size_check_ets, mib_storage_size_check_dets, mib_storage_size_check_mnesia, mib_storage_varm_dets, mib_storage_varm_mnesia ].mib_storage_ets(suite) -> {req, [], {conf, init_mib_storage_ets, mib_storage_ets_cases(), finish_mib_storage_ets}}.mib_storage_dets(suite) -> {req, [], {conf, init_mib_storage_dets, mib_storage_dets_cases(), finish_mib_storage_dets}}.mib_storage_mnesia(suite) -> {req, [], {conf, init_mib_storage_mnesia, mib_storage_mnesia_cases(), finish_mib_storage_mnesia}}.mib_storage_size_check_ets(suite) -> {req, [], {conf, init_size_check_mse, mse_size_check_cases(), finish_size_check_mse}}.mib_storage_size_check_dets(suite) -> {req, [], {conf, init_size_check_msd, msd_size_check_cases(), finish_size_check_msd}}.mib_storage_size_check_mnesia(suite) -> {req, [], {conf, init_size_check_msm, msm_size_check_cases(), finish_size_check_msm}}.mib_storage_varm_dets(suite) -> {req, [], {conf, init_varm_mib_storage_dets, varm_mib_storage_dets_cases(), finish_varm_mib_storage_dets}}.mib_storage_varm_mnesia(suite) -> {req, [], {conf, init_varm_mib_storage_mnesia, varm_mib_storage_mnesia_cases(), finish_varm_mib_storage_mnesia}}.mib_storage_ets_cases() -> [ mse_simple, mse_v1_processing, mse_big, mse_big2, mse_loop_mib, mse_api, mse_sa_register, mse_v1_trap, mse_sa_error, mse_next_across_sa, mse_undo, mse_standard_mib, mse_community_mib, mse_framework_mib, mse_target_mib, mse_notification_mib, mse_view_based_acm_mib, mse_sparse_table, mse_me_of, mse_mib_of].mib_storage_dets_cases() -> [ msd_simple, msd_v1_processing, msd_big, msd_big2, msd_loop_mib, msd_api, msd_sa_register, msd_v1_trap, msd_sa_error, msd_next_across_sa, msd_undo, msd_standard_mib, msd_community_mib, msd_framework_mib, msd_target_mib, msd_notification_mib, msd_view_based_acm_mib, msd_sparse_table, msd_me_of, msd_mib_of ].mib_storage_mnesia_cases() -> [ msm_simple, msm_v1_processing, msm_big, msm_big2, msm_loop_mib, msm_api, msm_sa_register, msm_v1_trap, msm_sa_error, msm_next_across_sa, msm_undo, msm_standard_mib, msm_community_mib, msm_framework_mib, msm_target_mib, msm_notification_mib, msm_view_based_acm_mib, msm_sparse_table, msm_me_of, msm_mib_of ].mse_size_check_cases() -> [mse_size_check].msd_size_check_cases() -> [msd_size_check].msm_size_check_cases() -> [msm_size_check].varm_mib_storage_dets_cases() -> [msd_varm_mib_start].varm_mib_storage_mnesia_cases() -> [msm_varm_mib_start].init_mib_storage_ets(Config) when list(Config) -> ?LOG("init_mib_storage_ets -> entry", []), MibStorage = {snmp_mib_storage,ets}, init_ms(Config, [MibStorage]).init_mib_storage_dets(Config) when list(Config) -> ?LOG("init_mib_storage_ets -> entry", []), ?line AgentDir = ?GCONF(agent_dir, Config), MibStorage = {snmp_mib_storage,{dets,AgentDir}}, init_ms(Config, [MibStorage]).init_mib_storage_mnesia(Config) when list(Config) -> ?LOG("init_mib_storage_ets -> entry", []), MibStorage = {snmp_mib_storage,{mnesia,[]}}, init_ms(Config, [MibStorage]).init_ms(Config, Opts) when list(Config) -> ?LOG("init_mib_storage_ets -> entry", []), ?line SaNode = ?GCONF(snmp_sa, Config), ?line create_tables(SaNode), ?line AgentDir = ?GCONF(agent_dir, Config), ?line MgrDir = ?GCONF(mgr_dir, Config), ?line Ip = ?GCONF(ip, Config), ?line config([v1], MgrDir, AgentDir, tuple_to_list(Ip), tuple_to_list(Ip)), MasterAgentVerbosity = {snmp_master_agent_verbosity, trace}, MibsVerbosity = {snmp_mibserver_verbosity, trace}, SymStoreVerbosity = {snmp_symbolic_store_verbosity, trace}, Opts1 = [MasterAgentVerbosity,MibsVerbosity,SymStoreVerbosity|Opts], [{vsn, v1} | start_v1_agent(Config,Opts1)].init_size_check_mse(Config) when list(Config) -> MibStorage = {snmp_mib_storage, ets}, init_size_check_ms(Config, [MibStorage]).init_size_check_msd(Config) when list(Config) -> AgentDir = ?GCONF(agent_dir, Config), MibStorage = {snmp_mib_storage, {dets, AgentDir}}, init_size_check_ms(Config, [MibStorage]).init_size_check_msm(Config) when list(Config) -> MibStorage = {snmp_mib_storage, {mnesia,[]}}, init_size_check_ms(Config, [MibStorage]).init_size_check_ms(Config, Opts) when list(Config) -> SaNode = ?GCONF(snmp_sa, Config), %% We are using v3 here, so crypto must be supported or else... case ?CRYPTO_START() of ok -> case ?CRYPTO_SUPPORT() of {no, Reason} -> ?SKIP({unsupported_encryption, Reason}); yes -> ok end; {error, Reason} -> ?SKIP({failed_starting_crypto, Reason}) end, create_tables(SaNode), AgentDir = ?GCONF(agent_dir, Config), MgrDir = ?GCONF(mgr_dir, Config), Ip = ?GCONF(ip, Config), ?line ok = config([v3], MgrDir, AgentDir, tuple_to_list(Ip), tuple_to_list(Ip)), [{vsn, v3} | start_v3_agent(Config, Opts)].init_varm_mib_storage_dets(Config) when list(Config) -> ?LOG("init_varm_mib_storage_dets -> entry", []), ?line SaNode = ?GCONF(snmp_sa, Config), ?line create_tables(SaNode), ?line AgentDir = ?GCONF(agent_dir, Config), ?line MgrDir = ?GCONF(mgr_dir, Config), ?line Ip = ?GCONF(ip, Config), ?line config([v1], MgrDir, AgentDir, tuple_to_list(Ip), tuple_to_list(Ip)), MibStorage = {snmp_mib_storage,{dets,AgentDir}},
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?