pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42520?usp=email )
Change subject: stp: STP_Tests_IPA: Introduce tests TC_ipa_tcp_{cli,srv}_adm_shutdown ......................................................................
stp: STP_Tests_IPA: Introduce tests TC_ipa_tcp_{cli,srv}_adm_shutdown
Related tests already exist for M3UA and M3UA_TCP, but were missing for IPA ASPs.
Change-Id: Ie30de6caa3e2b680aff9e50898e63f615b526500 Related: OS#6752 --- M stp/STP_Tests_IPA.ttcn M stp/expected-results.xml 2 files changed, 113 insertions(+), 4 deletions(-)
Approvals: fixeria: Looks good to me, approved osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/stp/STP_Tests_IPA.ttcn b/stp/STP_Tests_IPA.ttcn index 0a5b56c..431bdd4 100644 --- a/stp/STP_Tests_IPA.ttcn +++ b/stp/STP_Tests_IPA.ttcn @@ -76,6 +76,13 @@ var IpaConfigs g_ipa_configs; }
+private altstep as_IPA_wait_tcp_conn_closed(integer idx) runs on IPA_CT { + var ASP_IPA_Event evt; + [] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_DOWN)) -> value evt { + log("Peer closed conn: ", evt) + } +} + friend function ipa_build_configs(template (omit) Misc_Helpers.ro_charstring asps := omit) return IpaConfigs { @@ -182,6 +189,28 @@ } }
+private function f_IPA_close(integer i) runs on IPA_CT { + var Result res; + if (vc_IPA[i] == null) { + log("Not close()ing ipacfg := ", g_ipa_configs[i], " (not connected)"); + /* not connected */ + return; + } + vc_IPA[i].stop; + vc_IPA[i] := null; +} + +private function f_clear_ipa() runs on IPA_CT { + var integer i; + + log("Clearing IPA..."); + + for (i := 0; i < lengthof(g_ipa_configs); i:=i+1) { + f_IPA_close(i); + } + setverdict(pass, "IPA cleared"); +} + friend function f_connect_ipa(integer idx, boolean exp_act := true) runs on IPA_CT { vc_IPA[idx].start(IPA_Emulation.main_client(mp_stp_ipa_ip, g_ipa_configs[idx].remote_port, @@ -196,13 +225,16 @@ } }
-friend function f_listen_ipa(integer idx) runs on IPA_CT { - vc_IPA[idx].start(IPA_Emulation.main_server(mp_local_ipa_ip, - g_ipa_configs[idx].local_port)); +private function f_start_ipa_server(integer idx) runs on IPA_CT { + vc_IPA[idx].start(IPA_Emulation.main_server(mp_local_ipa_ip, g_ipa_configs[idx].local_port)); +} + +friend function f_listen_ipa(integer idx, float to_val := 10.0) runs on IPA_CT { + f_start_ipa_server(idx);
/* wait for incoming connection to IPA port before proceeding */ var integer st := 0; - timer T := 10.0; + timer T := to_val; T.start; alt { [st == 0] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { @@ -221,6 +253,22 @@ } }
+/* Make sure no new conn is attemptent from the peer during the specified time frame: */ +private function f_exp_no_ipa_conn(integer idx, float to_val := 10.0) runs on IPA_CT { + timer T; + + T.start(to_val); + alt { + [] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, + log2str("Got unexpected connection to IPA[", idx, "] Port")); + } + [] T.timeout { + setverdict(pass); + } + } +} + /* "accept-asp-connections pre-configured" and client from unknown ASP source * (but known AS/ipa_unit_name) */ testcase TC_unknown_client_nodynamic() runs on IPA_CT { @@ -681,6 +729,62 @@ } }
+/* Test administrative state, VTY "[no] shutdown" */ +testcase TC_ipa_tcp_srv_adm_shutdown() runs on IPA_CT { + var Misc_Helpers.ro_charstring asps := { "ipa-asp-override-sender" }; + var IpaConfigs ipa_configs := ipa_build_configs(asps); + f_init_ipa(ipa_configs := ipa_configs); + f_connect_ipa(0); + + f_sleep(1.0); + f_vty_cs7_ipa_asp_cmd(ipa_configs[0], "shutdown"); + log("ASP should now be DOWN") + as_IPA_wait_tcp_conn_closed(0); + f_clear_ipa(); + f_init_ipa(ipa_configs := ipa_configs); + + f_sleep(1.0); + /* Make sure SCTP conn will be closed when we connect to it. */ + log("Connecting to ASP (expect closed):"); + f_connect_ipa(0, exp_act := false); + f_clear_ipa(); + + /* Now let the ASP be active again, it should allow us to reconnect: */ + f_vty_cs7_ipa_asp_cmd(ipa_configs[0], "no shutdown"); + log("Connecting to ASP (expect success):"); + f_init_ipa(ipa_configs := ipa_configs); + f_connect_ipa(0); + setverdict(pass); +} + +/* Test administrative state, VTY "[no] shutdown" */ +testcase TC_ipa_tcp_cli_adm_shutdown() runs on IPA_CT { + var PortEvent pev; + var Misc_Helpers.ro_charstring asps := { "ipa-asp-client0" }; + var IpaConfigs ipa_configs := ipa_build_configs(asps); + + f_init_ipa(ipa_configs := ipa_configs); + f_listen_ipa(0); + f_sleep(1.0); + f_vty_cs7_ipa_asp_cmd(ipa_configs[0], "shutdown"); + log("ASP should now be DOWN") + as_IPA_wait_tcp_conn_closed(0); + f_clear_ipa(); + + /* Wait for a while to make sure ASP doesn't reconnect to us: */ + f_init_ipa(ipa_configs := ipa_configs); + f_start_ipa_server(0); + f_exp_no_ipa_conn(0, to_val := 10.0); + f_clear_ipa(); + + /* Now let the ASP be active again, it should reconnect to us: */ + f_vty_cs7_ipa_asp_cmd(ipa_configs[0], "no shutdown"); + log("Waiting for client ASP to reconnect to us"); + f_init_ipa(ipa_configs := ipa_configs); + f_listen_ipa(0); + setverdict(pass); +} + testcase TC_beat() runs on IPA_CT { var Misc_Helpers.ro_charstring asps := { "ipa-asp-override-sender" }; var IpaConfigs ipa_configs := ipa_build_configs(asps); @@ -775,6 +879,9 @@ execute( TC_unknown_client_dynamic_combinedlset_loadshare() ); execute( TC_inaccessible_sp() );
+ execute( TC_ipa_tcp_srv_adm_shutdown() ); + execute( TC_ipa_tcp_cli_adm_shutdown() ); + execute( TC_beat() ); execute( TC_beat_timeout() ); execute( TC_clnt_beat_timeout() ); diff --git a/stp/expected-results.xml b/stp/expected-results.xml index 44f5ced..2dfe5b1 100644 --- a/stp/expected-results.xml +++ b/stp/expected-results.xml @@ -66,6 +66,8 @@ <testcase classname='STP_Tests_IPA' name='TC_combinedlset_loadshare' time='MASKED'/> <testcase classname='STP_Tests_IPA' name='TC_unknown_client_dynamic_combinedlset_loadshare' time='MASKED'/> <testcase classname='STP_Tests_IPA' name='TC_inaccessible_sp' time='MASKED'/> + <testcase classname='STP_Tests_IPA' name='TC_ipa_tcp_srv_adm_shutdown' time='MASKED'/> + <testcase classname='STP_Tests_IPA' name='TC_ipa_tcp_cli_adm_shutdown' 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' name='TC_clnt_beat_timeout' time='MASKED'/>