megaco_config_test.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 338 行
ERL
338 行
%% ``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$%%%%----------------------------------------------------------------------%% Purpose: Test application config%%-----------------------------------------------------------------------module(megaco_config_test).-compile(export_all).-include("megaco_test_lib.hrl").-include_lib("megaco/include/megaco.hrl").t() -> megaco_test_lib:t(?MODULE).t(Case) -> megaco_test_lib:t({?MODULE, Case}).%% Test server callbacksinit_per_testcase(Case, Config) -> megaco_test_lib:init_per_testcase(Case, Config).fin_per_testcase(Case, Config) -> megaco_test_lib:fin_per_testcase(Case, Config).-record(command, {id, desc, cmd, verify}).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Top test caseall(suite) -> [ config ].config(suite) -> [];config(Config) when list(Config) -> ?ACQUIRE_NODES(1, Config), Mid = fake_mid, %% Nice values Int = 3, IT = #megaco_incr_timer{max_retries = Int}, %% Evil values NonInt = non_int, IT2 = #megaco_incr_timer{wait_for = NonInt}, IT3 = #megaco_incr_timer{factor = NonInt}, IT4 = #megaco_incr_timer{max_retries = NonInt}, IT5 = #megaco_incr_timer{max_retries = non_infinity}, Commands = [ %% Initial commands initial_command( 1, "start", fun() -> megaco:start() end, ok), initial_command( 2, "Verify no active requests", fun() -> megaco:system_info(n_active_requests) end, 0), initial_command( 3, "Verify no active replies", fun() -> megaco:system_info(n_active_replies) end, 0), initial_command( 4, "Verify no active connections", fun() -> megaco:system_info(n_active_connections) end, 0), initial_command( 5, "Verify no connections", fun() -> megaco:system_info(connections) end, []), initial_command( 6, "Verify no users", fun() -> megaco:system_info(users) end, []), initial_command( 6, "Start user", fun() -> megaco:start_user(Mid, []) end, ok), %% Verify user defaults verify_user_default_command(Mid, 8, connections, []), verify_user_default_command(Mid, 9, min_trans_id, 1), verify_user_default_command(Mid, 10, max_trans_id, infinity), verify_user_default_command(Mid, 11, request_timer, #megaco_incr_timer{}), verify_user_default_command(Mid, 12, long_request_timer, infinity), verify_user_default_command(Mid, 13, auto_ack, false), verify_user_default_command(Mid, 14, pending_timer, 30000), verify_user_default_command(Mid, 15, reply_timer, 30000), verify_user_default_command(Mid, 16, send_mod, megaco_tcp), verify_user_default_command(Mid, 17, encoding_mod, megaco_pretty_text_encoder), verify_user_default_command(Mid, 18, encoding_config, []), verify_user_default_command(Mid, 19, protocol_version, 1), verify_user_default_command(Mid, 20, reply_data, undefined), verify_user_default_command(Mid, 21, receive_handle, fun(H) when record(H, megaco_receive_handle) -> {ok, H}; (R) -> {error, R} end), %% Nice update nice_user_update_command(Mid, 22, min_trans_id, Int), nice_user_update_command(Mid, 23, max_trans_id, Int), nice_user_update_command(Mid, 24, max_trans_id, infinity), nice_user_update_command(Mid, 25, request_timer, Int), nice_user_update_command(Mid, 26, request_timer, infinity), nice_user_update_command(Mid, 27, request_timer, IT), nice_user_update_command(Mid, 28, long_request_timer, Int), nice_user_update_command(Mid, 29, long_request_timer, infinity), nice_user_update_command(Mid, 30, long_request_timer, IT), nice_user_update_command(Mid, 31, auto_ack, true), nice_user_update_command(Mid, 32, auto_ack, false), nice_user_update_command(Mid, 33, pending_timer, Int), nice_user_update_command(Mid, 34, pending_timer, infinity), nice_user_update_command(Mid, 35, pending_timer, IT), nice_user_update_command(Mid, 36, reply_timer, Int), nice_user_update_command(Mid, 37, reply_timer, infinity), nice_user_update_command(Mid, 38, reply_timer, IT), nice_user_update_command(Mid, 39, send_mod, an_atom), nice_user_update_command(Mid, 40, encoding_mod, an_atom), nice_user_update_command(Mid, 41, encoding_config, []), nice_user_update_command(Mid, 42, protocol_version, Int), nice_user_update_command(Mid, 43, reply_data, IT), %% Evil update evil_user_update_command(Mid, 44, min_trans_id, NonInt), evil_user_update_command(Mid, 45, max_trans_id, NonInt), evil_user_update_command(Mid, 46, max_trans_id, non_infinity), evil_user_update_command(Mid, 47, request_timer, NonInt), evil_user_update_command(Mid, 48, request_timer, non_infinity), evil_user_update_command(Mid, 49, request_timer, IT2), evil_user_update_command(Mid, 50, request_timer, IT3), evil_user_update_command(Mid, 51, request_timer, IT4), evil_user_update_command(Mid, 52, request_timer, IT5), evil_user_update_command(Mid, 53, long_request_timer, NonInt), evil_user_update_command(Mid, 54, long_request_timer, non_infinity), evil_user_update_command(Mid, 55, long_request_timer, IT2), evil_user_update_command(Mid, 56, long_request_timer, IT3), evil_user_update_command(Mid, 57, long_request_timer, IT4), evil_user_update_command(Mid, 58, long_request_timer, IT5), evil_user_update_command(Mid, 59, auto_ack, non_bool), evil_user_update_command(Mid, 60, pending_timer, NonInt), evil_user_update_command(Mid, 61, pending_timer, non_infinity), evil_user_update_command(Mid, 62, pending_timer, IT2), evil_user_update_command(Mid, 63, pending_timer, IT3), evil_user_update_command(Mid, 64, pending_timer, IT4), evil_user_update_command(Mid, 65, pending_timer, IT5), evil_user_update_command(Mid, 66, reply_timer, NonInt), evil_user_update_command(Mid, 67, reply_timer, non_infinity), evil_user_update_command(Mid, 68, reply_timer, IT2), evil_user_update_command(Mid, 69, reply_timer, IT3), evil_user_update_command(Mid, 70, reply_timer, IT4), evil_user_update_command(Mid, 71, reply_timer, IT5), evil_user_update_command(Mid, 72, send_mod, {non_atom}), evil_user_update_command(Mid, 73, encoding_mod, {non_atom}), evil_user_update_command(Mid, 74, encoding_config, non_list), evil_user_update_command(Mid, 75, protocol_version, NonInt), exit_command(76, "Verify non-existing system info", fun() -> megaco:system_info(non_exist) end), exit_command(77, "Verify non-existing user user info", fun() -> megaco:user_info(non_exist, trans_id) end), exit_command(78, "Verify non-existing user info", fun() -> megaco:user_info(Mid, non_exist) end), error_command(79, "Try updating user info for non-existing user", fun() -> megaco:update_user_info(non_exist, trans_id, 1) end, no_such_user, 2), error_command(80, "Try updating non-existing user info", fun() -> megaco:update_user_info(Mid, trans_id, 4711) end, bad_user_val, 4), error_command(81, "Try start already started user", fun() -> megaco:start_user(Mid, []) end, user_already_exists, 2), command(82, "Verify started users", fun() -> megaco:system_info(users) end, [Mid]), command(83, "Stop user", fun() -> megaco:stop_user(Mid) end, ok), command(84, "Verify started users", fun() -> megaco:system_info(users) end, []), error_command(85, "Try stop not started user", fun() -> megaco:stop_user(Mid) end, no_such_user, 2), error_command(86, "Try start megaco (it's already started)", fun() -> megaco:start() end, already_started, 2), command(87, "Stop megaco", fun() -> megaco:stop() end, ok), error_command(88, "Try stop megaco (it's not running)", fun() -> megaco:stop() end, not_started, 2) ], exec(Commands). exec([]) -> ok;exec([#command{id = No, desc = Desc, cmd = Cmd, verify = Verify}|Commands]) -> io:format("Executing command ~2w: ~s: ", [No, Desc]), case (catch Verify((catch Cmd()))) of {ok, OK} -> io:format("ok => ~p~n", [OK]), exec(Commands); {error, Reason} -> io:format("error => ~p~n", [Reason]), {error, {bad_result, No, Reason}}; Error -> io:format("exit => ~p~n", [Error]), {error, {unexpected_result, No, Error}} end.initial_command(No, Desc0, Cmd, VerifyVal) when is_function(Cmd) -> Desc = lists:flatten(io_lib:format("Initial - ~s", [Desc0])), command(No, Desc, Cmd, VerifyVal). verify_user_default_command(Mid, No, Key, Verify) -> Desc = lists:flatten(io_lib:format("Defaults - Verify ~w", [Key])), Cmd = fun() -> megaco:user_info(Mid, Key) end, command(No, Desc, Cmd, Verify). nice_user_update_command(Mid, No, Key, Val) -> Desc = lists:flatten(io_lib:format("Nice - Update ~w", [Key])), Cmd = fun() -> megaco:update_user_info(Mid, Key, Val) end, Verify = fun(ok) -> case (catch megaco:user_info(Mid, Key)) of {'EXIT', R} -> {error, {value_retreival_failed, R}}; Val -> {ok, Val}; Invalid -> {error, {value_update_failed, Val, Invalid}} end; (R) -> {error, R} end, command(No, Desc, Cmd, Verify).evil_user_update_command(Mid, No, Key, Val) -> Desc = lists:flatten(io_lib:format("Evil: Update ~w", [Key])), Cmd = fun() -> case (catch megaco:user_info(Mid, Key)) of {'EXIT', R} -> {{error, {old_value_retreival_failed, R}}, ignore}; OldVal -> {OldVal, (catch megaco:update_user_info(Mid, Key, Val))} end end, Verify = fun({{error, _} = Error, ignore}) -> Error; ({OldVal, {error, {bad_user_val, _, _, _}}}) -> case (catch megaco:user_info(Mid, Key)) of {'EXIT', R} -> {error, {value_retreival_failed, R}}; OldVal -> {ok, OldVal}; Invalid -> {error, {value_update_failed, OldVal, Invalid}} end; (R) -> {error, R} end, command(No, Desc, Cmd, Verify).exit_command(No, Desc, Cmd) when is_function(Cmd) -> Verify = fun({'EXIT', _} = E) -> {ok, E}; (R) -> {error, R} end, command(No, Desc, Cmd, Verify).error_command(No, Desc, Cmd, MainReason, TS) when is_function(Cmd) -> Verify = fun({error, Reason}) -> io:format("verify -> Reason: ~n~p~n", [Reason]), case Reason of {MainReason, _} when TS == 2 -> {ok, MainReason}; {MainReason, _, _, _} when TS == 4 -> {ok, MainReason}; _ -> {error, Reason} end; (R) -> {error, R} end, command(No, Desc, Cmd, Verify).command(No, Desc, Cmd, Verify) when is_integer(No) and is_list(Desc) and is_function(Cmd) and is_function(Verify) -> #command{id = No, desc = Desc, cmd = Cmd, verify = Verify};command(No, Desc, Cmd, VerifyVal) when is_integer(No) and is_list(Desc) and is_function(Cmd) -> Verify = fun(Val) -> case Val of VerifyVal -> {ok, Val}; _ -> {error, Val} end end, #command{id = No, desc = Desc, cmd = Cmd, verify = Verify}.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?