%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2012. All Rights Reserved.
%%
%% 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 online 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.
%%
%% %CopyrightEnd%
%%
%%----------------------------------------------------------------------
%% File: ct_snmp_SUITE.erl
%%
%% Description:
%% This file contains the test cases for the ct_snmp API.
%%
%% @author Support
%% @doc Test of SNMP support in common_test
%% @end
%%----------------------------------------------------------------------
%%----------------------------------------------------------------------
-module(ct_snmp_SUITE).
-include_lib("common_test/include/ct.hrl").
-include_lib("snmp/include/STANDARD-MIB.hrl").
-include_lib("snmp/include/snmp_types.hrl").
-compile(export_all).
%% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(1)).
%% SNMP user stuff
-behaviour(snmpm_user).
-export([handle_error/3,
handle_agent/5,
handle_pdu/4,
handle_trap/3,
handle_inform/3,
handle_report/3]).
suite() ->
[{require, snmp_mgr_agent, snmp},
{require, snmp_app_cfg, snmp_app}].
all() ->
[start_stop,
{group,get_set}].
groups() ->
[{get_set,[get_values,get_next_values,set_values]}].
init_per_group(get_set, Config) ->
ok = ct_snmp:start(Config,snmp_mgr_agent,snmp_app_cfg),
Config.
end_per_group(get_set, Config) ->
ok = ct_snmp:stop(Config),
Config.
init_per_testcase(_Case, Config) ->
Dog = test_server:timetrap(?default_timeout),
[{watchdog, Dog}|Config].
end_per_testcase(_Case, Config) ->
Dog=?config(watchdog, Config),
test_server:timetrap_cancel(Dog),
ok.
init_per_suite(Config) ->
Config.
end_per_suite(Config) ->
Config.
break(_Config) ->
test_server:break(""),
ok.
start_stop(Config) ->
ok = ct_snmp:start(Config,snmp_mgr_agent,snmp_app_cfg),
timer:sleep(1000),
{snmp,_,_} = lists:keyfind(snmp,1,application:which_applications()),
[_|_] = filelib:wildcard("*/*.conf",?config(priv_dir,Config)),
ok = ct_snmp:stop(Config),
timer:sleep(1000),
false = lists:keyfind(snmp,1,application:which_applications()),
[] = filelib:wildcard("*/*.conf",?config(priv_dir,Config)),
ok.
get_values(_Config) ->
Oids1 = [?sysDescr_instance, ?sysName_instance],
{noError,_,V1} = ct_snmp:get_values(agent_name,Oids1,snmp_mgr_agent),
[#varbind{oid=?sysDescr_instance,value="Erlang SNMP agent"},
#varbind{oid=?sysName_instance,value="ct_test"}] = V1,
ok.
get_next_values(_Config) ->
Oids2 = [?system],
{noError,_,V2} = ct_snmp:get_next_values(agent_name,Oids2,snmp_mgr_agent),
[#varbind{oid=?sysDescr_instance,value="Erlang SNMP agent"}] = V2,
ok.
set_values(Config) ->
Oid3 = ?sysName_instance,
NewName = "ct_test changed by " ++ atom_to_list(?MODULE),
VarsAndVals = [{Oid3,s,NewName}],
{noError,_,_} =
ct_snmp:set_values(agent_name,VarsAndVals,snmp_mgr_agent,Config),
Oids4 = [?sysName_instance],
{noError,_,V4} = ct_snmp:get_values(agent_name,Oids4,snmp_mgr_agent),
[#varbind{oid=?sysName_instance,value=NewName}] = V4,
ok.
%%%-----------------------------------------------------------------
%%% SNMP Manager User callback
handle_error(ReqId, Reason, UserData) ->
erlang:display({handle_error,ReqId, Reason, UserData}),
ignore.
handle_agent(Addr, Port, Type, SnmpInfo, UserData) ->
erlang:display({handle_agent,Addr, Port, Type, SnmpInfo, UserData}),
ignore.
handle_pdu(TargetName, ReqId, SnmpPduInfo, UserData) ->
erlang:display({handle_pdu,TargetName, ReqId, SnmpPduInfo, UserData}),
ignore.
handle_trap(TargetName, SnmpTrapInfo, UserData) ->
erlang:display({handle_trap,TargetName, SnmpTrapInfo, UserData}),
ignore.
handle_inform(TargetName, SnmpInformInfo, UserData) ->
erlang:display({handle_inform,TargetName, SnmpInformInfo, UserData}),
ignore.
handle_report(TargetName, SnmpReportInfo, UserData) ->
erlang:display({handle_report,TargetName, SnmpReportInfo, UserData}),
ignore.