megaco_mess_test.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,078 行 · 第 1/5 页

ERL
2,078
字号
%% ``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: Verify the implementation of the ITU-T protocol H.248%%----------------------------------------------------------------------%% Run the entire test suite with:%% %%    megaco_test_lib:t(megaco_test).%%    megaco_test_lib:t({megaco_test, all}).%%    %% Or parts of it:%% %%    megaco_test_lib:t({megaco_test, accept}).%%-----------------------------------------------------------------------module(megaco_mess_test).%% -compile(export_all).-export([	 all/1, 	 init_per_testcase/2, 	 fin_per_testcase/2,	 connect/1,	 request_and_reply/1,	 request_and_reply_plain/1,	 request_and_no_reply/1,	 request_and_reply_pending_ack_no_pending/1,	 request_and_reply_pending_ack_one_pending/1,	 single_trans_req_and_reply/1,	 single_trans_req_and_reply_sendopts/1,	 request_and_reply_and_ack/1,	 request_and_reply_and_no_ack/1,	 request_and_reply_and_late_ack/1,	 trans_req_and_reply_and_req/1, 	 	 pending_ack/1,	 pending_ack_plain/1,	 request_and_pending_and_late_reply/1, 	 	 dist/1,	 	 tickets/1,	 otp_4359/1,	 otp_4836/1,	 otp_5805/1,	 otp_5881/1,	 otp_5887/1,	 otp_6253/1,	 otp_6275/1,	 otp_6276/1,	 otp_6442/1,	 otp_6442_resend_request1/1,	 otp_6442_resend_request2/1,	 otp_6442_resend_reply1/1,	 otp_6442_resend_reply2/1	]).%% -behaviour(megaco_user).-export([	 handle_connect/3,	 handle_disconnect/4,	 handle_syntax_error/4,	 handle_message_error/4,	 handle_trans_request/4,	 handle_trans_long_request/4,	 handle_trans_reply/5,	 handle_trans_ack/5,	 handle_unexpected_trans/4,	 handle_trans_request_abort/5	]).%% -behaviour(megaco_transport).-export([	 send_message/2,	 unblock/1	]).-ifdef(megaco_hipe_special).-export([	 %% Case: request_and_reply_pending_ack_no_pending	 rarpanp_mgc_verify_handle_connect/1,	 rarpanp_mgc_verify_service_change_req/2, 	 rarpanp_mgc_verify_notify_request/1,	 rarpanp_mgc_verify_handle_disconnect/1,	 rarpanp_mg_verify_service_change_rep_msg/1,	 rarpanp_mg_verify_notify_rep_msg/3,	 	 %% Case: request_and_reply_pending_ack_one_pending	 rarpaop_mgc_verify_handle_connect/1,	 rarpaop_mgc_verify_service_change_req/2,	 rarpaop_mgc_verify_notify_request/1,	 rarpaop_mgc_verify_reply_ack/1,	 rarpaop_mgc_verify_handle_disconnect/1,	 rarpaop_mg_verify_service_change_rep_msg/1,	 rarpaop_mg_verify_pending_msg/2,	 rarpaop_mg_verify_notify_rep_msg/3,	 %% Case: single_trans_req_and_reply	 strar_mgc_verify_handle_connect/1,	 strar_mgc_verify_service_change_req/2,	 strar_mgc_verify_notify_request/1,	 strar_mgc_verify_handle_disconnect/1,	 strar_mg_verify_handle_connect/1,	 strar_mg_verify_service_change_reply/1,	 strar_mg_verify_notify_reply/1,	 %% Case: single_trans_req_and_reply_sendopts	 straro_mgc_verify_handle_connect/1,	 straro_mgc_verify_service_change_req/2,	 straro_mgc_verify_notify_request/1,	 straro_mgc_verify_handle_trans_ack/1, 	 straro_mg_verify_handle_connect/1,	 straro_mg_verify_service_change_reply/1,	 straro_mg_verify_handle_disconnect/1,	 %% Case: request_and_reply_and_ack	 raraa_mgc_verify_handle_connect/1,	 raraa_mgc_verify_service_change_req/2, 	 raraa_mgc_verify_notify_req/1,	 raraa_mgc_verify_handle_trans_ack/1,	 raraa_mgc_verify_handle_disconnect/1,	 raraa_mg_verify_service_change_rep_msg/1,	 raraa_mg_verify_notify_rep_msg/5,	 %% Case: request_and_reply_and_no_ack	 rarana_mgc_verify_handle_connect/1,	 rarana_mgc_verify_service_change_req/2, 	 rarana_mgc_verify_notify_req/1,	 rarana_mgc_verify_handle_trans_ack/1,	 rarana_mgc_verify_handle_disconnect/1,	 rarana_mg_verify_service_change_rep_msg/1,	 rarana_mg_verify_notify_rep_msg/5,	 %% Case: request_and_reply_and_late_ack	 rarala_mgc_verify_handle_connect/1,	 rarala_mgc_verify_service_change_req/2, 	 rarala_mgc_verify_notify_req/1, 	 rarala_mgc_verify_handle_trans_ack/1,	 rarala_mgc_verify_handle_disconnect/1,	 rarala_mg_verify_service_change_rep_msg/1,	 rarala_mg_verify_notify_rep_msg/5,	 %% Case: trans_req_and_reply_and_req	 trarar_mgc_verify_handle_connect/1,	 trarar_mgc_verify_service_change_req/2,	 trarar_mgc_verify_notify_req/2,	 trarar_mgc_verify_handle_disconnect/1,	 trarar_mg_verify_service_change_rep_msg/1,	 trarar_mg_verify_notify_rep_msg/5,	 %% Case: pending_ack_plain	 pap_mgc_verify_handle_connect/1,	 pap_mgc_verify_service_change_req/2,	 pap_mgc_verify_notify_req/1,	 pap_mgc_verify_notify_req_long/1,	 pap_mgc_verify_handle_trans_ack/1,	 pap_mgc_verify_handle_disconnect/1,	 pap_mg_verify_service_change_rep_msg/1,	 pap_mg_verify_pending_msg/2,	 pap_mg_verify_notify_rep_msg/5,	 %% Case: request_and_pending_and_late_reply	 rapalr_mgc_verify_service_change_req_msg/1,	 rapalr_mgc_verify_notify_req_msg/5,	 rapalr_mgc_verify_trans_ack_msg/2,	 rapalr_mg_verify_handle_connect/1,	 rapalr_mg_verify_service_change_rep/1,	 rapalr_mg_verify_notify_rep/1,	 	 %% Case: otp_4836	 otp_4836_mgc_verify_service_change_req_msg/1,	 otp_4836_mgc_verify_notify_req_msg/1, 	 %% Case: otp_5805	 otp_5805_mgc_verify_handle_connect/1,	 otp_5805_mgc_verify_service_change_req/2,	 otp_5805_mgc_verify_handle_syntax_error/1,	 otp_5805_mgc_verify_handle_disconnect/1, 	 otp_5805_mg_verify_service_change_rep_msg/1,	 otp_5805_mg_verify_error_descriptor_msg/1,	 %% Case: otp_5881	 otp_5881_mgc_verify_service_change_req_msg/1,	 otp_5881_mgc_verify_notify_req_msg/1,	 %% Case: otp_5887	 otp_5887_mgc_verify_service_change_req_msg/1,	 otp_5887_mgc_verify_notify_req_msg/1,	 %% Case: otp_6275	 otp_6275_mgc_verify_service_change_req_msg/1,	 otp_6275_mgc_verify_notify_rep_msg/1,	 otp_6275_mg_verify_handle_connect/1,	 otp_6275_mg_verify_notify_req/1,	 otp_6275_mg_verify_handle_trans_rep/1,	 %% Case: otp_6442_resend_request1	 otp_6442_resend_request1_mg_verify_handle_connect/1, 	 otp_6442_resend_request1_mg_verify_service_change_rep/1, 	 otp_6442_resend_request1_mg_verify_notify_rep/1, 	 	 %% Case: otp_6442_resend_request2	 otp_6442_resend_request2_mg_verify_handle_connect/1, 	 otp_6442_resend_request2_mg_verify_service_change_rep/1, 	 otp_6442_resend_request2_mg_verify_notify_rep/1, 	 	 %% Case: otp_6442_resend_reply1	 otp_6442_resend_reply1_mg_verify_handle_connect/1,	 otp_6442_resend_reply1_mg_verify_service_change_rep/1,	 otp_6442_resend_reply1_mg_verify_notify_req/2,	 	 otp_6442_resend_reply1_mg_verify_ack/1,	 %% Case: otp_6442_resend_reply2	 otp_6442_resend_reply2_mg_verify_handle_connect/1,	 otp_6442_resend_reply2_mg_verify_service_change_rep/1,	 otp_6442_resend_reply2_mg_verify_notify_req/2,	 	 otp_6442_resend_reply2_mg_verify_ack/1,	 %% Utility	 encode_msg/3,	 decode_msg/3	]).-endif.-include_lib("megaco/include/megaco.hrl").-include_lib("megaco/include/megaco_message_v1.hrl").-include("megaco_test_lib.hrl").-define(VERSION, 1).-define(TEST_VERBOSITY, debug).-define(MGC_VERBOSITY,  debug).-define(MG_VERBOSITY,   debug).-define(MGC_START(Pid, Mid, ET, Conf, Verb), 	megaco_test_mgc:start(Pid, Mid, ET, Conf, Verb)).-define(MGC_STOP(Pid),        megaco_test_mgc:stop(Pid)).-define(MGC_REQ_PEND(Pid,To), megaco_test_mgc:request_pending(Pid,To)).-define(MGC_REQ_HP(Pid,To),   megaco_test_mgc:request_handle_pending(Pid,To)).-define(MGC_ACK_INFO(Pid),    megaco_test_mgc:ack_info(Pid,self())).-define(MG_START(Pid, Mid, Enc, Transp, Conf, Verb), 	megaco_test_mg:start(Pid, Mid, Enc, Transp, Conf, Verb)).-define(MG_STOP(Pid), megaco_test_mg:stop(Pid)).-define(MG_SERV_CHANGE(Pid), megaco_test_mg:service_change(Pid)).-define(MG_NOTIF_REQ(Pid), megaco_test_mg:notify_request(Pid)).-define(MG_AWAIT_NOTIF_REP(Pid), megaco_test_mg:await_notify_reply(Pid)).-define(MG_CONN_INFO(Pid,Tag), megaco_test_mg:conn_info(Pid,Tag)).-define(MG_USER_INFO(Pid,Tag), megaco_test_mg:user_info(Pid,Tag)).-define(MG_NOTIF_RAR(Pid), megaco_test_mg:notify_request_and_reply(Pid)).-define(SEND(Expr), 	?VERIFY(ok, megaco_mess_user_test:apply_proxy(fun() -> Expr end))).-define(USER(Expected, Reply),	megaco_mess_user_test:reply(?MODULE,				    ?LINE,				    fun(Actual) ->				       case ?VERIFY(Expected, Actual) of					   Expected   -> {ok, Reply};					   UnExpected -> {error, {reply_verify,								  ?MODULE,								  ?LINE,								  UnExpected}}				       end				    end)).	%% t()     -> megaco_test_lib:t(?MODULE).%% t(Case) -> megaco_test_lib:t({?MODULE, Case}).min(M) -> timer:minutes(M).%% Test server callbacks% init_per_testcase(pending_ack = Case, Config) ->%     put(dbg,true),%     megaco_test_lib:init_per_testcase(Case, Config);init_per_testcase(request_and_no_reply = Case, Config) ->    C = lists:keydelete(tc_timeout, 1, Config),    megaco_test_lib:init_per_testcase(Case, [{tc_timeout, min(2)} |C]);init_per_testcase(Case, Config) ->    C = lists:keydelete(tc_timeout, 1, Config),    megaco_test_lib:init_per_testcase(Case, [{tc_timeout, min(1)} |C]).% fin_per_testcase(pending_ack = Case, Config) ->%     erase(dbg),%     megaco_test_lib:fin_per_testcase(Case, Config);fin_per_testcase(Case, Config) ->    megaco_test_lib:fin_per_testcase(Case, Config).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%all(suite) ->    [     connect,     request_and_reply,     pending_ack,     dist,     %% Tickets last     tickets    ].request_and_reply(suite) ->    [     request_and_reply_plain,     request_and_no_reply,     request_and_reply_pending_ack_no_pending,     request_and_reply_pending_ack_one_pending,     single_trans_req_and_reply,     single_trans_req_and_reply_sendopts,     request_and_reply_and_ack,     request_and_reply_and_no_ack,     request_and_reply_and_late_ack,     trans_req_and_reply_and_req    ].pending_ack(suite) ->    [     pending_ack_plain,     request_and_pending_and_late_reply    ].tickets(suite) ->    [     otp_4359,     otp_4836,     otp_5805,     otp_5881,     otp_5887,     otp_6253,     otp_6275,     otp_6276,     otp_6442    ].otp_6442(suite) ->    [     otp_6442_resend_request1,      otp_6442_resend_request2,      otp_6442_resend_reply1,      otp_6442_resend_reply2    ].%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%connect(suite) ->    [];connect(doc) ->    [];connect(Config) when is_list(Config) ->    ?ACQUIRE_NODES(1, Config),    PrelMid = preliminary_mid,    MgMid   = ipv4_mid(4711),    ?VERIFY(ok, application:start(megaco)),    ?VERIFY(ok,	megaco:start_user(MgMid, [{send_mod, bad_send_mod},	                                  {request_timer, infinity},	                                  {reply_timer, infinity}])),    MgRH = user_info(MgMid, receive_handle),    {ok, PrelCH} = ?VERIFY({ok, _}, megaco:connect(MgRH, PrelMid, sh, self())),    connections([PrelCH]),    ?VERIFY([PrelCH], megaco:user_info(MgMid, connections)),        ?VERIFY(bad_send_mod, megaco:user_info(MgMid, send_mod)),    ?VERIFY(bad_send_mod, megaco:conn_info(PrelCH, send_mod)),    SC = service_change_request(),    ?VERIFY({1, {error, {send_message_failed, {'EXIT',                  {undef, [{bad_send_mod, send_message, [sh, _]} | _]}}}}},	     megaco:call(PrelCH, [SC], [])),    ?VERIFY(ok, megaco:disconnect(PrelCH, shutdown)),    ?VERIFY(ok,	megaco:stop_user(MgMid)),    ?VERIFY(ok, application:stop(megaco)),    ?RECEIVE([]),    ok.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%request_and_reply_plain(suite) ->    [];request_and_reply_plain(Config) when is_list(Config) ->    ?ACQUIRE_NODES(1, Config),    d("request_and_reply_plain -> start proxy",[]),    megaco_mess_user_test:start_proxy(),    PrelMid = preliminary_mid,    MgMid   = ipv4_mid(4711),    MgcMid  = ipv4_mid(),    UserMod = megaco_mess_user_test,    d("request_and_reply_plain -> start megaco app",[]),    ?VERIFY(ok, application:start(megaco)),    UserConfig = [{user_mod, UserMod}, {send_mod, UserMod},		  {request_timer, infinity}, {reply_timer, infinity}],    d("request_and_reply_plain -> start (MG) user ~p",[MgMid]),

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?