📄 megaco_trans_test.erl
字号:
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 + -