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 + -
显示快捷键?