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 + -
显示快捷键?