pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40473?usp=email )
Change subject: stp: IPA: Introduce test TC_beat_timeout ......................................................................
stp: IPA: Introduce test TC_beat_timeout
Change-Id: I6f16915238d7762faf1c63fdeccca7e4a5f20893 Related: SYS#7501 Related: OS#4072 --- M stp/STP_Tests_IPA.ttcn M stp/expected-results.xml 2 files changed, 91 insertions(+), 4 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/stp/STP_Tests_IPA.ttcn b/stp/STP_Tests_IPA.ttcn index 07d1f2b..54a64d8 100644 --- a/stp/STP_Tests_IPA.ttcn +++ b/stp/STP_Tests_IPA.ttcn @@ -107,7 +107,24 @@ friend function f_vty_cs7_ipa_as_cmd(charstring as_name, charstring cmd) runs on IPA_CT { f_vty_config2(VTY, {"cs7 instance 0", "as " & as_name & " ipa"}, cmd); +}
+private function f_ipa_asp_cfg_str(in IpaConfig cfg) +return charstring { + var charstring str; + + str := "asp " & cfg.asp_name; + str := str & " " & int2str(cfg.local_port); + str := str & " " & int2str(cfg.remote_port); + str := str & " ipa"; + + return str; +} + +private function f_vty_cs7_ipa_asp_cmd(IpaConfig cfg, charstring cmd) runs on IPA_CT +{ + var charstring asp_cfg_str := f_ipa_asp_cfg_str(cfg); + f_vty_config2(VTY, {"cs7 instance 0", asp_cfg_str}, cmd); }
friend function f_IPA_send(integer idx, octetstring data) runs on IPA_CT { @@ -115,14 +132,20 @@ IPA[idx].send(t_ASP_MTP3_TRANSFERreq(sio, 0, 0, 0, data)); }
-friend function f_IPA_exp(integer idx, template (present) octetstring data) runs on IPA_CT { +friend function f_IPA_exp(integer idx, template (present) octetstring data, float timeout_val := 5.0) runs on IPA_CT { + timer T := timeout_val; + T.start; alt { [] IPA[idx].receive(t_ASP_MTP3_TRANSFERind(?, ?, ?, ?, data)) { setverdict(pass); } [] IPA[idx].receive { - setverdict(fail, "Received unexpected data on IPA port while waiting for ", data); - mtc.stop; + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Received unexpected data on IPA port while waiting for ", data)); + } + [] T.timeout { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Timeout waiting for IPA[", idx, "] ", data)); } } } @@ -525,6 +548,68 @@ f_IPA_ping(0); }
+private function f_TC_beat_timeout(Misc_Helpers.ro_charstring asps) runs on IPA_CT +{ + var IpaConfigs ipa_configs := ipa_build_configs(asps); + var ASP_MTP3_TRANSFERind rx; + var float timeout_val := 3.0 + 1.0; + var IpaCcmMsgtype ipa_ping_msg := IPAC_MSGT_PING; + var IpaCcmMsgtype ipa_pong_msg := IPAC_MSGT_PONG; + var octetstring ipa_ping_data := int2oct(enum2int(ipa_ping_msg), 1); + var octetstring ipa_pong_data := int2oct(enum2int(ipa_pong_msg), 1); + + f_init_common(); + f_init_ipa(ipa_configs := ipa_configs); + + f_vty_cs7_ipa_asp_cmd(ipa_configs[0], "timer xua beat 3"); + + if (ipa_configs[0].is_server) { + /* TODO */ + } else { + f_connect_ipa(0); + } + f_sleep(3.0); + /* receive CCM IPA PING: */ + f_ipa_cfg_chg_ccm_enabled(IPA_CFG[0], false); + + IPA_CTRL[0].receive(t_ASP_IPA_UD(IPAC_PROTO_CCM, ipa_ping_data)); + log("1st PING received"); + IPA_CTRL[0].send(valueof(t_ASP_IPA_UD(IPAC_PROTO_CCM, ipa_pong_data))); + + /* Make sure next HEARBEAT arrives around the time we configured. + * Do not answer this nor next heardbeat: */ + IPA_CTRL[0].receive(t_ASP_IPA_UD(IPAC_PROTO_CCM, ipa_ping_data)); + log("2nd PING received"); + IPA_CTRL[0].receive(t_ASP_IPA_UD(IPAC_PROTO_CCM, ipa_ping_data)); + log("3rd PING received"); + + /* After 2*T(beat), IUT should figure out peer is not responding and terminate the conn: */ + timer T := timeout_val; + T.start; + alt { + [] IPA_CTRL[0].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) { + setverdict(pass); + } + [] IPA[0].receive(t_ASP_MTP3_TRANSFERind(?, ?, ?, ?, ?)) -> value rx { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Received unexpected IPA ", rx, " while waiting for connClosed")); + } + [] T.timeout { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Timeout waiting for IPA connClosed")); + } + } + + /* return to default value: */ + f_vty_cs7_ipa_asp_cmd(g_ipa_configs[0], "timer xua beat 30"); +} + +/* Test the IUT sends heartbeat procedure when needed. */ +testcase TC_beat_timeout() runs on IPA_CT { + var Misc_Helpers.ro_charstring asps := { "ipa-asp-override-sender" }; + f_TC_beat_timeout(asps); +} + control { execute( TC_unknown_client_nodynamic() ); execute( TC_unknown_as_client_nodynamic() ); @@ -538,6 +623,7 @@ execute( TC_unknown_client_dynamic_tmt_loadshare() );
execute( TC_beat() ); + execute( TC_beat_timeout() ); }
diff --git a/stp/expected-results.xml b/stp/expected-results.xml index 44e0ea2..db36ab4 100644 --- a/stp/expected-results.xml +++ b/stp/expected-results.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<testsuite name='STP_Tests' tests='53' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='STP_Tests' tests='54' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> <testcase classname='STP_Tests_M3UA' name='TC_connect_asp_up' time='MASKED'/> <testcase classname='STP_Tests_M3UA' name='TC_beat' time='MASKED'/> <testcase classname='STP_Tests_M3UA' name='TC_beat_payload' time='MASKED'/> @@ -55,6 +55,7 @@ <testcase classname='STP_Tests_IPA' name='TC_tmt_loadshare_sls' time='MASKED'/> <testcase classname='STP_Tests_IPA' name='TC_unknown_client_dynamic_tmt_loadshare' time='MASKED'/> <testcase classname='STP_Tests_IPA' name='TC_beat' time='MASKED'/> + <testcase classname='STP_Tests_IPA' name='TC_beat_timeout' time='MASKED'/> <testcase classname='STP_Tests_IPA_M3UA' name='TC_m3ua_to_ipa' time='MASKED'/> <testcase classname='STP_Tests_IPA_M3UA' name='TC_ipa_to_m3ua' time='MASKED'/> <testcase classname='STP_Tests_IPA_M3UA' name='TC_ipa_to_m3ua_ni' time='MASKED'/>