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'/>

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42520?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ie30de6caa3e2b680aff9e50898e63f615b526500
Gerrit-Change-Number: 42520
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to