megaco_pending_limit_test.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 2,019 行 · 第 1/5 页
ERL
2,019 行
ServiceChangeReqVerify = ?rle1_mgc_verify_service_change_req_msg_fun(Mid), NotifyReqVerify = ?rle1_mgc_verify_notify_req_msg_fun(),%% ServiceChangeReqVerify = %% rle1_mgc_verify_service_change_req_fun(Mid),%% NotifyReqVerify = rle1_mgc_verify_notify_request_fun(), EvSeq = [{debug, true}, {decode, DecodeFun}, {encode, EncodeFun}, {listen, 2944}, {expect_accept, any}, {expect_receive, "service-change-req", {ServiceChangeReqVerify, 10000}}, {send, "service-change-reply", ServiceChangeReply}, {expect_receive, "notify-request", {NotifyReqVerify, 5000}}, {sleep, 100}, {send, "pending 1", Pending}, {sleep, 100}, {send, "pending 2", Pending}, {sleep, 100}, {send, "pending 3", Pending}, {sleep, 100}, {send, "pending 4", Pending}, {sleep, 100}, {send, "pending 5", Pending}, {sleep, 1000}, disconnect ], EvSeq.rle1_mgc_encode_msg_fun(Mod, Conf) -> fun(M) -> encode_msg(M, Mod, Conf) end.rle1_mgc_decode_msg_fun(Mod, Conf) -> fun(M) -> decode_msg(M, Mod, Conf) end.rle1_mgc_service_change_reply_msg(Mid, TransId, Cid) -> SCRP = #'ServiceChangeResParm'{serviceChangeMgcId = Mid}, SCRPs = {serviceChangeResParms,SCRP}, Root = #megaco_term_id{id = ["root"]}, SCR = #'ServiceChangeReply'{terminationID = [Root], serviceChangeResult = SCRPs}, CR = {serviceChangeReply, SCR}, rle1_mgc_msg(Mid, TransId, CR, Cid). rle1_mgc_msg(Mid, TransId, CR, Cid) -> AR = #'ActionReply'{contextId = Cid, commandReply = [CR]}, ARs = {actionReplies, [AR]}, TR = #'TransactionReply'{transactionId = TransId, transactionResult = ARs}, Body = {transactions, [{transactionReply, TR}]}, Mess = #'Message'{version = 1, mId = Mid, messageBody = Body}, #'MegacoMessage'{mess = Mess}. rle1_mgc_pending_msg(Mid, TransId) -> TP = #'TransactionPending'{transactionId = TransId}, Body = {transactions, [{transactionPending, TP}]}, Mess = #'Message'{version = 1, mId = Mid, messageBody = Body}, #'MegacoMessage'{mess = Mess}.-ifndef(megaco_hipe_special).rle1_mgc_verify_service_change_req_msg_fun(Mid) -> fun(M) -> rle1_mgc_verify_service_change_req_msg(M, Mid) end.-endif.rle1_mgc_verify_service_change_req_msg(#'MegacoMessage'{mess = Mess} = M, _Mid1) -> io:format("rle1_mgc_verify_service_change_req_msg -> entry with" "~n M: ~p" "~n", [M]), #'Message'{version = _V, mId = _Mid2, messageBody = Body} = Mess, {transactions, [Trans]} = Body, {transactionRequest, TR} = Trans, #'TransactionRequest'{transactionId = _Tid, actions = [AR]} = TR, #'ActionRequest'{contextId = _Cid, contextRequest = _CtxReq, contextAttrAuditReq = _CtxAar, commandRequests = [CR]} = AR, #'CommandRequest'{command = Cmd, optional = _Opt, wildcardReturn = _WR} = CR, {serviceChangeReq, SCR} = Cmd, #'ServiceChangeRequest'{terminationID = _TermID, serviceChangeParms = SCP} = SCR, #'ServiceChangeParm'{serviceChangeMethod = restart, serviceChangeReason = [[$9,$0,$1|_]]} = SCP, {ok, M};rle1_mgc_verify_service_change_req_msg(M, _Mid) -> {error, {invalid_message, M}}.-ifndef(megaco_hipe_special).rle1_mgc_verify_notify_req_msg_fun() -> fun(M) -> rle1_mgc_verify_notify_req_msg(M) end.-endif.rle1_mgc_verify_notify_req_msg(#'MegacoMessage'{mess = Mess} = M) -> io:format("rle1_mgc_verify_notify_req_msg -> entry with" "~n M: ~p" "~n", [M]), #'Message'{messageBody = Body} = Mess, {transactions, [Trans]} = Body, {transactionRequest, TR} = Trans, #'TransactionRequest'{actions = [AR]} = TR, io:format("rle1_mgc_verify_notify_request_fun -> AR: " "~n~p~n", [AR]), #'ActionRequest'{commandRequests = [CR]} = AR, #'CommandRequest'{command = Cmd} = CR, {notifyReq, NR} = Cmd, #'NotifyRequest'{observedEventsDescriptor = OED} = NR, #'ObservedEventsDescriptor'{observedEventLst = [OE]} = OED, #'ObservedEvent'{eventName = "al/of"} = OE, {ok, M};rle1_mgc_verify_notify_req_msg(M) -> {error, {invalid_message, M}}. % rle1_err_desc(T) ->% EC = ?megaco_internal_gateway_error,% ET = lists:flatten(io_lib:format("~w",[T])),% #'ErrorDescriptor'{errorCode = EC, errorText = ET}.%%%% MG generator stuff%% -ifdef(megaco_hipe_special).-define(rle1_mg_verify_handle_connect_fun(), {?MODULE, rle1_mg_verify_handle_connect, []}).-define(rle1_mg_verify_service_change_rep_fun(), {?MODULE, rle1_mg_verify_service_change_rep, []}).-define(rle1_mg_verify_trans_rep_fun(), {?MODULE, rle1_mg_verify_trans_rep, []}).-else.-define(rle1_mg_verify_handle_connect_fun(), fun rle1_mg_verify_handle_connect/1).-define(rle1_mg_verify_service_change_rep_fun(), fun rle1_mg_verify_service_change_rep/1).-define(rle1_mg_verify_trans_rep_fun(), fun rle1_mg_verify_trans_rep/1).-endif.rle1_mg_event_sequence(text, tcp) -> Mid = {deviceName,"mg"}, RI = [ {port, 2944}, {encoding_module, megaco_pretty_text_encoder}, {encoding_config, []}, {transport_module, megaco_tcp} ], rle1_mg_event_sequence2(Mid, RI).rle1_mg_event_sequence2(Mid, RI) -> ServiceChangeReq = [rle1_mg_service_change_request_ar(Mid, 1)], Tid = #megaco_term_id{id = ["00000000","00000000","01101101"]}, NotifyReq = [rle1_mg_notify_request_ar(1, Tid, 1)], ConnectVerify = ?rle1_mg_verify_handle_connect_fun(), ServiceChangeReplyVerify = ?rle1_mg_verify_service_change_rep_fun(), TransReplyVerify = ?rle1_mg_verify_trans_rep_fun(), %% ConnectVerify = fun rle1_mg_verify_handle_connect/1,%% ServiceChangeReplyVerify = fun rle1_mg_verify_service_change_reply/1,%% TransReplyVerify = fun rle1_mg_verify_trans_reply/1, EvSeq = [ {debug, true}, megaco_start, {megaco_start_user, Mid, RI, []}, {megaco_update_user_info, recv_pending_limit, 4}, start_transport, {megaco_trace, disable}, %%100}, {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, TransReplyVerify}, {sleep, 1000}, megaco_stop_user, megaco_stop, {sleep, 1000} ], EvSeq.rle1_mg_verify_handle_connect({handle_connect, CH, ?VERSION}) -> io:format("rle1_mg_verify_handle_connect -> ok" "~n CH: ~p~n", [CH]), {ok, CH, ok};rle1_mg_verify_handle_connect(Else) -> io:format("rle1_mg_verify_handle_connect -> unknown" "~n Else: ~p~n", [Else]), {error, Else, ok}.rle1_mg_verify_service_change_rep( {handle_trans_reply, _CH, ?VERSION, {ok, [AR]}, _}) -> io:format("rle1_mg_verify_service_change_rep -> 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;rle1_mg_verify_service_change_rep(Else) -> io:format("rle1_mg_verify_service_change_rep -> unknown" "~n Else: ~p~n", [Else]), {error, Else, ok}.rle1_mg_verify_trans_rep( {handle_trans_reply, _CH, ?VERSION, {error, exceeded_recv_pending_limit} = E, _}) -> io:format("rle1_mg_verify_trans_rep -> expected error~n", []), {ok, E , error};rle1_mg_verify_trans_rep(Else) -> io:format("rle1_mg_verify_trans_rep -> unknown" "~n Else: ~p~n", [Else]), {error, Else, error}.rle1_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]).rle1_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]).%% ---recv_limit_exceeded2(suite) -> [];recv_limit_exceeded2(doc) -> "Received pending limit exceeded";recv_limit_exceeded2(Config) when list(Config) -> put(verbosity, ?TEST_VERBOSITY), put(sname, "TEST"), put(tc, rle2), i("starting"), _MgcNode = make_node_name(mgc), _MgNode = make_node_name(mg), ?SKIP(not_yet_implemented).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%% Ticket test cases %%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%otp_4956(suite) -> [];otp_4956(Config) when list(Config) -> put(verbosity, ?TEST_VERBOSITY), put(sname, "TEST"), put(tc, otp_4956), 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 = otp_4956_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 = otp_4956_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, MgcReply}) 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, MgReply}) 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(otp_4956_mgc_verify_handle_connect_fun(), {?MODULE, otp_4956_mgc_verify_handle_connect, []}).-define(otp_4956_mgc_verify_service_change_req_fun(Mid), {?MODULE, otp_4956_mgc_verify_service_change_req, [Mid]}).-define(otp_4956_mgc_verify_notify_req1_fun(), {?MODULE, otp_4956_mgc_verify_notify_req1, []}).-define(otp_4956_mgc_verify_notify_req2_fun(), {?MODULE, otp_4956_mgc_verify_notify_req2, []}).-define(otp_4956_mgc_verify_handle_trans_req_abort_fun(), {?MODULE, otp_4956_mgc_verify_handle_trans_req_abort, []}).-define(otp_4956_mgc_verify_handle_disconnect_fun(), {?MODULE, otp_4956_mgc_verify_handle_disconnect, []}).-else.-define(otp_4956_mgc_verify_handle_connect_fun(), otp_4956_mgc_verify_handle_connect_fun()).-define(otp_4956_mgc_verify_service_change_req_fun(Mid), otp_4956_mgc_verify_service_change_req_fun(Mid)).-define(otp_4956_mgc_verify_notify_req1_fun(), otp_4956_mgc_verify_notify_req1_fun()).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?