pespin has uploaded this change for review.
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'/>
To view, visit change 42520. To unsubscribe, or for help writing mail filters, visit settings.