pespin has uploaded this change for review. ( 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, 104 insertions(+), 6 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/20/42520/1
diff --git a/stp/STP_Tests_IPA.ttcn b/stp/STP_Tests_IPA.ttcn index 0a5b56c..3184b48 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,30 @@ } }
+friend 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) { + //if (not g_ipa_configs[i].is_server) { + 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,28 +227,35 @@ } }
-friend function f_listen_ipa(integer idx) runs on IPA_CT { +friend function f_listen_ipa(integer idx, boolean exp_conn := true, float to_val := 10.0) runs on IPA_CT { vc_IPA[idx].start(IPA_Emulation.main_server(mp_local_ipa_ip, g_ipa_configs[idx].local_port));
/* 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)) { + [exp_conn and st == 0] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_UP)) { st := 1; repeat; } - [st == 1] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_RESP)) { + [exp_conn and st == 1] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_RESP)) { st := 2; repeat; } - [st == 2] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_ACK)) { + [exp_conn and st == 2] IPA_CTRL[idx].receive(tr_ASP_IPA_EV(ASP_IPA_EVENT_ID_ACK)) { setverdict(pass); } - [] T.timeout { + [exp_conn] T.timeout { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("No connection to IPA[", idx, "] Port")); } + [not exp_conn] 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")); + } + [not exp_conn] T.timeout { + setverdict(pass); + } } }
@@ -681,6 +719,61 @@ } }
+/* 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_listen_ipa(0, exp_conn := false, 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 +868,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'/>