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