megaco_mess_test.erl

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

ERL
2,078
字号
	    {error, {invalid_serviceChangeResParms, SCRP}}    end;rarpaop_mg_verify_service_change_rep_msg(Crap) ->    {error, {invalid_message, Crap}}.-ifndef(megaco_hipe_special).rarpaop_mg_verify_pending_msg_fun(TransId) ->    fun(Msg) -> 	    (catch rarpaop_mg_verify_pending_msg(Msg, TransId))     end.-endif.rarpaop_mg_verify_pending_msg(#'MegacoMessage'{mess = Mess} = M, TransId) ->    Body = 	case Mess of 	    #'Message'{version     = _V,                       mId         = _MgMid,                       messageBody = MsgBody} ->		MsgBody;	    _ ->		throw({error, {invalid_Message, Mess}})	end,    Trans = 	case Body of            {transactions, [Transactions]} ->		Transactions;	    _ ->		throw({error, {invalid_messageBody, Body}})	end,    TP = 	case Trans of            {transactionPending, TransPending} ->		TransPending;	    _ ->		throw({error, {invalid_transactions, Trans}})	end,    case TP of	#'TransactionPending'{transactionId = TransId} ->	    {ok, M};	_ ->	    throw({error, {invalid_transactionPending, TP}})    end;rarpaop_mg_verify_pending_msg(Crap, _TransId) ->    {error, {invalid_message, Crap}}.-ifndef(megaco_hipe_special).rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId) ->    fun(Msg) -> 	    (catch rarpaop_mg_verify_notify_rep_msg(Msg, TransId, TermId))     end.-endif.rarpaop_mg_verify_notify_rep_msg(#'MegacoMessage'{mess = Mess} = M,				 TransId, TermId) ->    Body = 	case Mess of 	    #'Message'{version     = _V,                       mId         = _MgMid,                       messageBody = MsgBody} ->		MsgBody;	    _ ->		throw({error, {invalid_Message, Mess}})	end,    Trans = 	case Body of            {transactions, [Transactions]} ->		Transactions;	    _ ->		throw({error, {invalid_messageBody, Body}})	end,    TR = 	case Trans of            {transactionReply, TransReply} ->		TransReply;	    _ ->		throw({error, {invalid_transactions, Trans}})	end,    TRes = 	case TR of            #'TransactionReply'{transactionId     = TransId,                                immAckRequired    = 'NULL', % Ack                                transactionResult = TransRes} ->		TransRes;	    _ ->		throw({error, {invalid_transactionReply, TR}})	end,    AR = 	case TRes of            {actionReplies, [ActRes]} ->		ActRes;	    _ ->		throw({error, {invalid_transactionResult, TRes}})	end,    CR = 	case AR of            #'ActionReply'{contextId       = _Cid,                           errorDescriptor = asn1_NOVALUE,                           contextReply    = _CtxReq,                           commandReply    = [CmdRep]} ->		CmdRep;	    _ ->		throw({error, {invalid_actionReplies, AR}})	end,    NR = 	case CR of            {notifyReply, NotifyRep} ->		NotifyRep;	    _ ->		throw({error, {invalid_commandReply, CR}})	end,    case NR of	#'NotifyReply'{terminationID   = [TermId],		       errorDescriptor = asn1_NOVALUE} ->            {ok, M};	#'NotifyReply'{terminationID   = A,		       errorDescriptor = B} ->	    throw({error, {invalid_notifyReply, 			   {A, TermId}, 			   {B, asn1_NOVALUE}}});	_ ->	    throw({error, {invalid_notifyReply, NR}})    end;rarpaop_mg_verify_notify_rep_msg(Crap, _TransId, _TermId) ->    {error, {invalid_message, Crap}}.rarpaop_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),    CR    = cre_cmdReq(CMD),    cre_actionReq(Cid, [CR]).rarpaop_mg_service_change_request_msg(Mid, TransId, Cid) ->    AR    = rarpaop_mg_service_change_request_ar(Mid, Cid),    TR    = cre_transReq(TransId, [AR]),    Trans = cre_transaction(TR),    Mess  = cre_message(?VERSION, Mid, cre_transactions([Trans])),    cre_megacoMessage(Mess).rarpaop_mg_ack_msg(Mid, TransId) ->    TR    = cre_transRespAck(cre_transAck(TransId)),    Trans = cre_transaction(TR),    Mess  = cre_message(?VERSION, Mid, cre_transactions([Trans])),    cre_megacoMessage(Mess).rarpaop_mg_notify_request_ar(Rid, Tid, Cid) ->    TT      = cre_timeNotation("19990729", "22000000"),    Ev      = cre_obsEvent("al/of", TT),    EvsDesc = cre_obsEvsDesc(Rid, [Ev]),    NR      = cre_notifyReq([Tid], EvsDesc),    CMD     = cre_command(NR),    CR      = cre_cmdReq(CMD),    cre_actionReq(Cid, [CR]).rarpaop_mg_notify_request_msg(Mid, TransId, Rid, TermId, Cid) ->    AR      = rarpaop_mg_notify_request_ar(Rid, TermId, Cid),    TR      = cre_transReq(TransId, [AR]),    Trans   = cre_transaction(TR),    Mess    = cre_message(?VERSION, Mid, cre_transactions([Trans])),    cre_megacoMessage(Mess).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%single_trans_req_and_reply(suite) ->    [];single_trans_req_and_reply(doc) ->    ["Receive a (single) transaction request and then send a "     "reply (discard ack). "     "The MGC is a megaco instance (megaco event sequence) and the "     "MG is emulated (tcp event sequence)"];single_trans_req_and_reply(Config) when list(Config) ->    put(verbosity, ?TEST_VERBOSITY),    put(sname,     "TEST"),    put(tc,        strar),    i("starting"),    MgcNode = make_node_name(mgc),    MgNode  = make_node_name(mg),    d("start nodes: "      "~n   MgcNode: ~p"      "~n   MgNode:  ~p",       [MgcNode, MgNode]),    ok = megaco_test_lib:start_nodes([MgcNode, MgNode], ?FILE, ?LINE),    d("[MGC] start the simulator "),    {ok, Mgc} = megaco_test_generator:start_link("MGC", MgcNode),    d("[MGC] create the event sequence"),    MgcEvSeq = strar_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 = strar_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, 30000) of	{ok, MgcReply} ->	    d("[MGC] OK => MgcReply: ~n~p", [MgcReply]),	    ok;	{error, MgcReply} ->	    d("[MGC] ERROR => MgcReply: ~n~p", [MgcReply]),	    ?ERROR(mgc_failed)		end,    d("[MG] await the generator reply"),    case megaco_test_generator:megaco_await_reply(Mg, 30000) of	{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(strar_mgc_verify_handle_connect_fun(),         {?MODULE, strar_mgc_verify_handle_connect, []}).-define(strar_mgc_verify_service_change_req_fun(Mid),        {?MODULE, strar_mgc_verify_service_change_req, [Mid]}).-define(strar_mgc_verify_notify_req_fun(),        {?MODULE, strar_mgc_verify_notify_request, []}).-define(strar_mgc_verify_handle_disconnect_fun(),        {?MODULE, strar_mgc_verify_handle_disconnect, []}).-else.-define(strar_mgc_verify_handle_connect_fun(),         fun strar_mgc_verify_handle_connect/1).-define(strar_mgc_verify_service_change_req_fun(Mid),        strar_mgc_verify_service_change_req_fun(Mid)).-define(strar_mgc_verify_notify_req_fun(),	strar_mgc_verify_notify_request_fun()).-define(strar_mgc_verify_handle_disconnect_fun(),	fun strar_mgc_verify_handle_disconnect/1).-endif.strar_mgc_event_sequence(text, tcp) ->    Mid = {deviceName,"ctrl"},    RI = [	  {port,             2944},	  {encoding_module,  megaco_pretty_text_encoder},	  {encoding_config,  []},	  {transport_module, megaco_tcp}	 ],    %% Tid = #megaco_term_id{id = ["00000000","00000000","01101101"]},%%     ReqTmr = #megaco_incr_timer{wait_for    = 500,%% 				factor      = 1,%% 				max_retries = 1},    ConnectVerify          = ?strar_mgc_verify_handle_connect_fun(),     ServiceChangeReqVerify = ?strar_mgc_verify_service_change_req_fun(Mid),    NotifyReqVerify        = ?strar_mgc_verify_notify_req_fun(),    DiscoVerify            = ?strar_mgc_verify_handle_disconnect_fun(), %%     ConnectVerify          = fun strar_mgc_verify_handle_connect/1,%%     ServiceChangeReqVerify = strar_mgc_verify_service_change_req_fun(Mid),%%     NotifyReqVerify        = strar_mgc_verify_notify_request_fun(),%%     DiscoVerify            = fun strar_mgc_verify_handle_disconnect/1,    EvSeq = [	     {debug, true},	     {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.strar_mgc_verify_handle_connect({handle_connect, CH, ?VERSION}) ->     io:format("strar_mgc_verify_handle_connect -> ok"	      "~n   CH: ~p~n", [CH]),    {ok, CH, ok};strar_mgc_verify_handle_connect(Else) ->    io:format("strar_mgc_verify_handle_connect -> unknown"	      "~n   Else: ~p~n", [Else]),    {error, Else, ok}.-ifndef(megaco_hipe_special).strar_mgc_verify_service_change_req_fun(Mid) ->    fun(Req) -> 	    strar_mgc_verify_service_change_req(Req, Mid)     end.-endif.strar_mgc_verify_service_change_req(  {handle_trans_request, _, ?VERSION, [AR]}, Mid) ->    (catch strar_mgc_do_verify_service_change_req(AR, Mid));strar_mgc_verify_service_change_req(Crap, _Mid) ->    ED       = cre_ErrDesc(Crap),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply}.strar_mgc_do_verify_service_change_req(AR, Mid) ->    io:format("strar_mgc_verify_service_change_req -> entry with"	      "~n   AR:  ~p"	      "~n   Mid: ~p"	      "~n", [AR, Mid]),    CR = 	case AR of	    #'ActionRequest'{commandRequests = [CmdReq]} ->		CmdReq;	    _ ->                Err1      = {invalid_action_request, AR},                ED1       = cre_ErrDesc(AR),                ErrReply1 = {discard_ack, ED1},                throw({error, Err1, ErrReply1})	end,    Cmd =        case CR of            #'CommandRequest'{command = Command} ->                Command;            _ ->                Err2      = {invalid_command_request, CR},                ED2       = cre_ErrDesc(CR),                ErrReply2 = {discard_ack, ED2},                throw({error, Err2, ErrReply2})        end,    {Tid, Parms} =        case Cmd of            {serviceChangeReq,             #'ServiceChangeRequest'{terminationID = [TermID],                                     serviceChangeParms = ServChParms}} ->                {TermID, ServChParms};            _ ->                Err3      = {invalid_command, Cmd},                ED3       = cre_ErrDesc(Cmd),                ErrReply3 = {discard_ack, ED3},                throw({error, Err3, ErrReply3})        end,    case Tid of        #megaco_term_id{contains_wildcards = false, id = ["root"]} ->            ok;        _ ->            Err4      = {invalid_termination_id, Tid},            ED4       = cre_ErrDesc(Tid),            ErrReply4 = {discard_ack, ED4},            throw({error, Err4, ErrReply4})    end,    case Parms of        #'ServiceChangeParm'{serviceChangeMethod = restart,                             serviceChangeReason = [[$9,$0,$1|_]]} ->            AckData = [strar_mgc_service_change_reply_ar(Mid, 1)],            Reply   = {discard_ack, AckData},            {ok, AR, Reply};        _ ->            Err5      = {invalid_SCP, Parms},            ED5       = cre_ErrDesc(Parms),            ErrReply5 = {discard_ack, ED5},            {error, Err5, ErrReply5}    end.-ifndef(megaco_hipe_special).strar_mgc_verify_notify_request_fun() ->    fun(Req) -> 	    strar_mgc_verify_notify_request(Req)     end.-endif.strar_mgc_verify_notify_request({handle_trans_request, _, ?VERSION, [AR]}) ->    (catch strar_mgc_do_verify_notify_request(AR));strar_mgc_verify_notify_request(Crap) ->    ED       = cre_ErrDesc(Crap),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply}.    strar_mgc_do_verify_notify_request(AR) ->    io:format("strar_mgc_do_verify_notify_request -> ok"	      "~n   AR: ~p~n", [AR]),    {Cid, CR} =	case AR of	    #'ActionRequest'{contextId       = CtxID, 			     commandRequests = [CmdReq]} when (CtxID == 1) or	

⌨️ 快捷键说明

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