pespin submitted this change.

View Change

Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve laforge: Looks good to me, approved
stp: Handle N-PCSTATE.ind in STP_Tests_TCAP.ttcn

Make sure none of the peers we want to talk to is explicitly announced
as unavailable before starting the test.

Related: OS#6907
Change-Id: Ie1beb2cd69ce1847f3b3bd9917b42a2acaef57c8
---
M library/tcap/TCAP_CodecPort.ttcn
M stp/STP_Tests_TCAP.ttcn
2 files changed, 69 insertions(+), 5 deletions(-)

diff --git a/library/tcap/TCAP_CodecPort.ttcn b/library/tcap/TCAP_CodecPort.ttcn
index 5f17bc1..a9bdcc5 100644
--- a/library/tcap/TCAP_CodecPort.ttcn
+++ b/library/tcap/TCAP_CodecPort.ttcn
@@ -403,7 +403,7 @@
ASP_SCCP_N_RESET_ind -> ASP_SCCP_N_RESET_ind: simple;
ASP_SCCP_N_RESET_cfm -> ASP_SCCP_N_RESET_cfm: simple;
ASP_SCCP_N_STATE_ind -> ASP_SCCP_N_STATE_ind: simple;
- ASP_SCCP_N_PCSTATE_ind -> -: discard)"
+ ASP_SCCP_N_PCSTATE_ind -> ASP_SCCP_N_PCSTATE_ind: simple)"
}


diff --git a/stp/STP_Tests_TCAP.ttcn b/stp/STP_Tests_TCAP.ttcn
index 3341de9..fe29950 100644
--- a/stp/STP_Tests_TCAP.ttcn
+++ b/stp/STP_Tests_TCAP.ttcn
@@ -94,6 +94,73 @@
return tcap_configs;
}

+private function f_get_peer_pc_list() runs on TCAP_CT return Osmocom_Types.ro_integer
+{
+ var Osmocom_Types.ro_integer peer_pc_list := {};
+
+ for (var integer i := 0; i < lengthof(g_tcap); i := i + 1) {
+ ro_integer_add_unique(peer_pc_list, g_tcap[i].sccp_pars.dpc);
+ }
+ return peer_pc_list;
+}
+
+/* Wait until none of the peer PCs is explicitly unavailable */
+private function f_wait_peers_available(float timeout_sec := 3.0)
+runs on TCAP_CT
+{
+ timer T;
+ var ASP_SCCP_N_PCSTATE_ind n_pcstate_ind;
+ var Osmocom_Types.ro_integer peer_pc_list := f_get_peer_pc_list();
+ var Osmocom_Types.ro_integer peer_st_list := {}; /* 1: available, 0: unknown, -1: unavailable */
+
+ /* Initialize state list item to "unknown": */
+ for (var integer i := 0; i < lengthof(peer_pc_list); i := i + 1) {
+ peer_st_list := peer_st_list & { 0 };
+ }
+
+ log("Waiting for SCCP peer_pc_list=", peer_pc_list, " to become available");
+ T.start(timeout_sec);
+
+ alt {
+ [] any from SCCP_TCAP.receive(t_ASP_N_PCSTATE_ind(?, ?, *, *)) -> value n_pcstate_ind {
+ var integer aff_pc := bit2int(n_pcstate_ind.affectedSP);
+ var integer idx := ro_integer_get_first_pos(peer_pc_list, aff_pc);
+ if (idx < 0) {
+ log("Waiting for SCCP peer_pc_list=", peer_pc_list, ": Rx N-PCSTATE.ind for another peer PC=", aff_pc, ", ",n_pcstate_ind);
+ repeat;
+ }
+ if (n_pcstate_ind.spStatus == SCCP_PAR_SP_Status_accessible and
+ n_pcstate_ind.remSCCPStatus == SCCP_PAR_Remote_SCCP_Status_available) {
+ log("SCCP peer PC=", aff_pc," is now available");
+ peer_st_list[idx] := 1; /* available */
+ for (var integer i := 0; i < lengthof(peer_st_list); i := i + 1) {
+ if (peer_st_list[i] != 1) {
+ log("Keep waiting for SCCP peer_pc_list=", peer_pc_list, ", peer_st_list=", peer_st_list);
+ repeat;
+ }
+ }
+ /* All peers are explicitly available, we are done */
+ T.stop;
+ break;
+ }
+ peer_st_list[idx] := -1; /* unavailable */
+ repeat;
+ }
+ [] any from SCCP_TCAP.receive {
+ log("Waiting for SCCP peer_pc_list=", peer_pc_list, ", peer_st_list=", peer_st_list, ": Discarding message");
+ repeat;
+ }
+ [] T.timeout {
+ if (ro_integer_contains(peer_st_list, -1)) {
+ /* explicitly unavailable:*/
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ log2str("Timeout waiting for SCCP peer_pc_list=", peer_pc_list, ", peer_st_list=", peer_st_list));
+ }
+ /* Done, assume PCs for which we didn't receive an explicit "unavailable" are actually available. */
+ }
+ }
+ log("Done waiting for SCCP peer_pc_list=", peer_pc_list, ", peer_st_list=", peer_st_list);
+}

private function f_init_tcap(TCAP_CT_Configurations tcap_configs) runs on TCAP_CT {
f_init_common();
@@ -114,10 +181,7 @@
f_sccp_adapter_start(g_tcap[i]);
}

- /* M3UA Emulation doesn't yet signal events up the stack, so it's
- impossible to know exactly when the ASP becomes active. Hence, wait for
- a while here to do ASPUP+ASPAC procedures: */
- f_sleep(3.0);
+ f_wait_peers_available();
}

private function f_asp_tx_ipa_ext_tcap_routing(template (value) IPA_EXT_TCAP_ROUTING_Message send_msg,

To view, visit change 41963. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ie1beb2cd69ce1847f3b3bd9917b42a2acaef57c8
Gerrit-Change-Number: 41963
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>