megaco_mess_test.erl

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

ERL
2,078
字号
		ErrReply4 = {discard_ack, ED4},		throw({error, Err4, ErrReply4})	end,    OE = 	case OED of 	    #'ObservedEventsDescriptor'{observedEventLst = [ObsEvLst]} ->		ObsEvLst;	    _ ->		Err5      = {invalid_OED, OED},		ED5       = cre_ErrDesc(NR),		ErrReply5 = {discard_ack, ED5},		throw({error, Err5, ErrReply5})	end,    case OE of	#'ObservedEvent'{eventName = "al/of"} ->	    AckData = notify_request_verified, 	    Replies = [rarpanp_mgc_notify_reply_ar(Cid, Tid)],	    Reply   = {{handle_pending_ack, AckData}, Replies},	    {ok, AR, Reply};	_ ->	    Err6      = {invalid_OE, OE},	    ED6       = cre_ErrDesc(OE),	    ErrReply6 = {discard_ack, ED6},	    throw({error, Err6, ErrReply6})    end.%% Disconnect verificationrarpanp_mgc_verify_handle_disconnect({handle_disconnect, CH, ?VERSION, _R}) ->    {ok, CH, ok};rarpanp_mgc_verify_handle_disconnect(Else) ->    {error, Else, ok}.rarpanp_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),    AR    = cre_actionReply(Cid, [CR]),    AR.rarpanp_mgc_notify_reply_ar(Cid, TermId) ->    NR    = cre_notifyReply([TermId]),    CR    = cre_cmdReply(NR),    cre_actionReply(Cid, [CR]).%%%% MG generator stuff%%-ifdef(megaco_hipe_special).-define(rarpanp_mg_decode_msg_fun(Mod, Conf),	{?MODULE, decode_msg, [Mod, Conf]}).-define(rarpanp_mg_encode_msg_fun(Mod, Conf),	{?MODULE, encode_msg, [Mod, Conf]}).-define(rarpanp_mg_verify_service_change_rep_msg_fun(),	{?MODULE, rarpanp_mg_verify_service_change_rep_msg, []}).-define(rarpanp_mg_verify_notify_rep_msg_fun(TransId, TermId),	{?MODULE, rarpanp_mg_verify_notify_rep_msg, [TransId, TermId]}).-else.-define(rarpanp_mg_decode_msg_fun(Mod, Conf),	rarpanp_mg_decode_msg_fun(Mod, Conf)).-define(rarpanp_mg_encode_msg_fun(Mod, Conf),	rarpanp_mg_encode_msg_fun(Mod, Conf)).-define(rarpanp_mg_verify_service_change_rep_msg_fun(),	rarpanp_mg_verify_service_change_rep_msg_fun()).-define(rarpanp_mg_verify_notify_rep_msg_fun(TransId, TermId),	rarpanp_mg_verify_notify_rep_msg_fun(TransId, TermId)).-endif.rarpanp_mg_event_sequence(text, tcp) ->    DecodeFun = ?rarpanp_mg_decode_msg_fun(megaco_pretty_text_encoder, []),    EncodeFun = ?rarpanp_mg_encode_msg_fun(megaco_pretty_text_encoder, []),    Mid       = {deviceName,"mg"},    ServiceChangeReq = rarpanp_mg_service_change_request_msg(Mid, 1, 0),    ScrVerifyFun = ?rarpanp_mg_verify_service_change_rep_msg_fun(),    TransId = 2,     TermId = #megaco_term_id{id = ["00000000","00000000","01101101"]},    NotifyReq = rarpanp_mg_notify_request_msg(Mid, TransId, 1, TermId, 1),    NrVerifyFun = ?rarpanp_mg_verify_notify_rep_msg_fun(TransId, TermId),    EvSeq = [{debug,  true},             {decode, DecodeFun},             {encode, EncodeFun},             {connect, 2944},             {send, "service-change-request", ServiceChangeReq},             {expect_receive, "service-change-reply", {ScrVerifyFun, 10000}},             {send, "notify request", NotifyReq},             {expect_receive, "notify-reply", {NrVerifyFun, 10000}},             {expect_nothing, 11000},             disconnect            ],    EvSeq.-ifndef(megaco_hipe_special).rarpanp_mg_encode_msg_fun(Mod, Conf) ->    fun(M) ->            encode_msg(M, Mod, Conf)    end.-endif.-ifndef(megaco_hipe_special).rarpanp_mg_decode_msg_fun(Mod, Conf) ->    fun(M) ->            decode_msg(M, Mod, Conf)    end.-endif.-ifndef(megaco_hipe_special).rarpanp_mg_verify_service_change_rep_msg_fun() ->    fun(Msg) -> 	    (catch rarpanp_mg_verify_service_change_rep_msg(Msg))     end.-endif.rarpanp_mg_verify_service_change_rep_msg(#'MegacoMessage'{mess = Mess} = M) ->    io:format("rarpanp_mg_verify_service_change_rep_msg -> entry with"	      "~n   Mess:  ~p"	      "~n", [Mess]),    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 = _Tid,                                immAckRequired = asn1_NOVALUE,                                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,    SCR = 	case CR of            {serviceChangeReply, ServChRep} ->		ServChRep;	    _ ->		throw({error, {invalid_commandReply, CR}})	end,    SCRes = 	case SCR of            #'ServiceChangeReply'{terminationID       = _TermID,                                  serviceChangeResult = ServChRes} ->		ServChRes;	    _ ->		throw({error, {invalid_serviceChangeReply, SCR}})	end,    SCRP = 	case SCRes of            {serviceChangeResParms, Parms} ->		Parms;	    _ ->		throw({error, {invalid_serviceChangeResult, SCRes}})	end,    case SCRP of	#'ServiceChangeResParm'{serviceChangeMgcId = _MgcMid} ->            {ok, M};	_ ->	    {error, {invalid_serviceChangeResParms, SCRP}}    end;rarpanp_mg_verify_service_change_rep_msg(Crap) ->    {error, {invalid_message, Crap}}.-ifndef(megaco_hipe_special).rarpanp_mg_verify_notify_rep_msg_fun(TransId, TermId) ->    fun(Msg) -> 	    (catch rarpanp_mg_verify_notify_rep_msg(Msg, TransId, TermId))     end.-endif.rarpanp_mg_verify_notify_rep_msg(#'MegacoMessage'{mess = Mess} = M,			     TransId, TermId) ->    io:format("rarpanp_mg_verify_notify_rep_msg -> entry with"	      "~n   TransId: ~p"	      "~n   TermId:  ~p"	      "~n   Mess:    ~p"	      "~n", [TransId, TermId, Mess]),    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    = asn1_NOVALUE, % No 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;rarpanp_mg_verify_notify_rep_msg(_TransId, _TermId, Crap) ->    {error, {invalid_message, Crap}}.rarpanp_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]).rarpanp_mg_service_change_request_msg(Mid, TransId, Cid) ->    AR    = rarpanp_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).rarpanp_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]).rarpanp_mg_notify_request_msg(Mid, TransId, Rid, TermId, Cid) ->    AR      = rarpanp_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).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%request_and_reply_pending_ack_one_pending(suite) ->    [];request_and_reply_pending_ack_one_pending(doc) ->    ["This test case tests that megaco correctly handles the return "     "value handle_pending_ack from handle_trans_request when ONE "     "pending message has been sent"];request_and_reply_pending_ack_one_pending(Config) when is_list(Config) ->    put(verbosity, ?TEST_VERBOSITY),    put(sname,     "TEST"),    put(tc,        rar_paop),    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 = rarpaop_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 = rarpaop_mg_event_sequence(text, tcp),    i("wait some time before starting the MG simulation"),    sleep(1000),    d("[MG] start the simulation"),    megaco_test_generator:tcp(Mg, MgEvSeq),    d("[MGC] await the generator reply"),    case megaco_test_generator:megaco_await_reply(Mgc) 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:tcp_await_reply(Mg) 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(rarpaop_mgc_verify_handle_connect_fun(),         {?MODULE, rarpaop_mgc_verify_handle_connect, []}).-define(rarpaop_mgc_verify_service_change_req_fun(Mid),        {?MODULE, rarpaop_mgc_verify_service_change_req, [Mid]}).-define(rarpaop_mgc_verify_notify_req_fun(),        {?MODULE, rarpaop_mgc_verify_notify_request, []}).-define(rarpaop_mgc_verify_reply_ack_fun(),	{?MODULE, rarpaop_mgc_verify_reply_ack, []}).-define(rarpaop_mgc_verify_handle_disconnect_fun(),        {?MODULE, rarpaop_mgc_verify_handle_disconnect, []}).-else.-define(rarpaop_mgc_verify_handle_connect_fun(), 

⌨️ 快捷键说明

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