⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 megaco_trans_test.erl

📁 OTP是开放电信平台的简称
💻 ERL
📖 第 1 页 / 共 5 页
字号:
    d("[MGC] start the simulator "),    {ok, Mgc} = megaco_test_generator:start_link("MGC", MgcNode),    d("[MGC] create the event sequence"),    MgcEvSeq = str_mgc_event_sequence(text, tcp),    i("wait some time before starting the MGC simulation"),    sleep(1000),    d("[MGC] start the simulation"),    megaco_test_generator:megaco(Mgc, MgcEvSeq),    i("wait some time before starting the MG simulator"),    sleep(1000),    d("[MG] start the simulator (generator)"),    {ok, Mg} = megaco_test_generator:start_link("MG", MgNode),    d("[MG] create the event sequence"),    MgEvSeq = str_mg_event_sequence(text, tcp),    i("wait some time before starting the MG simulation"),    sleep(1000),    d("[MG] start the simulation"),    megaco_test_generator:megaco(Mg, MgEvSeq),    d("[MGC] await the generator reply"),    case megaco_test_generator:megaco_await_reply(Mgc) of	{'EXIT', Pid1, Reason1} ->	    ?ERROR({mgc_failed, {received_unexpected_EXIT, Pid1, Reason1}}),	    ok;	{'EXIT', Reason1} ->	    ?ERROR({mgc_failed, {received_unexpected_EXIT, Reason1}}),	    ok;	{ok, MgcReply} ->	    d("[MGC] OK => MgcReply: ~n~p", [MgcReply]),	    ok;	{error, MgcReply} ->	    d("[MGC] ERROR => MgcReply: ~n~p", [MgcReply]),	    ?ERROR({mgc_failed, MgcReply})    end,    d("[MG] await the generator reply"),    case megaco_test_generator:megaco_await_reply(Mg) of	{'EXIT', Pid2, Reason2} ->	    ?ERROR({mg_failed, {received_unexpected_EXIT, Pid2, Reason2}}),	    ok;	{'EXIT', Reason2} ->	    ?ERROR({mg_failed, {received_unexpected_EXIT, Reason2}}),	    ok;	{ok, MgReply} ->	    d("[MG] OK => MgReply: ~n~p", [MgReply]),	    ok;	{error, MgReply} ->	    d("[MG] ERROR => MgReply: ~n~p", [MgReply]),	    ?ERROR(mg_failed)    end,    %% Tell Mgc to stop    i("[MGC] stop generator"),    megaco_test_generator:stop(Mgc),    %% Tell Mg to stop    i("[MG] stop generator"),    megaco_test_generator:stop(Mg),    i("done", []),    ok.%%%% MGC generator stuff%% -ifdef(megaco_hipe_special).-define(str_mgc_connect_verify_fun(),         {?MODULE, str_mgc_verify_handle_connect, []}).-define(str_mgc_service_change_req_verify_fun(Mid),        {?MODULE, str_mgc_verify_service_change_req, [Mid]}).-define(str_mgc_notify_req_verify_fun(),        {?MODULE, str_mgc_verify_notify_request, []}).-define(str_mgc_disco_verify_fun(),        {?MODULE, str_mgc_verify_handle_disconnect, []}).-else.-define(str_mgc_connect_verify_fun(),         fun str_mgc_verify_handle_connect/1).-define(str_mgc_service_change_req_verify_fun(Mid),        str_mgc_verify_service_change_req_fun(Mid)).-define(str_mgc_notify_req_verify_fun(),	str_mgc_verify_notify_request_fun()).-define(str_mgc_disco_verify_fun(),	fun str_mgc_verify_handle_disconnect/1).-endif.str_mgc_event_sequence(text, tcp) ->    Mid = {deviceName,"ctrl"},    RI = [	  {port,             2944},	  {encoding_module,  megaco_pretty_text_encoder},	  {encoding_config,  []},	  {transport_module, megaco_tcp}	 ],    ConnectVerify          = ?str_mgc_connect_verify_fun(),    ServiceChangeReqVerify = ?str_mgc_service_change_req_verify_fun(Mid),    NotifyReqVerify        = ?str_mgc_notify_req_verify_fun(),    DiscoVerify            = ?str_mgc_disco_verify_fun(),%%     ConnectVerify = fun str_mgc_verify_handle_connect/1,%%     ServiceChangeReqVerify = str_mgc_verify_service_change_req_fun(Mid),%%     NotifyReqVerify = str_mgc_verify_notify_request_fun(),%%     DiscoVerify = fun str_mgc_verify_handle_disconnect/1,    EvSeq = [	     {debug, false},	     {megaco_trace, disable},	     megaco_start,	     {megaco_start_user, Mid, RI, []},	     start_transport,	     listen,	     {megaco_callback, handle_connect, ConnectVerify},	     {megaco_callback, handle_trans_request, ServiceChangeReqVerify},	     {megaco_callback, handle_trans_request, NotifyReqVerify},	     {megaco_callback, handle_disconnect, DiscoVerify},	     {sleep, 1000},	     megaco_stop_user,	     megaco_stop	    ],    EvSeq.str_mgc_verify_handle_connect({handle_connect, CH, ?VERSION}) ->     io:format("str_mgc_verify_handle_connect -> ok"	      "~n   CH: ~p~n", [CH]),    {ok, CH, ok};str_mgc_verify_handle_connect(Else) ->    io:format("str_mgc_verify_handle_connect -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.str_mgc_verify_service_change_req_fun(Mid) ->    fun(Ev) ->	    str_mgc_verify_service_change_req(Ev, Mid)    end.str_mgc_verify_service_change_req(  {handle_trans_request, _, ?VERSION, [AR]}, Mid) ->    io:format("str_mgc_verify_service_change_req -> ok"	      "~n   AR: ~p~n", [AR]),    case AR of	#'ActionRequest'{commandRequests = [CR]} ->	    case CR of		#'CommandRequest'{command = Cmd} ->		    case Cmd of			{serviceChangeReq, 			 #'ServiceChangeRequest'{terminationID = [Tid],						 serviceChangeParms = Parms}} ->			    case Tid of				#megaco_term_id{contains_wildcards = false, 						id = ["root"]} ->				    case Parms of					#'ServiceChangeParm'{						 serviceChangeMethod = restart,						 serviceChangeReason = [[$9,$0,$1|_]]} ->					    Reply = 						{discard_ack, 						 [str_mgc_service_change_reply_ar(Mid, 1)]},					    {ok, AR, Reply};					_ ->					    Err = {invalid_SCP, Parms},					    ED = str_err_desc(Parms),					    ErrReply = {discard_ack, 							ED},					    {error, Err, ErrReply}				    end;				_ ->				    Err = {invalid_termination_id, Tid},				    ED = str_err_desc(Tid),				    ErrReply = {discard_ack, ED},				    {error, Err, ErrReply}			    end;			_ ->			    Err = {invalid_command, Cmd},			    ED = str_err_desc(Cmd),			    ErrReply = {discard_ack, ED},			    {error, Err, ErrReply}		    end;		_ ->		    Err = {invalid_command_request, CR},		    ED = str_err_desc(CR),		    ErrReply = {discard_ack, ED},		    {error, Err, ErrReply}	    end;	_ ->	    Err = {invalid_action_request, AR},	    ED = str_err_desc(AR),	    ErrReply = {discard_ack, ED},	    {error, Err, ErrReply}    end;str_mgc_verify_service_change_req(Else, _Mid) ->    io:format("str_mgc_verify_service_change_req -> unknown"	      "~n   Else: ~p~n", [Else]),    ED = str_err_desc(Else),    ErrReply = {discard_ack, ED},    {error, Else, ErrReply}.str_mgc_verify_notify_request_fun() ->    fun(Ev) ->	    str_mgc_verify_notify_request(Ev)    end.str_mgc_verify_notify_request({handle_trans_request, _, ?VERSION, [AR]}) ->    io:format("str_mgc_verify_notify_request:fun -> ok"	      "~n   AR: ~p~n", [AR]),    case AR of	#'ActionRequest'{contextId = Cid, 			 commandRequests = [CR]} ->	    #'CommandRequest'{command = Cmd} = CR,	    {notifyReq, NR} = Cmd,	    #'NotifyRequest'{terminationID = [Tid],			     observedEventsDescriptor = OED,			     errorDescriptor = asn1_NOVALUE} = NR,	    #'ObservedEventsDescriptor'{observedEventLst = [OE]} = OED,	    #'ObservedEvent'{eventName = "al/of"} = OE,	    Reply = {discard_ack, [str_mgc_notify_reply_ar(Cid, Tid)]},	    {ok, AR, Reply};	_ ->	    ED = str_err_desc(AR),	    ErrReply = {discard_ack, ED},	    {error, AR, ErrReply}    end;str_mgc_verify_notify_request(Else) ->    io:format("str_mgc_verify_notify_request:fun -> unknown"	      "~n   Else: ~p~n", [Else]),    ED = str_err_desc(Else),    ErrReply = {discard_ack, ED},    {error, Else, ErrReply}.str_mgc_verify_handle_disconnect({handle_disconnect, CH, ?VERSION, R}) ->     io:format("str_mgc_verify_handle_disconnect -> ok"	      "~n   CH: ~p"	      "~n   R:  ~p"	      "~n", [CH, R]),    {ok, CH, ok};str_mgc_verify_handle_disconnect(Else) ->    io:format("str_mgc_verify_handle_disconnect -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.str_mgc_service_change_reply_ar(Mid, Cid) ->    SCRP  = cre_serviceChangeResParm(Mid),    SCRes = cre_serviceChangeResult(SCRP),    Root  = #megaco_term_id{id = ["root"]},    SCR   = cre_serviceChangeReply([Root], SCRes),    CR    = cre_cmdReply(SCR),    cre_actionReply(Cid, [CR]).str_mgc_service_change_reply_msg(Mid, TransId, Cid) ->    AR    = str_mgc_service_change_reply_ar(Mid, Cid),    TRes  = cre_transResult([AR]),    TR    = cre_transReply(TransId, TRes),    Trans = cre_transaction(TR),    Mess  = cre_message(?VERSION, Mid, cre_transactions([Trans])),    cre_megacoMessage(Mess).str_mgc_notify_reply_ar(Cid, TermId) ->    NR    = cre_notifyReply([TermId]),    CR    = cre_cmdReply(NR),    cre_actionReply(Cid, [CR]).str_mgc_notify_reply(Mid, TransId, Cid, TermId) ->    AR    = str_mgc_notify_reply_ar(Cid, TermId),    TRes  = cre_transResult([AR]),    TR    = cre_transReply(TransId, TRes),    Trans = cre_transaction(TR),    Mess  = cre_message(?VERSION, Mid, cre_transactions([Trans])),    cre_megacoMessage(Mess).%%%% MG generator stuff%% -ifdef(megaco_hipe_special).-define(str_mg_connect_verify_fun(),         {?MODULE, str_mg_verify_handle_connect, []}).-define(str_mg_service_change_reply_verify_fun(),        {?MODULE, str_mg_verify_service_change_reply, []}).-define(str_mg_notify_reply_verify_fun(),        {?MODULE, str_mg_verify_notify_reply, []}).-else.-define(str_mg_connect_verify_fun(),         fun str_mg_verify_handle_connect/1).-define(str_mg_service_change_reply_verify_fun(Mid),        fun str_mg_verify_service_change_reply/1).-define(str_mg_notify_reply_verify_fun(),	fun str_mg_verify_notify_reply/1).-endif.str_mg_event_sequence(text, tcp) ->    Mid = {deviceName,"mg"},    RI = [	  {port,             2944},	  {encoding_module,  megaco_pretty_text_encoder},	  {encoding_config,  []},	  {transport_module, megaco_tcp}	 ],    ServiceChangeReq = [str_mg_service_change_request_ar(Mid, 1)],    Tid            = #megaco_term_id{id = ["00000000","00000000","01101101"]},    NotifyReq        = [str_mg_notify_request_ar(1, Tid, 1)],    ConnectVerify            = ?str_mg_connect_verify_fun(),     ServiceChangeReplyVerify = ?str_mg_service_change_reply_verify_fun(),     NotifyReplyVerify        = ?str_mg_notify_reply_verify_fun(),     %% ConnectVerify = fun str_mg_verify_handle_connect/1,    %% ServiceChangeReplyVerify = fun str_mg_verify_service_change_reply/1,    %% NotifyReplyVerify = fun str_mg_verify_notify_reply/1,     EvSeq = [	     {debug, true},	     megaco_start,	     {megaco_start_user, Mid, RI, []},	     start_transport,	     {megaco_trace, max}, 	     {megaco_system_info, users},	     {megaco_system_info, connections},	     connect,	     {megaco_callback, handle_connect, ConnectVerify},	     megaco_connect,	     {megaco_cast, ServiceChangeReq, []},	     {megaco_callback, handle_connect, ConnectVerify},	     {megaco_callback, handle_trans_reply, ServiceChangeReplyVerify},	     {sleep, 1000},	     {megaco_cast, NotifyReq, []},	     {megaco_callback, handle_trans_reply, NotifyReplyVerify},	     {sleep, 1000},	     megaco_stop_user,	     megaco_stop,	     {sleep, 1000}	    ],    EvSeq.str_mg_verify_handle_connect({handle_connect, CH, ?VERSION}) ->     io:format("str_mg_verify_handle_connect -> ok"	      "~n   CH: ~p~n", [CH]),    {ok, CH, ok};str_mg_verify_handle_connect(Else) ->    io:format("str_mg_verify_handle_connect -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.str_mg_verify_service_change_reply({handle_trans_reply, _CH, ?VERSION, 				    {ok, [AR]}, _}) ->    io:format("str_mg_verify_service_change_reply -> ok"	      "~n   AR: ~p~n", [AR]),    case AR of	#'ActionReply'{commandReply = [SCR]} ->	    case SCR of		{serviceChangeReply,		 #'ServiceChangeReply'{terminationID = [Tid],				       serviceChangeResult = Res}} ->		    case Tid of			#megaco_term_id{contains_wildcards = false, 					id = ["root"]} ->			    case Res of				{serviceChangeResParms,				 #'ServiceChangeResParm'{				   serviceChangeMgcId = _RemoteMid}} ->				    {ok, AR, ok};				{Tag, Val} ->				    Err = {invalid_service_change_result, 					   Tag, Val},				    {error, Err, ok}			    end;			_ ->			    Err = {invalid_termination_id, Tid},			    {error, Err, ok}		    end;		{Tag, Val} ->		    Err = {invalid_command_reply, Tag, Val},		    {error, Err, ok}	    end;	_ ->	    Err = {invalid_action_reply, AR},	    {error, Err, ok}    end;str_mg_verify_service_change_reply(Else) ->    io:format("str_mg_verify_service_change_reply -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.str_mg_verify_notify_reply({handle_trans_reply, _CH, ?VERSION, 			    {ok, [AR]}, _}) ->    io:format("str_mg_verify_notify_reply -> ok"	      "~n   AR: ~p~n", [AR]),    {ok, AR, ok};str_mg_verify_notify_reply(Else) ->    io:format("str_mg_verify_notify_reply -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.str_mg_service_change_request_ar(_Mid, Cid) ->    Prof  = cre_serviceChangeProf("resgw", 1),    SCP   = cre_serviceChangeParm(restart, ["901 mg col boot"], Prof),    Root  = #megaco_term_id{id = ["root"]},    SCR   = cre_serviceChangeReq([Root], SCP),    CMD   = cre_command(SCR),

⌨️ 快捷键说明

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