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