aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2023-09-19 14:39:34 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2023-09-20 19:37:26 +0200
commit0c613abe7bd6ffcadb6478e4245da7dedf09de61 (patch)
tree569cfd09577f95c339044c27338e77b970f09c7f
parent43799923231c7a7c7a0df0313a9912b9f92fcd59 (diff)
sccp: Introduce test TC_process_rx_ludt
-rw-r--r--library/SCCP_Templates.ttcn46
-rw-r--r--sccp/SCCP_Tests_RAW.ttcn26
2 files changed, 72 insertions, 0 deletions
diff --git a/library/SCCP_Templates.ttcn b/library/SCCP_Templates.ttcn
index 74f1a206..a87ef5cf 100644
--- a/library/SCCP_Templates.ttcn
+++ b/library/SCCP_Templates.ttcn
@@ -217,6 +217,52 @@ template PDU_SCCP tr_SCCP_XUDT(template (present) SCCP_PAR_Address calling, temp
}
}
+template (value) PDU_SCCP ts_SCCP_LUDT(SCCP_PAR_Address calling, SCCP_PAR_Address called,
+ template (value) octetstring data,
+ template (value) BIT4 msg_hdl := '0000'B,
+ template (value) integer hop_ctr := 16) := {
+ longudata := {
+ messageType := ludt,
+ protClass := {'0000'B, msg_hdl},
+ hopCounter := hop_ctr,
+ pointer1 := 0, /* overwritten */
+ pointer2 := 0, /* overwritten */
+ pointer3 := 0, /* overwritten */
+ pointer4 := 0, /* overwritten */
+ calledPAddress := ConvertASPAddressToEncodedAddress_itu(called),
+ callingPAddress := ConvertASPAddressToEncodedAddress_itu(calling),
+ longData := {
+ paramLength := 0,
+ data := data
+ },
+ optionalPart := omit,
+ eop := omit
+ }
+}
+
+template PDU_SCCP tr_SCCP_LUDT(template (present) SCCP_PAR_Address calling, template (present) SCCP_PAR_Address called,
+ template octetstring data := ?,
+ template BIT4 msg_hdl := '0000'B,
+ template integer hop_ctr := ?) := {
+ longudata := {
+ messageType := ludt,
+ protClass := {'0000'B, msg_hdl},
+ hopCounter := hop_ctr,
+ pointer1 := ?,
+ pointer2 := ?,
+ pointer3 := ?,
+ pointer4 := ?,
+ calledPAddress := tr_Addr(called),
+ callingPAddress := tr_Addr(calling),
+ longData := {
+ paramLength := ?,
+ data := data
+ },
+ optionalPart := { segmentation:= omit, importance := * } ifpresent,
+ eop := { paramName:= con_SCCP_eop } ifpresent
+ }
+}
+
template PDU_SCCP tr_SCCP_IT(template (present) OCT3 source_lref := ?,
template (present) OCT3 dest_lref := ?) := {
diff --git a/sccp/SCCP_Tests_RAW.ttcn b/sccp/SCCP_Tests_RAW.ttcn
index 505deb60..1c81d98a 100644
--- a/sccp/SCCP_Tests_RAW.ttcn
+++ b/sccp/SCCP_Tests_RAW.ttcn
@@ -340,6 +340,31 @@ testcase TC_process_rx_xudt() runs on SCCP_Test_RAW_CT {
setverdict(pass);
}
+private function f_tx_ludt_exp(SCCP_PAR_Address calling, SCCP_PAR_Address called, octetstring data) runs on SCCP_Test_RAW_CT {
+ var template PDU_SCCP exp_rx;
+ f_send_sccp(ts_SCCP_LUDT(calling, called, data));
+ exp_rx := tr_SCCP_LUDT(called, calling, data);
+ f_exp_sccp(exp_rx);
+}
+
+/* Test if the IUT SCCP code processes a LUDT [treat it like UDT] and answers back. */
+testcase TC_process_rx_ludt() runs on SCCP_Test_RAW_CT {
+ var SCCP_PAR_Address calling, called;
+ var octetstring data := f_rnd_octstring(1000);
+
+ f_init_raw(mp_sccp_cfg[0]);
+ f_sleep(1.0);
+
+ called := valueof(ts_SccpAddr_PC_SSN(mp_sccp_cfg[0].peer_pc, mp_sccp_cfg[0].peer_ssn,
+ mp_sccp_cfg[0].sio, mp_sccp_cfg[0].sccp_service_type));
+ calling := valueof(ts_SccpAddr_PC_SSN(mp_sccp_cfg[0].own_pc, mp_sccp_cfg[0].own_ssn,
+ mp_sccp_cfg[0].sio, mp_sccp_cfg[0].sccp_service_type));
+
+ /* Make sure an LUDT is echoed back just like an UDT */
+ f_tx_ludt_exp(calling, called, data);
+ setverdict(pass);
+}
+
function f_scmg_xceive(SCCP_PAR_Address calling, SCCP_PAR_Address called,
template (value) PDU_SCMG_message tx,
template (omit) PDU_SCMG_message rx_exp,
@@ -464,6 +489,7 @@ control {
execute( TC_tiar_timeout() );
execute( TC_it_avoids_tiar() );
execute( TC_process_rx_xudt() );
+ execute( TC_process_rx_ludt() );
execute( TC_scmg_sst_ssn1() );
execute( TC_scmg_sst_ssn_valid() );