Change in osmo-ttcn3-hacks[master]: PCU_Tests: add testcase TC_rim_ran_info_req_single_rep and _no_si

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

dexter gerrit-no-reply at lists.osmocom.org
Fri Jan 22 00:03:41 UTC 2021


dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22369 )


Change subject: PCU_Tests: add testcase TC_rim_ran_info_req_single_rep and _no_si
......................................................................

PCU_Tests: add testcase TC_rim_ran_info_req_single_rep and _no_si

Perform a full RAN information request (single report) against the PCU
and check the results. Also test what happens when the request is issued
at a time where osmo-bts has no system information available.

Depends: osmo-pcu Id72118120c14984d2fb1b918b41fac4868150d41
Depends: osmo-bts I1726c9e29cc59c499dfabbdaf63c0f1a09984764
Related: SYS#5103
Change-Id: I9054ab0e969c0fbfdc671c92d44cc61360959adc
---
M library/Osmocom_Gb_Types.ttcn
M library/PCUIF_Types.ttcn
M pcu/PCU_Tests.ttcn
M pcu/PCU_Tests_SNS.cfg
M pcu/PCU_Tests_SNSv6.cfg
5 files changed, 288 insertions(+), 9 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/69/22369/1

diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 9065097..5d753b2 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -2493,7 +2493,14 @@
 		 },
 		 rIMApplicationIdentity := app_id
 	}
-
+	template RIM_Application_Identity tr_RIM_Application_Identity(template OCT1 app_id := ?) := {
+		 iEI := '4B'O,
+		 ext := '1'B,
+		 lengthIndicator := {
+			length1 := 1
+		 },
+		 rIMApplicationIdentity := app_id
+	}
 
 	/* 3GPP TS 48.018 11.3.62 */
 	template (value) RIM_Sequence_Number ts_RIM_Sequence_Number(integer seq) := {
@@ -2504,6 +2511,20 @@
 		 },
 		 rIMSequenceNumber := int2oct(seq, 4)
 	}
+	function tr_RIM_Sequence_Number(template integer seq := ?) return template RIM_Sequence_Number {
+		 var template RIM_Sequence_Number ret;
+		 ret.iEI := '4C'O;
+		 ret.ext := '1'B;
+		 ret.lengthIndicator := { length1 := 4 };
+		 if (istemplatekind(seq, "*")) {
+			ret.rIMSequenceNumber := *;
+		 } else if (istemplatekind(seq, "?")) {
+			ret.rIMSequenceNumber := ?;
+		 } else {
+			ret.rIMSequenceNumber := int2oct(valueof(seq), 4);
+		 }
+		 return ret;
+	}
 
 	/* 3GPP TS 48.018 11.3.62a.1 */
 	template (value) RAN_Information_Request_RIM_Container
@@ -2567,10 +2588,34 @@
 		 applContainer_or_ApplErrContainer := app_cont_or_app_err,
 		 sON_Transfer_Application_Identity := son_app_id
 	}
+	template RAN_Information_RIM_Container
+	tr_RAN_Information_RIM_Container(template RIM_Application_Identity app_id := ?,
+					 template RIM_Sequence_Number seq := ?,
+					 template RIM_PDU_Indications ind := ?,
+					 template RIM_Protocol_Version_Number ver := omit,
+					 template ApplContainer_or_ApplErrContainer app_cont_or_app_err := omit,
+					 template SON_Transfer_Application_Identity_TLV son_app_id := omit) := {
+
+		 iEI := '58'O,
+		 ext := '1'B,
+		 lengthIndicator := {
+			length1 := ?
+		 },
+		 rIM_Application_Identity := app_id,
+		 rIM_Sequence_Number := seq,
+		 rIM_PDU_Indications := ind,
+		 rIM_Protocol_Version_Number := ver,
+		 applContainer_or_ApplErrContainer := app_cont_or_app_err,
+		 sON_Transfer_Application_Identity := son_app_id
+	}
 	template (value) ApplContainer_or_ApplErrContainer
 	tsu_ApplContainer_or_ApplErrContainer_NACC(template (value) ApplContainer_or_ApplErrContainer_NACC cont) := {
 		nacc := cont
 	}
+	template ApplContainer_or_ApplErrContainer
+	tru_ApplContainer_or_ApplErrContainer_NACC(template ApplContainer_or_ApplErrContainer_NACC cont := ?) := {
+		nacc := cont
+	}
 	template (value) ApplContainer_or_ApplErrContainer
 	tsu_ApplContainer_or_ApplErrContainer_SI3(template (value) ApplContainer_or_ApplErrContainer_SI3 cont) := {
 		si3 := cont
@@ -2583,6 +2628,10 @@
 	tsu_ApplContainer_NACC(template (value) BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
 		application_Container := ts_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
 	}
+	template ApplContainer_or_ApplErrContainer_NACC
+	tru_ApplContainer_NACC(template BssgpCellId cid := ?, template boolean psi_type := ?, template integer si_psi_num := ?, template octetstring si_psi := ?) := {
+		application_Container := tr_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
+	}
 	template (value) ApplContainer_or_ApplErrContainer_NACC
 	tsu_ApplErrContainer_NACC(template (value) BssgpCellId cid,
 				  integer cause,
@@ -2744,6 +2793,31 @@
 		 number_of_SI_PSI := int2bit(si_psi_num, 7),
 		 sI_PSI := si_psi
 	}
+	function tr_RAN_Information_Application_Container_NACC(template BssgpCellId cid := ?, template boolean psi_type := ?,
+							       template integer si_psi_num := ?, template octetstring si_psi := ?)
+							       return template RAN_Information_Application_Container_NACC {
+		 var template RAN_Information_Application_Container_NACC ret;
+		 ret.iEI := '4E'O;
+		 ret.ext := '1'B;
+		 ret.lengthIndicator := { length1 := ? };
+		 ret.reporting_Cell_Identifier := t_Cell_Identifier_V(cid);
+		 if (istemplatekind(psi_type, "*")) {
+			ret.typeBit := *;
+		 } else if (istemplatekind(psi_type, "?")) {
+			ret.typeBit := ?;
+		 } else {
+			ret.typeBit := bool2bit(valueof(psi_type));
+		 }
+		 if (istemplatekind(si_psi_num, "*")) {
+			ret.number_of_SI_PSI := *;
+		 } else if (istemplatekind(si_psi_num, "?")) {
+			ret.number_of_SI_PSI := ?;
+		 } else {
+			ret.number_of_SI_PSI := int2bit(valueof(si_psi_num), 7);
+		 }
+		 ret.sI_PSI := si_psi;
+		 return ret;
+	}
 
 	/* 3GPP TS 48.018 11.3.63.2.2 */
 	template (value) RAN_Information_Application_Container_SI3
@@ -2981,6 +3055,28 @@
 		 pDU_Type_Extension := type_ext,
 		 reserved := '0000'B
 	}
+	function tr_RIM_PDU_Indications(template boolean ack := ?, template BIT3 type_ext := ?) return template RIM_PDU_Indications {
+		 var template RIM_PDU_Indications ret;
+		 ret.iEI := '4F'O;
+		 ret.ext := '1'B;
+		 ret.lengthIndicator := { length1 := 1 };
+		 if (istemplatekind(ack, "*")) {
+			ret.ack := *;
+		 } else if (istemplatekind(ack, "?")) {
+			ret.ack := ?;
+		 } else {
+			ret.ack := bool2bit(valueof(ack));
+		 }
+		 if (istemplatekind(type_ext, "*")) {
+			ret.pDU_Type_Extension := *;
+		 } else if (istemplatekind(type_ext, "?")) {
+			ret.pDU_Type_Extension := ?;
+		 } else {
+			ret.pDU_Type_Extension := valueof(type_ext);
+		 }
+		 ret.reserved := '0000'B;
+		 return ret;
+	}
 
 	/* 3GPP TS 48.018 11.3.67 */
 	template (value) RIM_Protocol_Version_Number ts_RIM_Protocol_Version_Number(integer ver) := {
@@ -2991,6 +3087,20 @@
 		 },
 		 rIMProtocolVersionNumber := int2oct(ver, 1)
 	}
+	function tr_RIM_Protocol_Version_Number(template integer ver := ?) return template RIM_Protocol_Version_Number {
+		 var template RIM_Protocol_Version_Number ret;
+		 ret.iEI := '55'O;
+		 ret.ext := '1'B;
+		 ret.lengthIndicator := { length1 := 1 };
+		 if (istemplatekind(ver, "*")) {
+			ret.rIMProtocolVersionNumber := *;
+		 } else if (istemplatekind(ver, "?")) {
+			ret.rIMProtocolVersionNumber := ?;
+		 } else {
+			ret.rIMProtocolVersionNumber := int2oct(valueof(ver), 1);
+		 }
+		 return ret;
+	}
 
 	/* 3GPP TS 48.018 11.3.70 */
 	const HEX1 RIM_ADDR_GERAN_CELL_ID := '0'H;
diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn
index d6e0867..6c1ec32 100644
--- a/library/PCUIF_Types.ttcn
+++ b/library/PCUIF_Types.ttcn
@@ -215,12 +215,19 @@
 	record length(2) of uint16_t	nsvci,
 	record length(2) of uint16_t	local_port,
 	record length(2) of uint16_t	remote_port,
-	PCUIF_RemoteAddr		remote_addr
+	PCUIF_RemoteAddr		remote_addr,
+
+	record length(23) of uint8_t si1,
+	uint8_t		si1_is_set,
+	record length(23) of uint8_t si3,
+	uint8_t		si3_is_set,
+	record length(23) of uint8_t si13,
+	uint8_t		si13_is_set
 } with {
-	/* NOTE: TITAN is not smart enough to handle 'version < 10' and 'version > 9',
+	/* NOTE: TITAN is not smart enough to handle 'version < 11' and 'version > 10',
 	 * so we cannot support more than two versions at the same time here. Sigh. */
-	variant (trx) "CROSSTAG(v09, version = 9; v10, version = 10)"
-	variant (remote_addr) "CROSSTAG(v09, version = 9; v10, version = 10)"
+	variant (trx) "CROSSTAG(v09, version = 10; v10, version = 11)"
+	variant (remote_addr) "CROSSTAG(v09, version = 10; v10, version = 11)"
 };
 
 type union PCUIF_RemoteAddr {
@@ -908,7 +915,13 @@
 			nsvci := ?,
 			local_port := ?,
 			remote_port := ?,
-			remote_addr := ?
+			remote_addr := ?,
+			si1 := ?,
+			si1_is_set := ?,
+			si3 := ?,
+			si3_is_set := ?,
+			si13 := ?,
+			si13_is_set := ?
 		}
 	}
 }
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 13b33b2..325197c 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -102,7 +102,13 @@
 	local_port := { mp_nsconfig.nsvc[0].provider.ip.remote_udp_port, 0 },
 	remote_port := { mp_nsconfig.nsvc[0].provider.ip.local_udp_port, 0 },
 	remote_addr := f_PCUIF_ver_INFO_RemoteAddr(
-		f_PCUIF_AF2addr_type(mp_nsconfig.nsvc[0].provider.ip.address_family), mp_nsconfig.nsvc[0].provider.ip.local_ip)
+		f_PCUIF_AF2addr_type(mp_nsconfig.nsvc[0].provider.ip.address_family), mp_nsconfig.nsvc[0].provider.ip.local_ip),
+	si1 := { 85, 6, 25, 143, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 43 },
+	si1_is_set := 1,
+	si3 := { 73, 6, 27, 117, 48, 0, 241, 16, 35, 110, 201, 3, 60, 39, 71, 64, 121, 0, 0, 60, 11, 43, 43 },
+	si3_is_set := 1,
+	si13 := { 1, 6, 0, 144, 0, 24, 90, 111, 201, 224, 132, 16, 171, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43 },
+	si13_is_set := 1
 }
 
 type record lqual_range {
@@ -3566,6 +3572,153 @@
 	f_shutdown(__BFILE__, __LINE__, final := true);
 }
 
+/* Send a RIM RAN info request to the PCU and verify the response, we expect
+ * getting the system information back which we have transfered to the PCU via
+ * PCUIF on startup. */
+testcase TC_rim_ran_info_req_single_rep() runs on RAW_PCU_Test_CT {
+	const BssgpBvci bvci := mp_gb_cfg.bvc[0].bvci;
+	var PCUIF_info_ind info_ind;
+	timer T := 2.0;
+
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename());
+
+	/* Establish BSSGP connection to the PCU */
+	f_bssgp_establish();
+
+	var template RIM_Routing_Address dst_addr;
+	var template RIM_Routing_Address src_addr;
+	var template RAN_Information_Request_RIM_Container req_cont;
+	var template PDU_BSSGP bssgp_rim_pdu;
+	var template PDU_BSSGP bssgp_rim_pdu_expect;
+	var template RAN_Information_RIM_Container rim_cont_expect;
+
+	var BssgpCellId src_cid := {ra_id := { lai := { mcc_mnc := '262F42'H, lac := 12345}, rac := 0 }, cell_id := 20962 };
+	src_addr := t_RIM_Routing_Address_cid(src_cid);
+	dst_addr := t_RIM_Routing_Address_cid(mp_gb_cfg.bvc[0].cell_id);
+
+	var octetstring si1_expect := '198fb100000000000000000000000000007900002b'O;
+	var octetstring si3_expect := '1b753000f110236ec9033c2747407900003c0b2b2b'O;
+	var octetstring si13_expect := '009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O;
+	var octetstring si_expect := si1_expect & si3_expect & si13_expect;
+
+	req_cont := ts_RAN_Information_Request_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),
+							     ts_RIM_Sequence_Number(1),
+							     ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),
+							     ts_RIM_Protocol_Version_Number(1),
+							     tsu_RAN_Information_Request_Application_Container_NACC(mp_gb_cfg.bvc[0].cell_id),
+							     omit);
+	bssgp_rim_pdu := ts_RAN_INFORMATION_REQUEST(ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),
+						    ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr),
+						    req_cont);
+
+	rim_cont_expect := tr_RAN_Information_RIM_Container(tr_RIM_Application_Identity(RIM_APP_ID_NACC),
+							    tr_RIM_Sequence_Number(1),
+							    tr_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),
+							    tr_RIM_Protocol_Version_Number(1),
+							    tru_ApplContainer_or_ApplErrContainer_NACC(tru_ApplContainer_NACC(mp_gb_cfg.bvc[0].cell_id, false, 3, si_expect)),
+							    omit);
+
+	bssgp_rim_pdu_expect := tr_PDU_BSSGP_RAN_INFORMATION(tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr),
+							     tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),
+							     rim_cont_expect);
+	RIM.send(bssgp_rim_pdu);
+	T.start;
+	alt {
+		[] RIM.receive(bssgp_rim_pdu_expect) { }
+		[] RIM.receive {
+			setverdict(fail, "Unexpected BSSGP RIM PDU received");
+		}
+		[] T.timeout {
+			setverdict(fail, "No BSSGP RIM PDU received");
+			mtc.stop;
+		}
+	}
+
+	/* FIXME: work around a race condition between PCUIF and BSSGP */
+	f_sleep(0.2); /* i.e. give the IUT some time to process everything */
+
+	f_shutdown(__BFILE__, __LINE__, final := true);
+}
+
+/* Same as above, but in this case we simulate the rare case in which the PCU
+ * has no system information available. We expect getting a response back but
+ * with no system information inside. */
+testcase TC_rim_ran_info_req_single_rep_no_si() runs on RAW_PCU_Test_CT {
+	var template PCUIF_info_ind info_ind := ts_PCUIF_INFO_default;
+	var PCUIF_Message pcu_msg;
+	timer T := 2.0;
+
+	/* Initialize NS/BSSGP side */
+	f_init_bssgp();
+
+	/* Initialize the PCU interface abstraction */
+	f_init_raw(testcasename());
+
+	/* Establish BSSGP connection to the PCU */
+	f_bssgp_establish();
+
+	/* Invalidate the system information inside the PCU */
+	info_ind.si1_is_set := 0;
+	info_ind.si3_is_set := 0;
+	info_ind.si13_is_set := 0;
+	BTS.send(ts_PCUIF_INFO_IND(0, info_ind));
+	f_pcuif_rx_data_req(pcu_msg);
+
+	var template RIM_Routing_Address dst_addr;
+	var template RIM_Routing_Address src_addr;
+	var template RAN_Information_Request_RIM_Container req_cont;
+	var template PDU_BSSGP bssgp_rim_pdu;
+	var template PDU_BSSGP bssgp_rim_pdu_expect;
+	var template RAN_Information_RIM_Container rim_cont_expect;
+
+	var BssgpCellId src_cid := {ra_id := { lai := { mcc_mnc := '262F42'H, lac := 12345}, rac := 0 }, cell_id := 20962 };
+	src_addr := t_RIM_Routing_Address_cid(src_cid);
+	dst_addr := t_RIM_Routing_Address_cid(mp_gb_cfg.bvc[0].cell_id);
+
+	req_cont := ts_RAN_Information_Request_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC),
+							     ts_RIM_Sequence_Number(1),
+							     ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),
+							     ts_RIM_Protocol_Version_Number(1),
+							     tsu_RAN_Information_Request_Application_Container_NACC(mp_gb_cfg.bvc[0].cell_id),
+							     omit);
+	bssgp_rim_pdu := ts_RAN_INFORMATION_REQUEST(ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),
+						    ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr),
+						    req_cont);
+
+
+	rim_cont_expect := tr_RAN_Information_RIM_Container(tr_RIM_Application_Identity(RIM_APP_ID_NACC),
+							    tr_RIM_Sequence_Number(1),
+							    tr_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP),
+							    tr_RIM_Protocol_Version_Number(1),
+							    tru_ApplContainer_or_ApplErrContainer_NACC(tru_ApplContainer_NACC(mp_gb_cfg.bvc[0].cell_id, false, 0, ''O)),
+							    omit);
+
+	bssgp_rim_pdu_expect := tr_PDU_BSSGP_RAN_INFORMATION(tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr),
+							     tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr),
+							     rim_cont_expect);
+	RIM.send(bssgp_rim_pdu);
+	T.start;
+	alt {
+		[] RIM.receive(bssgp_rim_pdu_expect) { }
+		[] RIM.receive {
+			setverdict(fail, "Unexpected BSSGP RIM PDU received");
+		}
+		[] T.timeout {
+			setverdict(fail, "No BSSGP RIM PDU received");
+			mtc.stop;
+		}
+	}
+
+	/* FIXME: work around a race condition between PCUIF and BSSGP */
+	f_sleep(0.2); /* i.e. give the IUT some time to process everything */
+
+	f_shutdown(__BFILE__, __LINE__, final := true);
+}
+
 control {
 	execute( TC_pcuif_suspend() );
 	execute( TC_pcuif_suspend_active_tbf() );
@@ -3639,6 +3792,9 @@
 	execute( TC_multiplex_dl_gprs_egprs() );
 
 	execute( TC_pcuif_info_ind_subsequent() );
+
+	execute( TC_rim_ran_info_req_single_rep() );
+	execute( TC_rim_ran_info_req_single_rep_no_si() );
 }
 
 }
diff --git a/pcu/PCU_Tests_SNS.cfg b/pcu/PCU_Tests_SNS.cfg
index ab589c5..334a6eb 100644
--- a/pcu/PCU_Tests_SNS.cfg
+++ b/pcu/PCU_Tests_SNS.cfg
@@ -48,7 +48,7 @@
 		}
 	}
 }
-PCUIF_Types.mp_pcuif_version := 10
+PCUIF_Types.mp_pcuif_version := 11
 
 [TESTPORT_PARAMETERS]
 
diff --git a/pcu/PCU_Tests_SNSv6.cfg b/pcu/PCU_Tests_SNSv6.cfg
index cae9a75..707db4f 100644
--- a/pcu/PCU_Tests_SNSv6.cfg
+++ b/pcu/PCU_Tests_SNSv6.cfg
@@ -24,7 +24,7 @@
 		}
 	}
 }
-PCUIF_Types.mp_pcuif_version := 10
+PCUIF_Types.mp_pcuif_version := 11
 
 [TESTPORT_PARAMETERS]
 

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

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I9054ab0e969c0fbfdc671c92d44cc61360959adc
Gerrit-Change-Number: 22369
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <pmaier at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210122/c9c677c3/attachment.htm>


More information about the gerrit-log mailing list