diff options
author | Micael Karlberg <[email protected]> | 2010-05-28 12:00:00 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-08-20 08:54:26 +0200 |
commit | 8c78ac1382f089167afbf8d794cb9eff834577bd (patch) | |
tree | 0caa5a457d39b427fd4ca7c9af24e63b491ba48f /lib/snmp/test | |
parent | a70dc0de5a7050c1313a604a261a35b42584950b (diff) | |
download | otp-8c78ac1382f089167afbf8d794cb9eff834577bd.tar.gz otp-8c78ac1382f089167afbf8d794cb9eff834577bd.tar.bz2 otp-8c78ac1382f089167afbf8d794cb9eff834577bd.zip |
snmp: Patch 1118
OTP-8574 The SMI specifies that an table row OID should be named:
{ "1" }. An option has been introduced, relaxed_row_name_assign_check,
that allows for a more liberal numbering scheme.
OTP-8594 Changes to make snmp (forward) compatible with the new version
of the crypto application (released in R14). As of R14,
crypto is implemented using NIFs. Also, the API is more
strict.
OTP-8648 [manager] Changed default value for the MIB server cache.
Auto GC is now on by default.
OTP-8563 Decoding of Counter64 values larger then 9306882749598007295
fails. Counter64 is encoded as an 64 bit signed integer,
but is actually an unsigned integer, which the decoder does
not take into account.
OTP-8595 [compiler] Fails to compile non-contiguous BITS. Per Hedeland
OTP-8646 [manager] Raise condition causing the manager server process
to crash. Unregistering an agent while traffic (set/get-operations)
is ongoing could cause a crash in the manager server process
(raise condition).
Diffstat (limited to 'lib/snmp/test')
-rw-r--r-- | lib/snmp/test/modules.mk | 14 | ||||
-rw-r--r-- | lib/snmp/test/snmp_compiler_test.erl | 70 | ||||
-rw-r--r-- | lib/snmp/test/snmp_manager_config_test.erl | 90 | ||||
-rw-r--r-- | lib/snmp/test/snmp_pdus_test.erl | 64 | ||||
-rw-r--r-- | lib/snmp/test/snmp_test_data/OLD-SNMPEA-MIB.mib | 18 | ||||
-rw-r--r-- | lib/snmp/test/snmp_test_mgr_misc.erl | 14 |
6 files changed, 211 insertions, 59 deletions
diff --git a/lib/snmp/test/modules.mk b/lib/snmp/test/modules.mk index ff848cad1b..6a0c3e9481 100644 --- a/lib/snmp/test/modules.mk +++ b/lib/snmp/test/modules.mk @@ -1,20 +1,20 @@ #-*-makefile-*- ; force emacs to enter makefile-mode # %CopyrightBegin% -# -# Copyright Ericsson AB 2004-2009. All Rights Reserved. -# +# +# Copyright Ericsson AB 2004-2010. 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% SUITE_MODULES = \ @@ -57,6 +57,10 @@ MODULES = \ HRL_FILES = snmp_test_lib.hrl +# These are MIBs that aure used by the compiler test-suite. +COMPILER_MIB_FILES = \ + OTP8574-MIB + MIB_FILES = \ OLD-SNMPEA-MIB.mib \ OLD-SNMPEA-MIB-v2.mib \ diff --git a/lib/snmp/test/snmp_compiler_test.erl b/lib/snmp/test/snmp_compiler_test.erl index 9a9127a130..ad77b01362 100644 --- a/lib/snmp/test/snmp_compiler_test.erl +++ b/lib/snmp/test/snmp_compiler_test.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2003-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2003-2010. 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% %% @@ -46,7 +46,9 @@ module_identity/1, tickets/1, - otp_6150/1 + otp_6150/1, + otp_8574/1, + otp_8595/1 ]). @@ -56,6 +58,7 @@ -export([ ]). + %%---------------------------------------------------------------------- %% Macros %%---------------------------------------------------------------------- @@ -98,7 +101,9 @@ all(suite) -> tickets(suite) -> [ - otp_6150 + otp_6150, + otp_8574, + otp_8595 ]. @@ -178,6 +183,54 @@ otp_6150(Config) when is_list(Config) -> ok. +otp_8574(suite) -> + []; +otp_8574(Config) when is_list(Config) -> + put(tname,otp_8574), + p("starting with Config: ~p~n", [Config]), + + Dir = ?config(comp_dir, Config), + MibDir = ?config(mib_dir, Config), + MibFile = join(MibDir, "OTP8574-MIB.mib"), + + p("ensure compile fail without relaxed assign check"), + case snmpc:compile(MibFile, [{group_check, false}, {outdir, Dir}]) of + {error, compilation_failed} -> + p("with relaxed assign check MIB compiles with warning"), + case snmpc:compile(MibFile, [{group_check, false}, + {outdir, Dir}, + relaxed_row_name_assign_check]) of + {ok, _Mib} -> + ok; + {error, Reason} -> + p("unexpected compile failure: " + "~n Reason: ~p", [Reason]), + exit({unexpected_compile_failure, Reason}) + end; + + {ok, _} -> + p("unexpected compile success"), + exit(unexpected_compile_success) + end. + + +otp_8595(suite) -> + []; +otp_8595(Config) when is_list(Config) -> + put(tname,otp_8595), + p("starting with Config: ~p~n", [Config]), + + Dir = ?config(comp_dir, Config), + MibDir = ?config(mib_dir, Config), + MibFile = join(MibDir, "OTP8595-MIB.mib"), + ?line {ok, Mib} = + snmpc:compile(MibFile, [{outdir, Dir}, + {verbosity, trace}, + {group_check, false}]), + io:format("otp_8595 -> Mib: ~n~p~n", [Mib]), + ok. + + %%====================================================================== %% Internal functions %%====================================================================== @@ -373,6 +426,9 @@ join(A,B) -> %% p(F) -> %% p(F, []). +p(F) -> + p(F, []). + p(F, A) -> p(get(tname), F, A). diff --git a/lib/snmp/test/snmp_manager_config_test.erl b/lib/snmp/test/snmp_manager_config_test.erl index fcb3d7e30c..d5dc1387f7 100644 --- a/lib/snmp/test/snmp_manager_config_test.erl +++ b/lib/snmp/test/snmp_manager_config_test.erl @@ -1444,10 +1444,9 @@ start_with_invalid_usm_conf_file1(Conf) when is_list(Conf) -> p("[test 54] write usm config file with invalid auth-key (4)"), Usm54 = setelement(4, Usm51, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,kalle]"), write_usm_conf(ConfDir, [Usm54]), - %% ?line ok = crypto:start(), %% Varf�r k�r den redan? - ?line crypto:start(), %% Make sure it's started... + ?line maybe_start_crypto(), %% Make sure it's started... ?line {error, Reason54} = config_start(Opts), - ?line ok = crypto:stop(), + ?line ok = maybe_stop_crypto(), p("start failed (as expected): ~p", [Reason54]), ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason54, await_config_not_running(), @@ -1492,21 +1491,35 @@ start_with_invalid_usm_conf_file1(Conf) when is_list(Conf) -> p("[test 59] write usm config file with invalid auth-key (9)"), Usm59 = setelement(4, Usm57, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,ka]"), write_usm_conf(ConfDir, [Usm59]), - ?line ok = crypto:start(), + ?line ok = maybe_start_crypto(), ?line {error, Reason59} = config_start(Opts), - ?line ok = crypto:stop(), + ?line ok = maybe_stop_crypto(), p("start failed (as expected): ~p", [Reason59]), ?line {failed_check, _, _, _, {invalid_auth_key, _}} = Reason59, await_config_not_running(), %% -- - p("[test 5A] write usm config file with valid auth-key when crypto not started (10)"), - Usm5A = setelement(4, Usm57, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]"), - write_usm_conf(ConfDir, [Usm5A]), - ?line {error, Reason5A} = config_start(Opts), - p("start failed (as expected): ~p", [Reason5A]), - ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason5A, - await_config_not_running(), + %% <CRYPTO-MODIFICATIONS> + %% The crypto application do no longer need to be started + %% explicitly (all of it is as of R14 implemented with NIFs). + case (catch crypto:version()) of + {'EXIT', {undef, _}} -> + p("[test 5A] write usm config file with valid auth-key " + "when crypto not started (10)"), + Usm5A = setelement(4, + Usm57, + "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]"), + write_usm_conf(ConfDir, [Usm5A]), + ?line {error, Reason5A} = config_start(Opts), + p("start failed (as expected): ~p", [Reason5A]), + ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason5A, + await_config_not_running(); + _ -> + %% This function is only present in version 2.0 or greater. + %% The crypto app no longer needs to be explicitly started + ok + end, + %% </CRYPTO-MODIFICATIONS> %% -- p("[test 61] write usm config file with invalid priv-protocol (1)"), @@ -1566,9 +1579,9 @@ start_with_invalid_usm_conf_file1(Conf) when is_list(Conf) -> p("[test 74] write usm config file with invalid priv-key (4)"), Usm74 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,kalle]"), write_usm_conf(ConfDir, [Usm74]), - ?line ok = crypto:start(), + ?line ok = maybe_start_crypto(), ?line {error, Reason74} = config_start(Opts), - ?line ok = crypto:stop(), + ?line ok = maybe_stop_crypto(), p("start failed (as expected): ~p", [Reason74]), ?line {failed_check, _, _, _, {invalid_priv_key, _}} = Reason74, await_config_not_running(), @@ -1592,15 +1605,27 @@ start_with_invalid_usm_conf_file1(Conf) when is_list(Conf) -> await_config_not_running(), %% -- - p("[test 77] write usm config file with valid priv-key when crypto not started (7)"), - Usm77 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]"), - write_usm_conf(ConfDir, [Usm77]), - ?line {error, Reason77} = config_start(Opts), - p("start failed (as expected): ~p", [Reason77]), - ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason77, - await_config_not_running(), + %% <CRYPTO-MODIFICATIONS> + %% The crypto application do no longer need to be started + %% explicitly (all of it is as of R14 implemented with NIFs). + case (catch crypto:version()) of + {'EXIT', {undef, _}} -> + p("[test 77] write usm config file with valid priv-key " + "when crypto not started (7)"), + Usm77 = setelement(6, Usm71, "[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6]"), + write_usm_conf(ConfDir, [Usm77]), + ?line {error, Reason77} = config_start(Opts), + p("start failed (as expected): ~p", [Reason77]), + ?line {failed_check, _, _, _, {unsupported_crypto, _}} = Reason77, + await_config_not_running(); + _ -> + %% This function is only present in version 2.0 or greater. + %% The crypto app no longer needs to be explicitly started + ok + end, + %% </CRYPTO-MODIFICATIONS> - %% -- + %% -- p("[test 78] write usm config file with invalid usm (1)"), write_usm_conf2(ConfDir, "{\"bmkEngine\", \"swiusmcf\"}."), ?line {error, Reason81} = config_start(Opts), @@ -2676,6 +2701,27 @@ write_conf_file(Dir, File, Str) -> file:close(Fd). +maybe_start_crypto() -> + case (catch crypto:version()) of + {'EXIT', {undef, _}} -> + %% This is the version of crypto before the NIFs... + ?CRYPTO_START(); + _ -> + %% No need to start this version of crypto.. + ok + end. + +maybe_stop_crypto() -> + case (catch crypto:version()) of + {'EXIT', {undef, _}} -> + %% This is the version of crypto before the NIFs... + crypto:stop(); + _ -> + %% There is nothing to stop in this version of crypto.. + ok + end. + + %% ------ str(X) -> diff --git a/lib/snmp/test/snmp_pdus_test.erl b/lib/snmp/test/snmp_pdus_test.erl index d5add50f52..6dc5b779aa 100644 --- a/lib/snmp/test/snmp_pdus_test.erl +++ b/lib/snmp/test/snmp_pdus_test.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2003-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2003-2010. 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% %% @@ -37,6 +37,7 @@ all/1, tickets/1, otp7575/1, + otp8563/1, init_per_testcase/2, fin_per_testcase/2 ]). @@ -66,6 +67,7 @@ init_per_testcase(_Case, Config) when is_list(Config) -> fin_per_testcase(_Case, Config) when is_list(Config) -> Config. + %%====================================================================== %% Test case definitions %%====================================================================== @@ -76,7 +78,8 @@ all(suite) -> tickets(suite) -> [ - otp7575 + otp7575, + otp8563 ]. @@ -118,6 +121,55 @@ otp7575(Config) when is_list(Config) -> ok. +otp8563(suite) -> []; +otp8563(doc) -> ["OTP-8563"]; +otp8563(Config) when is_list(Config) -> + Val1 = 16#7fffffffffffffff, + io:format("try encode and decode ~w~n", [Val1]), + Enc1 = snmp_pdus:enc_value('Counter64', Val1), + {{'Counter64', Val1}, []} = snmp_pdus:dec_value(Enc1), + + Val2 = Val1 + 1, + io:format("try encode and decode ~w~n", [Val2]), + Enc2 = snmp_pdus:enc_value('Counter64', Val2), + {{'Counter64', Val2}, []} = snmp_pdus:dec_value(Enc2), + + Val3 = Val2 + 1, + io:format("try encode and decode ~w~n", [Val3]), + Enc3 = snmp_pdus:enc_value('Counter64', Val3), + {{'Counter64', Val3}, []} = snmp_pdus:dec_value(Enc3), + + Val4 = 16#fffffffffffffffe, + io:format("try encode and decode ~w~n", [Val4]), + Enc4 = snmp_pdus:enc_value('Counter64', Val4), + {{'Counter64', Val4}, []} = snmp_pdus:dec_value(Enc4), + + Val5 = Val4 + 1, + io:format("try encode and decode ~w~n", [Val5]), + Enc5 = snmp_pdus:enc_value('Counter64', Val5), + {{'Counter64', Val5}, []} = snmp_pdus:dec_value(Enc5), + + Val6 = 16#ffffffffffffffff + 1, + io:format("try and fail to encode ~w~n", [Val6]), + case (catch snmp_pdus:enc_value('Counter64', Val6)) of + {'EXIT', {error, {bad_counter64, Val6}}} -> + ok; + Unexpected6 -> + exit({unexpected_encode_result, Unexpected6, Val6}) + end, + + Val7 = -1, + io:format("try and fail to encode ~w~n", [Val7]), + case (catch snmp_pdus:enc_value('Counter64', Val7)) of + {'EXIT', {error, {bad_counter64, Val7}}} -> + ok; + Unexpected7 -> + exit({unexpected_encode_result, Unexpected7, Val7}) + end, + + ok. + + %%====================================================================== %% Internal functions %%====================================================================== diff --git a/lib/snmp/test/snmp_test_data/OLD-SNMPEA-MIB.mib b/lib/snmp/test/snmp_test_data/OLD-SNMPEA-MIB.mib index dd90d0ab50..2ba1a6fd67 100644 --- a/lib/snmp/test/snmp_test_data/OLD-SNMPEA-MIB.mib +++ b/lib/snmp/test/snmp_test_data/OLD-SNMPEA-MIB.mib @@ -12,18 +12,12 @@ OLD-SNMPEA-MIB DEFINITIONS ::= BEGIN ; -- MODULE-IDENTITY --- LAST-UPDATED "9709220900Z" --- ORGANIZATION "ETX/DN/S" --- CONTACT-INFO --- " Martin Bj�rklund --- --- Postal: ERICSSON SOFTWARE TECHNOLOGY AB --- ERLANG SYSTEMS --- Box 1214 --- S-164 28 KISTA, SWEDEN --- --- Tel: +46 8 719 20 89 --- E-mail: [email protected]" +-- LAST-UPDATED "1004200000Z" +-- ORGANIZATION "Erlang/OTP" +-- CONTACT-INFO "" +-- DESCRIPTION +-- "Header cleanup." +-- REVISION "1004200000Z" -- DESCRIPTION -- "This MIB module defines MIB objects for the SNMPEA -- component in OTP." diff --git a/lib/snmp/test/snmp_test_mgr_misc.erl b/lib/snmp/test/snmp_test_mgr_misc.erl index e6220f9241..ef1ba0b948 100644 --- a/lib/snmp/test/snmp_test_mgr_misc.erl +++ b/lib/snmp/test/snmp_test_mgr_misc.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 1996-2010. 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% %% @@ -101,8 +101,8 @@ init_packet(Parent, SnmpMgr, init_debug(Dbg) when is_atom(Dbg) -> put(debug,Dbg), - put(verbosity,silence); - %% put(verbosity,trace); + %% put(verbosity, silence); + put(verbosity, trace); init_debug(DbgOptions) when is_list(DbgOptions) -> case lists:keysearch(debug, 1, DbgOptions) of {value, {_, Dbg}} when is_atom(Dbg) -> |