%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2003-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% %%---------------------------------------------------------------------- %% Purpose: %%---------------------------------------------------------------------- -module(snmp_conf_test). %%---------------------------------------------------------------------- %% Include files %%---------------------------------------------------------------------- -include_lib("common_test/include/ct.hrl"). -include("snmp_test_lib.hrl"). -include_lib("snmp/include/STANDARD-MIB.hrl"). -include_lib("snmp/include/OTP-SNMPEA-MIB.hrl"). %%---------------------------------------------------------------------- %% External exports %%---------------------------------------------------------------------- -export([ all/0,groups/0,init_per_group/2,end_per_group/2, init_per_testcase/2, end_per_testcase/2, check_mandatory/1, check_integer1/1, check_integer2/1, check_string1/1, check_string2/1, check_atom/1, check_ip/1, check_taddress/1, check_packet_size/1, check_oid/1, check_sec_model1/1, check_sec_model2/1, check_sec_level/1, check_timer/1, read/1, read_files/1 ]). %%---------------------------------------------------------------------- %% Internal exports %%---------------------------------------------------------------------- -export([ ]). %%---------------------------------------------------------------------- %% Macros %%---------------------------------------------------------------------- %%---------------------------------------------------------------------- %% Records %%---------------------------------------------------------------------- %%====================================================================== %% External functions %%====================================================================== init_per_testcase(_Case, Config) when is_list(Config) -> Config. end_per_testcase(_Case, Config) when is_list(Config) -> Config. %%====================================================================== %% Test case definitions %%====================================================================== all() -> [check_mandatory, check_integer1, check_integer2, check_string1, check_string2, check_atom, check_ip, check_taddress, check_packet_size, check_oid, check_sec_model1, check_sec_model2, check_sec_level, check_timer, read, read_files]. groups() -> []. init_per_group(_GroupName, Config) -> Config. end_per_group(_GroupName, Config) -> Config. %%====================================================================== %% Test functions %%====================================================================== check_mandatory(suite) -> []; check_mandatory(Config) when is_list(Config) -> ?P(check_mandatory), %% d("check_mandatory -> entry"), A1 = [{a, hej}, {b, hopp}, {c, 10}, {d, 10101}, {f, 10.88}], B1 = [{a, {value, hejsan}}, {b, mandatory}, {d, {value, 20202}}, {e, {value, "kalle"}}], ?line {ok, _L1} = verify_mandatory(A1, B1), ?DBG("check_mandatory -> L1: ~p", [L1]), A2 = [{a, hej}, {c, 10}, {d, 10101}, {f, 10.88}], B2 = [{a, {value, hejsan}}, {b, mandatory}, {d, {value, 20202}}, {e, {value, "kalle"}}], ?line ok = verify_not_mandatory(A2, B2), ok. verify_mandatory(A, B) -> case (catch snmp_conf:check_mandatory(A, B)) of {'EXIT', Reason} -> ?FAIL({mandatory_fail, A, B, Reason}); {ok, A} -> ?FAIL({mandatory_not_updated, A, B}); {ok, L} when A /= L -> verify_mandatory2(B, L) end. verify_mandatory2([], L) -> {ok, L}; verify_mandatory2([{Key, _}|T], L) -> case lists:keysearch(Key, 1, L) of false -> ?FAIL({missing_key, Key, L}); {value, _} -> verify_mandatory2(T, L) end. verify_not_mandatory(A, B) -> case (catch snmp_conf:check_mandatory(A, B)) of {error, _Reason} -> ok; Else -> ?FAIL({mandatory_not_fail, Else}) end. %%====================================================================== check_integer1(suite) -> []; check_integer1(Config) when is_list(Config) -> ?P(check_integer1), ?line ok = verify_int(0), ?line ok = verify_int(16#FF), ?line ok = verify_int(16#FFFF), ?line ok = verify_int(16#FFFFFFFF), ?line ok = verify_int(-1), ?line ok = verify_int(-333), ?line ok = verify_not_int("kalle & hobbe"), ?line ok = verify_not_int(kalle_och_hobbe), ?line ok = verify_not_int(1.5), ok. verify_int(Val) -> case (catch snmp_conf:check_integer(Val)) of {error, Reason} -> ?FAIL({verify_int, Val, Reason}); ok -> ok end. verify_not_int(Val) -> case (catch snmp_conf:check_integer(Val)) of ok -> ?FAIL({verify_int, Val}); {error, _Reason} -> ok end. %%====================================================================== check_integer2(suite) -> []; check_integer2(Config) when is_list(Config) -> ?P(check_integer2), ?line ok = verify_int(0, any), ?line ok = verify_int(-22222, any), ?line ok = verify_int(33333, any), ?line ok = verify_int(1, pos), ?line ok = verify_int(9999, pos), ?line ok = verify_int(-1, neg), ?line ok = verify_int(-9999, neg), ?line ok = verify_int(1, {gt, 0}), ?line ok = verify_int(88888, {gt, -255}), ?line ok = verify_int(88888, {gte, -255}), ?line ok = verify_int(88888, {gte, 88888}), ?line ok = verify_int(88888, {lt, 88889}), ?line ok = verify_int(88888, {lte, 88888}), ?line ok = verify_int(88888, {eq, 88888}), ?line ok = verify_int(88888, {range, 88887,88889}), ?line ok = verify_not_int("kalle & hobbe", any), ?line ok = verify_not_int(kalle_och_hobbe, any), ?line ok = verify_not_int(1.5, any), ?line ok = verify_not_int(0, pos), ?line ok = verify_not_int(-22222, pos), ?line ok = verify_not_int(33333, neg), ?line ok = verify_not_int(0, {gt, 0}), ?line ok = verify_not_int(33333, {gt, 99999}), ?line ok = verify_not_int(33333, {gt, 33333}), ?line ok = verify_not_int(33333, {gte, 33334}), ?line ok = verify_not_int(33333, {lt, 33333}), ?line ok = verify_not_int(33333, {lte, 33332}), ?line ok = verify_not_int(33333, {eq, 33332}), ?line ok = verify_not_int(33333, {eq, -33333}), ?line ok = verify_not_int(33333, {range, 33334, 33338}), ?line ok = verify_not_int(33339, {range, 33334, 33338}), ?line ok = verify_not_int(33333, {gt, kalle}), ?line ok = verify_not_int(33333, {gt, 1.55}), ?line ok = verify_not_int(33333, {gte, "hejsan"}), ?line ok = verify_not_int(33333, {lt, hobbe}), ?line ok = verify_not_int(33333, {lte, 1.7666}), ?line ok = verify_not_int(33333, {eq, 33333.0}), ?line ok = verify_not_int(33333, {eq, -33333.0}), ?line ok = verify_not_int(33333, {range, kalle, 33338}), ?line ok = verify_not_int(33339, {range, 33334, kalle}), ?line ok = verify_not_int(33339, {kalle, 33334, kalle}), ok. verify_int(Val, Cond) -> case (catch snmp_conf:check_integer(Val, Cond)) of {error, Reason} -> ?FAIL({verify_int, Val, Cond, Reason}); ok -> ok end. verify_not_int(Val, Cond) -> case (catch snmp_conf:check_integer(Val, Cond)) of ok -> ?FAIL({verify_int, Val, Cond}); {error, _Reason} -> ok end. %%====================================================================== check_string1(suite) -> []; check_string1(Config) when is_list(Config) -> ?P(check_string1), ?line ok = verify_string("kalle & hobbe"), ?line ok = verify_not_string(kalle_hobbe), ?line ok = verify_not_string(1000), ?line ok = verify_not_string(1.0), ok. verify_string(Val) -> case (catch snmp_conf:check_string(Val)) of {error, Reason} -> ?FAIL({verify_string, Val, Reason}); ok -> ok end. verify_not_string(Val) -> case (catch snmp_conf:check_string(Val)) of ok -> ?FAIL({verify_string, Val}); {error, _Reason} -> ok end. %%====================================================================== check_string2(suite) -> []; check_string2(Config) when is_list(Config) -> ?P(check_string2), Str = "kalle & hobbe", ?line ok = verify_string(Str, any), ?line ok = verify_string(Str, {gt, length(Str) - 1}), ?line ok = verify_string(Str, {gte, length(Str)}), ?line ok = verify_string(Str, {lt, length(Str) + 1}), ?line ok = verify_string(Str, {lte, length(Str)}), ?line ok = verify_string(Str, length(Str)), ?line ok = verify_not_string(kalle_hobbe, any), ?line ok = verify_not_string(1000, any), ?line ok = verify_not_string(1.0, any), ?line ok = verify_not_string(Str, {gt, length(Str)}), ?line ok = verify_not_string(Str, {gte, length(Str) + 1}), ?line ok = verify_not_string(Str, {lt, length(Str)}), ?line ok = verify_not_string(Str, {lte, length(Str) - 1}), ?line ok = verify_not_string(Str, length(Str) + 1), ok. verify_string(Val, Limit) -> case (catch snmp_conf:check_string(Val, Limit)) of {error, Reason} -> ?FAIL({verify_string, Val, Limit, Reason}); ok -> ok end. verify_not_string(Val, Limit) -> case (catch snmp_conf:check_string(Val, Limit)) of ok -> ?FAIL({verify_string, Val, Limit}); {error, _Reason} -> ok end. %%====================================================================== check_atom(suite) -> []; check_atom(Config) when is_list(Config) -> ?P(check_atom), Atoms = [{kalle, "kalle"}, {hobbe, "hobbe"}, {dummy, "dummy"}], ?line ok = verify_atom(kalle, Atoms), ?line ok = verify_not_atom(anka, Atoms), ?line ok = verify_not_atom("kalle", Atoms), ?line ok = verify_not_atom(1000, Atoms), ok. verify_atom(Val, Atoms) -> case (catch snmp_conf:check_atom(Val, Atoms)) of {error, Reason} -> ?FAIL({verify_atom, Val, Atoms, Reason}); {ok, _} -> ok end. verify_not_atom(Val, Atoms) -> case (catch snmp_conf:check_atom(Val, Atoms)) of ok -> ?FAIL({verify_atom, Val, Atoms}); {error, _Reason} -> ok end. %%====================================================================== check_ip(suite) -> []; check_ip(Config) when is_list(Config) -> ?P(check_ip), ?line ok = verify_ip([1,2,3,4]), ?line ok = verify_not_ip([1,2,3]), ?line ok = verify_not_ip([1,2,3,4,5]), ?line ok = verify_not_ip(kalle), ?line ok = verify_not_ip(1000), ?line ok = verify_not_ip([1,2,3.0,4]), ?line ok = verify_not_ip([1,two,3,4]), ok. verify_ip(Val) -> case (catch snmp_conf:check_ip(Val)) of {error, Reason} -> ?FAIL({verify_ip, Val, Reason}); {ok, _} -> ok; ok -> ok end. verify_not_ip(Val) -> case (catch snmp_conf:check_ip(Val)) of ok -> ?FAIL({verify_ip, Val}); {error, _Reason} -> ok end. %%====================================================================== check_taddress(suite) -> []; check_taddress(Config) when is_list(Config) -> ?P(check_taddress), ?line ok = verify_taddress([1,2,3,4,5,6]), ?line ok = verify_not_taddress([1,2,3,4,5]), ?line ok = verify_not_taddress([1,2,3,4,5,6,7]), ?line ok = verify_not_taddress(kalle), ?line ok = verify_not_taddress(1000), ?line ok = verify_not_taddress([1,2,3.0,4,5,6]), ?line ok = verify_not_taddress([1,two,3,4,5,6]), ok. verify_taddress(Val) -> case (catch snmp_conf:check_taddress(snmpUDPDomain, Val)) of {error, Reason} -> ?FAIL({verify_taddress, Val, Reason}); ok -> ok end. verify_not_taddress(Val) -> case (catch snmp_conf:check_taddress(snmpUDPDomain, Val)) of ok -> ?FAIL({verify_taddress, Val}); {error, _Reason} -> ok end. %%====================================================================== check_packet_size(suite) -> []; check_packet_size(Config) when is_list(Config) -> ?P(check_packet_size), Min = 484, Max = 2147483647, ?line ok = verify_packet_size(Min), ?line ok = verify_packet_size(2*Min), ?line ok = verify_packet_size(Max), ?line ok = verify_not_packet_size(Min-1), ?line ok = verify_not_packet_size(Max+1), ?line ok = verify_not_packet_size(kalle), ?line ok = verify_not_packet_size("kalle"), ?line ok = verify_not_packet_size(1.0), ?line ok = verify_not_packet_size(1.0*Max), ok. verify_packet_size(Val) -> case (catch snmp_conf:check_packet_size(Val)) of {error, Reason} -> ?FAIL({verify_packet_size, Val, Reason}); ok -> ok end. verify_not_packet_size(Val) -> case (catch snmp_conf:check_packet_size(Val)) of ok -> ?FAIL({verify_packet_size, Val}); {error, _Reason} -> ok end. %%====================================================================== check_oid(suite) -> []; check_oid(Config) when is_list(Config) -> ?P(check_oid), [_,_|Rest] = ?otpSnmpeaModule, ErrOid = [6,16|Rest], ?line ok = verify_oid(?system), ?line ok = verify_oid(?sysDescr_instance), ?line ok = verify_oid(?otpSnmpeaModule), ?line ok = verify_not_oid(kalle), ?line ok = verify_not_oid("kalle"), ?line ok = verify_not_oid(1000), ?line ok = verify_not_oid(1.0), ?line ok = verify_not_oid(ErrOid), ok. verify_oid(Val) -> case (catch snmp_conf:check_oid(Val)) of {error, Reason} -> ?FAIL({verify_oid, Val, Reason}); ok -> ok end. verify_not_oid(Val) -> case (catch snmp_conf:check_oid(Val)) of ok -> ?FAIL({verify_oid, Val}); {error, _Reason} -> ok end. %%====================================================================== check_sec_model1(suite) -> []; check_sec_model1(Config) when is_list(Config) -> ?P(check_sec_model1), Exclude1 = [], Exclude2 = [v1], Exclude3 = [v1,usm], ?line ok = verify_sec_model(any, Exclude1), ?line ok = verify_sec_model(v1, Exclude1), ?line ok = verify_sec_model(v2c, Exclude1), ?line ok = verify_sec_model(usm, Exclude1), ?line ok = verify_sec_model(any, Exclude2), ?line ok = verify_sec_model(v2c, Exclude2), ?line ok = verify_not_sec_model(v1, Exclude2), ?line ok = verify_not_sec_model(v1, Exclude3), ?line ok = verify_not_sec_model(usm, Exclude3), ok. verify_sec_model(Val, Exclude) -> case (catch snmp_conf:check_sec_model(Val, Exclude)) of {error, Reason} -> ?FAIL({verify_sec_model, Val, Reason}); {ok, _} -> ok end. verify_not_sec_model(Val, Exclude) -> case (catch snmp_conf:check_sec_model(Val, Exclude)) of {ok, Res} -> ?FAIL({verify_sec_model, Val, Res}); {error, _Reason} -> ok end. %%====================================================================== check_sec_model2(suite) -> []; check_sec_model2(Config) when is_list(Config) -> ?P(check_sec_model2), ?line ok = verify_sec_model(v1, v1, []), ?line ok = verify_sec_model(v1, v1, [v2c]), ?line ok = verify_sec_model(v2c, v2c, []), ?line ok = verify_sec_model(v2c, v2c, [v1]), ?line ok = verify_sec_model(v3, usm, []), ?line ok = verify_sec_model(v3, usm, [v2c]), ?line ok = verify_not_sec_model(v1, v2c, []), ?line ok = verify_not_sec_model(v1, v3, [v2c]), ?line ok = verify_not_sec_model(v1, v1, [v1]), ?line ok = verify_not_sec_model(v2c, v1, []), ?line ok = verify_not_sec_model(v2c, v3, [v3]), ?line ok = verify_not_sec_model(v2c, v2c, [v2c]), ?line ok = verify_not_sec_model(v3, v1, []), ?line ok = verify_not_sec_model(v3, v2c, [v1]), ?line ok = verify_not_sec_model(v3, v3, [v2c]), ?line ok = verify_not_sec_model(kalle, v3, []), ?line ok = verify_not_sec_model(1000, v3, []), ?line ok = verify_not_sec_model(1.0, v3, []), ok. verify_sec_model(M1, M2, Exclude) -> case (catch snmp_conf:check_sec_model(M1, M2, Exclude)) of {error, Reason} -> ?FAIL({verify_sec_model, M1, M2, Reason}); {ok, _} -> ok end. verify_not_sec_model(M1, M2, Exclude) -> case (catch snmp_conf:check_sec_model(M1, M2, Exclude)) of {ok, Res} -> ?FAIL({verify_sec_model, M1, M2, Res}); {error, _Reason} -> ok end. %%====================================================================== check_sec_level(suite) -> []; check_sec_level(Config) when is_list(Config) -> ?P(check_sec_level), ?line ok = verify_sec_level(noAuthNoPriv), ?line ok = verify_sec_level(authNoPriv), ?line ok = verify_sec_level(authPriv), ?line ok = verify_not_sec_level(kalle), ?line ok = verify_not_sec_level("noAuthNoPriv"), ?line ok = verify_not_sec_level(1000), ?line ok = verify_not_sec_level(1.0), ok. verify_sec_level(Val) -> case (catch snmp_conf:check_sec_level(Val)) of {error, Reason} -> ?FAIL({verify_sec_level, Val, Reason}); {ok, _} -> ok; Error -> ?FAIL({verify_sec_level, Val, Error}) end. verify_not_sec_level(Val) -> case (catch snmp_conf:check_sec_level(Val)) of {ok, Res} -> ?FAIL({verify_sec_level, Val, Res}); {error, _Reason} -> ok; {'EXIT', _Reason} -> ok end. %%====================================================================== check_timer(suite) -> []; check_timer(Config) when is_list(Config) -> ?P(check_timer), ?line ok = verify_timer(infinity), ?line ok = verify_timer(1), ?line ok = verify_timer(10), ?line ok = verify_timer(2147483647), ?line ok = verify_timer(2*2147483647), ?line ok = verify_timer({1,1,0,0}), ?line ok = verify_timer({10,10,10,10}), ?line ok = verify_timer({2147483647,2147483647,2147483647,2147483647}), ?line ok = verify_not_timer(ytinifni), ?line ok = verify_not_timer("ytinifni"), ?line ok = verify_not_timer(0), ?line ok = verify_not_timer(-10), ?line ok = verify_not_timer({0,1,0,0}), ?line ok = verify_not_timer({1,0,0,0}), ?line ok = verify_not_timer({1,1,-1,0}), ?line ok = verify_not_timer({1,1,0,-1}), ?line ok = verify_not_timer({1.0,1,0,0}), ?line ok = verify_not_timer({1,1.0,0,0}), ?line ok = verify_not_timer({1,1,1.0,0}), ?line ok = verify_not_timer({1,1,0,1.0}), ?line ok = verify_not_timer({"1",1,0,0}), ?line ok = verify_not_timer({1,"1",0,0}), ?line ok = verify_not_timer({1,1,"0",0}), ?line ok = verify_not_timer({1,1,0,"0"}), ok. verify_timer(Val) -> case (catch snmp_conf:check_timer(Val)) of {error, Reason} -> ?FAIL({verify_timer, Val, Reason}); {ok, _} -> ok end. verify_not_timer(Val) -> case (catch snmp_conf:check_timer(Val)) of {ok, Res} -> ?FAIL({verify_timer, Val, Res}); {error, _Reason} -> ok end. %%====================================================================== read(suite) -> []; read(Config) when is_list(Config) -> ?P(read), ?SKIP(not_implemented_yet). %%====================================================================== read_files(suite) -> []; read_files(Config) when is_list(Config) -> ?P(read_files), ?SKIP(not_implemented_yet). %%====================================================================== %% Internal functions %%====================================================================== % d(F) -> % d(F, []). % d(F, A) -> % io:format("~w:" ++ F ++ "~n", [?MODULE|A]).