From 21d02e5e6e9b2baa216f3e99a6bd1b49c2ba2341 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 23 Dec 2022 11:49:30 +0100 Subject: [PATCH 01/16] Dummy TP modules prepared --- test_purposes/Cx/TP_CX.tplan2 | 25 +++ test_purposes/Diameter_Common.tplan2 | 114 +++++++++++++ test_purposes/Gm/.gitkeep | 0 test_purposes/Gm/TP_GM.tplan2 | 22 +++ test_purposes/Gx/TP_GX.tplan2 | 25 +++ test_purposes/Ic/.gitkeep | 0 test_purposes/Ic/TP_IC.tplan2 | 27 +++ test_purposes/Isc/TP_ISC.tplan2 | 24 +++ test_purposes/Mw/TP_MW_IS.tplan2 | 24 +++ test_purposes/Mw/TP_MW_PS.tplan2 | 24 +++ test_purposes/Mw/TP_MW_SI.tplan2 | 24 +++ test_purposes/README.md | 1 + test_purposes/References.txt | 17 ++ test_purposes/Rtp/TP_Rtp.tplan2 | 26 +++ test_purposes/Rtp_Common.tplan2 | 76 +++++++++ test_purposes/Rx/TP_RX.tplan2 | 27 +++ test_purposes/S6a/TP_S6A.tplan2 | 26 +++ test_purposes/S9/TP_S9.tplan2 | 25 +++ test_purposes/Sh/TP_Sh.tplan2 | 27 +++ test_purposes/Sip_Common.tplan2 | 246 +++++++++++++++++++++++++++ 20 files changed, 780 insertions(+) create mode 100644 test_purposes/Cx/TP_CX.tplan2 create mode 100644 test_purposes/Diameter_Common.tplan2 create mode 100644 test_purposes/Gm/.gitkeep create mode 100644 test_purposes/Gm/TP_GM.tplan2 create mode 100644 test_purposes/Gx/TP_GX.tplan2 create mode 100644 test_purposes/Ic/.gitkeep create mode 100644 test_purposes/Ic/TP_IC.tplan2 create mode 100644 test_purposes/Isc/TP_ISC.tplan2 create mode 100644 test_purposes/Mw/TP_MW_IS.tplan2 create mode 100644 test_purposes/Mw/TP_MW_PS.tplan2 create mode 100644 test_purposes/Mw/TP_MW_SI.tplan2 create mode 100644 test_purposes/README.md create mode 100644 test_purposes/References.txt create mode 100644 test_purposes/Rtp/TP_Rtp.tplan2 create mode 100644 test_purposes/Rtp_Common.tplan2 create mode 100644 test_purposes/Rx/TP_RX.tplan2 create mode 100644 test_purposes/S6a/TP_S6A.tplan2 create mode 100644 test_purposes/S9/TP_S9.tplan2 create mode 100644 test_purposes/Sh/TP_Sh.tplan2 create mode 100644 test_purposes/Sip_Common.tplan2 diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 new file mode 100644 index 0000000..9efe5cc --- /dev/null +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -0,0 +1,25 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_CX { + + import all from Sip_Common; + import all from Diameter_Common; + + + +} // End of Package TP_CX + diff --git a/test_purposes/Diameter_Common.tplan2 b/test_purposes/Diameter_Common.tplan2 new file mode 100644 index 0000000..a87b9f2 --- /dev/null +++ b/test_purposes/Diameter_Common.tplan2 @@ -0,0 +1,114 @@ +/* ETSI Software License +* As long as the here under conditions are respected, non-exclusive permission is hereby granted, +* free of charge, to use, reproduce and modify this software source code, under the following conditions: +* This source code is provided AS IS with no warranties, express or implied, including but not limited to, +* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement +* of intellectual property rights. +* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without +* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary +* loss) arising out of or related to the use of or inability to use the source code. +* This permission is granted to facilitate the implementation of the related ETSI standard, provided that +* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions +* as the present permission. +* This permission does not apply to any documentation associated with this source code for which ETSI keeps +* all rights reserved. +* The present ETSI Source Code license shall be included in all copies of whole or part of this source code +* and shall not imply any sub-license right. +* (c) ETSI 2019-2020 +*/ + + + Package Diameter_Common { + Domain { + pics: + - NONE + ; + entities: + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_HSS_A + - IMS_HSS_B + ; + events: + - receives + - sends + - triggers + - detachment + - invokes + - create_session_request + - delete_session_request + - termination_SIP_signalling_session + ; + } // End of Domain section + + Data { + type DiameterMessage; + + // CX DIAMETER Requests/Answers + DiameterMessage UAA; + DiameterMessage UAR; + DiameterMessage MAA; + DiameterMessage MAR; + DiameterMessage SAA; + DiameterMessage SAR; + // RX DIAMETER Requests/Answers + DiameterMessage AAA; + DiameterMessage AAR; + DiameterMessage STA; + DiameterMessage STR; + // GX DIAMETER Requests/Answers + DiameterMessage RAA; + DiameterMessage RAR; + DiameterMessage CCA; + DiameterMessage CCR; + // S6A DIAMETER Requests/Answers + DiameterMessage ULA; + DiameterMessage ULR; + DiameterMessage CLR; + DiameterMessage CLA; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts DiameterMessage; + Component Type DiameterComp with gate g of type defaultGT; + + Test Configuration CF_VxLTE_INT + containing + SUT component EPC_PGW_A of type DiameterComp + SUT component EPC_PCRF_A of type DiameterComp + SUT component S_CSCF_A of type DiameterComp + SUT component I_CSCF_A of type DiameterComp + SUT component P_CSCF_A of type DiameterComp + SUT component HSS_A of type DiameterComp + SUT component EPC_MME_A of type DiameterComp + SUT component IMS_AS_A of type DiameterComp + connection between EPC_MME_A.g and HSS_A.g + connection between EPC_PGW_A.g and EPC_PCRF_A.g + connection between EPC_PCRF_A.g and P_CSCF_A.g + connection between HSS_A.g and S_CSCF_A.g + connection between HSS_A.g and I_CSCF_A.g + connection between IMS_AS_A.g and HSS_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + SUT component EPC_PGW_B of type DiameterComp + SUT component EPC_PCRF_A of type DiameterComp + SUT component EPC_PCRF_B of type DiameterComp + SUT component P_CSCF_B of type DiameterComp + SUT component HSS_A of type DiameterComp + SUT component EPC_MME_B of type DiameterComp + connection between EPC_MME_B.g and HSS_A.g + connection between EPC_PGW_B.g and EPC_PCRF_B.g + connection between EPC_PCRF_A.g and EPC_PCRF_B.g + connection between EPC_PCRF_B.g and P_CSCF_B.g + ; + + } // End of Configuration section + +} // End of Package Diameter_Common + diff --git a/test_purposes/Gm/.gitkeep b/test_purposes/Gm/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 new file mode 100644 index 0000000..9abba73 --- /dev/null +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -0,0 +1,22 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* Gm interface at UE/P-CSCF */ +Package TP_GM { + + import all from Sip_Common; + +} // End of Package TP_GM + diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 new file mode 100644 index 0000000..fd65226 --- /dev/null +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -0,0 +1,25 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_GX { + + import all from Sip_Common; + import all from Diameter_Common; + + + +} // End of Package TP_GX + diff --git a/test_purposes/Ic/.gitkeep b/test_purposes/Ic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 new file mode 100644 index 0000000..6230279 --- /dev/null +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -0,0 +1,27 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +/* Gm interface at IBCF/IBCF*/ +Package TP_IC { + + import all from Sip_Common; + + + +} // End of Package TP_IC + + + diff --git a/test_purposes/Isc/TP_ISC.tplan2 b/test_purposes/Isc/TP_ISC.tplan2 new file mode 100644 index 0000000..5ea504e --- /dev/null +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -0,0 +1,24 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* Isc interface at S-CSCF<->AS */ +Package TP_ISC { + + import all from Sip_Common; + + + +} // End of Package TP_ISC + diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 new file mode 100644 index 0000000..7fab34c --- /dev/null +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -0,0 +1,24 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* Mw interface at I-CSCF/S-CSCF */ +Package TP_MW_IS { + + import all from Sip_Common; + + + +} // End of Package TP_MW_IS + diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 new file mode 100644 index 0000000..d52c990 --- /dev/null +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -0,0 +1,24 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used */ +Package TP_MW_PS { + + import all from Sip_Common; + + + +} // End of Package TP_MW_PS + diff --git a/test_purposes/Mw/TP_MW_SI.tplan2 b/test_purposes/Mw/TP_MW_SI.tplan2 new file mode 100644 index 0000000..cf33fbb --- /dev/null +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -0,0 +1,24 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* Mw interface at S-CSCF/IBCF */ +Package TP_MW_SI { + + import all from Sip_Common; + + + +} // End of Package TP_MW_SI + diff --git a/test_purposes/README.md b/test_purposes/README.md new file mode 100644 index 0000000..924aa0a --- /dev/null +++ b/test_purposes/README.md @@ -0,0 +1 @@ +This folder will contain the Test Purposes. They are defined in the TPLan2 language. \ No newline at end of file diff --git a/test_purposes/References.txt b/test_purposes/References.txt new file mode 100644 index 0000000..bc5d7e8 --- /dev/null +++ b/test_purposes/References.txt @@ -0,0 +1,17 @@ +[1] ETSI ES 203 119-4: "TDL: Structured Test Objective Specification (Extension)" +[2] ETSI TS 124 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3 (3GPP TS 24.229 Release 15)". +[3] ETSI TS 129 165: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Inter-IMS Network to Network Interface (NNI) (3GPP TS 29.165 Release 15)". +[4] ETSI TS 129 228: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia (IM) Subsystem Cx and Dx Interfaces; Signalling flows and message contents (3GPP TS 29.228 Release 15)". +[5] ETSI TS 129 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Cx and Dx interfaces based on the Diameter protocol; Protocol details (3GPP TS 29.229 Release 15)". +[6] ETSI TS 132 260: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Telecommunication management;Charging management;IP Multimedia Subsystem (IMS) charging (3GPP TS 32.260 Release 15)". +[7] ETSI TS 132 299: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Telecommunication management; Charging management; Diameter charging applications (3GPP TS 32.299 Release 15)". +[8] ETSI TS 129 214: "Universal Mobile Telecommunications System (UMTS); LTE; Policy and charging control over Rx reference point (3GPP TS 29.214 Release 15)". +[9] ETSI TS 129 212: "Universal Mobile Telecommunications System (UMTS); LTE; Policy and Charging Control (PCC); Reference points (3GPP TS 29.212 Release 15)". +[10] ETSI TS 129 272: "Universal Mobile Telecommunications System (UMTS); LTE; Evolved Packet System (EPS); Mobility Management Entity (MME) and Serving GPRS Support Node (SGSN) related interfaces based on Diameter protocol (3GPP TS 29.272 Release 15)". +[11] ETSI TS 129 215: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Policy and Charging Control (PCC) over S9 reference point; Stage 3 (3GPP TS 29.215 Release 15)". +[12] ETSI TS 129 328: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia (IM) Subsystem Sh interface; Signalling flows and message contents (3GPP TS 29.328 Release 15)". +[13] ETSI TS 129 329: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Sh interface based on the Diameter protocol; Protocol details (3GPP TS 29.329 Release 15)". +[14] ISO/IEC 9646-1: "Information technology -- Open Systems Interconnection -- Conformance testing methodology and framework -- Part 1: General concepts". +[15] ISO/IEC 9646-7: "Information technology -- Open Systems Interconnection -- Conformance testing methodology and framework -- Part 7: Implementation Conformance Statements". +[16] ETSI ETS 300 406: "Methods for testing and Specification (MTS); Protocol and profile conformance testing specifications; Standardization methodology". +[17] IETF RFC 3588: "Diameter Base Protocol". \ No newline at end of file diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 new file mode 100644 index 0000000..f56d54c --- /dev/null +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -0,0 +1,26 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_RTP { + + import all from Sip_Common; + //import all from Diameter_Common; + import all from Rtp_Common; + + + + +} // End of Package TP_RTP diff --git a/test_purposes/Rtp_Common.tplan2 b/test_purposes/Rtp_Common.tplan2 new file mode 100644 index 0000000..7da1861 --- /dev/null +++ b/test_purposes/Rtp_Common.tplan2 @@ -0,0 +1,76 @@ +/* ETSI Software License +* As long as the here under conditions are respected, non-exclusive permission is hereby granted, +* free of charge, to use, reproduce and modify this software source code, under the following conditions: +* This source code is provided AS IS with no warranties, express or implied, including but not limited to, +* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement +* of intellectual property rights. +* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without +* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary +* loss) arising out of or related to the use of or inability to use the source code. +* This permission is granted to facilitate the implementation of the related ETSI standard, provided that +* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions +* as the present permission. +* This permission does not apply to any documentation associated with this source code for which ETSI keeps +* all rights reserved. +* The present ETSI Source Code license shall be included in all copies of whole or part of this source code +* and shall not imply any sub-license right. +* (c) ETSI 2019-2020 +*/ + + + Package Rtp_Common { + Domain { + pics: + - NONE + ; + entities: + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_HSS_A + - IMS_HSS_B + ; + events: + - initial_network_attachment + - packets + - media + - filters + - data + - uses_correct_bearers + - service_data_flows + ; + } // End of Domain section + + Data { + type RtpMessage; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts RtpMessage; + Component Type RtpComp with gate g of type defaultGT; + + Test Configuration CF_VxLTE_INT + containing + Tester component EPC_PGW_A of type RtpComp + Tester component EPC_PCRF_A of type RtpComp + + SUT component IMS_A of type RtpComp + connection between EPC_PGW_A.g and EPC_PCRF_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + Tester component EPC_PCRF_A of type RtpComp + Tester component EPC_PCRF_B of type RtpComp + + SUT component IMS_A of type RtpComp + connection between EPC_PCRF_A.g and EPC_PCRF_A.g + ; + + } // End of Configuration section + +} // End of Package Diameter_Common + diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 new file mode 100644 index 0000000..f497e3e --- /dev/null +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -0,0 +1,27 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_RX { + + import all from Sip_Common; + import all from Diameter_Common; + + + + + +} // End of Package TP_RX + diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 new file mode 100644 index 0000000..be05cdb --- /dev/null +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -0,0 +1,26 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_S6A { + + import all from Sip_Common; + import all from Diameter_Common; + + + + +} // End of Package TP_S6A + diff --git a/test_purposes/S9/TP_S9.tplan2 b/test_purposes/S9/TP_S9.tplan2 new file mode 100644 index 0000000..c35e0b9 --- /dev/null +++ b/test_purposes/S9/TP_S9.tplan2 @@ -0,0 +1,25 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_S9 { + + import all from Sip_Common; + import all from Diameter_Common; + + + +} // End of Package TP_S9 + diff --git a/test_purposes/Sh/TP_Sh.tplan2 b/test_purposes/Sh/TP_Sh.tplan2 new file mode 100644 index 0000000..ecde968 --- /dev/null +++ b/test_purposes/Sh/TP_Sh.tplan2 @@ -0,0 +1,27 @@ +/* +Copyright (c) ETSI 2019. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + + +Package TP_Sh { + + import all from Sip_Common; + import all from Diameter_Common; + + + + + +} // End of Package TP_Sh + diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 new file mode 100644 index 0000000..292a71a --- /dev/null +++ b/test_purposes/Sip_Common.tplan2 @@ -0,0 +1,246 @@ +/* ETSI Software License +* As long as the here under conditions are respected, non-exclusive permission is hereby granted, +* free of charge, to use, reproduce and modify this software source code, under the following conditions: +* This source code is provided AS IS with no warranties, express or implied, including but not limited to, +* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement +* of intellectual property rights. +* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without +* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary +* loss) arising out of or related to the use of or inability to use the source code. +* This permission is granted to facilitate the implementation of the related ETSI standard, provided that +* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions +* as the present permission. +* This permission does not apply to any documentation associated with this source code for which ETSI keeps +* all rights reserved. +* The present ETSI Source Code license shall be included in all copies of whole or part of this source code +* and shall not imply any sub-license right. +* (c) ETSI 2019-2020 +*/ + + +Package Sip_Common { + Domain { + pics: + - NONE + - PICS_2 + - NOT_PICS_2 + ; + entities: + - UE_A + - UE_B + - NW_UE_A + - NW_UE_B + - Enum_DB + - IMS_A + - IMS_B + - EPC_A + - EPC_B + - EPC_PCRF_A + - EPC_PCRF_B + - EPC_PGW_A + - EPC_PGW_B + - EPC_MME_A + - EPC_MME_B + - IMS_P_CSCF_A + - IMS_I_CSCF_A + - IMS_S_CSCF_A + - IMS_IBCF_A + - IMS_AS_A + - IMS_HSS_A + - IMS_P_CSCF_B + - IMS_I_CSCF_B + - IMS_S_CSCF_B + - IMS_IBCF_B + - IMS_HSS_B + ; + events: + - receives + - sends + - forwards + // Initial conditions + - isTriggeredToStart + - isNotRegisteredTo + - hasAchievedFirstRegistration + - isRegisteredTo + - isNotAttachedTo + - isAttachedTo + - isNotConfiguredForTopologyHiding + - isConfiguredForTopologyHiding + - isExistingIn + - establishedSecurityRelation + - registeredIdentityTelURI + - registeredIdentitySipURI + - hasInitiatedDialogWith + - isConfiguredWithENUMentryForTelURI_E164NumberOf + - hasReceivedInitialRequestForDialog + - hasReceived200OkOnInitialRequestForDialogWith + - hasReceived180OnInitialRequest + - hasReceived200OkCancel + - hasReceivedTerminatedRequest + - registeredPublicIdsWithTelUriAndSipUri + - hasReceivedSubsequentOrTargetRefreshRequestInDialog + - previouslyEstablishedCallWith + - isRequestedToSend + - isRequestedToDeregisterUser + - isBusy + - isNoLongerAvailable + - isTriggeredToDetachUser + - isRequestedToDetachfromNetwork + - hasAchievedFirstREGISTER + - hasResponded486INVITE + - hasAchievedInitialINVITE + - hasAchievedINVITE + ; + } // End of Domain section + +// Const { +// PX_Stored_Domain_Uri, +// PX_Affected_IMPU, +// PX_Contact, +// PX_UE_A_SIP_URI, +// PX_UE_A_TEL_URI, +// PX_UE_A_CALLID, +// PX_UE_A_REALM, +// PX_UE_A_USERNAME, +// PX_UE_A_INVALID_USERNAME, +// PX_UE_A_VIA, +// PX_UE_A_AUTH_ALG, +// PX_OPERATOR_ID_A, +// PX_UE_B_SIP_URI, +// PX_UE_B_TEL_URI, +// PX_UE_B_USERNAME, +// PX_UE_B_INVALID_USERNAME, +// PX_UE_B_VIA, +// PX_UE_B_AUTH_ALG, +// PX_OPERATOR_ID_B, +// PX_P_CSCF_A_SIP_URI, +// PX_IMS_A_ICID, +// PX_IMS_A_ORIG_IOI, +// PX_S_CSCF_A_SIP_URI, +// PX_P_CSCF_A_SIP_URI, +// PX_IBCF_B_SIP_URI, +// PX_TO_BE_DEFINED +// ; +// } // End of Const section + + Data { + type SipMessage; + type EnumMessage; + + SipMessage REGISTER; + SipMessage SUBSCRIBE; + SipMessage INVITE; + SipMessage ACK; + SipMessage CANCEL; + SipMessage BYE; + // SIP Responses + SipMessage r_100_Trying; + SipMessage r_180_Ringing; + SipMessage r_200_Ok; + SipMessage r_2xx_Any; + SipMessage r_401_Unauthorized; + SipMessage r_403_Forbidden; + SipMessage r_404_NotFound; + SipMessage r_486_INVITE; + SipMessage r_4xx_Any; + } // End of Data section + + Configuration { + Interface Type defaultGT accepts SipMessage; + Interface Type enumGT accepts EnumMessage; + + Component Type SipComponent with gate g of type defaultGT; + Component Type SipEnumComponent with gate gSip of type defaultGT gate gEnum of type enumGT; + Component Type EnumDBComponent with gate gEnum of type enumGT; + + Test Configuration CF_VxLTE_INT + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + + Test Configuration CF_VxLTE_RMI + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VxLTE_RMI_A + containing + SUT component UE_B of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_B.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + ; + + Test Configuration CF_VxLTE_RMI_B + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + + Test Configuration CF_VxLTE_RMI_S8HR + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + ; + } // End of Configuration section + + //Type MSG (optional TCP of type CONTENT); + + //Type CONTENT; + //CONTENT tcp; + + //MSG MESSAGE; + + //Type MSG_SIZE; + + //Message_Body_Size MSG_SIZE; + +} // End of Package Sip_Common + -- GitLab From 0a246b99fd70f6be890d5365e1dadb84b623ab71 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Mon, 16 Jan 2023 12:15:53 +0100 Subject: [PATCH 02/16] q --- test_purposes/New Text Document.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test_purposes/New Text Document.txt diff --git a/test_purposes/New Text Document.txt b/test_purposes/New Text Document.txt new file mode 100644 index 0000000..e69de29 -- GitLab From c4f98b9ecce296c07a9c10266437b96b8ad536d1 Mon Sep 17 00:00:00 2001 From: pintar Date: Mon, 16 Jan 2023 13:56:10 +0100 Subject: [PATCH 03/16] Registration TP for gm interface --- test_purposes/Gm/TP_GM.tplan2 | 88 +++++++++++++++++++++++++++++++++ test_purposes/Sip_Common.tplan2 | 2 + 2 files changed, 90 insertions(+) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 9abba73..b271891 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -18,5 +18,93 @@ Package TP_GM { import all from Sip_Common; + + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_REGISTER_01 + + Test objective "Verify that the P-CSCF successfully processes initial emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isTriggeredToStartEmergencyCall + } + then { + the UE_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos" + ; + to the IMS_P_CSCF_A entity + and the UE_A entity receives an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + from the IMS_P_CSCF_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_REGISTER_02 + + Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) and emergency call shall continue without registration (Unsuccessful registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isTriggeredToStartEmergencyCall + } + then { + the UE_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos" + ; + to the IMS_P_CSCF_A entity + and the UE_A entity receives an 420_BadExtension containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + from the IMS_P_CSCF_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_REGISTER_02 + } // End of Package TP_GM diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 292a71a..054962c 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -59,11 +59,13 @@ Package Sip_Common { - forwards // Initial conditions - isTriggeredToStart + - isTriggeredToStartEmergencyCall - isNotRegisteredTo - hasAchievedFirstRegistration - isRegisteredTo - isNotAttachedTo - isAttachedTo + - isEmergencyAttachedTo - isNotConfiguredForTopologyHiding - isConfiguredForTopologyHiding - isExistingIn -- GitLab From ef0c5baa2bdd0032216cb016112fa4c8592c3b57 Mon Sep 17 00:00:00 2001 From: pintar Date: Tue, 17 Jan 2023 09:12:09 +0100 Subject: [PATCH 04/16] Registration TP for gm updated --- test_purposes/Gm/TP_GM.tplan2 | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index b271891..7e5ad88 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -27,7 +27,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes initial emergency registration (Successful)." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.2" + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.1" Config Id CF_VxLTE_INT @@ -41,23 +41,23 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isTriggeredToStartEmergencyCall - } - then { - the UE_A entity sends a REGISTER containing + the IMS_P_CSCF_A entity receives a REGISTER containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, Contact indicating value "sos" ; - to the IMS_P_CSCF_A entity - and the UE_A entity receives an 200_Ok containing + to the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA; - from the IMS_P_CSCF_A entity + Via indicating value PX_UE_A_VIA, + P_Associated_URI indicating value ListOfImplicitelyRegisteredPublicUserIdentities; + from the UE_A entity } } @@ -84,23 +84,22 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isTriggeredToStartEmergencyCall - } - then { - the UE_A entity sends a REGISTER containing + the IMS_P_CSCF_A entity receives a REGISTER containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, Contact indicating value "sos" ; - to the IMS_P_CSCF_A entity - and the UE_A entity receives an 420_BadExtension containing + to the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 420_BadExtension containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA; - from the IMS_P_CSCF_A entity + from the UE_A entity } } -- GitLab From 4b3d2d2cf30c74a22816a65cc769a499ebc186d6 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Tue, 17 Jan 2023 15:27:38 +0100 Subject: [PATCH 05/16] INVIT TPs added --- test_purposes/Gm/TP_GM.tplan2 | 128 +++++++++++++++++++++++++++++++--- 1 file changed, 120 insertions(+), 8 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 7e5ad88..c4c2e30 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -18,8 +18,6 @@ Package TP_GM { import all from Sip_Common; - - Test Purpose { TP Id TP_GM_PCSCF_ECO_REGISTER_01 @@ -35,7 +33,7 @@ Package TP_GM { Initial conditions with { the UE_A entity isEmergencyAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_A + the UE_A entity not isRegisteredTo the IMS_A } Expected behaviour @@ -60,9 +58,8 @@ Package TP_GM { from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_REGISTER_01 - + Test Purpose { TP Id TP_GM_PCSCF_ECO_REGISTER_02 @@ -78,7 +75,7 @@ Package TP_GM { Initial conditions with { the UE_A entity isEmergencyAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_A + the UE_A entity not isRegisteredTo the IMS_A } Expected behaviour @@ -102,8 +99,123 @@ Package TP_GM { from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_REGISTER_02 - + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_01 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_02 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + // TODO Geolocation header amybe added later, check! + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_03 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + /* This implies that the UE is currently attached and registered + to its home operator's network and the IP-CAN does not define emergency bearers + see 5.1.6.1 3rd paragraph */ + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_INVITE_03 + } // End of Package TP_GM -- GitLab From 1d6d88532cc2bf46eecdf0b6a4dadabc2403a874 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Tue, 17 Jan 2023 16:10:54 +0100 Subject: [PATCH 06/16] eCall test added to Gm --- test_purposes/Gm/TP_GM.tplan2 | 43 ++++++++++++++++++++++++++++++++- test_purposes/Sip_Common.tplan2 | 2 ++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index c4c2e30..e38e0e6 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -169,7 +169,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Route indicating value PX_UE_A_SERVICE_ROUTE, PPreferredIdentity, // one or two instances - // TODO Geolocation header amybe added later, check! + // TODO Geolocation header maybe added later, check! MessageBody; from the UE_A entity } @@ -217,5 +217,46 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_INVITE_03 + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_04 + + Test objective "Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.11" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablisheCallTypeEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + Accept indicating value "application/EmergencyCallData.Control+xml", + RecvInfo indicating value "EmergencyCallData.eCall.MSD", + PPreferredIdentity, // one or two instances + // TODO Geolocation header maybe added later, check! + MessageBody containing + MIME containing MSD;;; // MIME may contain additional parts e.g., sdp, xml + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_INVITE_04 + } // End of Package TP_GM diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 054962c..a0846ff 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -63,6 +63,7 @@ Package Sip_Common { - isNotRegisteredTo - hasAchievedFirstRegistration - isRegisteredTo + - isEmergencyRegisteredTo - isNotAttachedTo - isAttachedTo - isEmergencyAttachedTo @@ -83,6 +84,7 @@ Package Sip_Common { - hasReceivedSubsequentOrTargetRefreshRequestInDialog - previouslyEstablishedCallWith - isRequestedToSend + - isRequestedToEstablishEmergencyCall - isRequestedToDeregisterUser - isBusy - isNoLongerAvailable -- GitLab From 402848e81fda0507d831745b6898f6c6e0580529 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Wed, 18 Jan 2023 18:12:52 +0100 Subject: [PATCH 07/16] Added INVITE to Mw and started E-CSCF --- test_purposes/Mw/TP_MW_PS.tplan2 | 140 ++++++++++++++++++++++++++++++- test_purposes/Sip_Common.tplan2 | 4 + 2 files changed, 142 insertions(+), 2 deletions(-) diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index d52c990..6560d9c 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -13,12 +13,148 @@ copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. */ -/* Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used */ +/* Mw interface at P-CSCF/E-CSCF */ Package TP_MW_PS { import all from Sip_Common; + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_01 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_02 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_03 + + Test objective "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.4 and 5.2.6.3.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.4 1B) option is assumed + PAssertedIdentity, + MessageBody; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_03 - } // End of Package TP_MW_PS diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index a0846ff..8653c3f 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -41,6 +41,8 @@ Package Sip_Common { - EPC_PGW_B - EPC_MME_A - EPC_MME_B + - IMS_EATF + - IMS_E_CSCF - IMS_P_CSCF_A - IMS_I_CSCF_A - IMS_S_CSCF_A @@ -85,6 +87,7 @@ Package Sip_Common { - previouslyEstablishedCallWith - isRequestedToSend - isRequestedToEstablishEmergencyCall + - isRequestedToEstablisheCallTypeEmergencyCall - isRequestedToDeregisterUser - isBusy - isNoLongerAvailable @@ -94,6 +97,7 @@ Package Sip_Common { - hasResponded486INVITE - hasAchievedInitialINVITE - hasAchievedINVITE + - supportRoutingTo ; } // End of Domain section -- GitLab From 43b5546ba892525f3b07db82f7f312bc26264423 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Wed, 18 Jan 2023 18:20:39 +0100 Subject: [PATCH 08/16] E-CSCF --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 138 ++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 test_purposes/E_CSCF/TP_E_CSCF.tplan2 diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 new file mode 100644 index 0000000..befdf13 --- /dev/null +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -0,0 +1,138 @@ +/* +Copyright (c) ETSI 2019-2020. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +*/ + +/* E-CSCF interfaces to + * EATF: I4 + * LRF: MI + * PSAP: Mm/Mx to IBCF/IP multimedia network + * or Mi/Mg to PSTN via BGCF/MGCF + */ +Package TP_E_CSCF { + + import all from Sip_Common; + + Test Purpose { + + TP Id TP_I4_ECSCF_ECO_INVITE_01 + /* I4 interface at E-CSCF/EATF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the EATF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the IMS_E_CSCF entity supportRoutingTo the IMS_EATF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + Contact containing + instanceid_feature_tag + indicating value IMEIURN;, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_EATF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_EATF entity + } + } + + } // End of TP_I4_ECSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_INVITE_01 + /* MI interface at E-CSCF/LRF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the LRF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the IMS_E_CSCF entity supportRoutingTo the IMS_EATF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + Contact containing + instanceid_feature_tag + indicating value IMEIURN;, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_EATF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_EATF entity + } + } + + } // End of TP_MI_ECSCF_ECO_INVITE_01 + + +} // End of Package TP_MW_PS + -- GitLab From d70ecf3e750863328cd51787c3188bba8ed5bdea Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 18 Jan 2023 18:25:32 +0100 Subject: [PATCH 09/16] Registration TP for mw and cx interfaces --- test_purposes/Cx/TP_CX.tplan2 | 94 +++++++++++++- test_purposes/Gm/TP_GM.tplan2 | 147 ++++++++++++++++++++-- test_purposes/Mw/TP_MW_IS.tplan2 | 108 ++++++++++++++++ test_purposes/Mw/TP_MW_PS.tplan2 | 205 ++++++++++++++++++++++++++++++- 4 files changed, 539 insertions(+), 15 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 9efe5cc..aedf274 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -17,9 +17,99 @@ file and shall not imply any sub-license right. Package TP_CX { import all from Sip_Common; - import all from Diameter_Common; - + import all from Diameter_Common; + + Test Purpose { + TP Id TP_CX_HSS_ECO_UAA_01 + //TP_CX_HSS_UAA_01 from TS 103 653-2 V2.1.1 without emergency registration + Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE emergency registration and sends UA-Answer." + + Reference + "TS 129 228 [4], clause 6.1.1 and tables 6.1.1.1 and 6.1.1.2", + "TS 129 229 [5], clauses 6.1.1 and 6.1.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity sends a UAR containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED, + Origin_Host_AVP + Origin_Realm_AVP + Public_Identity_AVP + Visited_Network_Identifier_AVP + User_Authorization_Type_AVP + indicating value REGISTRATION, + User_Name_AVP + Destination_Host_AVP + Destination_Realm_AVP + UAR_Flags_AVP indicating value '1'; //IMS emergency registration + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the UAA containing + Session_ID_AVP, + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP, + Origin_Host_AVP, + Origin_Realm_AVP, + not Result_Code_AVP + Experimental_Result_AVP containing + Experimental_Result_Code_AVP + indicating value DIAMETER_FIRST_REGISTRATION;; + to the IMS_I_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_ECO_UAA_01 + + Test Purpose { + TP Id TP_CX_HSS_ECO_UAA_02 + //TP_CX_HSS_UAA_02 from TS 103 653-2 V2.1.1 without emergency registration + Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE emergency registration and sends UA-Answer." + + Reference + "TS 129 228 [4], clause 6.1.1.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity sends a UAR containing + Public_Identity_AVP + User_Name_AVP + UAR_Flags_AVP indicating value '1'; //IMS emergency registration + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the UAA containing + not Result_Code_AVP, + Experimental_Result_AVP containing + Experimental_Result_Code_AVP + indicating value DIAMETER_SUBSEQUENT_REGISTRATION;, + Server_Name_AVP, + not Server_Capabilities_AVP; + to the IMS_I_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_ECO_UAA_02 } // End of Package TP_CX diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index e38e0e6..e3a5daa 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -25,7 +25,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes initial emergency registration (Successful)." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.1" + "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.2" Config Id CF_VxLTE_INT @@ -44,30 +44,105 @@ Package TP_GM { To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, - Contact indicating value "sos" - ; + Authorization containing + Authentication_Schema indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "", + not term_ioi, + not SecurityClient, + Contact indicating value "sos";; to the UE_A entity } then { - the IMS_P_CSCF_A entity sends a 200_Ok containing + the IMS_P_CSCF_A entity sends a 401_Unauthorized containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, - P_Associated_URI indicating value ListOfImplicitelyRegisteredPublicUserIdentities; + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; from the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_01 - + Test Purpose { TP Id TP_GM_PCSCF_ECO_REGISTER_02 - Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) and emergency call shall continue without registration (Unsuccessful registration)." + Test objective "Verify that the P-CSCF successfully processes a full emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstRegistration + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Schema indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + not SecurityClient, + Contact indicating value "sos";; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, //ListOfImplicitelyRegisteredPublicUserIdentities; + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" + Path, + ServiceRoute; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_REGISTER_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_REGISTER_03 + + Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) in case the UE does not support GPRS-IMS-Bundled authentication while the P-CSCF supports it. (Unsuccessful emergency registration)." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.2" + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" Config Id CF_VxLTE_INT @@ -86,8 +161,8 @@ Package TP_GM { To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, - Contact indicating value "sos" - ; + Authorization not indicating value GPRS_IMS_Bundled_authentication, + Contact indicating value "sos"; to the UE_A entity } then { @@ -95,11 +170,59 @@ Package TP_GM { From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA; + Via indicating value PX_UE_A_VIA, + Unsupported indicating value sec_agree, + MessageBody containing + XML containing + ims_3gpp_element indicating value anonymous_emergencycall;;; from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_REGISTER_02 + } // End of TP_GM_PCSCF_ECO_REGISTER_03 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_REGISTER_04 + + Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization not indicating value GPRS_IMS_Bundled_authentication, + Contact indicating value "sos"; + to the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 403_Forbidden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + MessageBody containing + XML containing + ims_3gpp_element indicating value anonymous_emergencycall;;; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_REGISTER_04 Test Purpose { diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index 7fab34c..b84e5ea 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -20,5 +20,113 @@ Package TP_MW_IS { + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_01 + + Test objective "Verify that the I-CSCF successfully processes a first registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos"; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_02 + + Test objective "Verify that the I-CSCF successfully processes a full registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + Contact indicating value "sos";; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" , + term_ioi_parameter + indicating value "Operator Identifier Of ImsB" + Path, + ServiceRoute; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_ECO_REGISTER_02 + } // End of Package TP_MW_IS diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index d52c990..a46b9b7 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -17,8 +17,211 @@ file and shall not imply any sub-license right. Package TP_MW_PS { import all from Sip_Common; - + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_REGISTER_01 + + Test objective "Verify that the P-CSCF successfully processes a first emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Contact indicating value "sos"; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path indicating value PX_P_CSCF_A_SIP_URI, + PChargingVector containing + icid indicating value PX_TO_BE_DEFINED, + PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + Require indicating value "path", + Supported indicating value "path", + Contact indicating value "sos";; + to the IMS_I_CSCF_A entity + and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Path, + Warning, + PAccessNetworkInfo, + WwwAuthenticate containing + Digest, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth";; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_ECO_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_REGISTER_02 + + Test objective "Verify that the P-CSCF successfully processes a full emergency registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + Contact indicating value "sos";; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization containing + Authentication_Scheme indicating value PX_TO_BE_DEFINED, + Authentication_URI indicating value PX_TO_BE_DEFINED, + Username indicating value PX_UE_A_USERNAME, + Realm indicating value PX_UE_A_REALM, + Algorithm indicating value PX_UE_A_AUTH_ALG, + Nonce indicating value "not empty", + qop indicating value "auth", + PChargingVector, + Contact indicating value "sos";; + to the IMS_I_CSCF_A entity + and the IMS_P_CSCF_A entity sends an 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + AuthenticationInfo, + PAccessNetworkInfo, + PAssociatedURI indicating value PX_UE_A_SIP_URI, + PChargingVector, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA" , + term_ioi_parameter + indicating value "Operator Identifier Of ImsB" + Path, + ServiceRoute; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_ECO_REGISTER_02 + +// Test Purpose { +// +// TP Id TP_MW_PCSCF_ECO_REGISTER_03 +// +// Test objective "Verify that the P-CSCF successfully processes an invalid first emergency registration (Unsuccessful)." +// +// Reference +// "ETSI TS 124 229 [1], Clauses 5.2.10.5 and 5.2.2.1 and 6.2" +// +// Config Id CF_VxLTE_INT +// +// PICS Selection NONE +// +// Initial conditions with { +// the UE_A entity isEmergencyAttachedTo the EPC_A and +// the UE_A entity not isRegisteredTo the IMS_A +// } +// +// Expected behaviour +// ensure that { +// when { +// the IMS_P_CSCF_A entity receives a REGISTER containing +// From indicating value PX_UE_A_SIP_URI, +// To indicating value PX_UE_A_SIP_URI, +// CallId indicating value PX_UE_A_CALLID, +// Via indicating value PX_UE_A_VIA, +// Authorization containing +// Authentication_Schema indicating value PX_TO_BE_DEFINED, +// Authentication_URI indicating value PX_TO_BE_DEFINED, +// Username indicating value PX_UE_A_INVALID_USERNAME, +// Realm indicating value PX_UE_A_REALM, +// Algorithm indicating value PX_UE_A_AUTH_ALG, +// Nonce indicating value "", +// Contact indicating value "sos";; +// from the UE_A entity +// } +// then { +// the IMS_P_CSCF_A entity sends a REGISTER containing +// From indicating value PX_UE_A_SIP_URI, +// To indicating value PX_UE_A_SIP_URI, +// CallId indicating value PX_UE_A_CALLID, +// Via indicating value PX_UE_A_VIA, +// Authorization containing +// Authentication_Scheme indicating value PX_TO_BE_DEFINED, +// Authentication_URI indicating value PX_TO_BE_DEFINED, +// Username indicating value PX_UE_A_INVALID_USERNAME, +// Realm indicating value PX_UE_A_REALM, +// Algorithm indicating value PX_UE_A_AUTH_ALG, +// Nonce indicating value "not empty", +// qop indicating value "auth", +// PChargingVector, +// Contact indicating value "sos";; +// to the IMS_I_CSCF_A entity +// and the IMS_I_CSCF_A entity sends an 420_BadExtension containing +// From indicating value PX_UE_A_SIP_URI, +// To indicating value PX_UE_A_SIP_URI, +// CallId indicating value PX_UE_A_CALLID, +// Content_Type, +// Content_Disposition, +// P_Asserted_Identity, +// MessageBody containing +// XML containing +// ims_3gpp_element;;; +// to the IMS_P_CSCF_A entity +// } +// } +// } // End of TP_MW_PCSCF_ECO_REGISTER_03 } // End of Package TP_MW_PS -- GitLab From 029b1d4a693b0fff9a3da90ea7548fcfc17a0622 Mon Sep 17 00:00:00 2001 From: pintar Date: Thu, 19 Jan 2023 11:06:15 +0100 Subject: [PATCH 10/16] TPs related to attachment procedures on Gx and S6a interfaces --- test_purposes/Cx/TP_CX.tplan2 | 4 +- test_purposes/Gx/TP_GX.tplan2 | 98 +++++++++++++++++++++++++++++++++ test_purposes/S6a/TP_S6A.tplan2 | 35 ++++++++++++ 3 files changed, 135 insertions(+), 2 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index aedf274..1559292 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -22,7 +22,7 @@ Package TP_CX { Test Purpose { TP Id TP_CX_HSS_ECO_UAA_01 - //TP_CX_HSS_UAA_01 from TS 103 653-2 V2.1.1 without emergency registration + //TP_CX_HSS_UAA_01 from TS 103 653-1 V2.1.1 without emergency registration Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE emergency registration and sends UA-Answer." Reference @@ -75,7 +75,7 @@ Package TP_CX { Test Purpose { TP Id TP_CX_HSS_ECO_UAA_02 - //TP_CX_HSS_UAA_02 from TS 103 653-2 V2.1.1 without emergency registration + //TP_CX_HSS_UAA_02 from TS 103 653-1 V2.1.1 without emergency registration Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE emergency registration and sends UA-Answer." Reference diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index fd65226..0e22af9 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -20,6 +20,104 @@ Package TP_GX { import all from Diameter_Common; + + Test Purpose { + TP Id TP_GX_PCRF_CCA_01 + //TP_GX_PCRF_CCA_01 from TS 103 653-1 V2.1.1 without emergency registration + Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMSI for emergency services sends a CC-Answer in case of attachment procedure." + + Reference + "TS 129 212 [9], clauses 4.5.15.2.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the EPC_PGW_A entity sends an CCR containing + CC_Request_Type_AVP indicating value INITIAL_REQUEST + Subscription_Id_AVP containing + Subscription_Id_Type_AVP + indicating value END_USER_IMSI;, + IP_CAN_Type_AVP indicating value RestrictedToEmergencyServices, + RAT_Type_AVP, + Called_Station_Id_AVP indicating value "Emergency_APN" + Framed_IP_Address_AVP + "or" Framed_IP6_IP_Address_AVP + QoS_Information_AVP + Default_EPS_Bearer_QoS_AVP containing + QoS_Class_Identifier_AVP + indicating value '5' + Allocation_Retention_Priority_AVP containing + Priority_Level_AVP + Pre_emption_Capablity_AVP + Pre_emption_Vulnerability_AVP;;; + to the EPC_PCRF_A entity + } + then { + the EPC_PCRF_A entity sends the CCA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS; + to the EPC_PGW_A entity + } + } + } // End of TP_GX_PCRF_ECO_CCA_01 + + Test Purpose { + TP Id TP_GX_PCRF_CCA_02 + + Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency services sends a CC-Answer in case of attachment procedure." + + Reference + "TS 129 212 [9], clauses 4.5.15.2.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the EPC_PGW_A entity sends an CCR containing + CC_Request_Type_AVP indicating value INITIAL_REQUEST, + User_Equipment_Info_AVP containing + User_Equipment_Info_Type_AVP indicating value IMEISV + User_Equipment_Info_Value_AVP;, + IP_CAN_Type_AVP indicating value RestrictedToEmergencyServices, + RAT_Type_AVP, + Called_Station_Id_AVP indicating value "Emergency_APN" + Framed_IP_Address_AVP + "or" Framed_IP6_IP_Address_AVP + QoS_Information_AVP + Default_EPS_Bearer_QoS_AVP containing + QoS_Class_Identifier_AVP + indicating value '5' + Allocation_Retention_Priority_AVP containing + Priority_Level_AVP + Pre_emption_Capablity_AVP + Pre_emption_Vulnerability_AVP;;; + to the EPC_PCRF_A entity + } + then { + the EPC_PCRF_A entity sends the CCA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS; + to the EPC_PGW_A entity + } + } + } // End of TP_GX_PCRF_ECO_CCA_02 } // End of Package TP_GX diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index be05cdb..25fafe6 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -20,6 +20,41 @@ Package TP_S6A { import all from Diameter_Common; + + Test Purpose { + TP Id TP_S6A_HSS_ECO_ULA_01 + //TP_S6A_HSS_ULA_01 from TS 103 653-1 V2.1.1 without emergency registration + Test objective "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP." + + Reference + "TS 129 272 [10], clause 5.2.1.1.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the EPC_MME_A entity sends a ULR + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the ULA containing + Subscription_Data_AVP containing + Emergency_Info_AVP indicating value PDN_GW;, + Result_Code_AVP + indicating value DIAMETER_SUCCESS + ULA_Flags_AVP; + to the EPC_MME_A entity + } + } + } // End of TP TP_S6A_HSS_ECO_ULA_01 } // End of Package TP_S6A -- GitLab From 3d0ab9ec85e1683a496b00171861a3dabd3160d2 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Thu, 19 Jan 2023 13:35:32 +0100 Subject: [PATCH 11/16] E-CSCF Tests for INVITE completed --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 327 ++++++++++++++++++++++++-- test_purposes/Sip_Common.tplan2 | 7 +- 2 files changed, 314 insertions(+), 20 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index befdf13..4812f21 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -15,9 +15,10 @@ file and shall not imply any sub-license right. /* E-CSCF interfaces to * EATF: I4 - * LRF: MI - * PSAP: Mm/Mx to IBCF/IP multimedia network - * or Mi/Mg to PSTN via BGCF/MGCF + * LRF: Ml + * PSAP: Mm to IP multimedia network for PSAP in the IM CN subsystem of own network + * or Mx to IBCF for PSAP in other network + * or Mi to BGCF (and Mg to MGCF) for PSAP in the PSTN */ Package TP_E_CSCF { @@ -32,16 +33,14 @@ Package TP_E_CSCF { and routes the request to the EATF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clauses 5.11.2 1)" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isEmergencyAttachedTo the EPC_A and - the UE_A entity isEmergencyRegisteredTo the IMS_A and - the IMS_E_CSCF entity supportRoutingTo the IMS_EATF + the IMS_E_CSCF entity supportsRoutingTo the IMS_EATF } Expected behaviour @@ -67,9 +66,10 @@ Package TP_E_CSCF { CallId indicating value PX_UE_A_CALLID, Via indicating value PX_E_CSCF_VIA, Route indicating value PX_EATF_SERVICE_ROUTE, + Route indicating value PX_E_CSCF_SERVICE_ROUTE_EATF, PChargingVector containing not term_ioi_parameter, - orig_ioi_parameter + orig_ioi_parameter indicating value "Operator Identifier Of ImsA";, MessageBody; to the IMS_EATF entity @@ -80,7 +80,7 @@ Package TP_E_CSCF { Test Purpose { - TP Id TP_MI_ECSCF_ECO_INVITE_01 + TP Id TP_ML_ECSCF_ECO_INVITE_01 /* MI interface at E-CSCF/LRF */ Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF @@ -94,9 +94,7 @@ Package TP_E_CSCF { PICS Selection NONE Initial conditions with { - the UE_A entity isEmergencyAttachedTo the EPC_A and - the UE_A entity isEmergencyRegisteredTo the IMS_A and - the IMS_E_CSCF entity supportRoutingTo the IMS_EATF + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF } Expected behaviour @@ -109,9 +107,6 @@ Package TP_E_CSCF { Via indicating value PX_P_CSCF_A_VIA, Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed PAssertedIdentity, - Contact containing - instanceid_feature_tag - indicating value IMEIURN;, MessageBody; from the IMS_P_CSCF_A entity } @@ -121,18 +116,312 @@ Package TP_E_CSCF { To indicating value PX_SIP_EMERGENCY_SERVICE_URN, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_E_CSCF_VIA, - Route indicating value PX_EATF_SERVICE_ROUTE, + Route indicating value PX_LRF_SERVICE_ROUTE, PChargingVector containing not term_ioi_parameter, - orig_ioi_parameter + orig_ioi_parameter indicating value "Operator Identifier Of ImsA";, MessageBody; - to the IMS_EATF entity + to the IMS_LRF entity + } + } + + } // End of TP_ML_ECSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + MessageBody; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_INVITE_02 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the PSAP in the IM CN subsystem of own network + and includes the LRF provided URI in the Route header." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2 and 5.11.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value LRF_provided_SIP_URI, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + MessageBody; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_IBCF_A_SERVICE_ROUTE, + Route indicating value PX_PSAP_SERVICE_ROUTE_IBCF, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_INVITE_02 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the IBCF for a PSAP in another network + and includes the LRF provided URI in the Route header." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_IBCF_A_SERVICE_ROUTE, + Route indicating value LRF_provided_SIP_URI, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_INVITE_02 + + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value PX_PSAP_TEL_URI, // see 5.11.2 6) b) + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_BGCF_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity } } } // End of TP_MI_ECSCF_ECO_INVITE_01 + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_INVITE_02 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF + and routes the request to the BGCF for a PSAP in the PSTN + and includes the LRF provided URI in the Request-URI." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an r_3xx_Any containing + Contact indicating value LRF_provided_SIP_URI; + from the IMS_LRF entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value LRF_provided_SIP_URI, // see 5.11.3 2) b) + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_BGCF_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_INVITE_02 -} // End of Package TP_MW_PS +} // End of Package TP_E_CSCF diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 8653c3f..63ab6e5 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -42,6 +42,7 @@ Package Sip_Common { - EPC_MME_A - EPC_MME_B - IMS_EATF + - IMS_LRF - IMS_E_CSCF - IMS_P_CSCF_A - IMS_I_CSCF_A @@ -54,6 +55,8 @@ Package Sip_Common { - IMS_S_CSCF_B - IMS_IBCF_B - IMS_HSS_B + - IM_CN // IM CN subsystem of own network + - BGCF ; events: - receives @@ -97,7 +100,8 @@ Package Sip_Common { - hasResponded486INVITE - hasAchievedInitialINVITE - hasAchievedINVITE - - supportRoutingTo + - hasSentINVITETo + - supportsRoutingTo ; } // End of Domain section @@ -146,6 +150,7 @@ Package Sip_Common { SipMessage r_180_Ringing; SipMessage r_200_Ok; SipMessage r_2xx_Any; + SipMessage r_3xx_Any; SipMessage r_401_Unauthorized; SipMessage r_403_Forbidden; SipMessage r_404_NotFound; -- GitLab From 69e1f260465142e25d262956255755b1b22d1659 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 17 Feb 2023 10:53:14 +0100 Subject: [PATCH 12/16] Cx and Rx TPs for Registration --- test_purposes/Cx/TP_CX.tplan2 | 52 +++++++++++++++ test_purposes/Rx/TP_RX.tplan2 | 117 +++++++++++++++++++++++++++++++++- 2 files changed, 167 insertions(+), 2 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 1559292..20bdf54 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -110,6 +110,58 @@ Package TP_CX { } } } // End of TP TP_CX_HSS_ECO_UAA_02 + + Test Purpose { + TP Id TP_CX_HSS_ECO_SAA_01 + + Test objective "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure when credentials not matches and sends SA-Answer." + + Reference + "TS 129 228 [4], clause 6.1.2", + "TS 129 229 [5], clauses 6.1.3 and 6.1.4" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity sends a SAR containing + Session_ID_AVP, + Vendor_Specific_Application_Id_AVP, + Auth_Session_State_AVP + indicating value NO_STATE_MAINTAINED, + Origin_Host_AVP, + Origin_Realm_AVP, + Public_Identity_AVP, + not User_Name_AVP, + Destination_Realm_AVP, + Server_Name_AVP, + Server_Assignment_Type_AVP + indicating value AUTHENTICATION_FAILURE //or AUTHENTICATION_TIMEOUT + User_Data_Already_Available_AVP; + to the IMS_HSS_A entity + } + then { + the IMS_HSS_A entity sends the SAA containing + Session_ID_AVP + Vendor_Specific_Application_Id_AVP + Auth_Session_State_AVP + Origin_Host_AVP + Origin_Realm_AVP + Result_Code_AVP + indicating value DIAMETER_SUCCESS + User_Data AVP + Charging_Information_AVP; + to the IMS_S_CSCF_A entity + } + } + } // End of TP TP_CX_HSS_ECO_SAA_01 } // End of Package TP_CX diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 index f497e3e..9489a2b 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -19,9 +19,122 @@ Package TP_RX { import all from Sip_Common; import all from Diameter_Common; - - + + + Test Purpose { + TP Id TP_RX_PCRF_ECO_AAA_01 + + Test objective "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow for emergency registration sends AA-Answer." + + Reference + "TS 129 214 [8], Annex A.5" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends an AAR + to the EPC_PCRF_A entity + } + then { + the EPC_PCRF_A entity sends the AAA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS + Subscription_Id_AVP containing + Subscription_Id_Type_AVP + indicating value END_USER_IMSI;, //or END_USERE_164 + "and/or" + User_Equipment_Info_AVP containing + User_Equipment_Info_Type + indicating value IMEISV, + User_Equipment_Info_Value;; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_RX_PCRF_ECO_AAA_01 + + Test Purpose { + TP Id TP_RX_PCSCF_ECO_AAR_01 + + Test objective "Verify that IUT after 2XX_Response on Emergency REGISTER sends an AA-Request due to provisioning of AF Signalling flow." + + Reference + "TS 129 214 [8], Annex A.5" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity sends a 200_Response_REGISTER + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends an AAR containing + Framed_IPv4_Address_AVP + indicating value "IPv4_Address of UE_A", + "or" Framed_IPv6_Address_AVP + indicating value "IPv6_Address of UE_A", + AF_Requested_Data_AVP + indicating value "EPC-level identities required", + Service_URN_AVP + indicating value "sos*"; + to the EPC_PCRF_A entity + } + } + } // End of TP_RX_PCSCF_ECO_AAR_01 + Test Purpose { + TP Id TP_RX_PCSCF_ECO_AAR_02 + + Test objective "Verify that IUT send AA-Request in case of emergency session establishment for originating side after INVITE is received." + + Reference + "TS 129 214 [8], Annex A.5" //clauses 4.4.1, A.1, A.2 and annex B" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends the AAR containing + Framed_IPv4_Address_AVP + indicating value "IPv4_Address of UE_A", + "or" Framed_IPv6_Address_AVP + indicating value "IPv6_Address of UE_A", + Service_URN_AVP + indicating value "sos*"; + to the EPC_PCRF_A entity + } + } + } // End of TP_RX_PCSCF_ECO_AAR_02 + } // End of Package TP_RX -- GitLab From c981eb3bc9c94c16cd5259503d577232a795e478 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 24 Feb 2023 15:05:20 +0100 Subject: [PATCH 13/16] New TPs for Registration procedures --- test_purposes/Gm/TP_GM.tplan2 | 65 +++++++++++++---- test_purposes/Mw/TP_MW_IS.tplan2 | 118 +++++++++++++++++++++++++++++++ test_purposes/Mw/TP_MW_PS.tplan2 | 116 +++++++++++++----------------- 3 files changed, 220 insertions(+), 79 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index e3a5daa..f6c8418 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -139,7 +139,7 @@ Package TP_GM { TP Id TP_GM_PCSCF_ECO_REGISTER_03 - Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) in case the UE does not support GPRS-IMS-Bundled authentication while the P-CSCF supports it. (Unsuccessful emergency registration)." + Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration)." Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" @@ -157,6 +157,47 @@ Package TP_GM { ensure that { when { the IMS_P_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "Invalid credentials", + Contact indicating value "sos"; + to the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_ECO_REGISTER_03 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_REGISTER_04 + + Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_B and + the UE_A entity not isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, @@ -166,42 +207,41 @@ Package TP_GM { to the UE_A entity } then { - the IMS_P_CSCF_A entity sends a 420_BadExtension containing + the IMS_P_CSCF_B entity sends a 403_Forbidden containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, - Unsupported indicating value sec_agree, MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_REGISTER_03 + } // End of TP_GM_PCSCF_ECO_REGISTER_04 Test Purpose { - TP Id TP_GM_PCSCF_ECO_REGISTER_04 + TP Id TP_GM_PCSCF_ECO_REGISTER_05 - Test objective "Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration)." + Test objective "Verify that the emergency registration is rejected with 420 (Bad Extension) in case the UE does not support GPRS-IMS-Bundled authentication while the P-CSCF supports it. (Unsuccessful emergency registration)." Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_INT + Config Id CF_VxLTE_RMI PICS Selection NONE Initial conditions with { - the UE_A entity isEmergencyAttachedTo the EPC_A and - the UE_A entity not isRegisteredTo the IMS_A + the UE_A entity isEmergencyAttachedTo the EPC_B and + the UE_A entity not isRegisteredTo the IMS_B } Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives a REGISTER containing + the IMS_P_CSCF_B entity receives a REGISTER containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, @@ -211,18 +251,19 @@ Package TP_GM { to the UE_A entity } then { - the IMS_P_CSCF_A entity sends a 403_Forbidden containing + the IMS_P_CSCF_B entity sends a 420_BadExtension containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, + Unsupported indicating value sec_agree, MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_REGISTER_04 + } // End of TP_GM_PCSCF_ECO_REGISTER_05 Test Purpose { diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index b84e5ea..75255ef 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -128,5 +128,123 @@ Package TP_MW_IS { } } // End of TP_MW_ICSCF_ECO_REGISTER_02 + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_03 + + Test objective "Verify that the I-CSCF successfully processes an registration with invalid credentials (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.2.1 and Clause 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity sends an 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_ECO_REGISTER_03 + + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_04 + + Test objective "Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the IMS_P_CSCF_B entity + } + then { + the IMS_I_CSCF_B entity sends an 403_Forbiden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_ECO_REGISTER_04 + + Test Purpose { + + TP Id TP_MW_ICSCF_ECO_REGISTER_05 + + Test objective "Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + not SecurityClient; + from the IMS_P_CSCF_B entity + } + then { + the IMS_I_CSCF_B entity sends an 420_BadExtension containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_ECO_REGISTER_05 + } // End of Package TP_MW_IS diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 8f388c4..c33d606 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -155,73 +155,55 @@ Package TP_MW_PS { } } // End of TP_MW_PCSCF_ECO_REGISTER_02 -// Test Purpose { -// -// TP Id TP_MW_PCSCF_ECO_REGISTER_03 -// -// Test objective "Verify that the P-CSCF successfully processes an invalid first emergency registration (Unsuccessful)." -// -// Reference -// "ETSI TS 124 229 [1], Clauses 5.2.10.5 and 5.2.2.1 and 6.2" -// -// Config Id CF_VxLTE_INT -// -// PICS Selection NONE -// -// Initial conditions with { -// the UE_A entity isEmergencyAttachedTo the EPC_A and -// the UE_A entity not isRegisteredTo the IMS_A -// } -// -// Expected behaviour -// ensure that { -// when { -// the IMS_P_CSCF_A entity receives a REGISTER containing -// From indicating value PX_UE_A_SIP_URI, -// To indicating value PX_UE_A_SIP_URI, -// CallId indicating value PX_UE_A_CALLID, -// Via indicating value PX_UE_A_VIA, -// Authorization containing -// Authentication_Schema indicating value PX_TO_BE_DEFINED, -// Authentication_URI indicating value PX_TO_BE_DEFINED, -// Username indicating value PX_UE_A_INVALID_USERNAME, -// Realm indicating value PX_UE_A_REALM, -// Algorithm indicating value PX_UE_A_AUTH_ALG, -// Nonce indicating value "", -// Contact indicating value "sos";; -// from the UE_A entity -// } -// then { -// the IMS_P_CSCF_A entity sends a REGISTER containing -// From indicating value PX_UE_A_SIP_URI, -// To indicating value PX_UE_A_SIP_URI, -// CallId indicating value PX_UE_A_CALLID, -// Via indicating value PX_UE_A_VIA, -// Authorization containing -// Authentication_Scheme indicating value PX_TO_BE_DEFINED, -// Authentication_URI indicating value PX_TO_BE_DEFINED, -// Username indicating value PX_UE_A_INVALID_USERNAME, -// Realm indicating value PX_UE_A_REALM, -// Algorithm indicating value PX_UE_A_AUTH_ALG, -// Nonce indicating value "not empty", -// qop indicating value "auth", -// PChargingVector, -// Contact indicating value "sos";; -// to the IMS_I_CSCF_A entity -// and the IMS_I_CSCF_A entity sends an 420_BadExtension containing -// From indicating value PX_UE_A_SIP_URI, -// To indicating value PX_UE_A_SIP_URI, -// CallId indicating value PX_UE_A_CALLID, -// Content_Type, -// Content_Disposition, -// P_Asserted_Identity, -// MessageBody containing -// XML containing -// ims_3gpp_element;;; -// to the IMS_P_CSCF_A entity -// } -// } -// } // End of TP_MW_PCSCF_ECO_REGISTER_03 + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_03 + + Test objective "Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.2.1" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_B and + the UE_B entity isNotRegisteredTo the IMS_B and + the UE_A entity hasAchievedFirstREGISTER + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials"; + from the UE_A entity + } + then { + the IMS_P_CSCF_B entity sends a REGISTER containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Authorization indicating value "invalid credentials", + PChargingVector, + PVisitedNetwork; + to the IMS_I_CSCF_B entity + and the IMS_P_CSCF_B entity sends an 403_Forbidden containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_A_CALLID; + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_REGISTER_03 -- GitLab From dddfcb0fa38518fe505a7d7472327cb68523fd17 Mon Sep 17 00:00:00 2001 From: Bostjan Date: Thu, 25 May 2023 14:54:13 +0200 Subject: [PATCH 14/16] Add reqired submodules and starting point from TTF006 --- .gitmodules | 16 ++++++++++++++++ ttcn/LibCommon | 1 + ttcn/LibDiameter | 1 + ttcn/LibIms | 1 + ttcn/LibSip | 1 + 5 files changed, 20 insertions(+) create mode 100644 .gitmodules create mode 160000 ttcn/LibCommon create mode 160000 ttcn/LibDiameter create mode 160000 ttcn/LibIms create mode 160000 ttcn/LibSip diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f269600 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,16 @@ +[submodule "ttcn/LibCommon"] + path = ttcn/LibCommon + url = https://forge.etsi.org/rep/LIBS/LibCommon.git + branch = TTF006 +[submodule "ttcn/LibSip"] + path = ttcn/LibSip + url = https://forge.etsi.org/rep/LIBS/LibSip.git + branch = TTF006 +[submodule "ttcn/LibDiameter"] + path = ttcn/LibDiameter + url = https://forge.etsi.org/rep/LIBS/LibDiameter.git + branch = TTF006 +[submodule "ttcn/LibIms"] + path = ttcn/LibIms + url = https://forge.etsi.org/rep/LIBS/LibIms.git + branch = TTF006 diff --git a/ttcn/LibCommon b/ttcn/LibCommon new file mode 160000 index 0000000..21bad7c --- /dev/null +++ b/ttcn/LibCommon @@ -0,0 +1 @@ +Subproject commit 21bad7c51917d19bebdff5b36983e22922421976 diff --git a/ttcn/LibDiameter b/ttcn/LibDiameter new file mode 160000 index 0000000..1f3760b --- /dev/null +++ b/ttcn/LibDiameter @@ -0,0 +1 @@ +Subproject commit 1f3760b09ac67c211d11508263c565c50776c98a diff --git a/ttcn/LibIms b/ttcn/LibIms new file mode 160000 index 0000000..d640fce --- /dev/null +++ b/ttcn/LibIms @@ -0,0 +1 @@ +Subproject commit d640fce7b8bd65dbb77c93a98f80c53a73bb2a24 diff --git a/ttcn/LibSip b/ttcn/LibSip new file mode 160000 index 0000000..a227e9f --- /dev/null +++ b/ttcn/LibSip @@ -0,0 +1 @@ +Subproject commit a227e9fca956475c5b481fb6042ecfcc9d632502 -- GitLab From 8dc64484bae4682e48a51d4cbc433dccd5ad91d5 Mon Sep 17 00:00:00 2001 From: Bostjan Date: Thu, 25 May 2023 14:59:24 +0200 Subject: [PATCH 15/16] Added modules from TTF006 --- .gitignore | 16 + README.md | 0 .../AtsImsIot_Diameter_Templates.ttcn | 1751 ++++++++ ttcn/AtsImsIot/AtsImsIot_Functions.ttcn | 3512 ++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 32 + ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn | 177 + ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn | 597 +++ ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn | 588 +++ ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn | 2627 ++++++++++++ ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn | 436 ++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 742 ++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 3513 ++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 1113 +++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 1651 ++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 97 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn | 67 + .../AtsImsIot_TP_behavior_MW_IS.ttcn | 602 +++ .../AtsImsIot_TP_behavior_MW_PS.ttcn | 3729 +++++++++++++++++ .../AtsImsIot_TP_behavior_MW_SI.ttcn | 1865 +++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn | 1780 ++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 681 +++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn | 760 ++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn | 121 + ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 2549 +++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 694 +++ ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn | 863 ++++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 894 ++++ .../AtsImsIot_TestConfiguration.ttcn | 1811 ++++++++ ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn | 74 + ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 165 + ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 210 + .../LibIms_UpperTester.ttcn | 519 +++ ttcn/LibIot/LibIot_Functions.ttcn | 231 + ttcn/LibIot/LibIot_PIXITS.ttcn | 379 ++ ttcn/LibIot/LibIot_TestConfiguration.ttcn | 50 + ttcn/LibIot/LibIot_TestInterface.ttcn | 117 + ttcn/LibIot/LibIot_TypesAndValues.ttcn | 284 ++ ttcn/LibIot/LibIot_VxLTE_Functions.ttcn | 607 +++ ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 165 + ttcn/LibIot/LibIot_VxLTE_Templates.ttcn | 337 ++ ttcn/LibMsrp/LibMsrp_Functions.ttcn | 22 + ttcn/LibMsrp/LibMsrp_PIXITS.ttcn | 8 + ttcn/LibMsrp/LibMsrp_Templates.ttcn | 615 +++ ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn | 626 +++ ttcn/LibUpperTester/LibUpperTester.ttcn | 60 + ttcn/README.md | 1 + 46 files changed, 37738 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Functions.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn create mode 100644 ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn create mode 100644 ttcn/LibIot/LibIot_Functions.ttcn create mode 100644 ttcn/LibIot/LibIot_PIXITS.ttcn create mode 100644 ttcn/LibIot/LibIot_TestConfiguration.ttcn create mode 100644 ttcn/LibIot/LibIot_TestInterface.ttcn create mode 100644 ttcn/LibIot/LibIot_TypesAndValues.ttcn create mode 100644 ttcn/LibIot/LibIot_VxLTE_Functions.ttcn create mode 100644 ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn create mode 100644 ttcn/LibIot/LibIot_VxLTE_Templates.ttcn create mode 100644 ttcn/LibMsrp/LibMsrp_Functions.ttcn create mode 100644 ttcn/LibMsrp/LibMsrp_PIXITS.ttcn create mode 100644 ttcn/LibMsrp/LibMsrp_Templates.ttcn create mode 100644 ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn create mode 100644 ttcn/LibUpperTester/LibUpperTester.ttcn create mode 100644 ttcn/README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a2f2b7f --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.project +.settings +.classpath +.metadata + +/bin/ +/ttcn3build/ +/.apt_generated/ + +/lib/ +/tracefiles/ +/build/ +/clf/ +/tt3plugins/ +*log* +taconfig.xml \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn new file mode 100644 index 0000000..9680275 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -0,0 +1,1751 @@ +/** + * @author STF574 + * @version $Id$ + * @desc This module defines AtsIot Diameter Templates for message, header, and + * structured types.
+ * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + */ + +module AtsImsIot_Diameter_Templates { + + //LibCommon + import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; + import from LibCommon_BasicTypesAndValues {type UInt8, UInt32, UInt64;}; + + //LibDiameter + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Templates all; + import from LibDiameter_Steps all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code}; + import from LibDiameter_Types_S9_AVPs all; + + group DiameterHeaderFields { + group CxHeaderFields{ + + template Auth_Session_State_AVP mw_authSessionState_noStateMaintained := + { + aVP_Header := mw_aVP_Header_any_Code(c_auth_Session_State_AVP_Code), + aVP_Data := NO_STATE_MAINTAINED_E + } + + template Deregistration_Reason_AVP mw_deregistrationReason := + { + aVP_Header := mw_aVP_Header_any_Code(c_deregistration_Reason_AVP_Code), + reason_Code := ?, + reason_Info := *, + aVP_Type := * + } + + template Server_Assignment_Type_AVP mw_serverAssignmentType(Srv_Assgmt_Type_Code p_aVP_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_server_Assignment_Type_AVP_Code), + aVP_Data := p_aVP_Data + } + + template User_Authorization_Type_AVP mw_userAuthorizationType (User_Authorization_Type_Code p_aVP_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Authorization_Type_AVP_Code), + aVP_Data := p_aVP_Data + } + + template Experimental_Result_AVP mw_experimentalResult (Experimental_Result_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_experimental_Result_AVP_Code), + vendor_Id := ?, + experimental_Result_Code := + { + aVP_Header := mw_aVP_Header_any_Code(c_experimental_Result_Code_AVP_Code), + aVP_Data := p_avpData + } + } + + } //end group CxHeaderFields + group RxHeaderFields{ + template Abort_Cause_AVP mw_abortCause(template Abort_Cause_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_abort_Cause_AVP_Code), + aVP_Data := p_avpData + }; + + template Media_Component_Description_AVP mw_mediaComponentDescription_SubComponentFlowStatusEnabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_flowStatusEnabled_flowUsageAfSignalling_SignallingSip}, + af_Application_Id := *, + media_type := *, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := *, + flow_Status := *, + reservation_Priority := *, + rs_Bw := *, + rr_Bw := *, + codec_data := * + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusDisabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(DISABLED_E), + reservation_Priority := *, + rs_Bw := *, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabledDownlink := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_DOWNLINK_E), + reservation_Priority := *, + rs_Bw := ?, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabledUplink := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_UPLINK_E), + reservation_Priority := *, + rs_Bw := ?, + rr_Bw := ?, + codec_data := ? + } + + template Media_Component_Description_AVP mw_mediaComponentDescription_FlowStatusEnabled := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Component_Description_AVP_Code), + media_Component_Nr := {aVP_Header := ?, aVP_Data := ?}, + media_Sub_component := {mw_mediaSubComponent_FlowDescription}, + af_Application_Id := *, + media_type := ?, + max_Requested_Bw_Ul := ?, + max_Requested_Bw_Dl := ?, + flow_Status := mw_flowStatus(ENABLED_E), + reservation_Priority := *, + rs_Bw := *, + rr_Bw := *, + codec_data := ? + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_any := + { + aVP_Header := mw_aVP_Header_any_Code(c_media_Sub_Component_AVP_Code), + flow_Number := ?, + flow_Description := *, + flow_Status := *, + flow_Usage := *, + max_Requested_Bw_Ul := *, + max_Requested_Bw_Dl := *, + af_Signalling_Protocol := *, + aVP_Type := * + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_FlowDescription modifies mw_mediaSubComponent_any := + { + flow_Description := ? + } + + template Media_Sub_Component_AVP mw_mediaSubComponent_flowStatusEnabled_flowUsageAfSignalling_SignallingSip modifies mw_mediaSubComponent_any := + { + flow_Description := ?, + flow_Status := mw_flowStatus(ENABLED_E), + flow_Usage := mw_flowUsage(AF_SIGNALLING_E), + af_Signalling_Protocol := mw_afSignallingProtocolSIP + } + + template AF_Signalling_Protocol_AVP mw_afSignallingProtocolSIP := { + aVP_Header := mw_aVP_Header_any_Code(c_aF_Signalling_Protocol_AVP_Code), + aVP_Data := SIP_E + } + + template Flow_Status_AVP mw_flowStatus(template (present) Flow_Status_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_flow_Status_AVP_Code), + aVP_Data := p_avpData + } + + template Flow_Usage_AVP mw_flowUsage(template (present) Flow_Usage_Type p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_flow_Usage_AVP_Code), + aVP_Data := p_avpData + } + + template Specific_Action_AVP mw_specificAction (template (present) Specific_Action_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_specific_Action_AVP_Code),// + aVP_Data := p_avpData + } + + template Service_Info_Status_AVP mw_serviceInfoStatus (template (present) Service_Info_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_service_Info_Status_AVP_Code),// + aVP_Data := p_avpData + } + + template Rx_Request_Type_AVP mw_rxRequestType (template (present) Rx_Request_Type p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_rx_Request_Type_AVP_Code),// + aVP_Data := p_avpData + } + + template Framed_IP_Address_AVP mw_framedIPAddress (template (present) octetstring p_avpData) :={ + aVP_Header := mw_aVP_Header_any_Code(c_framed_IP_Address_AVP_Code),// + aVP_Data := p_avpData + } + + } //end group RxHeaderFields + group GxHeaderFields{ + + template CC_Request_Type_AVP mw_cC_Request_Type(CC_Request_Ty_Type p_avpData):= + { + aVP_Header := mw_aVP_Header_any_Code(c_cC_Request_Type_AVP_Code), + aVP_Data := p_avpData + } + + template QoS_Information_AVP mw_qoS_Information := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := *, + max_Requested_Bandwidth_UL := *, + max_Requested_Bandwidth_DL := *, + guaranteed_Bitrate_UL := *, + guaranteed_Bitrate_DL := *, + bearer_Identifier := *, + allocation_Retention_Priority := *, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template QoS_Information_AVP mw_qoS_Information_Audio := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_1_E), + max_Requested_Bandwidth_UL := ?, + max_Requested_Bandwidth_DL := ?, + guaranteed_Bitrate_UL := ?, + guaranteed_Bitrate_DL := ?, + bearer_Identifier := *, + allocation_Retention_Priority := ?, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template QoS_Information_AVP mw_qoS_Information_Video := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Information_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_2_E), + max_Requested_Bandwidth_UL := ?, + max_Requested_Bandwidth_DL := ?, + guaranteed_Bitrate_UL := ?, + guaranteed_Bitrate_DL := ?, + bearer_Identifier := *, + allocation_Retention_Priority := ?, + aPN_Aggregate_Max_Bitrate_UL := *, + aPN_Aggregate_Max_Bitrate_DL := *, + aVP_Type := * + } + + template Default_EPS_Bearer_QoS_AVP mw_default_EPS_Bearer_QoS_Class_5 := + { + aVP_Header := mw_aVP_Header_any_Code(c_default_EPS_Bearer_QoS_AVP_Code), + qoS_Class_Identifier := mw_QoS_Class_Identifier(QCI_5_E), + allocation_Retention_Priority := mw_allocation_Retention_Priority, + aVP_Type := * + } + + template Allocation_Retention_Priority_AVP mw_allocation_Retention_Priority := + { + aVP_Header := mw_aVP_Header_any_Code(c_allocation_Retention_Priority_AVP_Code), + priority_Level := ?, + pre_emption_Capability := ?, + pre_emption_Vulnerability := ? + } + + template QoS_Class_Identifier_AVP mw_QoS_Class_Identifier(template QoS_Class_Identifier p_avp_Data) := + { + aVP_Header := mw_aVP_Header_any_Code(c_qoS_Class_Identifier_AVP_Code), + aVP_Data := p_avp_Data + } + + template Bearer_Usage_AVP mw_bearer_Usage(Bearer_Usage p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_bearer_Usage_AVP_Code), + aVP_Data := p_avpData + } + + template Subscription_Id_AVP mw_subscription_Id(template Subscription_Id_Type_AVP p_typeAVP):= + { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Id_AVP_Code), + subscription_Id_Type := p_typeAVP, + subscription_Id_Data := ? + } + + template Subscription_Id_Type_AVP mw_subscription_Id_Type(template Subscription_Id_Ty_Type p_avpData):= + { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Id_Type_AVP_Code), + aVP_Data := p_avpData + } + + template Charging_Rule_Install_AVP mw_chrgRuleInstall := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Install_AVP_Code), + charging_Rule_Definition := {mw_chrgRuleDefinition_RuleName_Flows_FlowStatus}, + charging_Rule_Name := *, + charging_Rule_Base_Name := *, + bearer_Identifier := *, + rule_Activation_Time := *, + rule_DeActivation_Time := *, + resource_Allocation_Notification := *, + charging_Correlation_Indicator := *, + aVP_Type := * + } + + template Charging_Rule_Install_AVP mw_chrgRuleInstall_Qos := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Install_AVP_Code), + charging_Rule_Definition := {mw_chrgRuleDefinition_RuleName_Flows_FlowStatus_Qos}, + charging_Rule_Name := *, + charging_Rule_Base_Name := *, + bearer_Identifier := *, + rule_Activation_Time := *, + rule_DeActivation_Time := *, + resource_Allocation_Notification := *, + charging_Correlation_Indicator := *, + aVP_Type := * + } + + template Charging_Rule_Remove_AVP mw_chrgRuleRemove_Name := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Remove_AVP_Code), + charging_Rule_Name := ?, + charging_Rule_Base_Name := *, + aVP_Type := * + } + + template Charging_Rule_Definition_AVP mw_chrgRuleDefinition_RuleName_Flows_FlowStatus := + { + aVP_Header := mw_aVP_Header_any_Code(c_charging_Rule_Definition_AVP_Code), + charging_Rule_Name := ?, + service_Identifier := *, + rating_Group := *, + flow_Information := *, + flow_Status := mw_flowStatus(ENABLED_E), + qoS_Information := *, + reporting_Level := *, + online := *, + offline := *, + metering_Method := *, + precedence := *, + aF_Charging_Identifier := *, + flows := {mw_flows}, + monitoring_Key := *, + aF_Signalling_Protocol := *, + sponsor_Identity := *, + application_Service_Provider_Identity := *, + aVP_Type := * + } + + template Charging_Rule_Definition_AVP mw_chrgRuleDefinition_RuleName_Flows_FlowStatus_Qos modifies mw_chrgRuleDefinition_RuleName_Flows_FlowStatus:= + { + flow_Information := ?, + flow_Status := ?, + qoS_Information := (mw_qoS_Information_Audio,mw_qoS_Information_Video) + } + + template Flows_AVP mw_flows := + { + aVP_Header := mw_aVP_Header_any_Code(c_flows_AVP_Code), + media_component_number := + {aVP_Header := ?,// + aVP_Data := 0 + },//Media_Component_Number_AVP + flow_Number := *, + final_unit_action := * + } + + } //end group GxHeaderFields + + group S6aHeaderFields{ + + template Cancellation_Type_AVP mw_cancellationType(Cancellation_Type_Code p_cancellation_Type) := { + aVP_Header := mw_aVP_Header_any_Code(c_cancellation_Type_AVP_Code), + cancellation_Type := p_cancellation_Type + } // End of template m_cancellationType + + } //end group S6aHeaderFields + + + + group ShHeaderFields{ + + template User_Identity_AVP mw_userIdentity_publicIdentity(template (present) Public_Identity_AVP p_publicIdentity) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Identity_AVP_Code), + public_Identity_AVP := p_publicIdentity, + mSISDN_AVP := *, + aVP_Type := * + } + + template User_Identity_AVP mw_userIdentity_msisdn(template (present) MSISDN_AVP p_msisdn) := + { + aVP_Header := mw_aVP_Header_any_Code(c_user_Identity_AVP_Code), + public_Identity_AVP := *, + mSISDN_AVP := p_msisdn, + aVP_Type := * + } + + template Public_Identity_AVP mw_publicIdentity(template (present) UTF8String p_avpData) := + { + aVP_Header := mw_aVP_Header_any_Code(c_public_Identity_AVP_Code), + aVP_Data := p_avpData + } + + } //end group ShHeaderFields + + group S9HeaderFields{ + + template Subses_Enforcement_Info_AVP mw_subses_Enforcement_Info(Subsession_Operation_AVP p_subsession_Operation) := { + aVP_Header := mw_aVP_Header_any_Code(2201), + subsession_Id := ?, + subsession_Operation := p_subsession_Operation, + aN_GW_Address := *, + bearer_Identifier := *, + bearer_Operation := *, + packet_Filter_Information := *, + packet_Filter_Operation := *, + qoS_Information := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + coA_Information := *, + called_Station_Id := *, + pDN_Connection_ID := *, + bearer_Usage := *, + tFT_Packet_Filter_Information := *, + online := *, + offline := *, + result_Code := *, + experimental_Result := *, + charging_Rule_Report := *, + qoS_Rule_Report := *, + iP_CAN_Type := *, + rat_Type := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP2_BSID := *, + user_CSG_Information := *, + default_EPS_Bearer_QoS := *, + network_Request_Support := *, + routing_Rule_Install := *, + routing_Rule_Remove := *, + logical_Access_ID := *, + physical_Access_ID := *, + usage_Monitoring_Information := *, + multiple_BBERF_Action := *, + event_Trigger := *, + access_Network_Charging_Address := *, + access_Network_Charging_Id_Gx := *, + session_Linking_Indicator := *, + aVP_Type := * + } + + template Subsession_Operation_AVP mw_subsession_Operation_AVP (Subsession_Operation_Code p_code):= { + aVP_Header := mw_aVP_Header_any_Code(c_subsession_Operation_AVP_Code), + subsession_Operation := p_code + } + + template Subses_Decision_Info_AVP mw_subses_Decision_Info_any := { + aVP_Header := mw_aVP_Header_any_Code(2200), + subsession_Id := ?, + aN_GW_Address := *, + result_Code := *, + experimental_Result := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + default_EPS_Bearer_QoS := *, + usage_Monitoring_Information := *, + session_Release_Cause := *, + bearer_Control_Mode := *, + event_Trigger := *, + revalidation_Time := *, + online := *, + offline := *, + qoS_Information := *, + aVP_Type := * + } + + template Subses_Decision_Info_AVP mw_subses_Decision_Info_qosInfoAndDefaultEpsBearer modifies mw_subses_Decision_Info_any := { + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5, + qoS_Information := mw_qoS_Information + } + + + } //end group S9HeaderFields + } //end DiameterHeaderFields + + group DiameterTemplates { + group CxMessageTemplates{ + group CxRequestBasicTemplates{ + + template MAR_MSG mw_MAR_basic modifies mw_MAR_dummy := { + header := mw_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + mAR_Body :={ + auth_Application_Id := *, + sIP_AOR := *, + sIP_Method := * + } + } + + template UAR_MSG mw_UAR_basic modifies mw_UAR_dummy := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + sIP_AOR := *, + sIP_Visited_Network_Id := *, + sIP_User_Authorization_Type := * + } + } + + template RTR_MSG mw_RTR_basic modifies mw_RTR_dummy := { + header := mw_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + rTR_Body :={ + auth_Application_Id := *, + sIP_Deregistration_Reason := * + } + } + + template SAR_MSG mw_SAR_basic modifies mw_SAR_dummy := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + auth_Application_Id := *, + sIP_Server_Assignment_Type := *, + sIP_User_Data_Already_Available := * + } + } + + } + group CxRequestMessageTemplates{ + + template MAR_MSG mw_MAR(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_MAR_basic := { + header := mw_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + mAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + sIP_Number_Auth_Items := ?, + sIP_Auth_Data_Item := ?, + server_Name := ? + } + } + + template RTR_MSG mw_RTR modifies mw_RTR_basic := { + header := mw_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + rTR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + deregistration_Reason := mw_deregistrationReason + } + } + + template SAR_MSG mw_SAR_Registration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(REGISTRATION_E), + user_Data_Already_Available := ? + } + } + + template SAR_MSG mw_SAR_UnregisteredUser(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(UNREGISTERED_USER_E), + user_Data_Already_Available := ? + } + } + + template SAR_MSG mw_SAR_UserDeregistration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_SAR_basic := { + header := mw_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + sAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + public_Identity := {p_publicIdentity}, + server_Name := ?, + server_Assignment_Type := mw_serverAssignmentType(USER_DEREGISTRATION_E), + user_Data_Already_Available := ? + } + } + + template UAR_MSG mw_UAR_Registration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + visited_Network_Identifier := ?, + user_Authorization_Type := mw_userAuthorizationType(REGISTRATION) + } + } + + template UAR_MSG mw_UAR(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity + } + } + + template UAR_MSG mw_UAR_unknownPrivateId(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?,//UNKNOWN PRIVATE USER IDENTITY + public_Identity := p_publicIdentity + } + } + + template UAR_MSG mw_UAR_deRegistration(template (present) Public_Identity_AVP p_publicIdentity := ?) modifies mw_UAR_basic := { + header := mw_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + uAR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Name := ?, + public_Identity := p_publicIdentity, + visited_Network_Identifier := ?, + user_Authorization_Type := mw_userAuthorizationType(DE_REGISTRATION) + } + } + + }// end group CxRequestMessageTemplates + + group CxAnswertBasicTemplates{ + + template MAA_MSG mw_MAA_basic modifies mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + mAA_Body :={ + auth_Application_Id := * + } + } + + template RTA_MSG mw_RTA_basic modifies mw_RTA_dummy := { + header := mw_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + rTA_Body :={ + auth_Application_Id := * + } + } + + template SAA_MSG mw_SAA_basic modifies mw_SAA_dummy := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + auth_Application_Id := *, + vendor_Specific_Application_Id := ?, + sIP_User_Data := *, + sIP_Accounting_Information := * + } + } + + template UAA_MSG mw_UAA_basic modifies mw_UAA_dummy := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Application_Id := *, + experimental_Result := *, + supported_Features := *, + server_Name := *, + server_Capabilities := *, + failed := * + } + } + + }// end group CxAnswertBasicTemplates + + group CxAnswertMessageTemplates{ + + template MAA_MSG mw_MAA modifies mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + mAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Application_Id := *, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + experimental_Result := omit, + user_Name := ?, + sIP_Number_Auth_Items := ?, + sIP_Auth_Data_Item := ? + } + } + + template RTA_MSG mw_RTA modifies mw_RTA_basic := { + header := mw_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + rTA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template SAA_MSG mw_SAA modifies mw_SAA_basic := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template SAA_MSG mw_SAA_userData modifies mw_SAA_basic := { + header := mw_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + sAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Data := ?, + charging_Information := ? + } + } + + template UAA_MSG mw_UAA_diamFirstRegistration modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_FIRST_REGISTRATION_E) + } + } + + template UAA_MSG mw_UAA_diamSubsequentRegistration modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_SUBSEQUENT_REGISTRATION_E), + server_Name := ?, + server_Capabilities := omit + } + } + + template UAA_MSG mw_UAA_diamErrorUserUnknown modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := omit, + experimental_Result := mw_experimentalResult(DIAMETER_ERROR_USER_UNKNOWN_E), + server_Name := omit + } + } + + template UAA_MSG mw_UAA_diamSuccess modifies mw_UAA_basic := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + uAA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + experimental_Result := omit, + server_Name := ?, + server_Capabilities := omit + } + } + + }// end group CxRequestMessageTemplates + }//end group CxMessageTemplates + group RxMessageTemplates{ + group RxRequestBasicTemplates{ + + template AAR_MSG mw_AAR_basic modifies mw_AAR_dummy := { + header := mw_diameterHeaderReq_dummy(AAR_E, c_applIdRx) + } + + template ASR_MSG mw_ASR_basic modifies mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, c_applIdRx) + } + + template RAR_MSG mw_RAR_basic modifies mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, c_applIdRx), + rAR_Body :={ + re_Auth_Request_Type := * + } + } + + template STR_MSG mw_STR_basic modifies mw_STR_dummy := { + header := mw_diameterHeaderReq_dummy(STR_E, c_applIdRx) + } + + } + group RxRequestMessageTemplates{ + + template AAR_MSG mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + template (present) Rx_Request_Type_AVP p_rxRequestType := ?, + template (present) Service_Info_Status_AVP p_serviceInfoStatus := ?, + template (present) Framed_IP_Address_AVP p_framedIPAddress := ?, + template (present) Specific_Action_AVP p_specificAction := ? + ) modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := ?, + specific_Action := {p_specificAction}, + framed_IP_Address := p_framedIPAddress, + rx_Request_Type := p_rxRequestType, + service_Info_Status := p_serviceInfoStatus + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_specificActionLossOfBearer modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_SubComponentFlowStatusEnabled}, + specific_Action := {((mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))), + (?,(mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))), + (?,?,(mw_specificAction(INDICATION_OF_LOSS_OF_BEARER_E))) + }, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusDisabled modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusDisabled}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabledDownlink modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabledDownlink}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabledUplink modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabledUplink}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template AAR_MSG mw_AAR_MediaComponent_mediaComponentDescription_FlowStatusEnabled modifies mw_AAR_basic := { + aAR_Body :={ + media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ? + //framed_IPv6_Address := *, + } + } + + template ASR_MSG mw_ASR_abortCause(template (present) Abort_Cause_Type p_avpData) modifies mw_ASR_basic := { + aSR_Body :={ + abort_cause := mw_abortCause(p_avpData) + } + } + + template RAR_MSG mw_RAR_SpecificAction modifies mw_RAR_basic := { + rAR_Body :={ + specific_Action := ? + } + } + + }// end group RxRequestMessageTemplates + group RxAnswerBasicTemplates{ + + template AAA_MSG mw_AAA_basic modifies mw_AAA_dummy := { + header := mw_diameterHeaderAns_dummy(AAA_E, c_applIdRx) + } + + template ASA_MSG mw_ASA_basic modifies mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, c_applIdRx) + } + + template RAA_MSG mw_RAA_basic modifies mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, c_applIdRx) + } + + template STA_MSG mw_STA_basic modifies mw_STA_dummy := { + header := mw_diameterHeaderAns_dummy(STA_E, c_applIdRx) + } + + } + group RxAnswertMessageTemplates{ + + template AAA_MSG mw_AAA_AcceptableService modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + }, + ip_Can_Type := ?, + rat_Type := ? + + } + } + + template AAA_MSG mw_AAA_resultCode modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template AAA_MSG mw_AAA_resultCode_mediaCopmonentDescription modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + } + + } + } + + template ASA_MSG mw_ASA_resultCode modifies mw_ASA_basic := { + aSA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template RAA_MSG mw_RAA_Rx_resultCode modifies mw_RAA_basic := { + rAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template STA_MSG mw_STA_diamSuccess modifies mw_STA_basic := { + sTA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + }// end group RxRequestMessageTemplates + }//end group RxMessageTemplates + + group GxMessageTemplates{ + group GxRequestBasicTemplates{ + + template CCR_MSG mw_CCR_basic modifies mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, c_applIdGx) + } + + template RAR_MSG mw_RAR_Gx_basic modifies mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, c_applIdGx) + } + + } + group GxRequestMessageTemplates{ + + template CCR_MSG mw_CCR_RequestType(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData) + } + } + + template CCR_MSG mw_CCR_SubscriberIMSI_qosInformation_class5(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + + template RAR_MSG mw_RAR_ChargingRuleInstall(template Charging_Rule_Install_AVP p_Charging_Rule_Install) modifies mw_RAR_Gx_basic := { + rAR_Body :={ + charging_Rule_Install := {p_Charging_Rule_Install} + } + } + + template RAR_MSG mw_RAR_ChargingRuleRemove modifies mw_RAR_Gx_basic := { + rAR_Body :={ + charging_Rule_Remove := {mw_chrgRuleRemove_Name} + } + } + + }// end group GxRequestMessageTemplates + + group GxAnswerBasicTemplates{ + + template CCA_MSG mw_CCA_basic modifies mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, c_applIdGx) + } + + template RAA_MSG mw_RAA_Gx_basic modifies mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, c_applIdGx) + } + } + + group GxAnswertMessageTemplates{ + + template CCA_MSG mw_CCA_resultCode modifies mw_CCA_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template CCA_MSG mw_CCA_qosInformation_class5 modifies mw_CCA_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + qoS_Information := {mw_qoS_Information}, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + + template RAA_MSG mw_RAA_resultCode modifies mw_RAA_Gx_basic := { + rAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + }// end group GxRequestMessageTemplates + }//end group GxMessageTemplates + + group S6aMessageTemplates{ + group S6aRequestBasicTemplates{ + + template AIR_MSG mw_AIR_basic modifies mw_AIR_dummy := { + header := mw_diameterHeaderReq_dummy(AIR_E, c_applIdS6a) + } + + template CLR_MSG mw_CLR_basic modifies mw_CLR_dummy := { + header := mw_diameterHeaderReq_dummy(CLR_E, c_applIdS6a) + } + + template PUER_MSG mw_PUER_basic modifies mw_PUER_dummy := { + header := mw_diameterHeaderReq_dummy(PUER_E, c_applIdS6a) + } + + template ULR_MSG mw_ULR_basic modifies mw_ULR_dummy := { + header := mw_diameterHeaderReq_dummy(ULR_E, c_applIdS6a) + } + + } + group S6aRequestMessageTemplates{ + + template AIR_MSG mw_AIR modifies mw_AIR_dummy := { + aIR_Body :={ + user_Name := ?, + req_EUTRAN_Auth_Info := ?, + visited_PLMN_Id :=? + } + } + + template CLR_MSG mw_CLR_cancelation modifies mw_CLR_dummy := { + cLR_Body :={ + user_Name := ?, + cancellation_Type := mw_cancellationType(SUBSCRIPTION_WITHDRAWAL_E), + cLR_Flags :=? + } + } + + template PUER_MSG mw_PUER_userName modifies mw_PUER_dummy := { + pUER_Body :={ + user_Name := ?, + pUER_Flags :=? + } + } + + template ULR_MSG mw_ULR_userName modifies mw_ULR_dummy := { + uLR_Body :={ + user_Name := ?, + ulr_Flags := ?, + rat_Type := ?, + visited_PLMN_Id := ? + } + } + + + }// end group S6aRequestMessageTemplates + group S6aAnswerBasicTemplates{ + + template AIA_MSG mw_AIA_basic modifies mw_AIA_dummy := { + header := mw_diameterHeaderAns_dummy(AIA_E, c_applIdS6a) + } + + template CLA_MSG mw_CLA_basic modifies mw_CLA_dummy := { + header := mw_diameterHeaderAns_dummy(CLA_E, c_applIdS6a) + } + + template PUEA_MSG mw_PUEA_basic modifies mw_PUEA_dummy := { + header := mw_diameterHeaderAns_dummy(PUEA_E, c_applIdS6a) + } + + template ULA_MSG mw_ULA_basic modifies mw_ULA_dummy := { + header := mw_diameterHeaderAns_dummy(ULA_E, c_applIdS6a) + } + + } + group S6aAnswertMessageTemplates{ + + template AIA_MSG mw_AIA_resultCode modifies mw_AIA_basic := { + aIA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + authentication_Info := ? + } + } + + template CLA_MSG mw_CLA_resultCode modifies mw_CLA_basic := { + cLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template PUEA_MSG mw_PUEA_resultCode modifies mw_PUEA_basic := { + pUEA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template ULA_MSG mw_ULA_resultCode modifies mw_ULA_basic := { + uLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template ULA_MSG mw_ULA_resultCode_flags modifies mw_ULA_basic := { + uLA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + ula_Flags := ? + } + } + + }// end group S6aRequestMessageTemplates + }//end group S6aMessageTemplates + group ShMessageTemplates{ + group ShRequestMessageTemplates{ + + template UDR_MSG mw_UDR_userData_publicIdentity(template (present) UTF8String p_avpData) modifies mw_UDR_dummy := { + uDR_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + user_Identity := mw_userIdentity_publicIdentity(mw_publicIdentity(p_avpData)), + data_Reference := ? + } + } + + }// end group ShRequestMessageTemplates + group ShAnswertMessageTemplates{ + + template UDA_MSG mw_UDA_diamSuccess modifies mw_UDA_dummy := { + uDA_Body :={ + vendor_Specific_Application_Id := ?, + auth_Session_State := mw_authSessionState_noStateMaintained, + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Data := ? + } + } + + }// end group ShRequestMessageTemplates + }//end group ShMessageTemplates + group S9MessageTemplates{ + + group S9RequestBasicTemplates{ + + template AAR_MSG mw_AAR_S9_basic modifies mw_AAR_dummy := { + header := mw_diameterHeaderReq_dummy(AAR_E, ?/*TODO c_applIdS9*/) + } + + template ASR_MSG mw_ASR_S9_basic modifies mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, ?/*TODO c_applIdS9*/) + } + + template CCR_MSG mw_CCR_S9_basic modifies mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, ?/*TODO c_applIdS9*/) + } + + template STR_MSG mw_STR_S9_basic modifies mw_STR_dummy := { + header := mw_diameterHeaderReq_dummy(STR_E, ?/*TODO c_applIdS9*/) + } + + } + group S9RequestMessageTemplates{ + + template ASR_MSG mw_ASR_S9_abortCause(template (present) Abort_Cause_Type p_avpData) modifies mw_ASR_S9_basic := { + aSR_Body :={ + abort_cause := mw_abortCause(p_avpData) + } + } + + template CCR_MSG mw_CCR_S9_Establishment(CC_Request_Ty_Type p_avpData) modifies mw_CCR_S9_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + bearer_Usage := *,//mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5, + subsesion_Enforcement_Info := ? //AXR {mw_subses_Enforcement_Info(mw_subsession_Operation_AVP (ESTABLISHMENT_E))} + } + } + + template CCR_MSG mw_CCR_S9_Termination(CC_Request_Ty_Type p_avpData) modifies mw_CCR_S9_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subsesion_Enforcement_Info := ? //AXR {mw_subses_Enforcement_Info(mw_subsession_Operation_AVP (TERMINATION_E))} + } + } + + }// end group S9RequestMessageTemplates + + group S9AnswerBasicTemplates{ + + template AAA_MSG mw_AAA_S9_basic modifies mw_AAA_dummy := { + header := mw_diameterHeaderAns_dummy(AAA_E, ?/*TODO c_applIdS9*/) + } + + template ASA_MSG mw_ASA_S9_basic modifies mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, ?/*TODO c_applIdS9*/) + } + + template CCA_MSG mw_CCA_S9_basic modifies mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, ?/*TODO c_applIdS9*/) + } + + template STA_MSG mw_STA_S9_basic modifies mw_STA_dummy := { + header := mw_diameterHeaderAns_dummy(STA_E, ?/*TODO c_applIdS9*/) + } + } + + group S9AnswertMessageTemplates{ + + template AAA_MSG mw_AAA_S9_resultCode modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + template AAA_MSG mw_AAA_S9_AcceptableService modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + }, + ip_Can_Type := ?, + rat_Type := ? + + } + } + + template AAA_MSG mw_AAA_S9_resultCode_mediaCopmonentDescription modifies mw_AAA_S9_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + acceptable_service_info := { + media_component_description := + {mw_mediaComponentDescription_SubComponentFlowStatusEnabled + } + } + + } + } + + template CCA_MSG mw_CCA_S9_subsessionDecisionAny modifies mw_CCA_S9_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subsession_Decision_Info := {mw_subses_Decision_Info_any} + } + } + + template CCA_MSG mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer modifies mw_CCA_S9_basic := { + cCA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subsession_Decision_Info := {mw_subses_Decision_Info_qosInfoAndDefaultEpsBearer} + } + } + + template STA_MSG mw_STA_S9_diamSuccess modifies mw_STA_S9_basic := { + sTA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess) + } + } + + }// end group S9RequestMessageTemplates + }//end group S9MessageTemplates + } // end group DiameterTemplates + group DiameterTemplatesDummy + { + + group dummy_request_templates_receive { + + template AIR_MSG mw_AIR_dummy := + { + header := mw_diameterHeaderReq_dummy(AIR_E, ?), + session_Id := ?, + aIR_Body := mw_AIR_Body_dummy + } + + template AIR_Body_AVP mw_AIR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + req_EUTRAN_Auth_Info := *, + req_UTRAN_GERAN_Auth_Info := *, + visited_PLMN_Id :=?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) CLR_MSG mw_CLR_dummy := { + header := mw_diameterHeaderReq_dummy ( CLR_E, c_applIdS6a ), + session_Id := ?, + cLR_Body := mw_CLR_Body_dummy + } // End of template mw_CLR_dummy + + template (present) CLR_Body_AVP mw_CLR_Body_dummy := { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + cancellation_Type := ?, + cLR_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_CLR_Body_dummy + + template (present) PUER_MSG mw_PUER_dummy := { + header := mw_diameterHeaderReq_dummy ( PUER_E, c_applIdS6a ), + session_Id := ?, + pUER_Body := mw_PUER_Body_dummy + } // End of template mw_PUR_dummy + + template (present) PUER_Body_AVP mw_PUER_Body_dummy := { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Name := ?, + pUER_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_PUER_Body_dummy + + template (present) ULR_MSG mw_ULR_dummy := { + header := mw_diameterHeaderReq_dummy ( ULR_E, c_applIdS6a ), + session_Id := ?, + uLR_Body := mw_ULR_Body_dummy + } // End of template mw_uLR_dummy + + template (present) ULR_Body_AVP mw_ULR_Body_dummy := { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + user_Name := ?, + supported_Features := *, + terminal_Information := *, + rat_Type := ?, + ulr_Flags := ?, + ue_SRVCC_Capability := *, + visited_PLMN_Id := ?, + sgsn_Number := *, + homogeneous_Support := *, + gmlc_Address := *, + active_APN := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_ULR_Body_dummy + + }//end group dummy_request_templates_receive + + group dummy_response_templates_receive { + + template AIA_MSG mw_AIA_dummy := { + header := mw_diameterHeaderAns_dummy(AIA_E, ?), + session_Id := ?, + aIA_Body := mw_AIA_Body_dummy + } + + template AIA_Body_AVP mw_AIA_Body_dummy := + { + vendor_Specific_Application_Id := *, + result_Code := ?, + experimental_Result := *, + error_Diagnostic := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + authentication_Info := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) CLA_MSG mw_CLA_dummy := { + header := mw_diameterHeaderAns_dummy ( CLA_E, c_applIdS6a ), + session_Id := ?, + cLA_Body := mw_CLA_Body_dummy + } + + template (present) CLA_Body_AVP mw_CLA_Body_dummy := { + vendor_Specific_Application_Id := *, + supported_Features := *, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) PUEA_MSG mw_PUEA_dummy := { + header := mw_diameterHeaderAns_dummy ( PUEA_E, c_applIdS6a ), + session_Id := ?, + pUEA_Body := mw_PUEA_Body_dummy + } + + template (present) PUEA_Body_AVP mw_PUEA_Body_dummy := { + vendor_Specific_Application_Id := ?, + supported_Features := *, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + pUEA_Flags := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template (present) ULA_MSG mw_ULA_dummy := { + header := mw_diameterHeaderAns_dummy ( ULA_E, c_applIdS6a ), + session_Id := ?, + uLA_Body := mw_ULA_Body_dummy + } // End of template mw_ULA_dummy + + template (present) ULA_Body_AVP mw_ULA_Body_dummy := { + vendor_Specific_Application_Id := *, + result_Code := *, + experimental_Result := *, + error_Diagnostic := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + ula_Flags := *, + subscription_Data := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } // End of template mw_ULA_Body_dummy + + }//end group dummy_response_templates_receive + + group AVPCodeConstantsTS129_722 { + + const integer c_subscription_Data_AVP_Code := 1400; + // Ref: table 7.3.1/1 + const integer c_terminal_Information_AVP_Code := 1401; + // Ref: table 7.3.1/1 + const integer c_imei_AVP_Code := 1402; + // Ref: table 7.3.1/1 + const integer c_software_Version_AVP_Code := 1403; + // Ref: table 7.3.1/1 + const integer c_qos_Subscribed_AVP_Code := 1404; + // Ref: table 7.3.1/1 + const integer c_ulr_Flags_AVP_Code := 1405; + // Ref: table 7.3.1/1 + const integer c_ula_Flags_AVP_Code := 1406; + // Ref: table 7.3.1/1 + const integer c_visited_PLMN_Id_AVP_Code := 1407; + // Ref: table 7.3.1/1 + const integer c_requested_EUTRAN_Authentication_Info_AVP_Code := 1408; + // Ref: table 7.3.1/1 + const integer c_requested_UTRAN_GERAN_Authentication_Info_AVP_Code := 1409; + // Ref: table 7.3.1/1 + const integer c_number_Of_Requested_Vectors_AVP_Code := 1410; + // Ref: table 7.3.1/1 + const integer c_re_Synchronization_Info_AVP_Code := 1411; + // Ref: table 7.3.1/1 + const integer c_immediate_Response_Preferred_AVP_Code := 1412; + // Ref: table 7.3.1/1 + const integer c_authentication_Info_AVP_Code := 1413; + // Ref: table 7.3.1/1 + const integer c_e_UTRAN_Vector_AVP_Code := 1414; + // Ref: table 7.3.1/1 + const integer c_utran_Vector_AVP_Code := 1415; + // Ref: table 7.3.1/1 + const integer c_geran_Vector_AVP_Code := 1416; + // Ref: table 7.3.1/1 + const integer c_network_Access_Mode_AVP_Code := 1417; + // Ref: table 7.3.1/1 + const integer c_hplmn_ODB_AVP_Code := 1418; + // Ref: table 7.3.1/1 + const integer c_item_Number_AVP_Code := 1419; + // Ref: table 7.3.1/1 + const integer c_cancellation_Type_AVP_Code := 1420; + // Ref: table 7.3.1/1 + const integer c_dsr_Flags_AVP_Code := 1421; + // Ref: table 7.3.1/1 + const integer c_dsa_Flags_AVP_Code := 1422; + // Ref: table 7.3.1/1 + const integer c_context_Identifier_AVP_Code := 1423; + // Ref: table 7.3.1/1 + const integer c_subscriber_Status_AVP_Code := 1424; + // Ref: table 7.3.1/1 + const integer c_operator_Determined_Barring_AVP_Code := 1425; + // Ref: table 7.3.1/1 + const integer c_access_Restriction_Data_AVP_Code := 1426; + // Ref: table 7.3.1/1 + const integer c_apn_OI_Replacement_AVP_Code := 1427; + // Ref: table 7.3.1/1 + const integer c_all_APN_Configurations_Included_Indicator_AVP_Code := 1428; + // Ref: table 7.3.1/1 + const integer c_apn_Configuration_Profile_AVP_Code := 1429; + // Ref: table 7.3.1/1 + const integer c_apn_Configuration_AVP_Code := 1430; + // Ref: table 7.3.1/1 + const integer c_eps_Subscribed_QoS_Profile_AVP_Code := 1431; + // Ref: table 7.3.1/1 + const integer c_vplmn_Dynamic_Address_Allowed_AVP_Code := 1432; + // Ref: table 7.3.1/1 + const integer c_stn_SR_AVP_Code := 1433; + // Ref: table 7.3.1/1 + const integer c_alert_Reason_AVP_Code := 1434; + // Ref: table 7.3.1/1 + const integer c_ambr_AVP_Code := 1435; + // Ref: table 7.3.1/1 + const integer c_csg_Subscription_Data_AVP_Code := 1436; + // Ref: table 7.3.1/1 + const integer c_csg_Id_AVP_Code := 1437; + // Ref: table 7.3.1/1 + const integer c_pdn_GW_Allocation_Type_AVP_Code := 1438; + // Ref: table 7.3.1/1 + const integer c_expiration_Date_AVP_Code := 1439; + // Ref: table 7.3.1/1 + const integer c_rat_Frequency_Selection_Priority_ID_AVP_Code := 1440; + // Ref: table 7.3.1/1 + const integer c_ida_Flags_AVP_Code := 1441; + // Ref: table 7.3.1/1 + const integer c_pua_Flags_AVP_Code := 1442; + // Ref: table 7.3.1/1 + const integer c_nor_Flags_AVP_Code := 1443; + // Ref: table 7.3.1/1 + const integer c_user_Id_AVP_Code := 1444; + // Ref: table 7.3.1/1 + const integer c_equipment_Status_AVP_Code := 1445; + // Ref: table 7.3.1/1 + const integer c_regional_Subscription_Zone_Code_AVP_Code := 1446; + // Ref: table 7.3.1/1 + const integer c_rand_AVP_Code := 1447; + // Ref: table 7.3.1/1 + const integer c_xres_AVP_Code := 1448; + // Ref: table 7.3.1/1 + const integer c_autn_AVP_Code := 1449; + // Ref: table 7.3.1/1 + const integer c_kasme_AVP_Code := 1450; + // Ref: table 7.3.1/1 + const integer c_kc_AVP_Code := 1453; + // Ref: table 7.3.1/1 + const integer c_sres_AVP_Code := 1454; + // Ref: table 7.3.1/1 + const integer c_pdn_Type_AVP_Code := 1456; + // Ref: table 7.3.1/1 + const integer c_roaming_Restricted_Due_To_Unsupported_Feature_AVP_Code := 1457; + // Ref: table 7.3.1/1 + const integer c_omc_Id_AVP_Code := 1466; + // Ref: table 7.3.1/1 + const integer c_gprs_Subscription_Data_AVP_Code := 1467; + // Ref: table 7.3.1/1 + const integer c_complete_Data_List_Included_Indicator_AVP_Code := 1468; + // Ref: table 7.3.1/1 + const integer c_pdp_Context_AVP_Code := 1469; + // Ref: table 7.3.1/1 + const integer c_pdp_Type_AVP_Code := 1470; + // Ref: table 7.3.1/1 + const integer c_3gpp2_MEID_AVP_Code := 1471; + // Ref: table 7.3.1/1 + const integer c_specific_APN_Info_AVP_Code := 1472; + // Ref: table 7.3.1/1 + const integer c_lcs_Info_AVP_Code := 1473; + // Ref: table 7.3.1/1 + const integer c_gmlc_Number_AVP_Code := 1474; + // Ref: table 7.3.1/1 + const integer c_lcs_PrivacyException_AVP_Code := 1475; + // Ref: table 7.3.1/1 + const integer c_ss_Code_AVP_Code := 1476; + // Ref: table 7.3.1/1 + const integer c_ss_Status_AVP_Code := 1477; + // Ref: table 7.3.1/1 + const integer c_notification_To_UE_User_AVP_Code := 1478; + // Ref: table 7.3.1/1 + const integer c_external_Client_AVP_Code := 1479; + // Ref: table 7.3.1/1 + const integer c_client_Identity_AVP_Code := 1480; + // Ref: table 7.3.1/1 + const integer c_gmlc_Restriction_AVP_Code := 1481; + // Ref: table 7.3.1/1 + const integer c_plmn_Client_AVP_Code := 1482; + // Ref: table 7.3.1/1 + const integer c_service_Type_AVP_Code := 1483; + // Ref: table 7.3.1/1 + const integer c_serviceTypeIdentity_AVP_Code := 1484; + // Ref: table 7.3.1/1 + const integer c_mo_LR_AVP_Code := 1485; + // Ref: table 7.3.1/1 + const integer c_teleservice_List_AVP_Code := 1486; + // Ref: table 7.3.1/1 + const integer c_ts_Code_AVP_Code := 1487; + // Ref: table 7.3.1/1 + const integer c_call_Barring_Info_AVP_Code := 1488; + // Ref: table 7.3.1/1 + const integer c_sgsn_Number_AVP_Code := 1489; + // Ref: table 7.3.1/1 + const integer c_idr_Flags_AVP_Code := 1490; + // Ref: table 7.3.1/1 + const integer c_ics_Indicator_AVP_Code := 1491; + // Ref: table 7.3.1/1 + const integer c_ims_Voice_Over_PS_Sessions_Supported_AVP_Code := 1492; + // Ref: table 7.3.1/1 + const integer c_homogeneous_Support_of_IMS_Voice_Over_PS_Sessions_AVP_Code := 1493; + // Ref: table 7.3.1/1 + const integer c_last_UE_Activity_Time_AVP_Code := 1494; + // Ref: table 7.3.1/1 + const integer c_eps_User_State_AVP_Code := 1495; + // Ref: table 7.3.1/1 + const integer c_eps_Location_Information_AVP_Code := 1496; + // Ref: table 7.3.1/1 + const integer c_mme_User_State_AVP_Code := 1497; + // Ref: table 7.3.1/1 + const integer c_sgsn_User_State_AVP_Code := 1498; + // Ref: table 7.3.1/1 + const integer c_user_State_AVP_Code := 1499; + // Ref: table 7.3.1/1 + const integer c_mme_Location_Information_AVP_Code := 1600; + // Ref: table 7.3.1/1 + const integer c_sgsn_Location_Information_AVP_Code := 1601; + // Ref: table 7.3.1/1 + const integer c_service_Area_Identity_AVP_Code := 1607; + // Ref: table 7.3.1/1 + const integer c_geographical_Information_AVP_Code := 1608; + // Ref: table 7.3.1/1 + const integer c_geodetic_Information_AVP_Code := 1609; + // Ref: table 7.3.1/1 + const integer c_current_Location_Retrieved_AVP_Code := 1610; + // Ref: table 7.3.1/1 + const integer c_age_Of_Location_Information_AVP_Code := 1611; + // Ref: table 7.3.1/1 + const integer c_active_APN_AVP_Code := 1612; + // Ref: table 7.3.1/1 + const integer c_error_Diagnostic_AVP_Code := 1614; + // Ref: table 7.3.1/1 + const integer c_ext_PDP_Address_AVP_Code := 1621; + // Ref: table 7.3.1/1 + const integer c_ue_SRVCC_Capability_AVP_Code := 1615; + // Ref: table 7.3.1/1 + const integer c_mps_Priority_AVP_Code := 1616; + // Ref: table 7.3.1/1 + const integer c_vplmn_LIPA_Allowed_AVP_Code := 1617; + // Ref: table 7.3.1/1 + const integer c_lipa_Permission_AVP_Code := 1618; + // Ref: table 7.3.1/1 + const integer c_subscribed_Periodic_RAU_TAU_Timer_AVP_Code := 1619; + // Ref: table 7.3.1/1 + const integer c_ext_PDP_Type_AVP_Code := 1620; + // Ref: table 7.3.1/1 + const integer c_sipto_Permission_AVP_Code := 1613; + // Ref: table 7.3.1/1 + const integer c_mdt_Configuration_AVP_Code := 1622; + // Ref: table 7.3.1/1 + const integer c_job_Type_AVP_Code := 1623; + // Ref: table 7.3.1/1 + const integer c_event_Threshold_RSRP_AVP_Code := 1629; + // Ref: table 7.3.1/1 + const integer c_event_Threshold_RSRQ_AVP_Code := 1630; + // Ref: table 7.3.1/1 + const integer c_relay_Node_Indicator_AVP_Code := 1633; + // Ref: table 7.3.1/1 + const integer c_mdt_User_Consent_AVP_Code := 1634; + // Ref: table 7.3.1/1 + const integer c_puer_Flags_AVP_Code := 1635; + // Ref: table 7.3.1/1 + const integer c_clr_Flags_AVP_Code := 1638; + // Ref: table 7.3.1/1 + } + } +}//end module AtsImsIot_Diameter_Templates \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn new file mode 100644 index 0000000..9a94e23 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -0,0 +1,3512 @@ +/** + * @author STF 370, TTF006; + * @version $Id: $ + * @desc This module provides common function for TestCoordinator component. + */ +module AtsImsIot_Functions { + + //LibDiameter + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + + //LibSip + import from LibSip_SIPTypesAndValues all; + + //LibIms + import from LibIms_UpperTester all; + + //LibIot + import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } + import from LibIot_VxLTE_PIXITS all; + import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } + import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } + import from LibIot_Functions { function f_getE2EVerdict; } + import from LibIot_TypesAndValues { type DefaultList, MonitorInterfaceInfo; } + import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;} + + //LibUpperTester + import from LibUpperTester all; + + //AtsImsIot + import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter;} + + group ue { + + /** + * @desc + * Starts user component behavior for triggering the registration + * procedures at the UE from test coordinator. + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator + return boolean { + var boolean v_status := true; + // TODO Investigate if f_PR_user_home_registration is to be removed + // Reason: Thre is no difference when triggering UE to register in home or visiting NW + if( p_userInfo.publicId == "dummy" ) { return false; } + + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + return v_status; + } + + /** + * @desc + * Starts user component behavior for checking the successful + * registration. + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "dummy" ) { return false; } + v_status := f_mtc_userCheckRegistrationSuccessful(p_userCompRef); + return v_status; + } + + /** + * @desc + * Starts user component behavior for checking that UE + * is not registerd. + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + **/ + function f_mtc_userCheckNoRegistration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "dummy" ) { return true; } + v_status := f_mtc_userCheckRegistrationUnsuccessful(p_userCompRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate an MO call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateCall(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_calledParty.publicId == "dummy" ) { return true; } + v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been initiated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsInitiated()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Answer call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userAnswerCallSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been answered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsAnswered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc End the call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userEndCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate an MO call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSetupVoiceCall(EquipmentUser p_ueRefA, EquipmentUser p_ueRefB, ImsUserInfo p_calledPartyB) + runs on TestCoordinator return boolean { + var boolean v_success := false; + f_mtc_userInitiateCall (p_ueRefA, p_calledPartyB); + f_mtc_userCheckRinging(p_ueRefB); + f_mtc_userCheckPeerIsRinging(p_ueRefA); + f_mtc_userAnswerCall(p_ueRefB); + f_mtc_userCheckCallEstablished(p_ueRefA); + f_mtc_userCheckCallEstablished(p_ueRefB); + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + + } + + /** + * + * @desc Starts user component behaviour for checking that the User + * Call has been ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userEndCallSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserCallIsEnded()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userAddNewMediaStreamSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that + * a new media stream has been added + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewMediaStreamSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserAddNewMediaStream()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to remove a media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRemoveMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + v_status := f_mtc_userRemoveNewMediaStreamSuccessful(p_ueRef); + return v_status; + } + + /** + * + * @desc Starts user component behaviour for checking that + * a new media stream has been added + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRemoveNewMediaStreamSuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserRemoveNewMediaStream()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + + /** + * @desc Trigger UE given by p_ueRef to check the remove of a media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRemoveMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userModifiyMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to add a new media stream + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckNewMediaStream(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Trigger UE given by p_ueRef to loose conectifity + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userLooseConnection(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to enter CANCEL current call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerCancelCall(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to enter HOLD state + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerHold(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Trigger UE given by p_ueRef to leave HOLD state and resume pending call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerResume(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckRinging(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef reports a successfull call establishment + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallEstablished(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE given by p_ueRef reports a not successfull call establishment + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallCannotBeEstablished(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Check that UE by p_ueRef given reports that its peer is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckPeerIsRinging(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports HOLD state + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckUserOnHold(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call has been resumed + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallResumed(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call has ended + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallEnded(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call is terminated + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallTerminated(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + /** + * @desc Check that UE by p_ueRef given reports that call is no longer offered + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallNoLongerOffered(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that call has been cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallCancelled(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that call has been rejected due to ACR + * @param p_userCompRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_userCheckCallRejectedACR(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Start capturing and monitoring traffic on all configured interfaces + * @return true or false + */ + function f_mtc_StartAllTrafficCapture() + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Starts user component behaviour for registration from test coordinator + * @param p_userCompRef Reference to IMS UE user component + * @param p_publicId public user identity + * @param p_privateId private user identity + * @param p_pw user password + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRegister(EquipmentUser p_userCompRef, charstring p_publicId, charstring p_privateId, charstring p_pw) runs on TestCoordinator return boolean { + // TODO server address parameter may needed + var boolean v_success := false; + + p_userCompRef.start(f_userRegistration(p_publicId, p_privateId, p_pw)); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + function f_mtc_userCheckRegistrationSuccessful(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserIsRegistered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + /** + * + * @desc Starts user component behaviour for checking that the UE + * is not registered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRegistrationUnsuccessful(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_checkUserIsNotRegistered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + return v_success; + } + + /** + * @desc Starts user component behaviour for registration from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param publicId public user identity + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userDeregister(EquipmentUser p_userCompRef, charstring p_publicId) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userDeregistration(p_publicId)); + + p_userCompRef.done; + + if( f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for sending a message from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be sent + */ + function f_mtc_userSendMessage(EquipmentUser p_userCompRef, charstring p_content) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userSendMessage(p_content)); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for checking message receipt from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be received + */ + function f_mtc_userCheckMessageReceipt(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userCheckMessageReceipt()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * + * @desc Starts user component behaviour for checking message receipt from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @param p_content Content of meessage to be received + */ + function f_mtc_userCheckMessageNotDelivered(EquipmentUser p_userCompRef) runs on TestCoordinator return boolean { + var boolean v_success := false; + + p_userCompRef.start(f_userCheckMessageNotDelivered()); + + p_userCompRef.done; + + if(f_getE2EVerdict() == pass) { + v_success := true; + } + + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to send the required message indicated by p_command + * @param p_userCompRef Reference to IMS UE user component + * @param p_command Required Message to be sent + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_triggerUserCommand ( EquipmentUser p_userCompRef, EquipmentCommand p_command ) + runs on TestCoordinator return boolean { + var boolean v_success := false; + p_userCompRef.start ( f_sendEquipmentCmd ( valueof ( m_EQ_Request ( p_command, { } ) ) ) ); + p_userCompRef.done; + if ( f_getE2EVerdict( ) == pass ) { v_success := true; } + return v_success; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is informed + * of its presence status update + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceStatus(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is informed + * of peer user presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Verify that user is not informed + * of peer user presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckNoPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes presence + * information from peer user + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToPresenceInformation(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes to resource list + * userPRES_list containing peer user SIP URI + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToPresenceResourceList(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to subscribes to conference event package + * to retrieve the list of the participants of the 1-to-many chat + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userSubscribeToConferenceEventPackage(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that originating user + * receives an authorization request from peer user to see + * its own presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPresenceAuthorizationRequest(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to authorizes peer user to be + * informed of its own presence information + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAuthorizationToPeer(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate conference call + * @param p_ueRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateConferenceCall(EquipmentUser p_ueRef)//, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that Conference is being set up + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceSetUp(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that Conference is established + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceEstablished(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to invite user to join the conference call + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInviteUserToJoinConferenceCall(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallRinging(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that its peer is ringing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallPeerIsRinging(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Answer on Conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerConferenceCall(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify user is alerted when + * peer joins the conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckInfoWhenPeerJoinsConference(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc User leave conference call + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_LeaveConferenceCall(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Check that UE by p_ueRef given reports that conference call has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckConferenceCallEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate 1-to-1 chat + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChat(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate chat 1-to-Many + * of incoming chat invitation + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty_1 Reference to UE 1 + * @param p_calledParty_2 Reference to UE 2 + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChatOneToMany(EquipmentUser p_ueRef, ImsUserInfo p_calledParty_1, ImsUserInfo p_calledParty_2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to Add a new participant in a chat 1-to-Many + * of incoming chat invitation + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty Reference to the new participant + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAddNewPaticipantChatOneToMany(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to 1-to-1 chat session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to 1-to-Many chat session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatInfoOneToMany(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the 1-to-1 chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the 1-to-Many chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAnswerChatOneToMany(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform chating + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChating(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends the 1-to-1 chat session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that 1-to-1 chat session has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to automatically accepts + * 1-to-1 chat invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckAutomaticalyAcceptedChat(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to rejects the invitation + * to chat session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatRejected(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that there is no answer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedNoAnswer(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that call has been + * cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatCancelled(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that call has been + * terminated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatTerminated(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to authenticate to MSRP Relay + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @see RFC 4976 + */ + function f_mtc_userInitiateMSRPAuthentication(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check that authentication to MSRP Relay succeed + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @see RFC 4976 + */ + function f_mtc_userCheckMSRPAuthenticated(EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate chat conference + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateChatConf(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming chat conference invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to chat conference session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user join to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userJoinChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform + * chating conference + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatingConf(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user leave to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userLeaveChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that conference chat session has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckChatConfEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that peer user leave chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerLeaveChatConf(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user rejoin to chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejoinChatConf(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that conference chat session has rejoined + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckRejoinChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that peer user rejoin chat + * conference session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerRejoinChatConfInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate starts file transfer + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateFt(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * of incoming file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that invitation to file transfer session has reached + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPeerFtInfo(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFt(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept the file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAcceptsFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users perform file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFileTransferring(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to automatically accepts + * file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckAutomaticalyAcceptedFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends the file transfer session + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to starts file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerFtStart(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerFtAccept(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to release File transfer before file is transferred + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userTriggerReleaseFtBeforeFileTransfered(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that file transfer has ended + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is + * informed that file transfer has terminated + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtTerminated(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that users stopped file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtStopped(EquipmentUser p_userCompRef1, EquipmentUser p_userCompRef2) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user started file transfer + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtStarted(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef given reports that file transfer has been + * cancelled + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckFtCancel(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to initiate sharing content + * @param p_ueRef Reference to IMS UE user component + * @param p_calledParty ImsUserInfo of called party + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInitiateShare(EquipmentUser p_ueRef, ImsUserInfo p_calledParty) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + //if( p_calledParty.publicId == "dummy" ) { return true; } + //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check partner sharing capabilities + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckPartnerSharingCapabilities(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to request acceptance of sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRequestedToAcceptSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to accept sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userAcceptsSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check that user is informed that + * request has been answered + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingRequestAnswered(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to ends sharing content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_EndSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to check if content sharing ends + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingEnded(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that connected user cannot share content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedAboutPartnerCannotShareContent(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that connected user cannot share content + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userInformedAboutPartnerCanShareContent(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to reject the file transfer invitation + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejectsFt(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user rejects sharing + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userRejectsSharing(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + /** + * @desc Trigger UE given by p_ueRef to verify that user is informed + * that request has been rejected + * @param p_userCompRef Reference to IMS UE user component + * @return + * true in case of successfull execution of the trigger command + * otherwise false + */ + function f_mtc_userCheckSharingRequestRejected(EquipmentUser p_userCompRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + /** + * @desc Trigger IMS Network to deregister UE given by p_ueRef + * @param p_imsRef Reference to IMS network component + * @param p_ueRef Reference to IMS UE user component + * @return true or false + */ + function f_mtc_imsTriggerUeDeregistration(EquipmentUser p_imsRef, EquipmentUser p_ueRef) + runs on TestCoordinator return boolean { + var boolean v_status := true; + // TODO + return v_status; + } + + + + + + /* + * + * @desc Looks for genUser (any) of a specific product + * @param p_productIdx Index of the product + * @return genUser + */ + function f_getAnyValidUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].genUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].genUserId; + } // end if + } // end for j + log("f_getAnyValidUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getAnyValidUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for TelUser of a specific product + * @param p_productIdx Index of the product + * @return TelUser + */ + function f_getTelUserId(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].telUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].telUserId; + } // end if + } // end for j + log("f_getTelUserId: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getTelUserId: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for SipUser of a specific product + * @param p_productIdx Index of the product + * @return SipUser + */ + function f_getSipUserId(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].sipUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].sipUserId; + } // end if + } // end for j + log("f_getSipUserId: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getSipUserId: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for ARCUser for a specific product + * @param p_productIdx Index of the product + * @return ARCUser + */ + function f_getACRUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].acrUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].acrUserId; + } // end if + } // end for j + log("f_getACRUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getACRUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for OIPUser for a specific product + * @param p_productIdx Index of the product + * @return OIPUser + */ + function f_getOIPUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].oipUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].oipUserId; + } // end if + } // end for j + log("f_getOIPUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getOIPUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for OIRUser for a specific product + * @param p_productIdx Index of the product + * @return OIRUser + */ + function f_getOIRUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].oirUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].oirUserId; + } // end if + } // end for j + log("f_getOIRUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getOIRUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for HoldUser for a specific product + * @param p_productIdx Index of the product + * @return HoldUser + */ + function f_getHoldUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].holdUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].holdUserId; + } // end if + } // end for j + log("f_getHoldUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getHoldUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Presence user for a specific product + * @param p_productIdx Index of the product + * @return PresUser + */ + function f_getPresUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].presUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].presUserId; + } // end if + } // end for j + log("f_getPresUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getPresUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for File transfer user for a specific product + * @param p_productIdx Index of the product + * @return FtUser + */ + function f_getFtUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].ftUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].ftUserId; + } // end if + } // end for j + log("f_getFtUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getFtUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Content sharing user for a specific product + * @param p_productIdx Index of the product + * @return ShareUser + */ + function f_getShareUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].shareUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].shareUserId; + } // end if + } // end for j + log("f_getShareUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getShareUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + /* + * + * @desc Looks for Instant messaging user for a specific product + * @param p_productIdx Index of the product + * @return ImUser + */ + function f_getImUser(integer p_productIdx) return ImsUserInfo { + var integer v_size := lengthof(PX_IMS_USER_DATA); + const ImsUserInfo c_dummyInfo := { "dummy", "dummy", "dummy", "dummy", "dummy" }; + var ImsUserIdentity v_userid; + + for(var integer i := 0; i < v_size; i := i+1) { + if(PX_IMS_USER_DATA[i].productIndex == p_productIdx) { + var integer v_size_j := lengthof(PX_IMS_USER_DATA[i].userIds); + for(var integer j := 0; j < v_size_j; j := j+1) { + if ( ischosen(PX_IMS_USER_DATA[i].userIds[j].imUserId )) { + return PX_IMS_USER_DATA[i].userIds[j].imUserId; + } // end if + } // end for j + log("f_getImUser: Did not find specified user id in specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } // end if + } // end for i + log("f_getImUser: Did not find specified product in PX_IMS_USER_DATA"); + return c_dummyInfo; + } + + // TODO + function f_getUEHostname(integer p_ID, out charstring p_hostname) + return boolean { + + // TODO + + return true; + } + + /** + * @desc + * Preamble to handle user registration in home network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PR_user_home_registration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "" ) { return false; } + + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + + return v_status; + } + + /** + * @desc + * Postamble to handle user deregistration in home network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PO_user_home_deregistration(EquipmentUser p_userCompRef) runs on ImsTestCoordinator return boolean { + var boolean v_status := true; + + v_status := f_mtc_userDeregister(p_userCompRef, "*"); // deregister all previous users + + return v_status; + } + + /** + * @desc + * Preamble to handle user registration in roaming network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PR_user_roaming_registration(EquipmentUser p_userCompRef, ImsUserInfo p_userInfo) + runs on TestCoordinator return boolean { + var boolean v_status := true; + if( p_userInfo.publicId == "" ) { return false; } + + // TODO check roaming registration + v_status := f_mtc_userRegister(p_userCompRef, p_userInfo.publicId, p_userInfo.privateId, p_userInfo.password); + + return v_status; + } + + /** + * @desc + * Postamble to handle user deregistration in roaming network from test coordinator + * @param p_userCompRef Reference ot IMS UE user component + * @return true in case of successfull execution otherwise false + */ + function f_PO_user_roaming_deregistration(EquipmentUser p_userCompRef) runs on ImsTestCoordinator return boolean { + var boolean v_status := true; + + // TODO check roaming de-registration + v_status := f_mtc_userDeregister(p_userCompRef, "*"); // deregister all previous users + + return v_status; + } + + /** + * @desc Get the S-CSCF FQDN address of referenced EUT + * @return if a S-CSCF is avaiable, the domainname of the S-CSCF, + * otherwise error_string + */ + function f_GetEUTScscfAddress_1() return charstring { + return PX_SIP_MW_S_CSCF_IPADDR; // FIXME Add FQDN address in VxLTE PIXITs + } + function f_GetEUTScscfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ss][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Ss][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + break; + } + } + } + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the S-CSCF FQDN address of referenced EUT + * @return if a S-CSCF is avaiable, the IP Address of the S-CSCF, + * otherwise error_string + */ + function f_GetEUTScscfIpAddress_1() return charstring { + return PX_SIP_MW_S_CSCF_IPADDR; + } + + function f_GetEUTScscfIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ss][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Ss][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "S-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the P-CSCF FQDN address of referenced EUT + * @return if a P-CSCF is avaiable, the IP Address of the P-CSCF, + * otherwise error_string + */ + function f_GetEUTPcscfIpAddress_1() return charstring { + return PX_SIP_MW_P_CSCF_IPADDR; + } + + /** + * @desc Get the P-CSCF FQDN address of referenced EUT + * @return if a PCSCF is avaiable, the domainname of the PCSCF, + * otherwise error_string + */ + function f_GetEUTPcscfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Gg][Mm]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Pp][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Pp][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the P-CSCF IP address of referenced EUT + * @return if a PCSCF is avaiable, the IP address of the PCSCF, + * otherwise error_string + */ + function f_GetEUTPcscfIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Gg][Mm]")){ + v_interface := i; + break; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Pp][Cc][Ss][Cc][Ff]") + or match(substr(v_domainname, 0, 5), pattern "[Pp][Tt][Ee][Cc][Hh]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "P-CSCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the IBCF FQDN address of referenced EUT + * @return if a IBCF is avaiable, the domainname of the IBCF, + * otherwise error_string + */ + function f_GetEUTIbcfAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Mm][Ww]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + if(ispresent(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName)) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 5), pattern "[Ii][Bb][Cc][Ff]")) { + v_ipinterfaceinfo := i; + } + } + } + } else { + log ("IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "IBCF of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + /** + * @desc Get the Public Id of referenced UE + * @param p_ProductIdx index of the product the UE belongs to + * @return PublicID of the UE of the productIdx + */ + function f_GetUEPublicId(integer p_ProductIdx) return charstring { + + var ImsUserInfo v_uePublicId := f_getSipUserId(p_ProductIdx); + + return v_uePublicId.publicId; + } + + + /** + * @desc Get the UE URI containing the IP address of referenced EUT + */ + function f_getUeIpAddress(integer p_ProductIdx) return template SipUrl { + // TODO + return mw_SIP_URI_Base; + } + + /** + * @desc Get the Public Id of referenced EUT + */ + function f_GetEUTPublicId(integer p_ProductIdx) return charstring { + // TODO + return "TODO"; + } + + /** + * @desc Get the AS server FQDN of referenced EUT + */ + function f_GetEUTASServerAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Ii][Ss][Cc]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 2, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 9, 2), pattern "[Aa][Ss]")) { + v_ipinterfaceinfo := i; + } + } + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].domainName; + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + group epc { + + /** + * @desc This function enable/disable power on radio antenna in order to trigger Network attachment/detach operation + * @param p_ueRef Reference to IMS UE user component + * @param p_enableRadio + * Set to true to trigger Network attachment processing, + * Set to false to trigger Network detach processing + * @param p_synchronousMode + * Set to true if this function shall return when Network attachment/detach operation in achieved (synchronous mode), + * Set to false if this function just initiates the Network attachment/detach operation (asynchronous mode) + * @return + * true in case of successfull execution of the trigger command + * otherwise false + * @verdict Unchanged + * @see ETSI TS 103 029 V3.1.1 - Clause 6.1 + */ + function f_mtc_userRadioEnabled(EquipmentUser p_ueRef, boolean p_enableRadio, boolean p_synchronousMode) + runs on TestCoordinator return boolean { + if ( p_enableRadio ) { + if ( p_synchronousMode ) { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network attachment and return when done."); + } + else { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network attachment, return immediately."); + } + } + else { + if ( p_synchronousMode ) { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network detachment and return when done."); + } + else { + f_mtc_triggerUserCommand ( p_ueRef, "start complete network detachment, return immediately."); + } + } + return false; + } // End of function f_mtc_userRadioEnabled + + } // End of group epc + + } + + /** + * @desc Get the AS server IP Address of referenced EUT + */ + function f_GetEUTASServerIpAddress(integer p_ProductIdx) return charstring { + var integer v_size_interfaces := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces); + var integer v_size_ipinterfaceinfo; + var integer v_interface := -1; + var integer v_ipinterfaceinfo := -1; + var charstring v_domainname; + + for(var integer i := 0; i < v_size_interfaces; i := i+1) { + if (match(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[i].interfaceName, pattern "[Ii][Ss][Cc]")){ + v_interface := i; + } + } + if (v_interface > -1) { + v_size_ipinterfaceinfo := lengthof(PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo); + for(var integer i := 0; i < v_size_ipinterfaceinfo; i := i+1) { + v_domainname := PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[i].domainName; + if (match(substr(v_domainname, 0, 2), pattern "[Aa][Ss]") + or match(substr(v_domainname, 2, 2), pattern "[Aa][Ss]") + or (lengthof(v_domainname) >= 11 and match(substr(v_domainname, 9, 2), pattern "[Aa][Ss]"))) { + v_ipinterfaceinfo := i; + } + } + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + if (v_ipinterfaceinfo > -1) { + return PX_PRODUCTS[p_ProductIdx].monitorInterfaces[v_interface].interfaceInfo.IpInterfaceInfo[v_ipinterfaceinfo].IpAddress; + } else { + log ("AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."); + return "AS of " & PX_PRODUCTS[p_ProductIdx].productName & " not found."; + } + } + + group naptrComponent { + /** + * @desc + * This function waits for a given NAPTR message. + * @param p_monitor Reference of NAPTR component + * @param p_msg The NAPTR message + */ + function f_getNaptrMsg ( InterfaceMonitor p_monitor, in template (present) EnumMessage p_enum ) + runs on ImsInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + var boolean v_loop := true; + var NAPTRmessage v_msg; + var SipMessage v_sip; + t_local.start; + while ( v_loop ) { + alt { + [] naptrPort.receive ( mw_EnumQuery_Base ) -> value v_msg { + if ( match (v_msg.enumMessage, p_enum)) { + t_local.stop; + setverdict(pass, self, "***f_getNaptrMsg: expected NAPTR message received***"); + log("### Forwarding message to MTC"); + v_sip := { naptrmessage := v_msg }; + icpPort.send ( v_sip ); + break; + } + t_local.start; + } + [] naptrPort.receive ( mw_EnumResponse_Base ) -> value v_msg { + if ( match (v_msg.enumMessage, p_enum)) { + t_local.stop; + setverdict(pass, self, "***f_getNaptrMsg: expected NAPTR message received***"); + log("### Forwarding message to MTC"); + v_sip := { naptrmessage := v_msg }; + icpPort.send ( v_sip ); + break; + } + t_local.start; + } + [] t_local.timeout { + setverdict(fail, self, "***f_getNaptrMsg: expected NAPTR message not received***"); + break; + } + [] naptrPort.receive { + t_local.start; + } + } + } + } + } + + group diameterComponent { + /** + * @desc + * This function waits for a given Diameter message. + * @param p_monitor Reference of Diameter component + * @param p_msg The Diameter message + * @param p_log The Log message + */ + function f_receiveDiameterMsg (in template (present) DIAMETER_MSG p_diameter, + in charstring p_log, in boolean p_bool ) + runs on DiameterInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + var boolean v_loop := true; + log ( "### " & p_log ); + t_local.start; + while ( v_loop ) { + alt { + [] diameterPort.receive ( p_diameter ) { + t_local.stop; + if ( p_bool ) { + setverdict ( pass, self, "*** f_receiveDiameterMsg: expected Diameter message received***"); + break; + } + else { + setverdict ( fail, self, "*** f_receiveDiameterMsg: Diameter message received but not expected***"); + break; + } + } + [] t_local.timeout { + if ( p_bool ) { + setverdict ( fail, self, "*** f_receiveDiameterMsg: expected Diameter message not received***"); + break; + } + else { + setverdict ( pass, self, "*** f_receiveDiameterMsg: Diameter message not received as expected***"); + break; + } + } + [] diameterPort.receive { + t_local.start; + } + } + } + } //end f_receiveDiameterMsg + + /** + * @desc + * This function returns correct cx interface monitor in case of single Cx interface connection or + * set cxIH Interface monitor in case of two Cx interface connections. + * If single is set to true then only CxSH monitor is enabled. If single is set to false this monitor is set to CxIH monitor. + * @param p_singleCxInterface true - only one interface Cx with IH-SH/false - two separate interfaces one for SH(S-CSCF HSS) and another for IH(I-CSCF HSS) + */ + function f_getCxInterface(boolean p_singleCxInterface) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + if (p_singleCxInterface) + { + return vc_vxlte_monitor_components.cxSH; + } + else + { + return vc_vxlte_monitor_components.cxIH; + } + }//end f_getCxInterface + + } //end group diameterComponent + + group sgiComponent { + /** + * @desc + * This function waits for a given Sgi message. + * @param p_bool True message expected, False message not expected + * @param p_log The Log message + */ + function f_receiveIpMsg ( boolean p_bool, in charstring p_log ) + runs on ImsInterfaceMonitor { + timer t_local := PX_MAX_MSG_WAIT; + log ( "### " & p_log ); + t_local.start; + alt { + [] sgiPort.receive { + t_local.stop; + if ( p_bool ) { + setverdict ( pass, self, "*** f_receiveIpMsg: expected Sgi message received ***"); + } + else { + setverdict ( fail, self, "*** f_receiveIpMsg: expected Sgi message not received ***"); + } + } + [] t_local.timeout { + if ( p_bool ) { + setverdict ( fail, self, "*** f_receiveIpMsg: Sgi message not received but expected ***"); + } + else { + setverdict ( pass, self, "*** f_receiveIpMsg: Sgi message not received as expected ***"); + } + } + } + } + } + + group interComponent { + /** + * @desc + * This function waits for a sip message send from a given monitor + * component to mtc. + * @param p_monitor Reference of Interface Monitor component + * @param p_msg The Sip message + */ + function f_getSipMsgFromMonitor(InterfaceMonitor p_monitor, out SipMessage p_msg) runs on ImsTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []icpPort.receive (SipMessage:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getMsgFromMonitor: SIP message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getMsgFromMonitor: SIP message not received***"); + } + } + } + /** + * @desc + * This function waits for a Diameter message send from a given monitor + * component to mtc. + * @param p_monitor Reference of Interface Monitor component + * @param p_msg The Diameter message + */ + function f_getDiameterMsgFromMonitor(InterfaceMonitor p_monitor, out DIAMETER_MSG p_msg) runs on ImsTestCoordinator { + timer t_local := PX_MAX_MSG_WAIT; + t_local.start; + alt { + []icpPort.receive (DIAMETER_MSG:?) /*from p_monitor*/ -> value p_msg { + t_local.stop; + setverdict(pass, self, "***f_getDiameterMsgFromMonitor: DIAMETER message received***"); + } + []t_local.timeout { + setverdict(fail, self, "***f_getDiameterMsgFromMonitor: DIAMETER message not received***"); + } + } + } + } + + group altsteps { + + altstep a_default(in charstring p_TP) runs on ImsInterfaceMonitor { + [] dPort.receive(Request:?) { + log(self, "### a_default: Request default for " & p_TP ); + repeat; + } + [] dPort.receive(Response:?) { + log(self, "### a_default: Response default for " & p_TP ); + repeat; + } + [] dPort.receive { + log(self, "*** a_default: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + altstep a_default_sip(in charstring p_TP) runs on SipInterfaceMonitor { + [] sipPort.receive(Request:?) { + log(self, "### a_default_sip: Request default for " & p_TP ); + repeat; + } + [] sipPort.receive(Response:?) { + log(self, "### a_default_sip: Response default for " & p_TP ); + repeat; + } + [] sipPort.receive { + log(self, "*** a_default_sip: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + altstep a_default_diameter(in charstring p_TP) runs on DiameterInterfaceMonitor { + [] diameterPort.receive(DIAMETER_MSG:?) { + log(self, "### a_default_diameter: Request default for " & p_TP ); + repeat; + } + [] diameterPort.receive { + log(self, "*** a_default_diameter: Received/ignored unexpected message when waiting for message complying to " & p_TP ); + //setverdict(fail, self, "### YANN: If execution is here, this means that the message was not properly decoded due to sip/sdp-codets exception, check MMagic logs"); + //stop; // YANN: If execution is here, this means that the message was not properly decoded + repeat; + } + } + + + /** + * @desc This altstep add one alternative checking for a very specifc SIP request. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP request + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * * @param p_forwardMtc indicates if the received request should be forwarded to mtc + */ + altstep a_receive_sipRequest( + in template Request p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var Request v_message; + [not p_checkMessage] dPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] dPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + /** + * @desc This altstep add one alternative checking for a very specifc SIP request. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP request + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * * @param p_forwardMtc indicates if the received request should be forwarded to mtc + */ + altstep a_receive_sip_Request( + in template Request p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var Request v_message; + [not p_checkMessage] sipPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] sipPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipRequest: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.request := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + /** + * @desc This altstep add one alternative checking for a very specifc SIP response. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP response + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_sipResponse( + in template Response p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var Response v_message; + [not p_checkMessage] dPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] dPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + /** + * @desc This altstep add one alternative checking for a very specifc SIP response. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected SIP response + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_sip_Response( + in template Response p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var Response v_message; + [not p_checkMessage] sipPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Received expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] sipPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_sipResponse: Checked expected SIP request complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var SipMessage v_msg; + v_msg.response := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + /** + * @desc This altstep add one alternative checking for a very specifc DIAMETER message. + If it matches then the conformance verdict is set to requested verdict + * @param p_message The expected DIAMETER message + * @param p_verdict Verdict to be used in case of match + * @param p_tpId The test purpose identifier + * @param p_forwardMtc indicates if the received reponse should be forwarded to mtc + */ + altstep a_receive_diameter( + in template DIAMETER_MSG p_message, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on DiameterInterfaceMonitor { + var DIAMETER_MSG v_message; + [not p_checkMessage] diameterPort.receive(p_message) -> value v_message { + f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Received expected diameter MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var DIAMETER_MSG v_msg; + v_msg := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + [p_checkMessage] diameterPort.check(receive(p_message) -> value v_message) { + f_setConformanceVerdict(p_verdict, "***a_receive_diameter: Checked expected diameter_MSG complying to " & p_tpId & " on interface " & vc_interfaceName & " ***"); + if(p_forwardMtc) { + var DIAMETER_MSG v_msg; + v_msg := v_message; + log("### Forwarding message to MTC"); + icpPort.send(v_msg); + } + } + } + + + + }// end group + + //function f_setInterfaceNameOnComponent(charstring p_name) runs on ImsInterfaceMonitor{ + function f_setInterfaceNameOnComponent(charstring p_name) runs on InterfaceMonitor{ + vc_interfaceName := p_name; + } + function f_setInterfaceInfoComponent(MonitorInterfaceInfo p_mii) runs on InterfaceMonitor{ + vc_interfaceName := p_mii.interfaceName; + vc_Interface := p_mii; + } + + group general_td_functions { + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Sip message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_imsIot_receive( // FIXME To be removed + in template SipMessageList p_passCriteria, + in template SipMessageList p_failCriteria, + in template SkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + +log ("### f_imsIot_receive: passCriteria=", p_passCriteria); +log ("### f_imsIot_receive: failCriteria=", p_failCriteria); + + // check if interface is available + for(i := 0; i < v_size_ai; i := i+1) { + if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) { + if (PX_AVAILABLE_INTERFACES[i].available == false) { + setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" ); + } else { // Interface is available + v_defaultArray[0] := activate(a_default(p_tpId)); + f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_receive(p_tpId, p_skip); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + } + break; // Exit loop + } + } // 'for' loop + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_receive( // FIXME To be removed + in charstring p_tpId, + in template SkipType p_skip + ) runs on ImsInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ischosen(p_skip.skipMessage.request)] dPort.receive (p_skip.skipMessage.request) { + skipCount := skipCount - 1; + log("***f_gen_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] dPort.receive (p_skip.skipMessage.response) { + skipCount := skipCount - 1; + log("***f_gen_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_sip_receive( + in charstring p_tpId, + in template SkipType p_skip + ) runs on SipInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ischosen(p_skip.skipMessage.request)] sipPort.receive (p_skip.skipMessage.request) { + skipCount := skipCount - 1; + log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [skipCount > 0 and ispresent(p_skip.skipMessage) and ischosen(p_skip.skipMessage.response)] sipPort.receive (p_skip.skipMessage.response) { + skipCount := skipCount - 1; + log("***f_gen_sip_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_sip_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + /** + * @desc This function implements skipping of messages as well as timeout handling. + * Prior to calling this function the message to be cheked for should be added + * as defaults. + * This function is independent of a specific interface component. + * @param p_tpId The Test Purpose identifier + * @param p_skipCount Indicate how many messages should be skipped prior to checking + */ + function f_gen_diameter_receive( + in charstring p_tpId, + in template SkipTypeDiameter p_skip, + in boolean p_noDiameterMessageExpected + ) runs on DiameterInterfaceMonitor { + var integer skipCount := valueof(p_skip.skipCount); + tc_wait.start; + + alt { + // preamble (consume prior messages) + [skipCount > 0 and ispresent(p_skip.skipMessage)] diameterPort.receive (p_skip.skipMessage) { + skipCount := skipCount - 1; + log("***f_gen_diameter_receive: Message skipped (intentionally) when checking for " & p_tpId & " at interface " & vc_interfaceName & " ****"); + repeat; + } + [p_noDiameterMessageExpected == true] tc_wait.timeout { + f_setConformanceVerdict(pass, "***f_gen_diameter_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + [] tc_wait.timeout { + f_setConformanceVerdict(inconc, "***f_gen_diameter_receive: Timer tc_wait expired when waiting for incoming message in " & p_tpId & " at interface " & vc_interfaceName & " ****"); + } + } + + } + + + /** + * @desc Activates for each entry in a expected IMS SIP message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateImsSipDefaults( // FIXME To be removed + inout DefaultList p_default, + in integer p_startIdx, + in template SipMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on ImsInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ischosen(p_list[i].request)) { + p_default[v_idx] := activate( + a_receive_sipRequest(p_list[i].request,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } else { + p_default[v_idx] := activate( + a_receive_sipResponse(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + v_idx := v_idx + 1; + } +//log ("### f_activateImsSipDefaults: ended"); + } + + /** + * @desc Activates for each entry in a expected IMS SIP message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateSipDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template SipMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ischosen(p_list[i].request)) { + //log ("### f_activateImsSipDefaults: Adding ", p_list[i].request); + p_default[v_idx] := activate( + a_receive_sip_Request(p_list[i].request,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } else { + //log ("### f_activateImsSipDefaults: Adding ", p_list[i].response); + p_default[v_idx] := activate( + a_receive_sip_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + v_idx := v_idx + 1; + } + //log ("### f_activateImsSipDefaults: ended"); + } + + /** + * @desc Activates for each entry in a expected IMS DIAMETER message list a default + * for receiving that message and setting the verdict as desired + * @param p_default Reference to default array where deaults are to be added + * @param p_startIdx Index into default array after which references for + * defaults created in this function should be added + * @param p_list List of expected messages to be checked in default + * @param p_verdict Verdict to be set in case the incoming message matches + any of the expcted messages + * @param p_tpId Test Purpose identifir + */ + function f_activateDiameterDefaults( + inout DefaultList p_default, + in integer p_startIdx, + in template DiameterMessageList p_list, + in verdicttype p_verdict, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on DiameterInterfaceMonitor { + var integer v_size := lengthof(p_list); + var integer v_idx := p_startIdx; + + for (var integer i := 0; i < v_size; i := i + 1) { + if (ispresent(p_list[i])) { + log("Function f_activateDiameterDefaults ispresent:",p_list[i],i); + p_default[v_idx] := activate( + a_receive_diameter(p_list[i],p_verdict, p_tpId, p_forwardMtc, p_checkMessage) + ); + } + else { + log("Function f_activateDiameterDefaults else statement:",p_list[i]); + } +// else { +// p_default[v_idx] := activate( +// a_receive_diameter_Response(p_list[i].response,p_verdict, p_tpId, p_forwardMtc, p_checkMessage) +// ); +// } + v_idx := v_idx + 1; + } +//log ("### f_activateImsSipDefaults: ended"); + } + + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Sip message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_Iot_Sip_receive( + in template SipMessageList p_passCriteria, + in template SipMessageList p_failCriteria, + in template SkipType p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage + ) runs on SipInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + + //log ("### f_Iot_Sip_receive: passCriteria=", p_passCriteria); + //log ("### f_Iot_Sip_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if(not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Sip_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + }else{// Interface is available + v_defaultArray[0] := activate(a_default_sip(p_tpId)); + f_activateSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_sip_receive(p_tpId, p_skip); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + + } + + } + + /** + * @desc + * Generic function for reading and verifying messages on the + * interface associated to the ImsInterfaceMonitor instance. This + * functions works as follows: First, messages are skipped according + * to the p_skip template. The p_skip template contains a message + * template and a counter indicating the number of received messages + * matching the message template to be skipped. If not enough + * messages matching the message template arrive at the interface, + * the function fails after timout. Next, messages are consumed from + * the interface and matched against the p_passCriteria template + * list and the p_failCriteria template list. The function + * terminates with pass if a message is received matching a + * pass-template and terminates with fail if a fail-template + * matches. Matching against pass-templates occurs bevor matching + * agains fail-templates. If neither pass-templates nor + * fail-templates match, then the functions continues reading from + * the interface until a match arises, or timeout. The timeout value + * is given by PX_MAX_MSG_WAIT [5.0 seconds, FFS]. Finally, if + * p_forwardMtc is set to true, the last received message is stored + * to be fetched and used later by the main test component. Some + * special use cases: - Set p_skip.skipCounter to 0 to avoid + * skipping, i.e. no skippin - Set p_skip.skipCounter to 0 and + * p_skip.skipMessage to ? to skip exactly one message of any type + * will be skipped. - If the list of fail-templates is empty, then + * the function will wait for the first message maching a + * pass-message, or fail after timeout. + * @param p_passCriteria list of message templates which lead to pass + * @param p_failCriteria list of message templates which lead to fail + * @param p_skip + * Indicate how many messages from a specific sip template should be + * skipped prior to checking + * @param p_tpId The Test Purpose identifier + * @param p_forwardMtc + * indicate if the received Diameter message should be forwarded to the + * mtc + * @param p_checkMessage + * indicate if the incomming message should only be checked + * (port.check) or consumed (port.receive). The check operation + * allows read access to the top element of incoming port queues + * without removing the top element from the queue. + */ + function f_Iot_Diameter_receive( + in template DiameterMessageList p_passCriteria, + in template DiameterMessageList p_failCriteria, + in template SkipTypeDiameter p_skip, + in charstring p_tpId, + in boolean p_forwardMtc, + in boolean p_checkMessage, + in boolean p_noDiameterMessageExpected := false + ) runs on DiameterInterfaceMonitor { + var integer v_size := lengthof(p_failCriteria); + var DefaultList v_defaultArray; + var integer i := 0; + var integer v_size_ai := lengthof(PX_AVAILABLE_INTERFACES); + + log ("### f_Iot_Diameter_receive: passCriteria=", p_passCriteria); + log ("### f_Iot_Diameter_receive: failCriteria=", p_failCriteria); + + // check if interface is available + if(not((isvalue(vc_Interface)) /*and (vc_interfaceName=="")*/)){ + setverdict(inconc, self, "******f_Iot_Diameter_receive: Interface " & vc_interfaceName & " not available and is not evaluated******" ); + }else{// Interface is available + v_defaultArray[0] := activate(a_default_diameter(p_tpId)); + f_activateDiameterDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); + f_activateDiameterDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); + f_gen_diameter_receive(p_tpId, p_skip, p_noDiameterMessageExpected); + + for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { + deactivate(v_defaultArray[i]); + } + + } + +// for(i := 0; i < v_size_ai; i := i+1) { +// if (PX_AVAILABLE_INTERFACES[i].interfaceName == vc_interfaceName) { +// if (PX_AVAILABLE_INTERFACES[i].available == false) { +// setverdict(inconc, self, "******f_imsIot_receive: Interface " & PX_AVAILABLE_INTERFACES[i].interfaceName & " not available and is not evaluated******" ); +// } else { // Interface is available +// v_defaultArray[0] := activate(a_default(p_tpId)); +// f_activateImsSipDefaults(v_defaultArray, 1, p_failCriteria, fail, p_tpId, p_forwardMtc, p_checkMessage); +// f_activateImsSipDefaults(v_defaultArray, v_size + 1, p_passCriteria, pass, p_tpId, p_forwardMtc, p_checkMessage); +// f_gen_receive(p_tpId, p_skip); +// +// for (i := 0; i < lengthof(v_defaultArray); i := i + 1) { +// deactivate(v_defaultArray[i]); +// } +// } +// break; // Exit loop +// } +// } // 'for' loop + } + + }//end group + + + group misc { + + /** + * @desc + * This function generate a charstring with a given length used as + * message body. + * @param p_length length of the message body + * @return message body (charstring) + */ + function f_getMessageBody(in integer p_length) return charstring { + var charstring v_rtn := ""; + + for(var integer i := 0; i < p_length; i:=i+1) { + v_rtn := v_rtn & "a"; + } + + return v_rtn; + } + + function f_getContactAddr(in Contact contact) return SipUrl { + var SipUrl v_SipUrl; + + var ContactAddress addr := contact.contactBody.contactAddresses[0]; + + if (ischosen (addr.addressField.nameAddr)) { + v_SipUrl := addr.addressField.nameAddr.addrSpec; + } else { + v_SipUrl := addr.addressField.addrSpecUnion; + } + + return (v_SipUrl); + } + + } + +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn new file mode 100644 index 0000000..b8bd9b0 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -0,0 +1,32 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the module parameter + */ + +module AtsImsIot_PIXITS +{ + +group SUT { + +group SUT_CONF { + /** + * @desc charstring for SUT/conference domain + */ + modulepar charstring PX_IMS_SUT_CONF_HOME_DOMAIN := "conf.sut.net"; + /** + * @desc charstring for conference factory URI name + */ + modulepar charstring PX_IMS_SUT_CONF_FACTORY_NAME := "factory.uri.name"; + /** + * @desc charstring for PChargingVector TP_IC_IBCF_INVITE_04 + */ + modulepar charstring PX_IMS_A_ICID := "PX_IMS_A_ICID"; + +} // end group SUT_CONF + +} // end group SUT +group TS { + +} // end group TS +} // end module AtsImsIot_PIXITS diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn new file mode 100644 index 0000000..ca42c58 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn @@ -0,0 +1,177 @@ +/** + * @author STF 574, TTF 006 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for Network Attachment. + * @see ETSI TS 103 653-2 (2021) + */ +module AtsImsIot_TD_ATT{ + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester { type ImsUserInfo }; + // LibIot + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions { function f_getImUser}; + // ImsIot + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + + + group Interoperability{ + group networkAttachmentAndDefaultBearer { + /** + * @desc Initial Network Attachment and Establishment of the Default Bearer. + * On successful initial network attachment, the UE should discover the P-CSCF IP address. + * The EPC will create the Default Bearers which will allow communication only between the UE and the P-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.1; TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1); TS 129 272 [10], clause 5.2.1.1 + */ + testcase TC_VxLTE_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_ATT_01 + + } //End of group networkAttachmentAndDefaultBearer + } // End of group Interoperability + group Roaming{ + group networkAttachmentAndDefaultBearer { + /** + * @desc Initial Network Attachment and Establishment of the Default Bearer. + * On successful initial network attachment, the UE should discover the P-CSCF IP address. + * The EPC will create the Default Bearers which will allow communication only between the UE and the P-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.1; TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1); TS 129 272 [10], clause 5.2.1.1 + */ + testcase TC_VxLTE_RMI_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_S9_INTERFACENAME,PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_AIR_01 ( vc_vxlte_monitor_components.s6a); // Check (AIR – Event 2) //Not yet validate + f_mtc_check_TP_S6A_HSS_AIA_01 ( vc_vxlte_monitor_components.s6a); // Check (AIA – Event 3) //Not yet valiated + f_mtc_check_TP_S6A_MME_ULR_02 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 4) + f_mtc_check_TP_S6A_HSS_ULA_02 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 5) + f_mtc_check_TP_GX_PGW_CCR_01 ( vc_vxlte_monitor_components.gx, true); // Check (CCR - Event 6) + f_mtc_check_TP_S9_PCRF_CCR_01 ( vc_vxlte_monitor_components.s9); // Check (CCA – Event 7) + f_mtc_check_TP_S9_PCRF_CCA_01 ( vc_vxlte_monitor_components.s9); // Check (CCA - Event 8) + f_mtc_check_TP_GX_PCRF_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCA - Event 9) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_ATT_01 + + /** + * @desc Initial Network Attachment and Establishment of the Default Bearer(S8HR). + * On successful initial network attachment, the UE should discover the P-CSCF IP address. + * The EPC will create the Default Bearers which will allow communication only between the UE and the P-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.1; TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1); TS 129 272 [10], clause 5.2.1.1 + */ + testcase TC_VxLTE_RMI_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_S9_INTERFACENAME,PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_ATT_02 + } //End of group networkAttachmentAndDefaultBearer + } // End of group Roaming +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn new file mode 100644 index 0000000..0dd94a7 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn @@ -0,0 +1,597 @@ +/** + * @author STF 574, TTF 006 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for IMS Registration. + * @see ETSI TS 103 653-2 (2020) + */ +module AtsImsIot_TD_DRG{ + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester { type ImsUserInfo }; + // LibIot + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions { function f_getImUser }; + // ImsIot + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + import from AtsImsIot_TP_behavior_RX all; + + group Interoperability{ + group IMSDeRegistration { + + /** + * @desc IMS DeRegistration - Successful. + * + * @see + */ + testcase TC_VxLTE_INT_DRG_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_check_precond_TC_VxLTE_INT_DRG_01(); + + // test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_07(vc_vxlte_monitor_components.gmA); // Events 1, 10 + f_mtc_check_TP_MW_PCSCF_REGISTER_07(vc_vxlte_monitor_components.mwPI); // Event 2, 9 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_07(vc_vxlte_monitor_components.mwIS); // Event 5, 8 + + f_mtc_check_TP_CX_HSS_UAA_04(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 3, 4 + f_mtc_check_TP_CX_HSS_SAA_02(vc_vxlte_monitor_components.cxSH);// Event 6, 7 + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx, true);// Event 11 + f_mtc_check_TP_RX_PCRF_STA_02(vc_vxlte_monitor_components.rx); // Event 12 + f_mtc_check_TP_GX_PGW_RAA_04(vc_vxlte_monitor_components.gx); // Event 13, 14 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DRG_01 + + /** + * @desc IMS DeRegistration - no SIP session active. + * + * @see + */ + testcase TC_VxLTE_INT_DRG_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_check_precond_TC_VxLTE_INT_DRG_01(); + + // test body + + f_mtc_check_TP_CX_HSS_RTA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 1, 8 + + f_mtc_check_TP_MW_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.mwPS); // Event 2, 5 + f_mtc_check_TP_GM_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.gmA); // Events 3, 4 + //f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, false); // Events 4 + //f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwPS,-); // Event 5 + //f_mtc_check_TP_MW_PCSCF_NOTIFY_02(vc_vxlte_monitor_components.mwPS, false, true); // Event 6, 7 + + f_mtc_check_TP_RX_PCSCF_STR_08(vc_vxlte_monitor_components.rx, true);// Event 9 + f_mtc_check_TP_RX_PCRF_STA_02(vc_vxlte_monitor_components.rx); // Event 10 + f_mtc_check_TP_GX_PGW_RAA_04(vc_vxlte_monitor_components.gx); // Event 11, 12 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DRG_02 + + /** + * @desc IMS DeRegistration - expiration - no SIP session active.. + * + * @see + */ + testcase TC_VxLTE_INT_DRG_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_check_precond_TC_VxLTE_INT_DRG_01(); + + // test body + f_mtc_check_TP_RX_PCRF_STA_02(vc_vxlte_monitor_components.rx); // Event 1, 14 + + f_mtc_check_TP_MW_PCSCF_REGISTER_09(vc_vxlte_monitor_components.mwPS); // Event 2 + + f_mtc_check_TP_CX_HSS_UAA_04(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 3, 4 + + //f_mtc_check_TP_MW_ICSCF_REGISTER_07(vc_vxlte_monitor_components.mwIS, false, true); // Event 5 + + f_mtc_check_TP_CX_HSS_SAA_02(vc_vxlte_monitor_components.cxSH);// Event 6, 7 + + //f_mtc_check_TP_MW_SCSCF_REGISTER_07(vc_vxlte_monitor_components.mwSI, false, true); // Event 8 + + f_mtc_check_TP_GM_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.gmA); // Events 11, 12 + f_mtc_check_TP_MW_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.mwPS); // Events 11, 12 + //f_mtc_check_TP_MW_SCSCF_NOTIFY_01(vc_vxlte_monitor_components.mwIB, false, true); // Event 10, 13 + + f_mtc_check_TP_GX_PGW_RAA_04(vc_vxlte_monitor_components.gx); // Event 15, 16 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DRG_03 + + /** + * @desc IMS DeRegistration - active SIP sessions. + * + * @see + */ + testcase TC_VxLTE_INT_DRG_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_check_precond_TC_VxLTE_INT_DRG_01(); + + + // test body + + // FIXME f_mtc_check_TP_GM_PCSCF_REGISTER_10(vc_vxlte_monitor_components.gmA); // Events 2, 20 + f_mtc_check_TP_MW_PCSCF_REGISTER_10(vc_vxlte_monitor_components.mwPI); // Event 3, 19 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 5, 18 + + f_mtc_check_TP_CX_HSS_UAA_04(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 4, 5 + f_mtc_check_TP_CX_HSS_SAA_02(vc_vxlte_monitor_components.cxSH);// Event 10, 11 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx);// Event 12 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx); // Event 13 + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 14 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx);// Event 15 + + //TODO update TD and ATS with BYE check too + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 11 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12 + f_mtc_check_TP_GX_PGW_RAA_04(vc_vxlte_monitor_components.gx); // Event 13, 14 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DRG_04 + + group f_TC_VxLTE_INT_DRG_01 { + + function f_mtc_check_precond_TC_VxLTE_INT_DRG_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_DRG_01 + + } // End of f_TC_VxLTE_INT_DRG_01 + + group f_TC_VxLTE_INT_DRG_02 { + + function f_mtc_check_precond_TC_VxLTE_INT_DRG_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_DRG_02 + + } // End of f_TC_VxLTE_INT_DRG_02 + + group f_TC_VxLTE_INT_DRG_03 { + + function f_mtc_check_precond_TC_VxLTE_INT_DRG_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_DRG_03 + + } // End of f_TC_VxLTE_INT_DRG_03 + + group f_TC_VxLTE_INT_DRG_04 { + + function f_mtc_check_precond_TC_VxLTE_INT_DRG_04() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_DRG_04 + + } // End of f_TC_VxLTE_INT_DRG_04 + + } //End of group IMSDeRegistration + + } // End of group Interoperability + group Roaming{ + group IMSDeRegistration { + + /** + * @desc IMS DeRegistration - no SIP session active. + * + * @see + */ + testcase TC_VxLTE_RMI_DRG_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + + // test body + + //f_mtc_check_TP_GM_PCSCF_REGISTER_08(vc_vxlte_monitor_components.gmA, false); // Events 1 + //f_mtc_check_TP_MW_PCSCF_REGISTER_08(vc_vxlte_monitor_components.mwPS, false, true); // Event 2 + f_mtc_check_TP_IC_IBCF_REGISTER_03(vc_vxlte_monitor_components.ic, false); // Event 3 + //f_mtc_check_TP_MW_ICSCF_REGISTER_08(vc_vxlte_monitor_components.mwIS, false, true); // Event 4 + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 15 + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 16 + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 17 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 19 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 20 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DRG_01 + + /** + * @desc IMS DeRegistration - administrative - no SIP session active. + * + * @see + */ + testcase TC_VxLTE_RMI_DRG_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + + //f_mtc_check_TP_MW_SCSCF_NOTIFY_03(vc_vxlte_monitor_components.mwIS, false, true); // Event 2, 9 + f_mtc_check_TP_IC_IBCF_NOTIFY_01(vc_vxlte_monitor_components.ic, false); // Events 3, 8 + //f_mtc_check_TP_MW_PCSCF_NOTIFY_03(vc_vxlte_monitor_components.mwPS, false, true); // Event 4, 7 + //f_mtc_check_TP_GM_PCSCF_NOTIFY_02(vc_vxlte_monitor_components.gmA, false); // Events 5, 6 + //f_mtc_check_TP_MW_SCSCF_NOTIFY_03(vc_vxlte_monitor_components.mwIS, false, true); // Event 10, 15 + + f_mtc_check_TP_RX_PCSCF_STR_08(vc_vxlte_monitor_components.rx);// Event 17 + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 18 + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 19 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 21 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 22 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DRG_02 + + /** + * @desc IMS Registration - expiration - no SIP session active. + * + * @see + */ + testcase TC_VxLTE_RMI_DRG_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + + // test body + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 1 + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 2 + + //f_mtc_check_TP_MW_PCSCF_REGISTER_12(vc_vxlte_monitor_components.mwPS, false, true); // Event 3 + f_mtc_check_TP_IC_IBCF_REGISTER_04(vc_vxlte_monitor_components.ic, false); // Event 4, 13 + + + //f_mtc_check_TP_MW_SCSCF_REGISTER_12(vc_vxlte_monitor_components.mwIS, false, true); // Event 8 + + //f_mtc_check_TP_MW_SCSCF_NOTIFY_03(vc_vxlte_monitor_components.mwIS, false, true); // Event 15, 22 + f_mtc_check_TP_IC_IBCF_NOTIFY_01(vc_vxlte_monitor_components.ic, false); // Event 16, 21 + //f_mtc_check_TP_MW_PCSCF_NOTIFY_03(vc_vxlte_monitor_components.mwPS, false, true); // Event 17, 20 + //f_mtc_check_TP_GM_PCSCF_NOTIFY_02(vc_vxlte_monitor_components.gmA, false); // Events 18, 19 + + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 23 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx); // Event 24 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 25 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 26 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DRG_03 + + /** + * @desc IMS DeRegistration - active SIP sessions. + * + * @see + */ + testcase TC_VxLTE_RMI_DRG_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + + //f_mtc_check_TP_GM_PCSCF_REGISTER_08(vc_vxlte_monitor_components.gmA, false); // Events 2 + //f_mtc_check_TP_MW_PCSCF_REGISTER_08(vc_vxlte_monitor_components.mwPS, false, true); // Event 3 + f_mtc_check_TP_IC_IBCF_REGISTER_03(vc_vxlte_monitor_components.ic, false); // Event 4, 28 + //f_mtc_check_TP_MW_ICSCF_REGISTER_08(vc_vxlte_monitor_components.mwIS, false, true); // Event 5 + //f_mtc_check_TP_MW_ICSCF_BYE_07(vc_vxlte_monitor_components.mwIS, false, true); // Event 9, 13 + f_mtc_check_TP_IC_IBCF_BYE_02(vc_vxlte_monitor_components.ic, false); // Event 10, 24 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 17 + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 18 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx); // Event 19 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 21 + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 31 + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 32 + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 33 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx); // Event 34 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 35 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 36 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DRG_04 + + } //End of group IMSDeRegistration + } // End of group Roaming +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn new file mode 100644 index 0000000..a88b3f0 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn @@ -0,0 +1,588 @@ +/** + * @author STF 574, TTF 006 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for Network Detachment. + * @see ETSI TS 103 653-2 (2020) + */ +module AtsImsIot_TD_DTC{ + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester { type ImsUserInfo }; + // LibIot + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions { function f_getImUser }; + // ImsIot + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_RX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + //import from AtsImsIot_Behavior all; + + group Interoperability{ + group NetworkDetachment { + /** + * @desc Initial Network Detachment - no IMS registration + * + * @see + */ + testcase TC_VxLTE_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_GX_PCRF_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DTC_01 + + /** + * @desc Initial Network Detachment - with previous IMS registration + * + * @see + */ + testcase TC_VxLTE_INT_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME/*, + PX_SIP_MW_SI_INTERFACENAME*/})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //postamble + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + // Check that user A can register to IMS A + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); // Send REGISTER request message + //f_mtc_check_TP_GM_PCSCF_REGISTER_07(vc_vxlte_monitor_components.gmA); // Events 2, 11 + + f_mtc_check_TP_MW_PCSCF_REGISTER_09 (vc_vxlte_monitor_components.mwPS, false); //Check (REGISTER - event 3) + f_mtc_check_TP_MW_ICSCF_REGISTER_07 (vc_vxlte_monitor_components.mwIS, false); //Check (REGISTER - event 6) + //f_mtc_check_TP_MW_SCSCF_REGISTER_07 (vc_vxlte_monitor_components.mwSI, false); //Check (REGISTER - event 8,11) + + f_mtc_check_TP_CX_HSS_UAA_04 ( f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE), false ); // Check (UAA - Events 4,5) + f_mtc_check_TP_CX_HSS_SAA_02 ( vc_vxlte_monitor_components.cxSH, false ); // Check (SAA – Events 7,8) + + f_mtc_check_TP_RX_PCRF_STA_02 ( vc_vxlte_monitor_components.rx, false ); // Check (STA – Events 12, 13) + + f_mtc_check_TP_GX_PCRF_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 14, 15) + + //f_mtc_userCheckRegistration ( v_ueA, f_getAnyValidUser ( PX_EUT_A ) ); + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DTC_02 + + /** + * @desc Initial Network Detachment - with previous IMS registration and sessions + * + * @see + */ + testcase TC_VxLTE_INT_DTC_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME/*, + PX_SIP_MW_SI_INTERFACENAME*/})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //TODO: user b enable and registration + //TODO: make call + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + + + f_mtc_check_TP_GX_PCRF_RAR_02 ( vc_vxlte_monitor_components.gx, false ); // Check (RAR – Event 5) + f_mtc_check_TP_GX_PGW_RAA_03 ( vc_vxlte_monitor_components.gx, false ); // Check (RAA – Event 6) + //TODO: TP for check BYE? + f_mtc_check_TP_RX_PCRF_STA_02 ( vc_vxlte_monitor_components.rx, false ); // Check (STA – Event 4,7) + + //f_mtc_check_TP_MW_PCSCF_REGISTER_11 (vc_vxlte_monitor_components.mwPS, false); //Check (REGISTER - event 11) + + f_mtc_check_TP_MW_ICSCF_REGISTER_07 (vc_vxlte_monitor_components.mwIS, false); //Check (REGISTER - event 14) + //f_mtc_check_TP_MW_SCSCF_REGISTER_07 (vc_vxlte_monitor_components.mwSI, false); //Check (REGISTER - event 18,21) + + //f_mtc_check_TP_CX_HSS_UAA_04 ( f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE)); // Check (UAA - Event 12,13) + //f_mtc_check_TP_CX_HSS_SAA_02 ( vc_vxlte_monitor_components.cxSH); // Check (SAA – Event 15,16) + + f_mtc_check_TP_CX_HSS_UAA_04 ( f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE), false ); // Check (UAA - Events 12,13) + f_mtc_check_TP_CX_HSS_SAA_02 ( vc_vxlte_monitor_components.cxSH, false ); // Check (SAA – Events 15,16) + + f_mtc_check_TP_RX_PCRF_STA_02 ( vc_vxlte_monitor_components.rx, false ); // Check (STA – Event 20,21) + f_mtc_check_TP_GX_PCRF_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 22, 23) + + //f_mtc_userCheckRegistration ( v_ueA, f_getAnyValidUser ( PX_EUT_A ) ); + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DTC_03 + + /** + * @desc Initial Network Detachment - HSS initiated - no IMS registration + * + * @see + */ + testcase TC_VxLTE_INT_DTC_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + f_mtc_check_TP_S6A_HSS_CLR_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (CLR – Event 1) + f_mtc_check_TP_GX_PCRF_CCA_03 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3,5) + f_mtc_check_TP_S6A_MME_CLA_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (CLA – Event 6) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DTC_04 + + /** + * @desc Initial Network Detachment - MME purge user data + * + * @see + */ + testcase TC_VxLTE_INT_DTC_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + //f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + f_mtc_check_TP_S6A_MME_PUR_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (PUR – Event 1) + f_mtc_check_TP_S6A_HSS_PUA_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (PUA – Event 2) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_DTC_05 + + } //End of group NetworkDeatachment + } // End of group Interoperability + group Roaming{ + group NetworkDetachment{ + /** + * @desc Initial Network Detachment - no IMS registration + * + * @see + */ + testcase TC_VxLTE_RMI_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_S9_INTERFACENAME,PX_DIAMETER_GX_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + // test body + + f_mtc_check_TP_GX_PGW_CCR_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCR – Event 1) + f_mtc_check_TP_S9_PCRF_CCR_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCR – Event 2) + f_mtc_check_TP_S9_PCRF_CCA_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCA – Event 3) + f_mtc_check_TP_GX_PCRF_CCA_05 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 4) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DTC_01 + + /** + * @desc Initial Network Detachment - with previous IMS registration + * + * @see + */ + testcase TC_VxLTE_RMI_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME/*, + PX_SIP_MW_SI_INTERFACENAME*/})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + // test body + + //f_mtc_check_TP_MW_PCSCF_REGISTER_12 (vc_vxlte_monitor_components.mwPS, false); //Check (REGISTER - event 2) + f_mtc_check_TP_IC_IBCF_REGISTER_05 (vc_vxlte_monitor_components.ic, false); //Check (REGISTER - event 3) + //f_mtc_check_TP_MW_SCSCF_REGISTER_12 (vc_vxlte_monitor_components.mwSI, false); //Check (REGISTER - event 10) + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 7 + //f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 8 + //f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 9 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 10 + + f_mtc_check_TP_GX_PGW_CCR_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCR – Event 11) + f_mtc_check_TP_S9_PCRF_CCR_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCR – Event 12) + f_mtc_check_TP_S9_PCRF_CCA_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCA – Event 13) + f_mtc_check_TP_GX_PCRF_CCA_05 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 14) + + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DTC_02 + + /** + * @desc Initial Network Detachment - with previous IMS registration and sessions + * + * @see + */ + testcase TC_VxLTE_RMI_DTC_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME/*, + PX_SIP_MW_SI_INTERFACENAME*/})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + // test body + + //f_mtc_check_TP_MW_PCSCF_BYE_07 (vc_vxlte_monitor_components.mwPS, false); //Check (REGISTER - event 8) + f_mtc_check_TP_IC_IBCF_BYE_03 (vc_vxlte_monitor_components.ic, false); //Check (REGISTER - event 9) + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx);// Event 4 + //f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 5 + //f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 6 + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx, true); // Event 7 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx, false); // Event 8 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 9 + + //f_mtc_check_TP_MW_PCSCF_REGISTER_13 (vc_vxlte_monitor_components.mwPS, false); //Check (REGISTER - event 8) + f_mtc_check_TP_IC_IBCF_REGISTER_05 (vc_vxlte_monitor_components.ic, false); //Check (REGISTER - event 9) + //f_mtc_check_TP_MW_SCSCF_REGISTER_12 (vc_vxlte_monitor_components.mwSI, false); //Check (REGISTER - event 10) + + + f_mtc_check_TP_RX_PCSCF_STR_07(vc_vxlte_monitor_components.rx);// Event 22 + //f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9);// Event 23 + //f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9);// Event 24 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 25 + + f_mtc_check_TP_GX_PGW_CCR_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCR – Event 26) + f_mtc_check_TP_S9_PCRF_CCR_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCR – Event 27) + f_mtc_check_TP_S9_PCRF_CCA_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCA – Event 28) + f_mtc_check_TP_GX_PCRF_CCA_05 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 29) + + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DTC_03 + + /** + * @desc Initial Network Detachment - HSS initiated - no IMS registration + * + * @see + */ + testcase TC_VxLTE_RMI_DTC_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S6A_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + // test body + f_mtc_check_TP_S6A_HSS_CLR_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (CCA – Event 4) + + f_mtc_check_TP_GX_PGW_CCR_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCR – Event 1) + f_mtc_check_TP_S9_PCRF_CCR_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCR – Event 2) + f_mtc_check_TP_S9_PCRF_CCA_02 ( vc_vxlte_monitor_components.s9, false ); // Check (CCA – Event 3) + f_mtc_check_TP_GX_PCRF_CCA_05 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 4) + + f_mtc_check_TP_S6A_MME_CLA_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (CCA – Event 4) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DTC_04 + + /** + * @desc Initial Network Detachment - MME purge user data + * + * @see + */ + testcase TC_VxLTE_RMI_DTC_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + //f_mtc_userRegistration ( v_ueA, v_userInfoA ); + //f_PO_user_home_deregistration ( v_ueA ); + //f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + f_mtc_check_TP_S6A_MME_PUR_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (PUR – Event 1) + f_mtc_check_TP_S6A_HSS_PUA_01 ( vc_vxlte_monitor_components.s6a, false ); // Check (PUA – Event 2) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_DTC_05 + } //End of group networkAttachmentAndDefaultBearer + } // End of group Roaming +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn new file mode 100644 index 0000000..a41eada --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn @@ -0,0 +1,2627 @@ +/** + * @author STF 574, TTF006 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for SIP session and dedicated bearer operations. + * @see ETSI TS 103 653-2 (2020) + */ +module AtsImsIot_TD_INI{ + + import from AtsImsIot_Templates all; + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester {type ImsUserInfo;} + // LibIot + import from LibIot_TestInterface {type IotEquipmentUser;} + import from LibIot_TestConfiguration { + function f_cf_create_IotEquipmentUser; + } + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C;} + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions {function f_getImUser;} + // ImsIot + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + import from AtsImsIot_TP_behavior_RX all; + + group Interoperability{ + group SIPsessionEstablisment { + group OriginatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_INT_INI_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); +// var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); +// var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble +// f_mtc_userRegistration(v_ueA, v_userInfoA); +// f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_check_precond_TC_VxLTE_INT_INI_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_PCSCF_INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_100Trying_01(vc_vxlte_monitor_components.mwPS, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + + // 183 Session Progress + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + // PRACK after 183 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + +// f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 +// f_mtc_check_TP_IC_IBCF_180RESP_02(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 9 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 9 + + f_mtc_check_TP_MW_PCSCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + // PRACK after 180 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_ueB); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 18 + + f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_PCSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_ueB); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TC_VxLTE_INT_INI_01 + + group f_TC_VxLTE_INT_INI_01 { + + function f_mtc_check_precond_TC_VxLTE_INT_INI_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_INI_01 + + } // End of f_TC_VxLTE_INT_INI_01 + + } //End of group OriginatingLeg + group TerminatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_INT_INI_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_check_precond_TC_VxLTE_INT_INI_02(); + + // Test body + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 1 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 1 + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic, false); // INVITE ENUM Event 1 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 20 + + + f_mtc_check_TP_MW_PCSCF_INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // ( Event 3) + f_mtc_check_TP_MW_PCSCF_100Trying_02(vc_vxlte_monitor_components.mwPS, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Events 4) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Events 5, 15) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 6, 16) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 7, 17) + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 9,10 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 8,11 + //TP_GM_PCSCF_INVITE_02 ( Event 8) + + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 12 + f_mtc_check_TP_GM_PCSCF_100Trying_02(vc_vxlte_monitor_components.gmB, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 18 + + //Rx/Gx exchange after 183 (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_07(vc_vxlte_monitor_components.rx); // (AAR – Events 14) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Events 5, 15) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 6, 16) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 7, 17) + + + //TP_GM_PCSCF_180RINGING_02 ( Event 9) + f_mtc_check_TP_GM_PCSCF_180RINGING_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22 + //TP_MW_PCSCF_180RINGING_02 ( Event 14) + f_mtc_check_TP_MW_PCSCF_180RINGING_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 23 + //TP_IC_IBCF_180RESP_01 (180 Ringing – Event 16) + //TP_IC_IBCF_180RESP_02 (180 Ringing – Event 16) + //TP_IC_IBCF_1XXRESP_01 (180 Ringing – Event 16) + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 25 + f_mtc_check_TP_IC_IBCF_180RESP_02(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 25 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic, false); // 180 Ringing – Event 25 + + //TP_IC_IBCF_2XXRESP_01 (200 OK – Event 25) + //TP_IC_IBCF_2XXRESP_02 (200 OK – Event 25) + //TP_IC_IBCF_2XXRESP_03 (200 OK – Event 25) + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 29 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 29 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic, false); // 200 OK – Event 29 + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 30 + + //TP_MW_PCSCF_ACK_02 (Event 28) + f_mtc_check_TP_MW_PCSCF_ACK_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 32 + + //TP_GM_PCSCF_ACK_02 (Event 29) + f_mtc_check_TP_GM_PCSCF_ACK_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 33 + + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_ueB); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_INI_02 + + group f_TC_VxLTE_INT_INI_02 { + + function f_mtc_check_precond_TC_VxLTE_INT_INI_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_INI_02 + + } // End of f_TC_VxLTE_INT_INI_02 + + } //End of group TerminatingLeg + } //End of group SIPsessionEstablisment + + group SIPsessionModification { + group OriginatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_INT_INI_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // configuration + //f_cf_int_call_up(v_config); + + // Preamble + f_PR_user_home_registration(v_ueA,v_userInfoA); + f_PR_user_home_registration(v_ueB,v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_ueB); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_ueB); // Event 1 + f_mtc_userAddNewMediaStream(v_ueA); + f_mtc_check_precond_TC_VxLTE_INT_INI_03(); + + // Test body + f_mtc_check_TP_GM_PCSCF_RE_INVITE_01(vc_vxlte_monitor_components.gmA); // Event 2 + + //Rx/Gx exchange after reINVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_05(vc_vxlte_monitor_components.rx); //(AAR – Event 3) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 6) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 12) + + f_mtc_check_TP_MW_PCSCF_RE_INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 7 + //f_mtc_check_TP_MW_SCSCF_RE_INVITE_01(vc_vxlte_monitor_components.mwIS); // Event 8 + + f_mtc_check_TP_IC_IBCF_REINVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 9 + //f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false,0); // (INVITE, 100 Trying – Event 2) + f_mtc_check_TP_IC_IBCF_2XXRESP_04(vc_vxlte_monitor_components.ic); // 200 OK – Event 10 + f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 12 + + //Rx/Gx exchange after 200 OK (SDP) on reINVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_09(vc_vxlte_monitor_components.rx); //(AAR – Event 13) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 10) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 11) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 12) + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 19 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 22 + f_mtc_userCheckCallEstablished(v_ueB); // Event 22 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_INI_03 + + group f_TC_VxLTE_INT_INI_03 { + + function f_mtc_check_precond_TC_VxLTE_INT_INI_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 9 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + } // End of function f_mtc_check_precond_TC_VxLTE_INT_INI_03 + + } // End of group f_TC_VxLTE_INT_INI_03 + + } //End of group OriginatingLeg + + group TerminatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_INT_INI_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // configuration + //f_cf_int_call_up(v_config); + + // Preamble + f_PR_user_home_registration(v_ueA,v_userInfoA); + f_PR_user_home_registration(v_ueB,v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_ueB); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_ueB); // Event 1 + f_mtc_check_precond_TC_VxLTE_INT_INI_04(); + + // Test body + f_mtc_check_TP_IC_IBCF_REINVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 2 + //f_mtc_check_TP_MW_SCSCF_RE_INVITE_02(vc_vxlte_monitor_components.mwIS); // Event 3 + //f_mtc_check_TP_MW_SCSCF_RE_INVITE_03(vc_vxlte_monitor_components.mwIB); // Event 5 + f_mtc_check_TP_MW_PCSCF_RE_INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 4 + log("v_sip", v_sip); + f_mtc_check_TP_GM_PCSCF_RE_INVITE_02(vc_vxlte_monitor_components.gmA); // Event 9 + + //Rx/Gx exchange after reINVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_08(vc_vxlte_monitor_components.rx); // (AAR – Event 5) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 6) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 7) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 8) + + //Rx/Gx exchange after 200 OK (SDP) on reINVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_10(vc_vxlte_monitor_components.rx); // (AAR – Event 11) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 12) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 13) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 14) + + f_mtc_check_TP_MW_PCSCF_200OK_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + f_mtc_check_TP_MW_PCSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 20 + f_mtc_check_TP_IC_IBCF_2XXRESP_04(vc_vxlte_monitor_components.ic); // 200 OK – Event 17 + +// f_mtc_userCheckNewMediaStream(v_ueA); +// f_mtc_userCheckNewMediaStream(v_ueB); + + f_mtc_userCheckCallEstablished(v_ueA); // Event 22 + f_mtc_userCheckCallEstablished(v_ueB); // Event 22 + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_INI_04 + + group f_TC_VxLTE_INT_INI_04 { + + function f_mtc_check_precond_TC_VxLTE_INT_INI_04() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + //f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA, false); + //f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI, false); + //f_mtc_check_TP_MW_SCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPS, false); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 9 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + } // End of function f_mtc_check_precond_TC_VxLTE_INT_INI_04 + + } // End of group f_TC_VxLTE_INT_INI_04 + + } //End of group TerminatingLeg + } //End of group SIPsessionModification + group SIPsessionRelease { + group OriginatingLeg { + + /** + * @desc Initial SIP session release. + * + * @see + */ + testcase TC_VxLTE_INT_REL_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + //f_cf_int_call_up(v_config); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_ueB); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_ueB); // Event 1 + f_mtc_check_precond_TC_VxLTE_INT_REL_01(v_sip); + + // Test body + //f_mtc_userTriggerReleaseCall(v_ueA); //Test Sequence Step 4 + f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_PCSCF_BYE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 3 + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 5 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 6) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 7) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 8) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 9) + + + f_mtc_check_TP_MW_PCSCF_200OK_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 12 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 14 + f_mtc_userCheckCallCancelled(v_ueB); // Event 15 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REL_01 + + group f_TC_VxLTE_INT_REL_01 { + + function f_mtc_check_precond_TC_VxLTE_INT_REL_01(out SipMessage p_sip) runs on ImsTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_01(vc_vxlte_monitor_components.mwPS, -, p_sip); + f_mtc_check_TP_MW_PCSCF_100Trying_01(vc_vxlte_monitor_components.mwPS, -, p_sip); + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 28 + f_mtc_check_TP_MW_PCSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 19 + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 9 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 18 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + } // End of function f_mtc_check_precond_TC_VxLTE_INT_REL_01 + + } // End of f_TC_VxLTE_INT_REL_01 + + } //End of group OriginatingLeg + group TerminatingLeg { + + /** + * @desc Initial SIP session release. + * + * @see + */ + testcase TC_VxLTE_INT_REL_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + //f_cf_int_call_up(v_config); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_ueB); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_ueB); // Event 1 + f_mtc_check_precond_TC_VxLTE_INT_REL_02(v_sip); + + // Test body + //f_mtc_userTriggerReleaseCall(v_ueB); //Test Sequence Step 4 + f_mtc_check_TP_GM_PCSCF_BYE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 2 + f_mtc_check_TP_MW_PCSCF_BYE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 3 + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 5 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 6) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 7) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 8) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 9) + + f_mtc_check_TP_MW_PCSCF_200OK_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 12 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 14 + f_mtc_userCheckCallCancelled(v_ueB); // Event 15 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REL_02 + + group f_TC_VxLTE_INT_REL_02 { + + function f_mtc_check_precond_TC_VxLTE_INT_REL_02(out SipMessage p_sip) runs on ImsTestCoordinator { + f_mtc_check_TP_MW_PCSCF_INVITE_02(vc_vxlte_monitor_components.mwPS, -, p_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 1 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 1 + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic, false); // INVITE ENUM Event 1 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 20 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 25 + f_mtc_check_TP_IC_IBCF_180RESP_02(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 25 + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic, false); // 180 Ringing – Event 25 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 29 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 29 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic, false); // 200 OK – Event 29 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 30 + + } // End of function f_mtc_check_precond_TC_VxLTE_INT_REL_02 + + } // End of f_TC_VxLTE_INT_REL_02 + + } //End of group TerminatingLeg + group NetworkInitiated { + + /** + * @desc Network initiated session release. + * + * @see + */ + testcase TC_VxLTE_INT_REL_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + //f_cf_int_call_up(v_config); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueB, v_userInfoA); + f_mtc_userCheckRinging(v_ueA); + f_mtc_userCheckPeerIsRinging(v_ueB); + f_mtc_userAnswerCall(v_ueB); + f_mtc_userCheckCallEstablished(v_ueB); // Event 1 + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_check_precond_TC_VxLTE_INT_REL_03(); + + // Test body + + f_mtc_userLooseConnection(v_ueB); + + f_mtc_check_TP_MW_PCSCF_BYE_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 2 + f_mtc_check_TP_MW_SCSCF_BYE_03(vc_vxlte_monitor_components.mwIS); // Event 3 + f_mtc_check_TP_MW_SCSCF_BYE_01(vc_vxlte_monitor_components. mwIB); // Event 3 + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 + f_mtc_check_TP_GM_PCSCF_BYE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 5 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 6) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 7) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 8) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 9) + + f_mtc_userCheckCallTerminated(v_ueA); // Event 14 + f_mtc_userCheckCallCancelled(v_ueB); // Event 15 + + f_mtc_check_TP_GM_PCSCF_200OK_03(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_200OK_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_200OK_03(vc_vxlte_monitor_components.mwIS, -, v_sip); // Event 13 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 14 + f_mtc_userCheckCallCancelled(v_ueB); // Event 15 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REL_03 + + group f_TC_VxLTE_INT_REL_03 { + + function f_mtc_check_precond_TC_VxLTE_INT_REL_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_REL_03 + + } // End of f_TC_VxLTE_INT_REL_03 + + } //End of group NetworkInitiated + } //End of group SIPsessionRelease + group SIPsessionAbortReject { + group OriginatingLeg { + /** + * @desc Initial SIP session abort. + * + * @see + */ + testcase TC_VxLTE_INT_ABT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userTriggerCancelCall(v_ueA); + f_mtc_check_precond_TC_VxLTE_INT_ABT_01(); + + //test body + + //Rtp TP_RTP_01 (Event 1) + //Gm TP_GM_PCSCF_INVITE_01 (Event 3) + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // (Event 3) + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx); // (AAR – Event 4) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 5) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 6) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 7) + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,9 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 8,11 + + //MwPS TP_MW_PCSCF_INVITE_01 (Event 8) + //Ic TP_IC_IBCF_INVITE_03 (INVITE, ENUM – Event 8) + //MwSI TP_MW_SCSCF_INVITE_01 (Event 9) + //MwSI TP_MW_SCSCF_INVITE_01 (Event 9) + f_mtc_check_TP_MW_PCSCF_INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 8) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic,true); // (INVITE, ENUM – Event 8) + f_mtc_check_TP_MW_SCSCF_INVITE_01(vc_vxlte_monitor_components.mwIS); // (Event 9) + f_mtc_check_TP_MW_SCSCF_INVITE_01(vc_vxlte_monitor_components.mwIB); // (Event 9) + + //Ic TP_IC_IBCF_INVITE_01 (INVITE – Event 10) + //Ic TP_IC_IBCF_INVITE_02 (INVITE – Event 10) + //Ic TP_IC_IBCF_180RESP_01 (180 Ringing – Event 11) + //Ic TP_IC_IBCF_1XXRESP_01 (180 Ringing – Event 11) + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic,true); // (INVITE – Event 10) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // (INVITE – Event 10) + + //TODO 183 + + //Rx/Gx exchange after 183 (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx); // (AAR – Event 14) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 15) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 16) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 17) + + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 + + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // (180 Ringing – Event 11) + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic); // (180 Ringing – Event 11) + + //Rtp TP_RTP_02 (Event 19) + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 + //Gm TP_GM_PCSCF_CANCEL_01 (Event 20) + f_mtc_check_TP_GM_PCSCF_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + //Rx TP_RX_PCSCF_STR_03 (STR – Event 21) + //Gx TP_GX_PCRF_RAR_02 (RAR – Event 22) + f_mtc_check_TP_RX_PCSCF_STR_03(vc_vxlte_monitor_components.rx); // (STR – Event 21) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx); // (RAR – Event 22) + + //MwPS TP_MW_PCSCF_CANCEL_01 (Event 23) + f_mtc_check_TP_MW_PCSCF_CANCEL_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 23 + //MwSI TP_MW_SCSCF_CANCEL_01 (Event 24) + //Ic TP_IC_IBCF_CANCEL_01 (CANCEL – Event 25) + f_mtc_check_TP_MW_SCSCF_CANCEL_01(vc_vxlte_monitor_components.mwIS); // (Event 24) + f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic); // (CANCEL – Event 25) + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 26) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 27) + + //Ic TP_IC_IBCF_CANCEL_OK_01 (OK – Event 28) + //MwPS TP_MW_PCSCF_200OK_CANCEL_01 (Event 30) + //Gm TP_GM_PCSCF_200OK_CANCEL_01 (Event 31) + //Ic TP_IC_IBCF_487INVITE_01 (487 INVITE – Event 32) + f_mtc_check_TP_IC_IBCF_CANCEL_OK_01(vc_vxlte_monitor_components.ic); // (OK – Event 28) + f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 30) + f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // (Event 31) + f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // (487 INVITE – Event 32) + + //MwPS TP_MW_PCSCF_487INVITE_01 (Event 34) + f_mtc_check_TP_MW_PCSCF_487INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 34 + //Gm TP_GM_PCSCF_487INVITE_01 (Event 35) + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 35 + //Ic TP_IC_IBCF_487INVITE_ACK_01 (ACK – Event 37) + f_mtc_check_TP_IC_IBCF_487INVITE_ACK_01(vc_vxlte_monitor_components.ic); // (ACK – Event 37) + //Rtp TP_RTP_01 (Events 41,42) + + f_mtc_userCheckCallCancelled(v_ueA); // Event 40 + f_mtc_userCheckCallEnded(v_ueB); // Event 41 + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_ABT_01 + + group f_TC_VxLTE_INT_ABT_01 { + + function f_mtc_check_precond_TC_VxLTE_INT_ABT_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_ABT_01 + + } // End of f_TC_VxLTE_INT_ABT_01 + + /** + * @desc Initial SIP session reject. + * + * @see + */ + testcase TC_VxLTE_INT_REJ_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userTriggerCancelCall(v_ueA); + f_mtc_check_precond_TC_VxLTE_INT_REJ_01(); + + //test body + + //Rtp TP_RTP_01 (Events 1,2) + + //Gm TP_GM_PCSCF_INVITE_01 (Event 3) + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 3) + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx); // (AAR – Event 4) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 5) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 6) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 7) + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,9 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 8,11 + + //MwPS TP_MW_PCSCF_INVITE_01 (Event 8) + //MwSI TP_MW_SCSCF_INVITE_01 (Event 9) + //Ic TP_IC_IBCF_INVITE_03 (INVITE, ENUM – Event 10) + //Ic TP_IC_IBCF_INVITE_01 (INVITE – Event 10) + //Ic TP_IC_IBCF_INVITE_02 (INVITE – Event 10) + f_mtc_check_TP_MW_PCSCF_INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 12) + f_mtc_check_TP_MW_SCSCF_INVITE_01(vc_vxlte_monitor_components.mwIS); // (Event 13) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic,true); // (INVITE, ENUM – Event 14) + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic,true); // (INVITE – Event 14) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // (INVITE – Event 14) + + // NOTE: inserted during validation due to message trace in wireshark at MW_PS + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,false); // 183 Event 15 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 11) + + //Rtp TP_RTP_02 (Event 18) + f_mtc_userCheckPeerIsRinging(v_ueA); + + //Ic TP_IC_IBCF_486INVITE_01 (Event 11) + //MwSI TP_MW_SCSCF_486INVITE_01 (Event 12) + //MwPS TP_MW_PCSCF_486INVITE_01 (Event 13) + //Gm TP_GM_PCSCF_486INVITE_01 (Event 14) + f_mtc_check_TP_IC_IBCF_486INVITE_01(vc_vxlte_monitor_components.ic); // (Event 15) + f_mtc_check_TP_MW_SCSCF_486INVITE_01(vc_vxlte_monitor_components.mwIS); // (Event 16) + f_mtc_check_TP_MW_PCSCF_486INVITE_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 17) + f_mtc_check_TP_GM_PCSCF_486INVITE_01(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 22) + + //Rx/Gx exchange after 468/600 was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_05(vc_vxlte_monitor_components.rx); // (STR – Event 15) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 16) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 17) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 18) + + //Ic TP_IC_IBCF_486INVITE_ACK_01 (Event 22) + f_mtc_check_TP_IC_IBCF_486INVITE_ACK_01(vc_vxlte_monitor_components.gmB); // (Event 26) + + //Rtp TP_RTP_01 (Events 23,24) + f_mtc_userCheckCallCancelled(v_ueA); // Event 27 + f_mtc_userCheckCallEnded(v_ueB); // Event 28 + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REJ_01 + + group f_TC_VxLTE_INT_REJ_01 { + + function f_mtc_check_precond_TC_VxLTE_INT_REJ_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_REJ_01 + + } // End of f_TC_VxLTE_INT_REJ_01 + + } //End of group OriginatingLeg + group TerminatingLeg { + /** + * @desc Initial SIP session abort. + * + * @see + */ + testcase TC_VxLTE_INT_ABT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userTriggerCancelCall(v_ueA); + f_mtc_check_precond_TC_VxLTE_INT_ABT_02(); + + // Test body + + //Rtp TP_RTP_01 (Events 1,2) + + + //Ic TP_IC_IBCF_INVITE_03 (INVITE, ENUM – Event 3) + //Ic TP_IC_IBCF_INVITE_01 (INVITE – Event 3) + //Ic TP_IC_IBCF_INVITE_02 (INVITE – Event 3) + //MwSI TP_MW_SCSCF_INVITE_02 (Event 4) + //MwPS TP_MW_PCSCF_INVITE_02 (Event 5) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic,true); // (INVITE, ENUM – Event 3) + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic,true); // (INVITE – Event 3) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // (INVITE – Event 3) + + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, false); // 183 Event 15 + + f_mtc_check_TP_MW_SCSCF_INVITE_02(vc_vxlte_monitor_components.mwIS); // (Event 4) + + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Event 6) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 7) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 8) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 9) + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx); // Events 11,12 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,13 + + //Gm TP_GM_PCSCF_INVITE_02 (Event 10) + //Gm TP_GM_PCSCF_180RINGING_02 (Event 11) + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 10) + f_mtc_check_TP_MW_PCSCF_INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // ( Event 14) + log("v_sip", v_sip); + f_mtc_check_TP_MW_PCSCF_100Trying_02(vc_vxlte_monitor_components.gmB, -, v_sip); + + + //TODO 183 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183 (SDP) received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_07(vc_vxlte_monitor_components.rx); // (AAR – Event 12) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 13) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 14) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 15) + + f_mtc_check_TP_GM_PCSCF_180RINGING_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 24) + + //MwPS TP_MW_PCSCF_180RINGING _02 (Event 16) + //MwSI TP_MW_SCSCF_180RINGING _02 (Event 17) + //Ic TP_IC_IBCF_180RESP_01 (180 Ringing – Event 18) + //Ic TP_IC_IBCF_180RESP_02 (180 Ringing – Event 18) + //Ic TP_IC_IBCF_1XXRESP_01 (180 Ringing – Event 18) + f_mtc_check_TP_MW_PCSCF_180RINGING_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 25) + f_mtc_check_TP_MW_SCSCF_180RINGING_02(vc_vxlte_monitor_components.mwIS); // (Event 26) + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // (180 Ringing – Event 27) + f_mtc_check_TP_IC_IBCF_180RESP_02(vc_vxlte_monitor_components.ic, true); // (180 Ringing – Event 27) + f_mtc_check_TP_IC_IBCF_1XXRESP_01(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 27) + + //Rtp TP_RTP_02 (Event 19) + f_mtc_userCheckPeerIsRinging(v_ueA); + + //Ic TP_IC_IBCF_CANCEL_02 (CANCEL – Event 20) + //MwSI TP_MW_SCSCF_CANCEL_02 (Event 21) + //MwPS TP_MW_PCSCF_CANCEL_02 (Event 22) + //Gm TP_GM_PCSCF_CANCEL_02 (Event 23) + f_mtc_check_TP_IC_IBCF_CANCEL_02(vc_vxlte_monitor_components.ic, false); // (CANCEL – Event 28) + f_mtc_check_TP_MW_SCSCF_CANCEL_02(vc_vxlte_monitor_components.mwIS); // (Event 29) + f_mtc_check_TP_MW_PCSCF_CANCEL_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 30) + f_mtc_check_TP_GM_PCSCF_CANCEL_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 35) + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_04(vc_vxlte_monitor_components.rx); // (STR – Event 24) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 25) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 26) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 27) + + //Gm TP_GM_PCSCF_200OK_CANCEL_01 (Event 28) + //MwPS TP_MW_PCSCF_200OK_CANCEL_01 (Event 29) + //Ic TP_IC_IBCF_CANCEL_OK_02 (OK – Event 31) + //Gm TP_GM_PCSCF_487INVITE_02 (Event 32) + //MwPS TP_MW_PCSCF_487INVITE_02 (Event 33) + f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 36) + f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 37) + f_mtc_check_TP_IC_IBCF_CANCEL_OK_02(vc_vxlte_monitor_components.ic); // (OK – Event 39) + f_mtc_check_TP_GM_PCSCF_487INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 40) + f_mtc_check_TP_MW_PCSCF_487INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 41) + + //Ic TP_IC_IBCF_487INVITE_02 (487 INVITE – Event 35) + //Ic TP_IC_IBCF_487INVITE_ACK_02 (ACK – Event 38) + f_mtc_check_TP_IC_IBCF_487INVITE_02(vc_vxlte_monitor_components.ic, false); // (487 INVITE – Event 43) + f_mtc_check_TP_IC_IBCF_487INVITE_ACK_02(vc_vxlte_monitor_components.ic, false); // (ACK – Event 46) + + //Rtp TP_RTP_01 (Events 41,42) + f_mtc_userCheckCallCancelled(v_ueA); // Event 48 + f_mtc_userCheckCallEnded(v_ueB); // Event 49 + + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_ABT_02 + + group f_TC_VxLTE_INT_ABT_02 { + + function f_mtc_check_precond_TC_VxLTE_INT_ABT_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_ABT_02 + + } // End of f_TC_VxLTE_INT_ABT_02 + + + /** + * @desc Initial SIP session reject. + * + * @see + */ + testcase TC_VxLTE_INT_REJ_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueB, v_userInfoB); + f_mtc_userInitiateCall (v_ueA, v_userInfoB); + f_mtc_userCheckRinging(v_ueB); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userTriggerCancelCall(v_ueA); + f_mtc_check_precond_TC_VxLTE_INT_REJ_02(); + + //test body + + //Rtp TP_RTP_01 (Events 1,2) + + //Ic TP_IC_IBCF_INVITE_03 (INVITE, ENUM – Event 3) + //Ic TP_IC_IBCF_INVITE_01 (INVITE – Event 3) + //Ic TP_IC_IBCF_INVITE_02 (INVITE – Event 3) + //MwSP TP_MW_PCSCF_INVITE_02 (Event 4) + //MwSI TP_MW_SCSCF_INVITE_02 (Event 4) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic, true); // (INVITE, ENUM – Event 3) + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // (INVITE – Event 3) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // (INVITE – Event 3) + f_mtc_check_TP_MW_PCSCF_INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 5) + f_mtc_check_TP_MW_SCSCF_INVITE_02(vc_vxlte_monitor_components.mwIS); // (Event 4) + + // NOTE: inserted during validation due to message trace in wireshark at MW_PS + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,false); // 183 Event 15 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 11) + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Event 6) + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // (RAR – Event 7) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 8) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 9) + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx); // Events 11,12 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,13 + + //Gm TP_GM_PCSCF_INVITE_02 (Event 10) + //Gm TP_GM_PCSCF_486INVITE_02 (Event 11) + //MwPS TP_MW_PCSCF_486INVITE_02 (Event 12) + //MwSI TP_MW_SCSCF_486INVITE_02 (Event 13) + //Ic TP_IC_IBCF_486INVITE_02 (486 Busy – Event 14) + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 14) + + + f_mtc_check_TP_GM_PCSCF_486INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 15) + f_mtc_check_TP_MW_PCSCF_486INVITE_02(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 20) + f_mtc_check_TP_MW_SCSCF_486INVITE_02(vc_vxlte_monitor_components.mwIS); // (Event 21) + f_mtc_check_TP_IC_IBCF_486INVITE_02(vc_vxlte_monitor_components.ic); // (486 Busy – Event 22) + + + //Rx/Gx exchange after 486/600 response was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_06(vc_vxlte_monitor_components.rx); // (STR – Event 15) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 16) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 17) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 18) + + //Ic TP_IC_IBCF_486INVITE_ACK_02 (ACK – Event 19) + f_mtc_check_TP_IC_IBCF_486INVITE_ACK_02(vc_vxlte_monitor_components.ic); // (ACK – Event 23) + + //Rtp TP_RTP_01 (Events 23,24) + f_mtc_userCheckCallCancelled(v_ueA); // Event 27 + f_mtc_userCheckCallEnded(v_ueB); // Event 28 + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REJ_02 + + group f_TC_VxLTE_INT_REJ_02 { + + function f_mtc_check_precond_TC_VxLTE_INT_REJ_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_INT_REJ_02 + + } // End of f_TC_VxLTE_INT_REJ_01 + + } //End of group TerminatingLeg + } //End of group SIPsessionAbortReject + } // End of group Interoperability + group Roaming{ + group SIPsessionEstablisment { + group OriginatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_RMI_INI_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_INI_01(); + + //test body + + //Gm TP_GM_PCSCF_INVITE_03 (Event 1) + f_mtc_check_TP_GM_PCSCF_INVITE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx/S9 exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx); // (AAR – Events 2) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Events 3, 15) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Events 4, 16) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Events 5, 17) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 6, 18) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 7, 19) + + //MwPS TP_MW_PCSCF_INVITE_03 (Event 8) + //Ic TP_IC_IBCF_INVITE_04 (INVITE – Event 9) + //Ic TP_IC_IBCF_100TRY_02 (INVITE, 100 Trying – Event 9) +// f_mtc_check_TP_MW_PCSCF_INVITE_03(vc_vxlte_monitor_components.mwPS); // (Event 8) + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 9) + f_mtc_check_TP_IC_IBCF_100TRY_02(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 9) + + //183 Session Progress + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 12) + //f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 13 + //f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx/S9 exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx); // (AAR – Events 14) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Events 3, 15) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Events 4, 16) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Events 5, 17) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 6, 18) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 7, 19) + + + //Ic TP_IC_IBCF_1XXRESP_03 (180 Ringing – Event 12) + //MwPS TP_MW_PCSCF_180RINGING_03 (Event 13) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 22) + +// f_mtc_check_TP_MW_PCSCF_180RINGING_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 13) + + + //Ic TP_IC_IBCF_2XXRESP_05 (200 OK Event 23) + //Ic TP_IC_IBCF_ACK_01 (ACK – Event 33) + //MwPS TP_MW_PCSCF_200OK_03 (Event 24) + //Rx TP_RX_PCSCF_AAR_05 (AAR – Events 25) +// f_mtc_check_TP_GM_PCSCF_180RINGING_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 20) + f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 23) + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 33) +// f_mtc_check_TP_MW_PCSCF_200OK_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 24) + + + //Gm TP_GM_PCSCF_200OK_03 (Event 31) + //Gm TP_GM_PCSCF_ACK_03 (Event 32) + //MwPS TP_MW_PCSCF_ACK_03 (Event 33) +// f_mtc_check_TP_GM_PCSCF_200OK_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 31) +// f_mtc_check_TP_GM_PCSCF_ACK_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 32) +// f_mtc_check_TP_MW_PCSCF_ACK_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 33) + + //Rtp TP_RTP_06 (Event 36) + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_INI_01 + + group f_TC_VxLTE_RMI_INI_01 { + + function f_mtc_check_precond_TC_VxLTE_RMI_INI_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_INI_01 + + } // End of f_TC_VxLTE_INT_RMI_01 + + } //End of group OriginatingLeg + group TerminatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_RMI_INI_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_INI_02(); + + //test body + + //Ic TP_IC_IBCF_INVITE_04 (INVITE – Event 2) + //Ic TP_IC_IBCF_100TRY_01 (INVITE, 100 Trying – Event 2) + //MwPS TP_MW_PCSCF_INVITE_04 (Event 3) + //Rx TP_RX_PCSCF_AAR_06 (AAR – Events 4) + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 2) + f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 2) + + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 3) + f_mtc_check_TP_MW_PCSCF_100Trying_04(vc_vxlte_monitor_components.mwPS, -, v_sip); + + //Rx/Gx/S9 exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Events 4) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Events 5, 13) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Events 6, 14) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Events 7, 15) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 8, 16) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 9, 17) + + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_200OK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_180RINGING_04(vc_vxlte_monitor_components.mwPS, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_200OK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ACK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); + + //Gm TP_GM_PCSCF_INVITE_04 (Event 10) + //Gm TP_GM_PCSCF_180RINGING_04 (Event 11) + //Rx TP_RX_PCSCF_AAR_07 (AAR – Events 12) + f_mtc_check_TP_GM_PCSCF_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 10) + + //183 + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 12) + + //f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 11 + //f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + + + //Rx/Gx/S9 exchange after 183 (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_07(vc_vxlte_monitor_components.rx); // (AAR – Events 12) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Events 5, 13) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Events 6, 14) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Events 7, 15) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Events 8, 16) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Events 9, 17) + + + f_mtc_check_TP_GM_PCSCF_180RINGING_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 11) + //MwPS TP_MW_PCSCF_180RINGING_04 (Event 18) + //Ic TP_IC_IBCF_1XXRESP_04 (180 Ringing – Event 19) + f_mtc_check_TP_MW_PCSCF_180RINGING_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 18) +//AXR f_mtc_check_TP_IC_IBCF_1XXRESP_04(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 19) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 22) + + //Gm TP_GM_PCSCF_200OK_04 (Event 22) + + f_mtc_check_TP_GM_PCSCF_200OK_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 22) + + + //MwPS TP_MW_PCSCF_200OK_04 (Event 29) + //Ic TP_IC_IBCF_2XXRESP_06 (200 OK Event 30) + //Ic TP_IC_IBCF_ACK_01 (ACK – Event 33) + //MwPS TP_MW_PCSCF_ACK_04 (Event 34) + //Gm TP_GM_PCSCF_ACK_04 (Event 35) + f_mtc_check_TP_MW_PCSCF_200OK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 29) + f_mtc_check_TP_IC_IBCF_2XXRESP_06(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 30) + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 33) + f_mtc_check_TP_MW_PCSCF_ACK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 34) + f_mtc_check_TP_GM_PCSCF_ACK_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 35) + + //Rtp TP_RTP_06 (Event 36) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_INI_02 + + group f_TC_VxLTE_RMI_INI_02 { + + function f_mtc_check_precond_TC_VxLTE_RMI_INI_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_INI_02 + + } // End of f_TC_VxLTE_INT_RMI_02 + } //End of group TerminatingLeg + + } //End of group SIPsessionEstablisment + group SIPsessionModification { + group OriginatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_RMI_INI_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_INI_03(); + + //test body + + //Rtp TP_RTP_06 (Event 1) + + //Gm TP_GM_PCSCF_RE_INVITE_03 (Event 2) + //MwPS TP_MW_PCSCF_RE_INVITE_03 (Event 3) + //MwSI TP_MW_SCSCF_RE_INVITE_03 (Event 4) + //Ic TP_IC_IBCF_REINVITE_01 (INVITE – Event 5) + //Ic TP_IC_IBCF_2XXRESP_04 (200 OK – Event 8) + f_mtc_check_TP_GM_PCSCF_RE_INVITE_03(vc_vxlte_monitor_components.gmB); // (Event 2) + f_mtc_check_TP_MW_PCSCF_RE_INVITE_03(vc_vxlte_monitor_components.mwPS); // (Event 3) + f_mtc_check_TP_MW_SCSCF_RE_INVITE_03(vc_vxlte_monitor_components.mwIS); // (Event 4) + f_mtc_check_TP_IC_IBCF_REINVITE_01(vc_vxlte_monitor_components.ic); // (INVITE – Event 5) + f_mtc_check_TP_IC_IBCF_2XXRESP_04(vc_vxlte_monitor_components.ic, 1); // (200 OK – Event 8) + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 27) + + + //Rx/Gx exchange after reINVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_05(vc_vxlte_monitor_components.rx); // (AAR – Events 3) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 4, 18) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 5, 19) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 14) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 6, 7, 20, 21) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 8,22) + + //Gm TP_GM_PCSCF_200OK_03 (Event 17) + //Gm TP_GM_PCSCF_ACK_03 (Event 18) + //MwPS TP_MW_PCSCF_ACK_03 (Event 19) + f_mtc_check_TP_GM_PCSCF_200OK_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 17) + f_mtc_check_TP_GM_PCSCF_ACK_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 18) + f_mtc_check_TP_MW_PCSCF_ACK_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 19) + + + //Rx/Gx/S9 exchange after 200 OK (SDP) on reINVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_09(vc_vxlte_monitor_components.rx); // (AAR – Events 17) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 4, 18) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 5, 19) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 14) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 6, 7, 20, 21) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 8,22) + + //Rtp TP_RTP_05 (Event 23) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_INI_03 + + group f_TC_VxLTE_RMI_INI_03 { + + function f_mtc_check_precond_TC_VxLTE_RMI_INI_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_INI_03 + + } // End of f_TC_VxLTE_RMI_INI_03 + + } //End of group OriginatingLeg + group TerminatingLeg { + + /** + * @desc Initial SIP session establishment. + * + * @see + */ + testcase TC_VxLTE_RMI_INI_04 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_INI_04(); + + //test body + + //Rtp TP_RTP_06 (Event 1) + + //Ic TP_IC_IBCF_REINVITE_01 (INVITE – Event 3) + //MwSI TP_MW_SCSCF_RE_INVITE_04 (Event 4) + //MwPS TP_MW_PCSCF_RE_INVITE_04 (Event 5) + f_mtc_check_TP_IC_IBCF_REINVITE_01(vc_vxlte_monitor_components.ic); // (INVITE – Event 3) + f_mtc_check_TP_MW_SCSCF_RE_INVITE_04(vc_vxlte_monitor_components.mwIS); // (Event 4) + f_mtc_check_TP_MW_PCSCF_RE_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 5) + + //Gm TP_GM_PCSCF_RE_INVITE_04 (Event 6) + //Gm TP_GM_PCSCF_200OK_04 (Event 7) + f_mtc_check_TP_GM_PCSCF_RE_INVITE_04(vc_vxlte_monitor_components.gmB); // (Event 6) + f_mtc_check_TP_GM_PCSCF_200OK_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 7) + + + //Rx/Gx/S9 exchange after reINVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_08(vc_vxlte_monitor_components.rx); // (AAR – Events 6) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 7, 15) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 8, 16) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 9, 17) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 9,10,17,18) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 11,19) + + //MwPS TP_MW_PCSCF_200OK_04 (Event 14) + //Ic TP_IC_IBCF_2XXRESP_04 (200 OK – Event 16) + f_mtc_check_TP_MW_PCSCF_200OK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 14) + f_mtc_check_TP_IC_IBCF_2XXRESP_04(vc_vxlte_monitor_components.ic, 1); // (200 OK – Event 22) + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 25) + + + //Rx/Gx/S9 exchange after 200 OK (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_10(vc_vxlte_monitor_components.rx); // (AAR – Events 15) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 7, 15) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 8, 16) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 9, 17) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 9,10,17,18) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 11,19) + + //MwPS TP_MW_PCSCF_ACK_04 (Event 21) + //Gm TP_GM_PCSCF_ACK_04 (Event 22) + f_mtc_check_TP_MW_PCSCF_ACK_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 21) + f_mtc_check_TP_GM_PCSCF_ACK_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 22) + + //Rtp TP_RTP_05 (Event 23) + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_INI_04 + + group f_TC_VxLTE_RMI_INI_04 { + + function f_mtc_check_precond_TC_VxLTE_RMI_INI_04() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_INI_04 + + } // End of f_TC_VxLTE_RMI_INI_04 + + } //End of group TerminatingLeg + } //End of group SIPsessionModification + group SIPsessionRelease { + group OriginatingUEInitiatedSessionRelease { + + /** + * @desc Initial SIP session release. + * + * @see + */ + testcase TC_VxLTE_RMI_REL_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_REL_01(v_sip); + + //test body + + //Rtp TP_RTP_06 (Event 1) + + //Gm TP_GM_PCSCF_BYE_04 (Event 2) + //MwPS TP_MW_PCSCF_BYE_04 (Event 3) + //Ic TP_IC_IBCF_BYE_01 (Event 4) + f_mtc_check_TP_GM_PCSCF_BYE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 2) + f_mtc_check_TP_MW_PCSCF_BYE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 3) + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic, false); // (Event 4) + + //Rx/Gx/S9 exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 6) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 7) + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9); // (STA – Event 8) + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx, true); // (RAR – Event 9) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 10) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 11) + + //MwPS TP_MW_PCSCF_200OK_BYE_04 (Event 14) + //Gm TP_GM_PCSCF_200OK_BYE_04 (Event 15) + f_mtc_check_TP_MW_PCSCF_200OK_BYE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 14) + f_mtc_check_TP_GM_PCSCF_200OK_BYE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 15) + f_mtc_check_TP_IC_IBCF_2XXRESP_07(vc_vxlte_monitor_components.ic); // (200 OK - BYE Event 13) + + //Rtp TP_RTP_04 (Events 16) + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REL_01 + + group f_TC_VxLTE_RMI_REL_01 { + + function f_mtc_check_precond_TC_VxLTE_RMI_REL_01(out SipMessage p_sip) runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + f_mtc_check_TP_GM_PCSCF_INVITE_03(vc_vxlte_monitor_components.gmA, -, p_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, p_sip); + f_mtc_check_TP_MW_PCSCF_INVITE_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (INVITE – Event 9) + f_mtc_check_TP_MW_PCSCF_100Trying_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (INVITE, 100 Trying – Event 9) + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.gmA, -, p_sip); // (183 Session Progress – Event 12) + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (183 Session Progress – Event 12) + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, p_sip); // Event 20 + + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 9) + f_mtc_check_TP_IC_IBCF_100TRY_02(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 9) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 12) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 22) + +// f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 23) + f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 23) + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 33) + + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_REL_01 + + } // End of f_TC_VxLTE_RMI_REL_01 + + } //End of group OriginatingUEInitiatedSessionRelease + group TerminatingUEInitiatedSessionRelease { + + /** + * @desc Initial SIP session release. + * + * @see + */ + testcase TC_VxLTE_RMI_REL_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_REL_02(v_sip); + + //test body + + //Rtp TP_RTP_06 (Event 1) + + //Gm TP_GM_PCSCF_BYE_05 (Event 2) + //MwPS TP_MW_PCSCF_BYE_05 (Event 3) + //Ic TP_IC_IBCF_BYE_01 (BYE – Event 4) + f_mtc_check_TP_GM_PCSCF_BYE_05(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 2) + f_mtc_check_TP_MW_PCSCF_BYE_05(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 3) + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic, false); // (BYE – Event 4) + + //Rx/Gx/S9 exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 6) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 7) + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9); // (STA – Event 8) + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx, true); // (RAR – Event 9) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 10) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 11) + + //MwPS TP_MW_PCSCF_200OK_BYE_05 (Event 14) + //Gm TP_GM_PCSCF_200OK_BYE_05 (Event 15) + f_mtc_check_TP_MW_PCSCF_200OK_BYE_05(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 14) + f_mtc_check_TP_GM_PCSCF_200OK_BYE_05(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 15) + f_mtc_check_TP_IC_IBCF_2XXRESP_07(vc_vxlte_monitor_components.ic); // (200 OK - BYE Event 13) + + //Rtp TP_RTP_04 (Events 16) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REL_02 + + group f_TC_VxLTE_RMI_REL_02 { + + function f_mtc_check_precond_TC_VxLTE_RMI_REL_02(out SipMessage p_sip) runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, p_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 9) + f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 9) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 12) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 22) + +// f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 23) +// f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 3); // (200 OK Event 23) + f_mtc_check_TP_IC_IBCF_2XXRESP_06(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 30) + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 33) + + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_REL_02 + + } // End of f_TC_VxLTE_RMI_REL_02 + + } //End of group TerminatingUEInitiatedSessionRelease + group OriginatingNetworkInitiatedSessionRelease{ + /** + * @desc Initial SIP session release. + * + * @see + */ + testcase TC_VxLTE_RMI_REL_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_REL_03(); + + //test body + + //Rtp TP_RTP_06 (Event 1) + + //MwPS TP_MW_PCSCF_BYE_06 (Event 2) + f_mtc_check_TP_MW_PCSCF_BYE_06(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 2) + + //Gm TP_GM_PCSCF_BYE_06 (Event 4) + //Ic TP_IC_IBCF_BYE_01 (BYE – Event 5) + f_mtc_check_TP_GM_PCSCF_BYE_06(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 4) + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic, false); // (BYE – Event 5) + + //Rx/Gx/S9 exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 7) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 8) + f_mtc_check_TP_S9_PCRF_STA_02(vc_vxlte_monitor_components.s9); // (STA – Event 9) + f_mtc_check_TP_GX_PCRF_RAR_04(vc_vxlte_monitor_components.gx, true); // (RAR – Event 10) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 11) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 12) + + //Gm TP_GM_PCSCF_200OK_BYE_06 (Event 15) + //MwPS TP_MW_PCSCF_200OK_BYE_06 (Event 17) + //MwSI TP_MW_PCSCF_200OK_BYE_05 (Event 16) + f_mtc_check_TP_GM_PCSCF_200OK_BYE_06(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 15) + f_mtc_check_TP_MW_PCSCF_200OK_BYE_06(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 17) + f_mtc_check_TP_MW_PCSCF_200OK_BYE_05(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 16) + f_mtc_check_TP_IC_IBCF_2XXRESP_07(vc_vxlte_monitor_components.ic); // (200 OK - BYE Event 13) + + //Rtp TP_RTP_04 (Events 18) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REL_03 + + group f_TC_VxLTE_RMI_REL_03 { + + function f_mtc_check_precond_TC_VxLTE_RMI_REL_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 9) + f_mtc_check_TP_IC_IBCF_100TRY_02(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 9) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 12) +// f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 0); // (200 OK Event 23) + f_mtc_check_TP_IC_IBCF_2XXRESP_05(vc_vxlte_monitor_components.ic, 3); // (200 OK Event 23) + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 33) + + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_REL_03 + + } // End of f_TC_VxLTE_RMI_REL_03 + + + } //End of group + } //End of group SIPsessionRelease + group SIPsessionAbortReject { + group OriginatingLeg { + /** + * @desc Initial SIP session abort. + * + * @see + */ + testcase TC_VxLTE_RMI_ABT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_ABT_01(v_sip); + + //test body + + //Rtp TP_RTP_04 (Events 1) + + //Rx/Gx/S9 exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx); // (AAR – Event 3) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 4) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 5) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 6) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 7) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 8) + + //Ic TP_IC_IBCF_INVITE_04 (INVITE – Event 10) + //Ic TP_IC_IBCF_100TRY_02 (INVITE, 100 Trying – Event 10) + //Ic TP_IC_IBCF_1XXRESP_03 (180 Ringing – Event 13) + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 10) + f_mtc_check_TP_IC_IBCF_100TRY_02(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 10) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 13) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 22) + + + //Rx/Gx/S9 exchange after 183 (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx); // (AAR – Event 15) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 16) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 17) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 18) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 19) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 20) + + //Rtp TP_RTP_05 (Event 22) + + //Gm TP_GM_PCSCF_CANCEL_03 (Event 23) + //MwPS TP_MW_PCSCF_CANCEL_03 (Event 24) + //Ic TP_IC_IBCF_CANCEL_01 (CANCEL – Event 25) + f_mtc_check_TP_GM_PCSCF_CANCEL_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 23) + f_mtc_check_TP_MW_PCSCF_CANCEL_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 24) + f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, false); // (CANCEL – Event 25) + + //Rx/Gx/S9 exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_04(vc_vxlte_monitor_components.rx); // (STR – Event 31) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 32) + f_mtc_check_TP_S9_PCRF_STA_01(vc_vxlte_monitor_components.s9); // (STA – Event 33) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 34) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 35) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 36) + + //Ic TP_IC_IBCF_CANCEL_OK_03 (OK – Event 34) + //MwPS TP_MW_PCSCF_200OK_CANCEL_03 (Event 35) + //Gm TP_GM_PCSCF_200OK_CANCEL_03 (Event 36) + f_mtc_check_TP_IC_IBCF_CANCEL_OK_03(vc_vxlte_monitor_components.ic); // (OK – Event 34) + f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 35) + f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 36) + + //Ic TP_IC_IBCF_487INVITE_01 (487 INVITE – Event 38) + //MwPS TP_MW_PCSCF_487INVITE_03 (Event 39) + //Gm TP_GM_PCSCF_487INVITE_03 (Event 40) + f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // (487 INVITE – Event 38) + f_mtc_check_TP_MW_PCSCF_487INVITE_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 39) + f_mtc_check_TP_GM_PCSCF_487INVITE_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 40) + + //Ic TP_IC_IBCF_487INVITE_ACK_01 (ACK – Event 43) + f_mtc_check_TP_IC_IBCF_487INVITE_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 43) + + //Rtp TP_RTP_04 (Event 45) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_ABT_01 + + group f_TC_VxLTE_RMI_ABT_01 { + + function f_mtc_check_precond_TC_VxLTE_RMI_ABT_01(out SipMessage p_sip) runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + f_mtc_check_TP_GM_PCSCF_INVITE_03(vc_vxlte_monitor_components.gmA, -, p_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, p_sip); + f_mtc_check_TP_MW_PCSCF_INVITE_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (INVITE – Event 9) + f_mtc_check_TP_MW_PCSCF_100Trying_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (INVITE, 100 Trying – Event 9) + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.gmA, -, p_sip); // (183 Session Progress – Event 12) + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03(vc_vxlte_monitor_components.mwPS, -, p_sip); // (183 Session Progress – Event 12) + f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, p_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, p_sip); // Event 20 + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_ABT_01 + + } // End of f_TC_VxLTE_RMI_ABT_01 + + /** + * @desc Initial SIP session reject. + * + * @see + */ + testcase TC_VxLTE_RMI_REJ_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_REJ_01(); + + //test body + + //Rtp TP_RTP_04 (Events 1) + + //Gm TP_GM_PCSCF_INVITE_03 (Event 2) + f_mtc_check_TP_GM_PCSCF_INVITE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // (Event 2) + + //Rx/Gx/S9 exchange after INVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx); // (AAR – Event 3) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 4) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 5) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 6) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 7) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 8) + + //MwPS TP_MW_PCSCF_INVITE_03 (Event 9) + //Ic TP_IC_IBCF_INVITE_04 (INVITE – Event 10) + //Ic TP_IC_IBCF_100TRY_02 (INVITE, 100 Trying – Event 10) + //Ic TP_IC_IBCF_486INVITE_03 (Event 13) + //MwPS TP_MW_PCSCF_486INVITE_03 (Event 14) + //Gm TP_GM_PCSCF_486INVITE_03 (Event 15) + f_mtc_check_TP_MW_PCSCF_INVITE_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 9) + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 10) + f_mtc_check_TP_IC_IBCF_100TRY_02(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 10) + + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress FOR SIMULATION ONLY) + f_mtc_check_TP_IC_IBCF_1XXRESP_03b(vc_vxlte_monitor_components.ic, false); // (180 Ringing FOR SIMULATION ONLY) + + f_mtc_check_TP_IC_IBCF_486INVITE_03(vc_vxlte_monitor_components.ic, false); // (Event 13) + f_mtc_check_TP_MW_PCSCF_486INVITE_03(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 14) + f_mtc_check_TP_GM_PCSCF_486INVITE_03(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 15) + + //Ic TP_IC_IBCF_486INVITE_ACK_01 (ACK – Event 23) + f_mtc_check_TP_IC_IBCF_486INVITE_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 23) + + //Rx/Gx/S9 exchange after 486/600 was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_06(vc_vxlte_monitor_components.rx); // (STR – Event 16) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 17) + f_mtc_check_TP_S9_PCRF_STA_01(vc_vxlte_monitor_components.s9); // (STA – Event 18) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 19) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 20) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 21) + + //Rtp TP_RTP_04 (Events 26) + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REJ_01 + + group f_TC_VxLTE_RMI_REJ_01 { + + function f_mtc_check_precond_TC_VxLTE_RMI_REJ_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_REJ_01 + + } // End of f_TC_VxLTE_RMI_REJ_01 + + } //End of group OriginatingLeg + group TerminatingLeg { + /** + * @desc Initial SIP session abort. + * + * @see + */ + testcase TC_VxLTE_RMI_ABT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_ABT_02(); + + //test body + + //Rtp TP_RTP_04 (Events 1) + + //Ic TP_IC_IBCF_INVITE_04 (INVITE – Event 3) + //Ic TP_IC_IBCF_100TRY_01 (INVITE, 100 Trying – Event 3) + //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) + f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) + f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 4) + + + //Rx/Gx/S9 exchange after INVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Event 5) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 6) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 7) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 8) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 9) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 10) + + //Gm TP_GM_PCSCF_INVITE_04 (Event 11) + f_mtc_check_TP_GM_PCSCF_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // (Event 11) + + + //183(SDP) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – Event 20) + + //Rx/Gx/S9 exchange after 183 (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_07(vc_vxlte_monitor_components.rx); // (AAR – Event 13) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 14) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 15) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 16) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 17) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 18) + + //Ic TP_IC_IBCF_1XXRESP_04 (180 Ringing – Event 20) + f_mtc_check_TP_IC_IBCF_1XXRESP_04(vc_vxlte_monitor_components.ic, false); // (180 Ringing – Event 20) + + //Rtp TP_RTP_05 (Event 22) + + //Ic TP_IC_IBCF_CANCEL_02 (CANCEL – Event 24) + //MwPS TP_MW_PCSCF_CANCEL_04 (Event 25) + f_mtc_check_TP_IC_IBCF_CANCEL_02(vc_vxlte_monitor_components.ic, false); // (CANCEL – Event 24) + f_mtc_check_TP_MW_PCSCF_CANCEL_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 25) + + f_mtc_check_TP_GM_PCSCF_CANCEL_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 26) + + //Rx/Gx/S9 exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_03(vc_vxlte_monitor_components.rx); // (STR – Event 31) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 32) + f_mtc_check_TP_S9_PCRF_STA_01(vc_vxlte_monitor_components.s9); // (STA – Event 33) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 34) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 35) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 36) + + //Ic TP_IC_IBCF_CANCEL_OK_02 (OK – Event 35) + f_mtc_check_TP_IC_IBCF_CANCEL_OK_02(vc_vxlte_monitor_components.ic); // (OK – Event 35) + + //Gm TP_GM_PCSCF_487INVITE_04 (Event 37) + //MwPS TP_MW_PCSCF_487INVITE_04 (Event 38) + //Ic TP_IC_IBCF_487INVITE_02 (487 INVITE – Event 39) + //Ic TP_IC_IBCF_487INVITE_ACK_02 (ACK – Event 42) + f_mtc_check_TP_GM_PCSCF_487INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 37) + f_mtc_check_TP_MW_PCSCF_487INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 38) + f_mtc_check_TP_IC_IBCF_487INVITE_02(vc_vxlte_monitor_components.ic, false); // (487 INVITE – Event 39) + f_mtc_check_TP_IC_IBCF_487INVITE_ACK_02(vc_vxlte_monitor_components.ic, false); // (ACK – Event 42) + + //Rtp TP_RTP_04 (Events 45) + + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_ABT_02 + + group f_TC_VxLTE_RMI_ABT_02 { + + function f_mtc_check_precond_TC_VxLTE_RMI_ABT_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_ABT_02 + + } // End of f_TC_VxLTE_RMI_ABT_02 + + /** + * @desc Initial SIP session reject. + * + * @see + */ + testcase TC_VxLTE_RMI_REJ_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_SIP_MW_PS_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME})) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TC_VxLTE_RMI_REJ_02(); + + //test body + + //Rtp TP_RTP_04 (Events 1) + + //Ic TP_IC_IBCF_INVITE_05 (INVITE – Event 3) + //Ic TP_IC_IBCF_100TRY_01 (INVITE, 100 Trying – Event 3) + //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) + f_mtc_check_TP_IC_IBCF_INVITE_05(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) + f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 4) + + //183(SDP) + f_mtc_check_TP_IC_IBCF_1XXRESP_03(vc_vxlte_monitor_components.ic, false); // (183 Session Progress – FOR SIMULATION ONLY) + + //Rx/Gx/S9 exchange after INVITE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_06(vc_vxlte_monitor_components.rx); // (AAR – Event 5) + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // (AAR – Event 6) + f_mtc_check_TP_S9_PCRF_AAA_02(vc_vxlte_monitor_components.s9); // (AAA – Event 7) + f_mtc_check_TP_GX_PCRF_RAR_03(vc_vxlte_monitor_components.gx, true); // (RAR – Event 8) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 9) + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // (AAA – Event 10) + + //Ic TP_IC_IBCF_1XXRESP_04 (180 Ringing – Event 20) + f_mtc_check_TP_IC_IBCF_1XXRESP_04(vc_vxlte_monitor_components.ic, false); // (180 Ringing – FOR SIMULATION ONLY) + + //Gm TP_GM_PCSCF_INVITE_04 (Event 11) + //Gm TP_GM_PCSCF_486INVITE_04 (Event 12) + //MwPS TP_MW_PCSCF_486INVITE_04 (Event 13) + //Ic TP_IC_IBCF_486INVITE_04 (Event 14) + f_mtc_check_TP_GM_PCSCF_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 11) + f_mtc_check_TP_GM_PCSCF_486INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // (Event 12) + f_mtc_check_TP_MW_PCSCF_486INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 13) + f_mtc_check_TP_IC_IBCF_486INVITE_04(vc_vxlte_monitor_components.ic, false); // (Event 14) + + //Ic TP_IC_IBCF_486INVITE_ACK_01 (ACK – Event 23) + f_mtc_check_TP_IC_IBCF_486INVITE_ACK_01(vc_vxlte_monitor_components.ic, false); // (ACK – Event 23) + + //Rx/Gx/S9 exchange after 486/600 was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_03(vc_vxlte_monitor_components.rx); // (STR – Event 16) + f_mtc_check_TP_S9_PCRF_STR_01(vc_vxlte_monitor_components.s9); // (STR – Event 17) + f_mtc_check_TP_S9_PCRF_STA_01(vc_vxlte_monitor_components.s9); // (STA – Event 18) + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 19) + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // (RAA – Event 20) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 21) + + //Rtp TP_RTP_04 (Event 26) + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REJ_02 + + group f_TC_VxLTE_RMI_REJ_02 { + + function f_mtc_check_precond_TC_VxLTE_RMI_REJ_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VxLTE_RMI_REJ_02 + + } // End of f_TC_VxLTE_RMI_REJ_02 + + } //End of group TerminatingLeg + } //End of group SIPsessionAbortReject + } // End of group Roaming +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn new file mode 100644 index 0000000..bde4e54 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn @@ -0,0 +1,436 @@ +/** + * @author STF 574, TTF 006 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for IMS Registration. + * @see ETSI TS 103 653-2 (2020) + */ +module AtsImsIot_TD_REG{ + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester { type ImsUserInfo }; + // LibIot + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions { function f_getImUser }; + // ImsIot + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + import from AtsImsIot_TP_behavior_RX all; + + group Interoperability{ + group IMSRegistration { + + /** + * @desc IMS Registration - Successful. + * + * @see + */ + testcase TC_VxLTE_INT_REG_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 10 + f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 2, 9 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 5, 8 + + f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 3, 4 + f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 6, 7 + + f_mtc_check_TP_GM_PCSCF_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 11, 20 + f_mtc_check_TP_MW_PCSCF_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 12, 19 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 15, 18 + + f_mtc_check_TP_CX_HSS_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 13, 14 + f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 16, 17 + + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01(vc_vxlte_monitor_components.gmA); // Events 21, 24 + f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01(vc_vxlte_monitor_components.mwPS); // Events 22, 23 + f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01(vc_vxlte_monitor_components.mwPI); // Events 22, 23 + + f_mtc_check_TP_GM_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.gmA); // Events 30, 31 + f_mtc_check_TP_MW_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.mwPS); // Events 29, 32 + f_mtc_check_TP_MW_PCSCF_NOTIFY_01(vc_vxlte_monitor_components.mwPI); // Events 29, 32 + + f_mtc_check_TP_RX_PCSCF_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 25 //true because AAR repeated in next TP + f_mtc_check_TP_RX_PCRF_AAA_01(vc_vxlte_monitor_components.rx); // Event 26 + + //Gx interface has not been validated yet + //f_mtc_check_TP_GX_PGW_RAA_01(vc_vxlte_monitor_components.gx); // Event 27, 28 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REG_01 + + /** + * @desc IMS Registration - Unsuccessful. + * + * @see + */ + testcase TC_VxLTE_INT_REG_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + //test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 1, 6 + f_mtc_check_TP_MW_PCSCF_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Event 2, 5 + + f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 3, 4 + + f_mtc_check_TP_RX_PCSCF_AAR_02(vc_vxlte_monitor_components.rx);// Event 7 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REG_02 + + /** + * @desc IMS Registration - 3rd party registration to AS. + * + * @see + */ + testcase TC_VxLTE_INT_REG_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_SH_INTERFACENAME, + PX_SIP_ISC_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 10 + f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 2, 9 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 5, 8 + + f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 3, 4 + f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 6, 7 + + f_mtc_check_TP_GM_PCSCF_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 11, 24 + f_mtc_check_TP_MW_PCSCF_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 12, 23 + // FIXME Not on the PCAP traces + // FIXME f_mtc_check_TP_MW_ICSCF_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 15, 22 + + f_mtc_check_TP_CX_HSS_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 13, 14 + f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 16, 17 + + f_mtc_check_TP_SH_HSS_UDA_01(vc_vxlte_monitor_components.sh);// Event 16, 17 + f_mtc_check_TP_ISC_SCSCF_REGISTER_01(vc_vxlte_monitor_components.isc); // Event 18, 21 + + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01(vc_vxlte_monitor_components.gmA); // Events 25, 28 + f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01(vc_vxlte_monitor_components.mwPS); // Events 26, 27 + + f_mtc_check_TP_RX_PCSCF_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 29 //true because AAR repeated in next TP + f_mtc_check_TP_RX_PCRF_AAA_01(vc_vxlte_monitor_components.rx); // Event 30 + + //Gx interface has not been validated yet + //f_mtc_check_TP_GX_PGW_RAA_01(vc_vxlte_monitor_components.gx); // Event 31, 32 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( );} + else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_REG_03 + + } //End of group IMSRegistration + + } // End of group Interoperability + group Roaming{ + group IMSRegistration { + + /** + * @desc IMS Registration - Successful. + * + * @see + */ + testcase TC_VxLTE_RMI_REG_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_S9_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + //test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 14 + f_mtc_check_TP_MW_PCSCF_REGISTER_04(vc_vxlte_monitor_components.mwPS); // Event 2, 13 + f_mtc_check_TP_IC_IBCF_REGISTER_01(vc_vxlte_monitor_components.ic, false); // Event 3, 12 + f_mtc_check_TP_MW_ICSCF_REGISTER_04(vc_vxlte_monitor_components.mwIS); // Event 7, 10 + + f_mtc_check_TP_GM_PCSCF_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 15, 28 + f_mtc_check_TP_MW_PCSCF_REGISTER_05(vc_vxlte_monitor_components.mwPS); // Events 16, 27 + f_mtc_check_TP_IC_IBCF_REGISTER_02(vc_vxlte_monitor_components.ic, false); // Event 17, 26 + f_mtc_check_TP_MW_ICSCF_REGISTER_05(vc_vxlte_monitor_components.mwIS); // Event 21, 24 + + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02(vc_vxlte_monitor_components.gmA); // Events 29, 36 + f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02(vc_vxlte_monitor_components.mwPS); // Events 30, 35 + f_mtc_check_TP_IC_IBCF_SUBSCRIBE_01(vc_vxlte_monitor_components.ic, false); // Event 31, 34 + + f_mtc_check_TP_RX_PCSCF_AAR_01(vc_vxlte_monitor_components.rx);// Event 37 + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // Event 38 + f_mtc_check_TP_S9_PCRF_AAA_01(vc_vxlte_monitor_components.s9); // Event 39 + f_mtc_check_TP_RX_PCRF_AAA_03(vc_vxlte_monitor_components.rx); // Event 40 + f_mtc_check_TP_GX_PGW_RAA_01(vc_vxlte_monitor_components.gx); // Event 41, 42 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REG_01 + + /** + * @desc IMS Registration - Unsuccessful. + * + * @see + */ + testcase TC_VxLTE_RMI_REG_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 1, 6 + f_mtc_check_TP_MW_PCSCF_REGISTER_03(vc_vxlte_monitor_components.mwPS); // Event 2, 5 + //f_mtc_check_TP_IC_IBCF_REGISTER_0X(vc_vxlte_monitor_components.mwPS, false, true); // Event 2, 5 //Check during validation if TD and TP need to be written in TD document because Ic interface + f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS); // Event 2, 5 + + f_mtc_check_TP_RX_PCSCF_AAR_02(vc_vxlte_monitor_components.rx);// Event 7 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REG_02 + + /** + * @desc IMS Registration - 3rd party registration to AS. + * + * @see + */ + testcase TC_VxLTE_RMI_REG_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_SIP_IC_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_SH_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + + f_mtc_check_TP_GM_PCSCF_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 14 + f_mtc_check_TP_MW_PCSCF_REGISTER_04(vc_vxlte_monitor_components.mwPS); // Event 2, 13 + f_mtc_check_TP_IC_IBCF_REGISTER_01(vc_vxlte_monitor_components.ic, false); // Event 3, 12 + f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS); // Event 7, 10 + + f_mtc_check_TP_GM_PCSCF_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 15, 32 + f_mtc_check_TP_MW_PCSCF_REGISTER_05(vc_vxlte_monitor_components.mwPS); // Events 16, 31 + f_mtc_check_TP_IC_IBCF_REGISTER_02(vc_vxlte_monitor_components.ic, false); // Event 17, 30 + f_mtc_check_TP_MW_ICSCF_REGISTER_05(vc_vxlte_monitor_components.mwIS); // Event 21, 28 + + f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02(vc_vxlte_monitor_components.gmA); // Events 33, 40 + f_mtc_check_TP_IC_IBCF_SUBSCRIBE_01(vc_vxlte_monitor_components.ic, false); // Events 35, 38 + f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02(vc_vxlte_monitor_components.mwPS); // Events 36, 37 + + f_mtc_check_TP_RX_PCSCF_AAR_01(vc_vxlte_monitor_components.rx);// Event 41 + f_mtc_check_TP_S9_PCRF_AAR_01(vc_vxlte_monitor_components.s9); // Event 42 + f_mtc_check_TP_S9_PCRF_AAA_01(vc_vxlte_monitor_components.s9); // Event 43 + f_mtc_check_TP_RX_PCRF_AAA_03(vc_vxlte_monitor_components.rx); // Event 44 + f_mtc_check_TP_GX_PGW_RAA_01(vc_vxlte_monitor_components.gx); // Event 45, 46 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + //f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_RMI_REG_03 + + } //End of group IMSRegistration + } // End of group Roaming +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn new file mode 100644 index 0000000..55300d3 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -0,0 +1,742 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at CX interface + */ + +module AtsImsIot_TP_behavior_CX +{ + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + + // LibIot + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + + // AtsImsIot + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Functions all; + import from AtsImsIot_Diameter_Templates all; + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + + // LibIms + import from LibIms_UpperTester all; + +group g_HSS { + + + /** + * Starts monitor component behavior for TP_CX_HSS_MAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a MA-Request received due to S-CSCF registration notification procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a MAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Destination_Realm_AVP
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             Server_Name_AVP
+     *             SIP_Number_Auth_Items_AVP
+     *             SIP_Auth_Data_Item_AVP containing
+     *                 SIP_Authentication_Scheme_AVP
+     *             ;
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the MAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             not Experimental_Result_AVP
+     *             Result_Code_AVP
+     *                  indicating value DIAMETER_SUCCESS
+     *             User_Name_AVP
+     *             SIP_Number_Auth_Items_AVP
+     *             SIP_Auth_Data_Item_AVP containing
+     *                 SIP_Authentication_Scheme_AVP
+     *             ;
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_MAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{mAR_MSG := mw_MAR_basic} + }, + {0, omit}, + "TP_CX_HSS_MAA_01 - MAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{mAA_MSG := mw_MAA} + }, + { + DIAMETER_MSG:{mAA_MSG := mw_MAA_basic} + }, + {0, omit}, + "TP_CX_HSS_MAA_01 - MAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_MAA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_RTA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a RT-Request received due to S-CSCF network de-registration notification procedure and sends RT-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a RTR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             User_Name_AVP
+     *             Deregistration_Reason_AVP containing
+     *                 Reason_Code_AVP
+     *         ;;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the RTA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_RTA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{rTR_MSG := mw_RTR} + }, + { + DIAMETER_MSG:{rTR_MSG := mw_RTR_basic} + }, + {0, omit}, + "TP_CX_HSS_RTA_01 - RTR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{rTA_MSG := mw_RTA} + }, + { + DIAMETER_MSG:{rTA_MSG := mw_RTA_basic} + }, + {0, omit}, + "TP_CX_HSS_RTA_01 - RTA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_RTA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_SAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a SAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Public_Identity_AVP
+     *             not User_Name_AVP
+     *             Destination_Realm_AVP
+     *             Server_Name_AVP
+     *             Server_Assignment_Type_AVP
+     *                 indicating value UNREGISTERED_USER
+     *             User_Data_Already_Available_AVP 
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the SAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             User_Data AVP
+     *             Charging_Information_AVP
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_SAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + }, + {0, omit}, + "TP_CX_HSS_SAA_01 - SAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{sAA_MSG := mw_SAA_userData} + }, + { + DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + }, + {0, omit}, + "TP_CX_HSS_SAA_01 - SAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_SAA_01 + + + /** + * Starts monitor component behavior for TP_CX_HSS_SAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in an SA-Request received due to S-CSCF de-registration procedure and sends SA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a SAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             Destination_Realm_AVP
+     *             Server_Name_AVP
+     *             Server_Assignment_Type_AVP
+     *                 indicating value USER_DEREGISTRATION
+     *             User_Data_Already_Available_AVP 
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the SAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Result_Code_AVP
+     *                indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_S_CSCF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_SAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + }, + {0, omit}, + "TP_CX_HSS_SAA_02 -SAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{sAA_MSG := mw_SAA} + }, + { + DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + }, + {0, omit}, + "TP_CX_HSS_SAA_02 - SAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_SAA_02 + + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Public_Identity_AVP
+     *             Visited_Network_Identifier_AVP
+     *             User_Authorization_Type_AVP 
+     *                 indicating value REGISTRATION,
+     *             User_Name_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             UAR_Flags_AVP 
+     *                 indicating value IMS_Emergency_Registration_bit_not_set
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP 
+     *                     indicating value DIAMETER_FIRST_REGISTRATION
+     *                 ;
+     *             ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_01 + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP
+     *                     indicating value DIAMETER_SUBSEQUENT_REGISTRATION
+     *                 ;,
+     *             Server_Name_AVP
+     *             not Server_Capabilities_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic}}, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/}//TODO:Check TP + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_02 + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that the IUT checks that the Private User Identity and the Public User Identity exists in the HSS and if not then IUT sets the appropriate experimental result code in the UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *         User_Name_AVP
+     *             indicating value "an unknown private user identity"
+     *         Public_Identity_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP
+     *                 Experimental_Result_Code_AVP
+     *                     indicating value DIAMETER_ERROR_USER_UNKNOWN
+     *             not Server_Name_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_unknownPrivateId} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_03 - UAR", + p_forward_to_mtc, + p_checkMessage ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamErrorUserUnknown} + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_03 - UAA", + p_forward_to_mtc, + p_checkMessage ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_03 + + /** + * Starts monitor component behavior for TP_CX_HSS_UAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to UE de-registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Public_Identity_AVP
+     *             User_Name_AVP
+     *             User_Authentication_Type_AVP
+     *                 indicating value DE_REGISTRATION
+     *             Visited_Network_Identifier_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Server_Name_AVP
+     *             not Server_Capabilities_AVP
+     *         ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_UAA_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_04 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess} + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_04 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_UAA_04 + + +} // end group g_HSS + + +} // end module AtsImsIot_TP_behavior_CX \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn new file mode 100644 index 0000000..cec6cb6 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -0,0 +1,3513 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at GM interface + */ + +module AtsImsIot_TP_behavior_GM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_GM all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 + + function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 + + function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity and + * the UE_A entity receives a BYE + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base) + //AXR mw_SipRequest(mw_BYE_Base), + }, + {}, + {0, omit}, + "TP_GM_PCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a SUBSCRIBE + * } + * then { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01 + + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); +// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) +// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), +// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NOTIFY_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_NOTIFY_01 + + } // End of group imsNotify + + group imsPrack { + + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + + var SipMessage v_sip; + + // Check the PRACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_PRACK_01( + -, + -, // FIXME Set expected value + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_PRACK_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_PRACK_01 + + } // End of group imsPrack + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoA.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_04 + + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the 100_Trying + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity receives a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_02 + + function f_mtc_check_TP_GM_PCSCF_100Trying_03( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_03 + + function f_mtc_check_TP_GM_PCSCF_100Trying_04( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_04 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_02 + + function f_mtc_check_TP_GM_PCSCF_180RINGING_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_03 + + function f_mtc_check_TP_GM_PCSCF_180RINGING_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_04 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02 + + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 + + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_04 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity hasAchieveInitialINVITE + * } + * then { + * the UE_B entity receives an ACK containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_02 + + function f_mtc_check_TP_GM_PCSCF_ACK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_03 + + function f_mtc_check_TP_GM_PCSCF_ACK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_04 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isNoLongerAvailable + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_03( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_03 + + function f_mtc_check_TP_GM_PCSCF_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_04( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_04 + + function f_mtc_check_TP_GM_PCSCF_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_05( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_05 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_05 + + function f_mtc_check_TP_GM_PCSCF_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_06( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_06 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_06 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05 + + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_06", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_02 + + function f_mtc_check_TP_GM_PCSCF_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_03 + + function f_mtc_check_TP_GM_PCSCF_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_04 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02 + + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03 + + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04 + + } // End of group ims200OkCancel + + group imsBusy { + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_486INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_486INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_04 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_02 + + function f_mtc_check_TP_GM_PCSCF_487INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_487INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_04 + + } // End of group imsRequestTermination + +} // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn new file mode 100644 index 0000000..7596bc0 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -0,0 +1,1113 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at GX interface + */ + +module AtsImsIot_TP_behavior_GX +{ + + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from AtsImsIot_Diameter_Templates all; + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + +group g_PGW { + + + /** + * Starts monitor component behavior for TP_GX_PGW_CCR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that when IUT is invoked with a create session request the CC-Request is sent towards PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity invokes create_session_request
+     *     }
+     *     then {
+     *         the EPC_PGW_B entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value INITIAL_REQUEST
+     *             Subscription_Id_AVP containing
+     *                 Subscription_Id_Type_AVP
+     *                     indicating value END_USER_IMSI
+     *                 ;,
+     *             IP_CAN_Type_AVP
+     *             RAT_Type_AVP
+     *             Called_Station_Id_AVP
+     *             PDN_Connection_Id_AVP
+     *             Framed_IP_Address_AVP
+     *             "or" Framed_IP6_IP_Address_AVP
+     *             Bearer_Usage_AVP
+     *                 indicating value IMS_SIGNALLING
+     *             QoS_Information_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_UL_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_DL_AVP
+     *                 Bearer_Identifier_AVP
+     *             Default_EPS_Bearer_QoS_AVP containing
+     *                 QoS_Class_Identifier_AVP
+     *                     indicating value '5'
+     *                 Allocation_Retention_Priority_AVP containing
+     *                     Priority_Level_AVP
+     *                     Pre_emption_Capablity_AVP
+     *                     Pre_emption_Vulnerability_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_CCR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PGW_CCR_01 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_CCR_01 + + /** + * Starts monitor component behavior for TP_GX_PGW_CCR_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that when IUT is invoked with a delete session request the CC-Request is sent towards PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *              the EPC_PGW_A entity invokes delete_session_request
+     *     }
+     *     then {
+     *         the EPC_PGW_B entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value TERMINATION_REQUEST
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *     }
+     * }  
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_CCR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PGW_CCR_02 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_CCR_02 + + + /** + * Starts monitor component behavior for TP_GX_PGW_RAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in an RA-Request received due provision of PCC rules and sends RA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an RAR containing
+     *             Charging_Rule_Install_AVP containing
+     *                 Charging_Rule_Definition_AVP containing
+     *                     Charging_Rule_Name_AVP containing
+     *                         Flows_AVP containing
+     *                             Media_Component_Number_AVP
+     *                                 indicating value 0
+     *                             ,
+     *                             Flow_Status_AVP
+     *                                 indicating value ENABLED
+     *                         ;
+     *                     ;
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PGW_A entity
+     *     }
+     *     then {
+     *         the EPC_PGW_A entity sends the RAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_RAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall)} + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + }, + {0, omit}, + "TP_RX_PGW_RAA_01 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode} + }, + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + }, + {0, omit}, + "TP_RX_PGW_RAA_01 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_RAA_01 + + + /** + * Starts monitor component behavior for TP_GX_PGW_RAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes an RA-Request received due to the Session Bearer procedure and sends RA-Answer with Result_Code_AVP."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *              the EPC_PCRF_A entity sends an RAR
+     *              to the EPC_PGW_A entity
+     *     }
+     *     then {
+     *         the EPC_PGW_A entity sends the RAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_RAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy } + }, + {0, omit}, + "TP_RX_PGW_RAA_02 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + }, + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic} + }, + {0, omit}, + "TP_RX_PGW_RAA_02 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_RAA_02 + + + /** + * Starts monitor component behavior for TP_GX_PGW_RAA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes an RA-Request received due to the Session Bearer procedure and sends RA-Answer with Result_Code_AVP."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A and
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an RAR
+     *         to the EPC_PGW_A entity
+     *     }
+     *     then {
+     *         the EPC_PGW_A entity sends the RAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_RAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy} + }, + {0, omit}, + "TP_RX_PGW_RAA_03 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + }, + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + }, + {0, omit}, + "TP_RX_PGW_RAA_03 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_RAA_03 + + + /** + * Starts monitor component behavior for TP_GX_PGW_RAA_04 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes an RA-Request received due to removal of Session Bearer procedure and sends RA-Answer with Result_Code_AVP."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an RAR containing
+     *             Charging_Rule_Remove_AVP containing
+     *                 Charging_Rule_Name_AVP
+     *         ;;
+     *         to the EPC_PGW_A entity
+     *     }
+     *     then {
+     *         the EPC_PGW_A entity sends the RAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PGW_RAA_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + }, + {0, omit}, + "TP_RX_PGW_RAA_04 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + }, + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + }, + {0, omit}, + "TP_RX_PGW_RAA_04 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PGW_RAA_04 + + +} // end group g_PGW + +group g_PCRF { + + + /** + * Starts monitor component behavior for TP_GX_PCRF_CCA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of attachment procedure."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value INITIAL_REQUEST
+     *             Subscription_Id_AVP containing
+     *                 Subscription_Id_Type_AVP
+     *                     indicating value END_USER_IMSI
+     *                 ;,
+     *             IP_CAN_Type_AVP
+     *             RAT_Type_AVP
+     *             Called_Station_Id_AVP
+     *             PDN_Connection_Id_AVP
+     *             Framed_IP_Address_AVP
+     *             "or" Framed_IP6_IP_Address_AVP
+     *             Bearer_Usage_AVP
+     *                 indicating value IMS_SIGNALLING
+     *             QoS_Information_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_UL_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_DL_AVP
+     *                 Bearer_Identifier_AVP
+     *             Default_EPS_Bearer_QoS_AVP containing
+     *                 QoS_Class_Identifier_AVP
+     *                     indicating value '5'
+     *                 Allocation_Retention_Priority_AVP containing
+     *                     Priority_Level_AVP
+     *                     Pre_emption_Capablity_AVP
+     *                     Pre_emption_Vulnerability_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         to the EPC_PGW_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_CCA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_01 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_01 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_CCA_01 + + + /** + * Starts monitor component behavior for TP_GX_PCRF_CCA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of detachment procedure."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value TERMINATION_REQUEST
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PGW_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_CCA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_02 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_02 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_CCA_02 + + + /** + * Starts monitor component behavior for TP_GX_PCRF_CCA_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of detachment procedure."
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     *
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value TERMINATION_REQUEST
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PGW_A entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_CCA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_03 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_03 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_CCA_03 + + + /** + * Starts monitor component behavior for TP_GX_PCRF_CCA_04 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives CC-Answer from home PCRF and it sends CC-Answer towards home P-GW."
+     * 
+     * Reference 
+            "TS 129 212 (V15.3.0) [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)"
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     *
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an CCA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             QoS_Information_AVP containing
+     *                 APN_Aggregate_Max_Requested_Bandwidth_UL_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_DL_AVP
+     *                 Bearer_Identifier_AVP;,
+     *             Default_EPS_Bearer_QoS_AVP containing
+     *                 QoS_Class_Identifier_AVP
+     *                     indicating value '5'
+     *                 Allocation_Retention_Priority_AVP containing
+     *                     Priority_Level_AVP
+     *                     Pre_emption_Capablity_AVP
+     *                     Pre_emption_Vulnerability_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PGW_B entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_CCA_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_qosInformation_class5 } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_04 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_CCA_04 + + + /** + * Starts monitor component behavior for TP_GX_PCRF_CCA_04 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives CC-Answer from home PCRF and it sends CC-Answer towards home P-GW."
+     * 
+     * Reference 
+            "TS 129 212 (V15.3.0) [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)"
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     *
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an CCA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PGW_B entity
+     *     }
+     * }  
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_CCA_05( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_CCA_05 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_CCA_05 + + + /** + * Starts monitor component behavior for TP_GX_PCRF_RAR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "When IUT receives AA-Request from P-CSCF successfully sends an RA-Request due to the Session Bearer procedure"
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the RAR containing
+     *             Charging_Rule_Install_AVP containing
+     *                 Charging_Rule_Definition_AVP containing
+     *                     Charging_Rule_Name_AVP
+     *                     Flow_Information_AVP containing
+     *                         Flow_Description_AVP
+     *                     Flow_Status_AVP
+     *                     Flows_AVP containing
+     *                         Media_Component_Number_AVP
+     *                     ;,
+     *                     QOS_Information_AVP containing
+     *                         QOS_Class_Identifier_AVP
+     *                             indicating value 
+     *                                 "QCI_1 for voice or
+     *                                  QCI_2 for video";,
+     *                         Max_Requested_Bandwidth_UL_AVP
+     *                         Max_Requested_Bandwidth_DL_AVP
+     *                         Guaranteed_Bitrate_UL_AVP
+     *                         Guaranteed_Bitrate_DL_AVP
+     *                         Allocation_Retention_Priority_AVP
+     *                     ;
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PGW_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_RAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos)} + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + }, + {0, omit}, + "TP_RX_PCRF_RAR_01 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_RAR_01 + + /** + * Starts monitor component behavior for TP_GX_PCRF_RAR_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "When IUT receives ST-Request from P-CSCF to remove all relevant previously created bearers then IUT sends an RA-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A and
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an STR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the RAR containing
+     *             Charging_Rule_Remove_AVP containing
+     *                 Charging_Rule_Name_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PGW_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_RAR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove} + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + }, + {0, omit}, + "TP_RX_PCRF_RAR_02 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_RAR_02 + + /** + * Starts monitor component behavior for TP_GX_PCRF_RAR_03 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "When IUT receives AA-Answer from home PCRF then IUT sends an RA-Request due to the Session Bearer procedure"
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *         the EPC_PCRF_A entity sends an AAA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the RAR containing
+     *             Charging_Rule_Install_AVP containing
+     *                 Charging_Rule_Definition_AVP containing
+     *                     Charging_Rule_Name_AVP
+     *                     Flow_Information_AVP containing
+     *                         Flow_Description_AVP
+     *                     Flow_Status_AVP
+     *                     Flows_AVP containing
+     *                         Media_Component_Number_AVP
+     *                     ;,
+     *                     QOS_Information_AVP containing
+     *                         QOS_Class_Identifier_AVP
+     *                             indicating value 
+     *                                 "QCI_1 for voice or
+     *                                  QCI_2 for video";,
+     *                         Max_Requested_Bandwidth_UL_AVP
+     *                         Max_Requested_Bandwidth_DL_AVP
+     *                         Guaranteed_Bitrate_UL_AVP
+     *                         Guaranteed_Bitrate_DL_AVP
+     *                         Allocation_Retention_Priority_AVP
+     *                     ;
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PGW_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_RAR_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) } //During validation some additions may be required + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + }, + {0, omit}, + "TP_RX_PCRF_RAR_03 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_RAR_03 + + /** + * Starts monitor component behavior for TP_GX_PCRF_RAR_04 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "When IUT receives ST-Answer from home PCRF then IUT sends an RA-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends an STA
+     *              to the EPC_PCRF_B entity
+     *         }
+     *     then {
+     *         the EPC_PCRF_B entity sends the RAR containing
+     *             Charging_Rule_Remove_AVP containing
+     *                 Charging_Rule_Name_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PGW_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_RAR_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } //During validation some additions may be required + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + }, + {0, omit}, + "TP_RX_PCRF_RAR_04 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_RAR_04 + + +} // end group g_PCRF + + +} // end module AtsImsIot_TP_behavior_GX \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn new file mode 100644 index 0000000..f46956d --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -0,0 +1,1651 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsImsIot_TP_behavior_IC +{ + + import from AtsImsIot_TestSystem { type SipInterfaceMonitor , ImsTestCoordinator, SipInterfaceMonitor; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common { + type + GenericParam, + SemicolonParam_List + } + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + // LibSip + import from LibSip_SDPTypes { type SDP_media_desc_list }; + + import from AtsImsIot_Templates_IC all; + + + group g_IBCF { + + group g_IBCF_GC { + + /** + * @desc + * TP_IMS_4002_01 in CFW step 3 (MESSAGE)
ensure that {
+ * when { UE_A sends a MESSAGE to UE_B containing a Message_Body + * greater than 1300 bytes }
then { IMS_B receives the MESSAGE + * containing the Message_Body greater than 1300 bytes }
} + * @remark source function f_mtc_check_TP_IMS_4002_01_ic + */ + function f_mtc_check_TP_IC_IBCF_GC_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_TP_IC_IBCF_GC_01) + }, + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_GC_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_GC_01 + + } // group g_IBCF_GC + + group g_IBCF_INVITE { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_01_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_01 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_02( + mw_SIP_URI_Base, + mw_TEL_URI_Base + ) + ) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_02 + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_03 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_04_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_INVITE_03( + mw_TEL_URI_Base, + mw_SIP_URI_Base + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_IC_IBCF_INVITE_03 + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5046_01_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SipUrl v_pcscfEutAUrl := ?; //mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + var template SipUrl v_pcscfEutAIpUrl := mw_SipUrl_Host(f_GetEUTPcscfIpAddress(PX_EUT_A)); + var ImsUserInfo v_user := f_getAnyValidUser(PX_EUT_B); + var template SipUrl v_UserEutBUrl := mw_SipUrl_Host(v_user.domain); + var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; + var Route v_Route; + var template Route vt_pcscfRoute := { + fieldName := ROUTE_E, + routeBody := ({mw_routeBody(v_pcscfEutAUrl), *}, + {mw_routeBody(v_pcscfEutAIpUrl), *} ) + }; + var Via v_Via; + var template Via vt_pcscfVia := { + fieldName := VIA_E, + viaBody := ({mw_ViaBody_interface(v_pcscfEutAUrl.components.sip.hostPort), *}, + {mw_ViaBody_interface(v_pcscfEutAIpUrl.components.sip.hostPort), *} ) + }; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest((mdw_TP_IC_IBCF_INVITE_04((v_pcscfEutAUrl, v_pcscfEutAIpUrl), v_UserEutBUrl)))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if(ispresent(v_sip.request.msgHeader.route)) { + v_Route := v_sip.request.msgHeader.route; + } + if(ispresent(v_sip.request.msgHeader.via)) { + v_Via := v_sip.request.msgHeader.via; + } + + // Check Route header + if (match(v_Route, vt_pcscfRoute)) { + f_setIotVerdictFAIL("TP_IC_IBCF_INVITE_04"); + } + // Check Via header + if (match(v_Via, vt_pcscfVia)) { + } else { + f_setIotVerdictFAIL("TP_IC_IBCF_INVITE_04"); + } + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_INVITE_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5097_02_ic + */ + function f_mtc_check_TP_IC_IBCF_INVITE_05( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_UEB_PublicId := f_GetUEPublicId(PX_EUT_B); //from + var template SipUrl v_eutAUri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); //to + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_INVITE_05(v_eutAUri, v_UEB_PublicId))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_INVITE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_INVITE + + group g_IBCF_REINVITE { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REINVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5106_01_ic + */ + function f_mtc_check_TP_IC_IBCF_REINVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false //in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SipUrl v_SCSCF_A_Uri := ( + mw_SipUrl_Host( + f_GetEUTScscfIpAddress_1()//f_GetEUTScscfAddress(PX_EUT_A) + ), + mw_SipUrl_Host( + f_GetEUTScscfIpAddress_1()//f_GetEUTScscfIpAddress(PX_EUT_A) + ) + ); +// var template SkipType v_skip := {0, omit}; +// +// if(p_skipCount > 0) { +// v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; +// } + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REINVITE_01(v_SCSCF_A_Uri))}, + {mw_SipRequest(mw_INVITE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REINVITE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_REINVITE + + + group g_IBCF_100TRY { + + /** + * @desc Starts monitor component behavior for TP_IMS_5070_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5070_01_ic + */ + function f_mtc_check_TP_IC_IBCF_100TRY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_100Trying_Base)}, + {mw_SipResponse(m_Response_Dummy)}, + {0, omit}, + "TP_IC_IBCF_100TRY_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IMS_5070_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5070_01_ic + */ + function f_mtc_check_TP_IC_IBCF_100TRY_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage/*, + integer p_skipCount*/ + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_100Trying_Base)}, + {mw_SipResponse(m_Response_Dummy)}, + {0, omit}, + "TP_IC_IBCF_100TRY_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + }} + + } // end group g_IBCF_100TRY + + group g_IBCF_180RESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_01_ic + */ + function f_mtc_check_TP_IC_IBCF_180RESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 180 response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_180RESP_01/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + {0, omit}, + "TP_IC_IBCF_180RESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5131_01_ic + */ + function f_mtc_check_TP_IC_IBCF_180RESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 180 response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_180RESP_02/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + {0, omit}, + "TP_IC_IBCF_180RESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_180RESP + + group g_IBCF_1XXRESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_03_ic + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_1XXRESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_1XXRESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_01 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, ?)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_1XXRESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_01 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_183RESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base))}, +// {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_183SessionProgress_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + function f_mtc_check_TP_IC_IBCF_1XXRESP_03b( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_180Ringing_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_1XXRESP_02 + */ + function f_mtc_check_TP_IC_IBCF_1XXRESP_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_1XXRESP_02(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mw_180Ringing_Base)}, + {0, omit}, + "TP_IC_IBCF_1XXRESP_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_03_ic + */ + function f_mtc_check_TP_IC_IBCF_183RESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 1xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_183RESP_01(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(m_Response_Dummy) }, // FIXME Create mdw_1XX_Base + {0, omit}, + "TP_IC_IBCF_183RESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_1XXRESP + + group g_IBCF_2XXRESP { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_01/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5115_04_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_02(mw_SIP_URI_Base, mw_TEL_URI_Base)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5131_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first 2xx response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mdw_TP_IC_IBCF_2XXRESP_03/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipResponse(mdw_2XX_Base) }, + {0, omit}, + "TP_IC_IBCF_2XXRESP_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_04 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_04( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount := 0 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_04)}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, omit}, + "TP_IC_IBCF_2XXRESP_04", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_05( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_05(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_05", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_06 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_2XXRESP_05 + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_06( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := ?; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_05(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_06", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_2XXRESP_07 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5121_02_ic + */ + function f_mtc_check_TP_IC_IBCF_2XXRESP_07( + SipInterfaceMonitor p_monitorCompRef, + integer p_skipCount :=0 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template RecordRoute v_recordRoute := *; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_TP_IC_IBCF_2XXRESP_07(?,?,mw_SIP_URI_Base, v_recordRoute))}, + {mw_SipResponse(mdw_2XX_Base)}, + {p_skipCount, mw_SipResponse(mdw_2XX_Base)}, + "TP_IC_IBCF_2XXRESP_07", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_2XXRESP + + + group g_IBCF_ACK { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_02_ic + */ + function f_mtc_check_TP_IC_IBCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first ACK request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_IC_IBCF_ACK_01(?, ?)/*FIXME( + mw_From_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other //(mw_credentialIntegrityYes) + )*/ + ) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + + } // end group g_IBCF_ACK + + group g_IBCF_BYE { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_01_ic + */ + function f_mtc_check_TP_IC_IBCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_BYE_01 + */ + function f_mtc_check_TP_IC_IBCF_BYE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}, + {}, + {0,omit}, + "TP_IC_IBCF_BYE_02_200OK", + false, + false + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_BYE_01 + */ + function f_mtc_check_TP_IC_IBCF_BYE_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr)))}, + {}, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}, + {}, + {0,omit}, + "TP_IC_IBCF_BYE_01_200OK", + false, + false + ) + ); + p_monitorCompRef.done; + + }} //function + + } // end group g_IBCF_BYE + + group g_IBCF_CANCEL { + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5107_03_ic + */ + function f_mtc_check_TP_IC_IBCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1()/*f_GetEUTScscfAddress(PX_EUT_A)*/); + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { +// mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) + mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) + }, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + function f_mtc_check_TP_IC_IBCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1()/*f_GetEUTScscfAddress(PX_EUT_A)*/); + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsAUrl,?,?)) }, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + function f_mtc_check_TP_IC_IBCF_CANCEL_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template SipUrl v_scscfImsBUrl := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_CANCEL_01(?, v_scscfImsBUrl,?,?))}, + {}, + {0, omit}, + "TP_IC_IBCF_CANCEL_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + }} //function + + } // end group g_IBCF_CANCEL + + group g_IBCF_CANCEL_OK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_statusLine indicate response code. + * @remark source function f_mtc_check_response_mx + */ + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_01( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_01", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_02( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_02", + false, + false + ) + ); + p_monitorCompRef.done; + } + } + + function f_mtc_check_TP_IC_IBCF_CANCEL_OK_03( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, + {}, + {0,omit}, + "TP_IC_IBCF_CANCEL_OK_03", + false, + false + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_CANCEL_OK + + group g_IBCF_486INVITE { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_EPC_6034_04 + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?)) + //, mw_SipResponse(mw_Response_Base(c_statusLine600))) + }, // FIXME Enforce template checks + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_03( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?)),mw_SipResponse(mw_Response_Base(c_statusLine600))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_04( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_486INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_486INVITE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_486INVITE + + group g_IBCF_487INVITE { + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_EPC_6034_04 + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_01( + SipInterfaceMonitor p_monitorCompRef + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse ( mw_Response_Base ( c_statusLine487, ?, ? ) ) }, { }, { 0, omit }, + "TP_IC_IBCF_487INVITE_01", + false, + false ) + ); + p_monitorCompRef.done; + } + } // End of function + + /** + * @desc Starts monitor component behavior + * @param p_monitorCompRef Reference to monitor component + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_487INVITE_02(?,?))}, + {mw_SipResponse(mdw_4XX_Base)}, + {0, omit}, + "TP_IC_IBCF_487INVITE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // end group g_IBCF_487INVITE + + group g_IBCF_487INVITE_ACK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_ACK_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_ACK_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_487INVITE_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * Starts monitor component behavior for TP_IC_IBCF_487INVITE_ACK_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_487INVITE_ACK_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_487INVITE_ACK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + } // end group g_IBCF_487INVITE_ACK + + group g_IBCF_486INVITE_ACK { + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_ACK_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_ACK_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_486INVITE_ACK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + /** + * Starts monitor component behavior for TP_IC_IBCF_486INVITE_ACK_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + * @remark source function f_mtc_check_TP_IMS_5052_01_ic + */ + function f_mtc_check_TP_IC_IBCF_486INVITE_ACK_02( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_4XXINVITE_ACK_01(?, ?, ?))}, + {}, + {0, omit}, + "TP_IC_IBCF_486INVITE_ACK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } //function + + } // end group g_IBCF_486INVITE_ACK + + group g_IBCF_SUBSCRIBE { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_SUBSCRIBE_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5044_01_ic + */ + function f_mtc_check_TP_IC_IBCF_SUBSCRIBE_01( + SipInterfaceMonitor p_monitorCompRef/*, Response p_200OK*/, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var charstring v_UEB_PublicId := f_GetUEPublicId(PX_EUT_B); + var template SipUrl v_eutAUri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; + var charstring v_Epires200OK; + var charstring v_EpiresSubscribe; + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_SUBSCRIBE_01(?, v_eutAUri, v_UEB_PublicId))}, + {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_SUBSCRIBE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_200OK_Base)}, + {}, + {0, omit}, + "TP_IC_IBCF_SUBSCRIBE_01_200OK", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_SUBSCRIBE + + + group g_IBCF_NOTIFY { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_NOTIFY_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5094_01_IMS + */ + function f_mtc_check_TP_IC_IBCF_NOTIFY_01( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + var template SipUrl v_request_uri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_NOTIFY_01(?, v_request_uri))}, + {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, + {0, omit}, + "TP_IC_IBCF_NOTIFY_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_200OK_Base)}, + {}, + {0, omit}, + "TP_IC_IBCF_NOTIFY_01_200OK", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + } // end group g_IBCF_NOTIFY + + group g_IBCF_REGISTER { + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5089_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_01)}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5089_01_ic_then + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER401_01)}, + {mw_SipResponse (mw_401Unauthorized_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_01_401", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_02 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_02( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_02)}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_02_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_03 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_03( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_EXPIRES_03(?,?))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_03_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_04 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_04( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_IC_IBCF_REGISTER_EXPIRES_03(?,?))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + // @remark source function f_mtc_check_TP_IMS_5092_01_ic + var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1());//f_GetEUTScscfAddress(PX_EUT_B) + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_IC_IBCF_REGISTER_04_200OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} + + /** + * @desc Starts monitor component behavior for TP_IC_IBCF_REGISTER_05 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IMS_5092_01_ic_when + */ + function f_mtc_check_TP_IC_IBCF_REGISTER_05( + SipInterfaceMonitor p_monitorCompRef, boolean p_checkMessage + ) runs on ImsTestCoordinator {f_mtc_check_TP_IC_IBCF_REGISTER_04(p_monitorCompRef,p_checkMessage) + } + + } // end group g_IBCF_REGISTER + +} // end group g_IBCF + + +} // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn new file mode 100644 index 0000000..0559a25 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -0,0 +1,97 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at IC interface + */ + +module AtsImsIot_TP_behavior_ISC +{ + + import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, SipInterfaceMonitor; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + + import from LibSip_Common { + type + GenericParam, + SemicolonParam_List + } + + import from AtsImsIot_Functions all; + import from AtsImsIot_Templates_MW all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + // LibSip + import from LibSip_SDPTypes { type SDP_media_desc_list }; + // LibMsrp +// import from LibMsrp_TypesAndValues { type MsrpURI }; +// import from LibMsrp_Functions { function f_str2msrpUri }; +// import from LibMsrp_Templates { +// template +// m_msrpSend_Dummy, mw_msrpSEND_toPath_fromPath_contentType, +// m_msrpReport_Dummy, mw_msrpREPORT_success, +// m_msrpResponse_Dummy, mw_msrpResponse_toPath_fromPath, +// mw_toPath, mw_fromPath, mw_msrpResponse_toPath_fromPath_with_transferReports, +// m_msrpURIs_ToPath_Dummy, m_msrpURIs_FromPath_Dummy, +// mw_contentType +// }; + + + import from AtsImsIot_Templates_IC all; + + +group g_ISC { + + /** + * @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02 + */ + function f_mtc_check_TP_ISC_SCSCF_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_ISC_SCSCF_REGISTER_01(mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain)))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - REGISTER", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + var charstring v_EUT_A_Addr := f_GetEUTPcscfIpAddress_1(); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1()); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, //TODO To/From + //{mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + }//end f_mtc_check_TP_ISC_SCSCF_REGISTER_01 + +} // end of g_ISC + +} // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn new file mode 100644 index 0000000..69203d7 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn @@ -0,0 +1,67 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MW interface + */ +// FIXME To be removed, use AtsImsIot_TP_behavior_MW_PS, AtsImsIot_TP_behavior_MW_SI and AtsImsIot_TP_behavior_MW_IS to prevent very huge module +//module AtsImsIot_TP_behavior_MW +//{ +// +// import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator; } +// import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} +// import from AtsImsIot_Templates {template all;} +// import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } +// import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; +// import from LibIms_UpperTester {type ImsUserInfo;} +// import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} +// import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } +// import from LibSip_SIPTypesAndValues all; +// import from LibSip_Templates all; +// +// import from LibSip_Common { +// type +// GenericParam, +// SemicolonParam_List +// } +// +// import from AtsImsIot_Functions all; +// import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} +// // LibSip +// import from LibSip_SDPTypes { type SDP_media_desc_list }; +// // LibMsrp +// import from LibMsrp_TypesAndValues { type MsrpURI }; +// import from LibMsrp_Functions { function f_str2msrpUri }; +// import from LibMsrp_Templates { +// template +// m_msrpSend_Dummy, mw_msrpSEND_toPath_fromPath_contentType, +// m_msrpReport_Dummy, mw_msrpREPORT_success, +// m_msrpResponse_Dummy, mw_msrpResponse_toPath_fromPath, +// mw_toPath, mw_fromPath, mw_msrpResponse_toPath_fromPath_with_transferReports, +// m_msrpURIs_ToPath_Dummy, m_msrpURIs_FromPath_Dummy, +// mw_contentType +// }; +// import from DiameterS6a_Templates all; +// import from DiameterS6a_PIXITS all; +// import from DiameterGx_Templates all; +// // LibDiameter +// import from LibDiameter_Templates all; +//// import from DiameterRx_Templates all; +// +// +// +//group g_PCSCF { +// +// +//} // end group g_PCSCF +// +//group g_ICSCF { +// +// +//} // end group g_ICSCF +// +//group g_SCSCF { +// +// +//} // end group g_SCSCF +// +//} // end module AtsImsIot_TP_behavior_MW \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn new file mode 100644 index 0000000..21076ef --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -0,0 +1,602 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at I-CSCF/S-CSCF + */ + +module AtsImsIot_TP_behavior_MW_IS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the I-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_ICSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_ICSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_01 + + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_03 + + function f_mtc_check_TP_MW_ICSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04- First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_04 + + function f_mtc_check_TP_MW_ICSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the I-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends a REGISTER containing + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_07 + + } // End of group imsDeRegistration + +} // End of module AtsImsIot_TP_behavior_MW_IS diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn new file mode 100644 index 0000000..c6aaded --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -0,0 +1,3729 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + */ + +module AtsImsIot_TP_behavior_MW_PS { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_PCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_MESSAGE_01 + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require_HDR indicating value "path", + * Supported indicating value "path" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_01 + + /** + * @desc Verify that the P-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * PChargingVector + * ;; + * from the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + + /** + * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_03 + + function f_mtc_check_TP_MW_PCSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_04( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_04 + + function f_mtc_check_TP_MW_PCSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_05 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip: ", v_sip);// register is expected + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_07 + + /** + * @desc Verify that the P-CSCF successfully processes a network de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity isTriggeredToDetachUser + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_09( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_09( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_09 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_09 + + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (with SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_10( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_10 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Event, + * Expires + * ; + * to the IMS_S_CSCF_A entity + * and the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_SUBSCRIBE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_01 + + function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { +// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); +// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_SUBSCRIBE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) +// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), +// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_SUBSCRIBE_02 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NOTIFY_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest (mw_NOTIFY_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NOTIFY_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq // TODO v_sip.request.msgHeader.callId, + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_NOTIFY_01 + + } // End of group imsNotify + + group imsPrack { + + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + + var SipMessage v_sip; + + // Check the PRACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_PRACK_01( + -, + -, // FIXME Set expected value + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_PRACK_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_PRACK_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_PRACK_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_PRACK_01 + + } // End of group imsPrack + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function TP_MW_PCSCF_RE_INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function TP_MW_PCSCF_RE_INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_MW_PCSCF_RE_INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_RE_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_RE_INVITE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_MW_PCSCF_RE_INVITE_04 + + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 100_Trying + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 100_Trying + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 100_Trying + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_100Trying_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_02 + + function f_mtc_check_TP_MW_PCSCF_100Trying_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_03 + + function f_mtc_check_TP_MW_PCSCF_100Trying_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_100Trying_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_PCSCF_100Trying_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_04 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_02 + + function f_mtc_check_TP_MW_PCSCF_180RINGING_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_03 + + function f_mtc_check_TP_MW_PCSCF_180RINGING_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_180Ringing_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_PCSCF_180RINGING_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_04 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_02 + + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_03 + + function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_PCSCF_183SessionProgress_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_PCSCF_183SESSION_PROGRESS_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_04 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_04 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_01 + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_02 + + function f_mtc_check_TP_MW_PCSCF_ACK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_03 + + function f_mtc_check_TP_MW_PCSCF_ACK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ACK_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ACK_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ACK_04 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_02 + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Network). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_03( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_03 + + function f_mtc_check_TP_MW_PCSCF_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_04( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_04 + + function f_mtc_check_TP_MW_PCSCF_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_05( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_05 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_05 + + function f_mtc_check_TP_MW_PCSCF_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_BYE_06( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_BYE_06 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_BYE_06 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_04 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_05 + + function f_mtc_check_TP_MW_PCSCF_200OK_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_BYE_06", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_06 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_02 + + function f_mtc_check_TP_MW_PCSCF_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_03 + + function f_mtc_check_TP_MW_PCSCF_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_04 + + } // End of group imsCancel + + group ims200OkCancel { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_02 + + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_03 + + function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_200OK_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_04 + + } // End of group ims200OkCancel + + group imsBusy { + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_486INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_486INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_486INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_486INVITE_04 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 + + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_02 + + function f_mtc_check_TP_MW_PCSCF_487INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_03 + + function f_mtc_check_TP_MW_PCSCF_487INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_04 + + } // End of group imsRequestTermination + +} // End of module AtsImsIot_TP_behavior_MW_PS diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn new file mode 100644 index 0000000..9ccf70c --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn @@ -0,0 +1,1865 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MW_SI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsMessages { + + /** + * @desc Verify that the S-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity forwards the MESSAGE containing + * ContentLength indicating value greater than 1300 bytes + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_MW_SCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_MW_SCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } + + } // End of group imsMessages + + // 5.2 IMS Registration + group imsRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_SCSCF_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_01 + + /** + * @desc Verify that the S-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_SCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME SUT S-CSCF? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_02 + + } // End of group imsRegistration + + group imsDeRegistration { + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 200_OK + * to the IMS_I_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_07", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_07 + + /** + * @desc Verify that the S-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a REGISTER containing + * Expire indicating value 0 + * ; + * from the IMS_I_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends a BYE + * to the IMS_IBCF_A entity and + * the IMS_S_CSCF_A entity sends a 200 OK + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base), + mw_SipResponse(mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_REGISTER_10 + + } // End of group imsDeRegistration + + group imsSubscribe { + + /** + * @desc Verify that the S-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_SUBSCRIBE_Request_Base) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_MW_SCSCF_SUBSCRIBE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check SUBSCRIBE 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse (mw_200OK_Base) + }, + {}, + {0, omit}, + "TP_MW_SCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_SUBSCRIBE_01 + + } // End of group imsSubscribe + + group imsNotify { + + /** + * @desc Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToDeregisterUser + * } + * then { + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity receives an 200_Ok + * from the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "de-reg" + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse (mw_200OK_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_NOTIFY_01 + + /** + * @desc IMS_P_CSCF_A + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * } + * then { + * the IMS_S_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity receives an 200_Ok + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_NOTIFY_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Check NOTIFY 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse (mw_200OK_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_NOTIFY_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_NOTIFY_02 + + } // End of group imsNotify + + group imsInvite { + + /** + * @desc Verify that the S-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_01 - Request", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_REGISTER_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_INVITE_02 + + /** + * @desc Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_02 + + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_03( // FIXME RMI case, to be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_03", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_03 + + function f_mtc_check_TP_MW_SCSCF_RE_INVITE_04( // FIXME RMI case, to be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_INVITE_Request_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_RE_INVITE_04", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function TP_MW_SCSCF_RE_INVITE_04 + + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 100_Trying + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity forwards a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_100Trying_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_100Trying_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_100Trying_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_100Trying_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 100_Trying + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 100_Trying + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_100Trying_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_100Trying_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_100Trying_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_100Trying_02 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_180Ringing_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_180RINGING_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_180RINGING_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_S_CSCF_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_180Ringing_Base) }, + {}, + {0, omit}, + "TP_MW_SCSCF_180RINGING_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_180RINGING_02 + + } // End of group ims180Ringing + + group ims200Ok { + + /** + * @desc Verify that the S-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_200OK_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_200OK_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_200OK_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false, + in integer p_skipCount := 1 + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var template SkipType v_skip := {0, omit}; + + if(p_skipCount > 0) { + v_skip := {1, mw_SipResponse(mdw_2XX_Base)}; + } + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK_Base) }, + {}, + v_skip, + "TP_MW_SCSCF_200OK_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_02 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_ACK_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_ACK_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_ACK_01 + + /** + * @desc Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_ACK_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_ACK_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_ACK_02 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_02 + + /** + * @desc Verify that the S-CSCF successfully processes a BYE (Originating Network). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isNoLongerAvailable + * } + * then { + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity and + * the IMS_S_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_BYE_Request_Base) }, + {}, + { 0, omit }, + "TP_MW_SCSCF_BYE_03", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_BYE_03 + + } // End of group imsBye + + group imsCancel { + + /** + * @desc Verify that the S-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_CANCEL_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_CANCEL_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_CANCEL_01 + + /** + * @desc Verify that the S-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity hasAchieveInitialINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_CANCEL_Request_Base(?)) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_CANCEL_02", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_CANCEL_02 + + } + + group imsBusy { + + /** + * @desc Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity receives a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { (mw_SipResponse(mw_Response_Base(c_statusLine486)), mw_SipResponse(mw_Response_Base(c_statusLine600))) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_486INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_486INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { (mw_SipResponse(mw_Response_Base(c_statusLine486)), mw_SipResponse(mw_Response_Base(c_statusLine600))) }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_486INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_SCSCF_486INVITE_02 + + } // End of group imsBusy + + group imsRequestTermination { + + /** + * @desc Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_S_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { /*mw_SipResponse(mw_Response_Base(c_statusLine487))*/ }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_487INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_487INVITE_01 + + /** + * @desc Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_S_CSCF_B entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_IBCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_SCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { /*mw_SipResponse(mw_Response_Base(c_statusLine487))*/ }, //FIXME + {}, + { 0, omit }, + "TP_MW_SCSCF_487INVITE_01", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_MW_SCSCF_487INVITE_02 + + } // End of group imsRequestTermination + +} // End of module AtsImsIot_TP_behavior_MW_SI diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn new file mode 100644 index 0000000..606a44d --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn @@ -0,0 +1,1780 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at RX interface + */ + +module AtsImsIot_TP_behavior_RX +{ + + // LibIot + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT, PX_EUT_A, PX_EUT_B;} + import from LibIot_VxLTE_PIXITS {modulepar PX_SIP_GMA_UE_IPADDR;} + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + + // AtsImsIot + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Functions all; + import from AtsImsIot_Diameter_Templates all; + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_Steps {function f_IPV4_Address2oct;}; + + +group g_PCRF { + +group g_PCRF_ASA { + + /** + * Starts monitor component behavior for TP_RX_PCRF_ASA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT sends AA-Answer after RAA is received from PGW."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity sends a ASR containing
+     *              Abort_Cause_AVP
+     *                  indicating value BEARER_RELEASED '(0)'
+     *              ;
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the ASA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS "(2001)"
+     *     ;
+     *     to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_ASA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + }, + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + }, + {0, omit}, + "TP_RX_PCRF_ASA_01 - ASR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aSA_MSG := mw_ASA_resultCode } + }, + { + DIAMETER_MSG:{ aSA_MSG := mw_ASA_basic } + }, + {0, omit}, + "TP_RX_PCRF_ASA_01 - ASA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_ASA_01 + +} // end group g_PCRF_ASA + +group g_PCRF_AAA { + + /** + * Starts monitor component behavior for TP_RX_PCRF_AAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow sends AA-Answer."
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity sends an AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS,
+     *             Acceptable_Service_Info_AVP containing
+     *                 "one or more" Media_Component_Description_AVP containing
+     *                     Media_Component_Number_AVP
+     *                         indicating value 0,
+     *                     Media_Sub_Component_AVP containing
+     *                         Flow_Description_AVP
+     *                         Flow_Usage_AVP
+     *                             indicating value AF_SIGNALING,
+     *                         Flow_Status_AVP
+     *                             indicating value ENABLED,
+     *                         AF_Signalling_Protocol_AVP
+     *                             indicating value SIP
+     *                     ;
+     *                 ;
+     *             ;,
+     *             IP_CAN_AVP
+     *             RAT_Type_AVP
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     *         }
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_AAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + }, + {0, omit}, + "TP_RX_PCRF_AAA_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ } + }, + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + }, + {0, omit}, + "TP_RX_PCRF_AAA_01 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_AAA_01 + + /** + * Starts monitor component behavior for TP_RX_PCRF_AAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT sends AA-Answer after RAA is received from PGW."
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_A entity sends a RAA
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS "(2001)"
+     *             ;
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_AAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + }, + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + }, + {0, omit}, + "TP_RX_PCRF_AAA_02 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_AAA_02 + + /** + * Starts monitor component behavior for TP_RX_PCRF_AAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives AA-Request  from home PCRF and sends AA-Answer towards visited P-CSCF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends a AAA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the AAA 
+     *         to the IMS_P_CSCF_B entity
+     *     }
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_AAA_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + }, + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + }, + {0, omit}, + "TP_RX_PCRF_AAA_03 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_AAA_03 + +} // end group g_PCRF_AAA + +group g_PCRF_STA { + + /** + * Starts monitor component behavior for TP_RX_PCRF_STA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after reception of RA-Request sends ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A and 
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the EPC_PGW_A entity sends an RAA
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_STA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + }, + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + }, + {0, omit}, + "TP_RX_PCRF_STA_01 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_STA_01 + + /** + * Starts monitor component behavior for TP_RX_PCRF_STA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after reception of ST-Request sends ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity sends an STR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the IMS_P_CSCF_A entity
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_STA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCRF_STA_02 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + }, + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + }, + {0, omit}, + "TP_RX_PCRF_STA_02 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_STA_02 + +} // end group g_PCRF_STA + +} // end group g_PCRF + + +group g_PCSCF { + + +group g_PCSCF_ASR { + + /** + * Starts monitor component behavior for TP_RX_PCSCF_ASR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT receives AS-Request from home PCRF and it sends AS-Request towards visited P-CSCF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity sends a ASR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the ASR containing
+     *             Session_Id_AVP
+     *             Abort_Cause_AVP
+     *                 indicating value BEARER_RELEASED
+     *         ;
+     *         to the IMS_P_CSCF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_ASR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + }, + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_ASR_01 - ASR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_ASR_01 +} //end group g_PCSCF_ASR { + + +group g_PCSCF_AAR { + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after 2XX_Response on REGISTER sends an AA-Request due to provisioning of AF Signalling flow."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
+     *         to the IMS_P_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends an AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             Specific_Action_AVP
+     *                 indicating value INDICATION_OF_LOSS_OF_BEARER,
+     *             "one or more" Media_Component_Description_AVP containing 
+     *                 Media_Component_Number_AVP
+     *                     indicating value 0,
+     *                 Media_Sub_Component_AVP containing
+     *                     Flow_Description_AVP
+     *                     Flow_Usage_AVP
+     *                         indicating value AF_SIGNALLING,
+     *                     Flow_Status_AVP
+     *                         indicating value ENABLED,
+     *                     AF_Signalling_Protocol_AVP
+     *                         indicating value SIP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + * @remark source function f_mtc_check_TP_EPC_6013_01 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_01 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "IUT does not send AA-Request if 4XX_Response REGISTER is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when { 
+     *         the IMS_P_CSCF_A entity receives an 4XX_Response_REGISTER
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity not sends the AAR
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var boolean v_noDiameterMessageExpected := true; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + //check if nothing received + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } //Fail criteria: check if AAR is sent + }, + {0, omit}, + "TP_RX_PCSCF_AAR_02 - AAR", + p_forward_to_mtc, + p_checkMessage, + v_noDiameterMessageExpected + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_02 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_03 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value DISABLED '(3)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic} + }, + {0, omit}, + "TP_RX_PCSCF_AAR_03 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_03 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_04 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 180 Ringing with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 180_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_DOWNLINK '(1)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_04 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_04 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_05 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_05( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_05 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_05 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_06 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives an INVITE_Request_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value DISABLED '(3)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_06( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_06 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_06 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_07 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after 180 Ringing with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 180_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_UPLINK '(0)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_07( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_07 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_07 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_08 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for terminating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_08( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_08 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_08 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_09 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session modification for originating side after 200 OK on re-INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_UPLINK '(0)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_09( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_09 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_09 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_AAR_10 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session modification for terminating side after 200 OK on re-INVITE is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the UE_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED_DOWNLINK '(1)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_AAR_10( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) + } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_AAR_10 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_AAR_10 + +} // end group g_PCSCF_AAR + +group g_PCSCF_RAA { + + + /**TODO update TP description + * Starts monitor component behavior for TP_RX_PCSCF_RAA_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT send AA-Request in case of session establishment for originating side after 200 OK with SDP is received."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the AAR containing
+     *             Framed_IPv4_Address_AVP 
+     *                 indicating value "IPv4_Address of UE_A",
+     *             "or" Framed_IPv6_Address_AVP 
+     *                 indicating value "IPv6_Address of UE_A",
+     *             "one or more" Media_Component_Description_AVP containing
+     *                 Media_Component_Number_AVP
+     *                 Media_Type_AVP
+     *                 Flow_Status_AVP
+     *                     indicating value ENABLED '(2)'
+     *                 Max_Requested_Bandwidth_DL_AVP
+     *                 Max_Requested_Bandwidth_UL_AVP
+     *                 RR_Bandwidth_AVP
+     *                 RS_Bandwidth_AVP
+     *                 Codec_Data_AVP
+     *                 "one or more" Media_Subcomponent_Description_AVP containing
+     *                     Flow_Number_AVP
+     *                     Flow_Description_AVP
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_RAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_SpecificAction } + }, + { + DIAMETER_MSG:{ rAR_MSG := mw_RAR_basic } + }, + {0, omit}, + "TP_RX_PCSCF_RAA_01 - RAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_Rx_resultCode } + }, + { + DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + }, + {0, omit}, + "TP_RX_PCSCF_RAA_01 - RAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_RAA_01 +}//end group g_PCSCF_RAA + +group g_PCSCF_STR { + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of BYE sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A and 
+     *     the UE_A entity previouslyEstablishedCallWith the UE_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a BYE
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_01 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_01 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of BYE sends an ST-Request at terminating leg.
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B and 
+     *     the UE_B entity previouslyEstablishedCallWith the UE_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a BYE
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_02 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_02 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_03 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of CANCEL sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a CANCEL
+     *         from the UE_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_03( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_03 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_03 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_04 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of CANCEL sends an ST-Request at terminating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a CANCEL
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_04( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_04 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_04 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_05 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 486 response sends an ST-Request at originating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 486_Response_INVITE
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_05( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_05 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_05 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_06 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 486 response sends an ST-Request at terminating leg."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_B entity isAttachedTo the EPC_B and
+     *     the UE_B entity isRegisteredTo the IMS_B
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity receives a 486_Response_INVITE
+     *         from the IMS_S_CSCF_B entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_B entity sends the STR containing
+     *             Session_Id_AVP;
+     *          to the EPC_PCRF_B entity
+     *     } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_06( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_06 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_06 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_07 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of 200 response REGISTER sends an ST-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a 200_Response_REGISTER
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *    } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_07( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_07 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_07 + + /** + * Starts monitor component behavior for TP_RX_PCSCF_STR_08 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
+     * Test objective  "Verify that IUT after reception of NOTIFY during administrative de-registration sends an ST-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_A entity receives a NOTIFY
+     *         from the IMS_S_CSCF_A entity
+     *     }
+     *     then {
+     *         the IMS_P_CSCF_A entity sends the STR containing
+     *             Session_Id_AVP;
+     *         to the EPC_PCRF_A entity
+     *    } 
+     * } 
+     * 
+ * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_STR_08( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_RX_PCSCF_STR_08 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_STR_08 + +} // end group g_PCSCF_STR + +} // end group g_PCSCF + + +} // end module AtsImsIot_TP_behavior_RX \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn new file mode 100644 index 0000000..ebfc870 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -0,0 +1,681 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at S6A interface + */ + +module AtsImsIot_TP_behavior_S6A +{ + + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from AtsImsIot_Diameter_Templates all; + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + + + +group g_HSS { + + /** + * Starts monitor component behavior for TP_S6A_HSS_AIA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of AI-Request sends AI-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_MME_B entity sends a AIR
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the AIA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Authentication_Info_AVP
+     *             ;
+     *         to the EPC_MME_B entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_HSS_AIA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + }, + { + DIAMETER_MSG:{ aIR_MSG := mw_AIR_dummy } + }, + {0, omit}, + "TP_S6A_HSS_AIA_01 - AIR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aIA_MSG := mw_AIA_resultCode } + }, + { + DIAMETER_MSG:{ aIA_MSG := mw_AIA_basic } + }, + {0, omit}, + "TP_S6A_HSS_AIA_01 - AIA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_AIA_01 + + /** + * Starts monitor component behavior for TP_S6A_HSS_CLR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after termination trigger sends CL-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the EPC_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_HSS_A entity triggers network detachment
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the CLR containing
+     *             User_Name_AVP
+     *                 indicating value IMSI,
+     *             Cancellation_Type_AVP
+     *                 indicating value Subscription_Withdrawal '(2)'
+     *             CLR_Flags_AVP
+     *             ;
+     *         to the EPC_MME_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_HSS_CLR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cLR_MSG := mw_CLR_cancelation } + }, + { + DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + }, + {0, omit}, + "TP_S6A_HSS_CLR_01 - CLR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_CLR_01 + + /** + * Starts monitor component behavior for TP_S6A_HSS_PUA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of PU-Request sends PU-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+            the UE_A entity isNotRegisteredTo the EPC_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_MME_A entity sends a PUR
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the PUA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ;
+     *         to the EPC_MME_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_HSS_PUA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + }, + { + DIAMETER_MSG:{ pUER_MSG := mw_PUER_dummy } + }, + {0, omit}, + "TP_S6A_HSS_PUA_01 - PUR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_resultCode } + }, + { + DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_basic } + }, + {0, omit}, + "TP_S6A_HSS_PUA_01 - PUA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_PUA_01 + + /** + * Starts monitor component behavior for TP_S6A_HSS_ULA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_MME_A entity sends a ULR
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the ULA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ULA_Flags_AVP
+     *             ;
+     *         to the EPC_MME_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_HSS_ULA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + }, + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + }, + {0, omit}, + "TP_S6A_HSS_ULA_01 - ULR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + }, + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + }, + {0, omit}, + "TP_S6A_HSS_ULA_01 - ULA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_ULA_01 + + /** + * Starts monitor component behavior for TP_S6A_HSS_ULA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_MME_B entity sends a ULR
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the ULA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ULA_Flags_AVP
+     *             ;
+     *         to the EPC_MME_B entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_HSS_ULA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + }, + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_dummy } + }, + {0, omit}, + "TP_S6A_HSS_ULA_02 - ULR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + }, + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + }, + {0, omit}, + "TP_S6A_HSS_ULA_02 - ULA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_ULA_02 + + +} // end group g_HSS + +group g_MME { + + /** + * Starts monitor component behavior for TP_S6A_MME_AIR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of IP-CAN session establishment sends AI-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the UE_A entity sends an IP_CAN session establishment request
+     *         to the EPC_MME_B entity
+     *     }
+     *     then {
+     *         the EPC_MME_B entity sends the AIR containing
+     *             User_Name_AVP
+     *                 indicating value IMSI
+     *             Visited_PLMN_Id_AVP
+     *             Requested_EUTRAN_Authentication_Info_AVP
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_MME_AIR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aIR_MSG := mw_AIR } + }, + { + DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + }, + {0, omit}, + "TP_S6A_MME_AIR_01 - AIR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_MME_AIR_01 + + /** + * Starts monitor component behavior for TP_S6A_MME_CLA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of CL-Request sends CL-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the EPC_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_HSS_A entity sends a CLR
+     *         to the EPC_MME_A entity
+     *     }
+     *     then {
+     *         the EPC_MME_A entity sends the CLA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_MME_CLA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + }, + { + DIAMETER_MSG:{ cLR_MSG := mw_CLR_dummy } + }, + {0, omit}, + "TP_S6A_MME_CLA_01 - CLR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cLA_MSG := mw_CLA_resultCode } + }, + { + DIAMETER_MSG:{ cLA_MSG := mw_CLA_basic} + }, + {0, omit}, + "TP_S6A_MME_CLA_01 - CLA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_MME_CLA_01 + + /** + * Starts monitor component behavior for TP_S6A_MME_PUR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after termination trigger sends PU-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the EPC_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_MME_A entity triggers purge to perform detachment
+     *     }
+     *     then {
+     *         the EPC_MME_A entity sends the PUR containing
+     *             User_Name_AVP
+     *                 indicating value IMSI,
+     *             PUR_Flags_AVP
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_MME_PUR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ pUER_MSG := mw_PUER_userName } + }, + { + DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + }, + {0, omit}, + "TP_S6A_MME_PUR_01 - PUR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_MME_PUR_01 + + /** + * Starts monitor component behavior for TP_S6A_MME_ULR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of IP-CAN session establishment sends UL-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_A and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the UE_A entity sends an IP_CAN session establishment request
+     *         to the EPC_MME_A entity
+     *     }
+     *     then {
+     *         the EPC_MME_A entity sends the ULR containing
+     *             User_Name_AVP
+     *                 indicating value IMSI
+     *             ULR_Flags_AVP
+     *             Visited_PLMN_Id_AVP
+     *             RAT_Type_AVP
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_MME_ULR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + }, + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic} + }, + {0, omit}, + "TP_S6A_MME_ULR_01 - ULR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_MME_ULR_01 + + /** + * Starts monitor component behavior for TP_S6A_MME_ULR_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT after receipt of IP-CAN session establishment sends UL-Request."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the UE_A entity sends an IP_CAN session establishment request
+     *         to the EPC_MME_B entity
+     *     }
+     *     then {
+     *         the EPC_MME_B entity sends the ULR containing
+     *             User_Name_AVP
+     *                 indicating value IMSI
+     *             ULR_Flags_AVP
+     *             Visited_PLMN_Id_AVP
+     *             RAT_Type_AVP
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.8 + */ + function f_mtc_check_TP_S6A_MME_ULR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + }, + { + DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + }, + {0, omit}, + "TP_S6A_MME_ULR_02 - ULR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_MME_ULR_02 + + +} // end group g_MME + +} // end module AtsImsIot_TP_behavior_S6A \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn new file mode 100644 index 0000000..a0bdc8b --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn @@ -0,0 +1,760 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at S9 interface + */ + +module AtsImsIot_TP_behavior_S9 +{ + + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from AtsImsIot_Diameter_Templates all; + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + + +group g_PCRF { + + + /** + * Starts monitor component behavior for TP_S9_PCRF_AAR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives AA-Request from visited P-CSCS and it sends AA-Request towards home PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity sends a AAR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the AAR 
+     *         to the EPC_PCRF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_AAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_S9_basic } + }, + { + DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + }, + {0, omit}, + "TP_S9_PCRF_AAR_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_AAR_01 + + + /** + * Starts monitor component behavior for TP_S9_PCRF_AAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives AA-Request from visited PCRF then it sends a AA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Acceptable_Service_Info_AVP containing
+     *                 "one or more" Media_Component_Description_AVP containing
+     *                     Media_Component_Number_AVP
+     *                         indicating value 0,
+     *                     Media_Sub_Component_AVP containing
+     *                         Flow_Description_AVP
+     *                         Flow_Usage_AVP
+     *                             indicating value AF_SIGNALING,
+     *                         Flow_Status_AVP
+     *                             indicating value ENABLED,
+     *                         AF_Signalling_Protocol_AVP
+     *                             indicating value SIP
+     *                     ;
+     *                 ;
+     *             ;,
+     *             IP_CAN_AVP
+     *             RAT_Type_AVP
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_AAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode /*mw_AAA_S9_AcceptableService*/ } + }, + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_AAA_01 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_AAA_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_AAA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives AA-Request from visited PCRF then it sends a AA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a AAR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a AAA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Acceptable_Service_Info_AVP containing
+     *                 Media_Component_Description_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_AAA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode_mediaCopmonentDescription } + }, + { + DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_AAA_02 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_AAA_02 + + /** + * Starts monitor component behavior for TP_S9_PCRF_ASR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives AS-Request from home PCRF and it sends AS-Request towards visited PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_A entity triggers termination_SIP_signalling_session
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends the ASR containing
+     *             Session_Id_AVP
+     *             Abort_Cause_AVP
+     *                 indicating value BEARER_RELEASED
+     *         ; 
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_ASR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_abortCause(BEARER_RELEASED_E) } + }, + { + DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_ASR_01 - ASR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_ASR_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_ASA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives AS-Answer from visited P-CSCF and it sends AS-Answer towards home PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity sends a ASA
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the ASA 
+     *         to the EPC_PCRF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_ASA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ aSA_MSG := mw_ASA_S9_basic } + }, + { + DIAMETER_MSG:{ aSA_MSG := mw_ASA_dummy } + }, + {0, omit}, + "TP_S9_PCRF_ASA_01 - ASA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_ASA_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_CCR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives CC-Request from P-GW and it sends CC-Request towards home PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_B entity sends an CCR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *        the EPC_PCRF_B entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value INITIAL_REQUEST
+     *             Subscription_Id_AVP containing
+     *                 Subscription_Id_Type_AVP
+     *                     indicating value END_USER_IMSI
+     *                 ;,
+     *             IP_CAN_Type_AVP
+     *             RAT_Type_AVP
+     *             Called_Station_Id_AVP
+     *             PDN_Connection_Id_AVP
+     *             Framed_IP_Address_AVP
+     *             "or" Framed_IP6_IP_Address_AVP
+     *             Bearer_Usage_AVP
+     *                 indicating value IMS_SIGNALLING
+     *             QoS_Information_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_UL_AVP
+     *                 APN_Aggregate_Max_Requested_Bandwidth_DL_AVP
+     *                 Bearer_Identifier_AVP
+     *             Default_EPS_Bearer_QoS_AVP containing
+     *                 QoS_Class_Identifier_AVP
+     *                     indicating value '5'
+     *                 Allocation_Retention_Priority_AVP containing
+     *                     Priority_Level_AVP
+     *                     Pre_emption_Capablity_AVP
+     *                     Pre_emption_Vulnerability_AVP
+     *                 ;
+     *             ;,
+     *             Subsession_Enforcement_Info_AVP containing
+     *                 Subsession_Id_AVP
+     *                 Subsession_Operation_AVP
+     *                     indicating value ESTABLISHMENT
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_CCR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Establishment(INITIAL_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_CCR_01 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_CCR_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_CCR_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives CC-Request from P-GW and it sends CC-Request towards home PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PGW_B entity sends an CCR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends an CCR containing
+     *             CC_Request_Type_AVP
+     *                 indicating value TERMINATION_REQUEST
+     *             Subsession_Enforcement_Info_AVP containing
+     *                 Subsession_Id_AVP
+     *                 Subsession_Operation_AVP
+     *                     indicating value TERMINATION
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_CCR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Termination(TERMINATION_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_CCR_02 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_CCR_02 + + /** + * Starts monitor component behavior for TP_S9_PCRF_CCA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives CC-Request from visited PCRF then it sends a CC-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a CCR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Subsession_Decision_Info_AVP containing
+     *                 Subsession_Id_AVP
+     *                 QoS_Information_AVP containing
+     *                     APN_Aggregate_Max_Requested_Bandwidth_UL_AVP
+     *                     APN_Aggregate_Max_Requested_Bandwidth_DL_AVP
+     *                     Bearer_Identifier_AVP;,
+     *                 Default_EPS_Bearer_QoS_AVP containing
+     *                     QoS_Class_Identifier_AVP
+     *                         indicating value '5'
+     *                     Allocation_Retention_Priority_AVP containing
+     *                         Priority_Level_AVP
+     *                         Pre_emption_Capablity_AVP
+     *                         Pre_emption_Vulnerability_AVP
+     *                     ;
+     *                 ;
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_CCA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_CCA_01 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_CCA_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_CCA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives CC-Request from visited PCRF then it sends a CC-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a CCR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a CCA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             Subsession_Decision_Info_AVP containing
+     *                 Subsession_Id_AVP
+     *             ;
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_CCA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecisionAny } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_CCA_02 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_CCA_02 + + /** + * Starts monitor component behavior for TP_S9_PCRF_STR_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify that IUT receives ST-Request from visited P-CSCS and it sends ST-Request towards home PCRF."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_P_CSCF_B entity sends a STR
+     *         to the EPC_PCRF_B entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_B entity sends the STR 
+     *         to the EPC_PCRF_A entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_STR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_S9_basic } + }, + { + DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + }, + {0, omit}, + "TP_S9_PCRF_STR_01 - STR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_STR_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_STA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives ST-Request from visited PCRF then it sends a ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotAttachedTo the EPC_B and
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a STR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_STA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + }, + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_STA_01 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_STA_01 + + /** + * Starts monitor component behavior for TP_S9_PCRF_STA_02 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "Verify when IUT receives ST-Request from visited PCRF then it sends a ST-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_RMI
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_B and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the EPC_PCRF_B entity sends a STR
+     *         to the EPC_PCRF_A entity
+     *     }
+     *     then {
+     *         the EPC_PCRF_A entity sends a STA containing
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *         ;
+     *         to the EPC_PCRF_B entity
+     *    }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.9 + */ + function f_mtc_check_TP_S9_PCRF_STA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + }, + { + DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + }, + {0, omit}, + "TP_S9_PCRF_STA_02 - STA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S9_PCRF_STA_02 + + +} // end group g_PCRF + + +} // end module AtsImsIot_TP_behavior_S9 \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn new file mode 100644 index 0000000..9272998 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn @@ -0,0 +1,121 @@ +/* + * @author STF 574, TTF006 + * @version $Id$ + * @desc This module provides the TP behaviour functions at SH interface + */ + +module AtsImsIot_TP_behavior_SH +{ + // LibIms + import from LibIms_UpperTester all; + + import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + + import from AtsImsIot_Functions all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from AtsImsIot_Diameter_Templates all; + + // LibDiameter + import from LibDiameter_Templates all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + + + +group g_HSS { + + + /** + * Starts monitor component behavior for TP_SH_HSS_UDA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UD-Request and sends UD-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isAttachedTo the EPC_A and
+     *     the UE_A entity isRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_AS_A entity sends a UDR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Destination_Realm_AVP
+     *             User_Identity_AVP
+     *             Data_Reference_AVP
+     *         ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UDA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             Result_Code_AVP
+     *                 indicating value DIAMETER_SUCCESS
+     *             User_Data_AVP
+     *         ;
+     *         to the IMS_AS_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.10 + */ + function f_mtc_check_TP_SH_HSS_UDA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uDR_MSG := mw_UDR_userData_publicIdentity("tel:"&v_userInfoA.publicId)} + }, + {}, + {0, omit}, + "TP_SH_HSS_UDA_01 - UDR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uDA_MSG := mw_UDA_diamSuccess} + }, + {}, + {0, omit}, + "TP_SH_HSS_UDA_01 - UDA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_SH_HSS_UDA_01 + + +} // end group g_HSS + + +} // end module AtsImsIot_TP_behavior_SH \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn new file mode 100644 index 0000000..94df95f --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -0,0 +1,2549 @@ +/* + * @author STF 370 + * @version $Id: $ + * @desc This module provides the templates for Interoperability tests. + */ + +module AtsImsIot_Templates { + + import from LibCommon_BasicTypesAndValues {type UInt16;} + import from LibCommon_VerdictControl {type FncRetCode;} + import from LibIot_TypesAndValues { + type + InterfaceInfoList, + ProtocolFilter, + GeneralConfigurationReq, + GeneralConfigurationRsp, + SetFilterReq, + SetFilterRsp, + StartTrafficCaptureReq, + StartTrafficCaptureRsp, + StopTrafficCaptureReq, + StopTrafficCaptureRsp, + IpAddress, + Status; + } + import from AtsImsIot_TypesAndValues { + type + SipMessage, NAPTRmessage + }; + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common { + type + GenericParam, + SemicolonParam_List + } + import from LibMsrp_TypesAndValues { + type + SEND_request, + RECEIVE_response + }; + import from LibIot_PIXITS { + modulepar + PX_IOT_TIMESTAMP_OFFSET, + PX_IOT_PCAP_SESSIONS_PATH, + PX_IOT_RECORD_MODE, + PX_IOT_EUTs_IFACE_INFO_LIST, + PX_IOT_FILE_MERGE_LIST, + PX_IOT_FILE_MERGE_PATH, + PX_IOT_MERGE_TOOL_PATH, + PX_IOT_IFACES; + } + import from AtsImsIot_PIXITS { + modulepar + PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN + }; + + group adapterMsgTemplates { + template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { + protocol := p_protocol, + interfaceInfos := p_iterfaces + } + + template SetFilterRsp mw_SetFilterRsp(in template (present) Status p_status) := { + status := p_status + } + } + + group sipTemplates { + + /** + * @desc SIP request template + * @param p_request SIP request + */ + template SipMessage mw_SipRequest(in template (present) Request p_request) := { + request := p_request + } + + /** + * @desc SIP response template + * @param p_response SIP response + */ + template SipMessage mw_SipResponse(in template (present) Response p_response) := { + response := p_response + } + }//end group + + group msrpMessages { + + /** + * @desc MSRP request template + * @param p_msrpRequest MSRP request + */ + template SipMessage mw_MsrpRequest(in template (present) SEND_request p_msrpRequest) := { + msrpRequest := p_msrpRequest + } + + /** + * @desc MSRP response template + * @param p_msrpResponse MSRP response + */ + template SipMessage mw_MsrpResponse(in template (present) RECEIVE_response p_msrpResponse) := { + msrpResponse := p_msrpResponse + } + + template REFER_Request mdw_TP_MSRP_9000_07( + in template CallId p_callId, + in boolean p_referSubValue + ) modifies mw_REFER_Request_Base := { + msgHeader := + { + referSub := { + fieldName := REFER_SUB_E, + referSubValue := p_referSubValue, + referSubParams := * + } + } + } + + } // End of group msrpMessages + + group naptrTemplates { + template NAPTRmessage mw_EnumQuery_Base := { + enumMessage := { + query := { + header := ?, + enumQuestion_list := ? length (1 .. infinity), + enumResponse_list := *, + authority_list := *, + additional_list := * + } + } + } + template NAPTRmessage mw_EnumResponse_Base := { + enumMessage := { + response := { + header:=?, + enumQuestion_list := ?, + enumAnswer_list := + { + { + e164TelNumber := ?, + naptrType := 35, + class_ := ?, + ttl := ?, + rd_length := ?, + naptrRR := ? + },//TODO:this might not be the first item + * + }, + authority_list := ?, + additional_list := ? + } + } + } + } + + group rcseTemplates { + template OPTIONS_Request mw_OPTIONS_Request ( charstring p_rcseTags ) := { + requestLine := { method := OPTIONS_E, requestUri := ?, sipVersion := c_sipNameVersion }, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } + + template Response mw_Response ( template StatusLine p_statusLine, charstring p_rcseTags ) := { + statusLine := p_statusLine, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } + + template MessageHeader mw_msgHeader_Options ( charstring p_rcseTags ) modifies mw_msgHeader_dummy := { + acceptContact := { + fieldName := ACCEPT_CONTACT_E, + acValues := superset ( mw_Rcse_Tags ( p_rcseTags ) ) + } + } + + template AcRcValue mw_Rcse_Tags ( charstring p_rcseTags ) := { + wildcard := c_WILDCARD, + acRcParams := superset ( mw_User_Caps ( p_rcseTags )) + } + + template GenericParam mw_User_Caps ( charstring p_rcseTags ) := { + id := ?, + paramValue := { quotedString := p_rcseTags } + } + } + + group modifiedSIPBaseTemplates { + + /** + * + * @desc Message Request containing a message body greater than 1500 bytes. + */ + template MESSAGE_Request mdw_MESSAGE_1500c(template CallId p_callId := ?) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contact := * + }, + messageBody := { + textplain := pattern "?#(1500,)" + } + } + + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } + + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_02_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + authorization := mw_Authorization(mw_credentialIntegrityNo), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5134_01. + */ + template REGISTER_Request mdw_TP_IMS_5134_01_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_02. + */ + template REGISTER_Request mdw_TP_IMS_5011_02p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + }), + authorization := mw_Authorization(mw_credentialIntegrityYes), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_02. + */ + template REGISTER_Request mdw_TP_IMS_5011_02f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_03. + */ + template REGISTER_Request mdw_TP_IMS_5011_03p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5011_04. + */ + template REGISTER_Request mdw_TP_IMS_5011_04p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + }), + authorization := mw_Authorization(mw_credentialIntegrityIpAssocYes), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5089_01. + */ + template REGISTER_Request mdw_TP_IMS_5089_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5089_02. + */ + template REGISTER_Request mdw_TP_IMS_5089_02_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5092_01. + */ + template REGISTER_Request mdw_TP_IMS_5092_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc 200 OK message for TP_IMS_5092_01 + */ + template Response mdw_TP_IMS_5092_01_ic (charstring p_EUTHostname, template SipUrl p_eutBUri) modifies mw_200OK_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := ? + }, + pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? + {id := "term-ioi", paramValue := ?}, + * + }), + serviceRoute := mw_ServiceRoute (p_eutBUri), + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + } + } + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IMS_5089_01_ic. + */ + template Response mdw_TP_IMS_5089_01_ic modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_AKA + } + } + + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IMS_5089_02_ic. + */ + template Response mdw_TP_IMS_5089_02_ic modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_MD5 + } + } + + + /** + * + * @desc SUBSCRIBE checking TP_IMS_5044_01. + */ + template SUBSCRIBE_Request mdw_TP_IMS_5044_01_ic( + template SipUrl p_subscribe_uri, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + event := m_Event_reg, + expires := ?, // checked outside the template + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_eutAUri)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + template SUBSCRIBE_Request mdw_TP_IMS_5405_01_ic + modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := ?, + sipVersion := c_sipNameVersion + }, + msgHeader := { + via := mw_Via (?), // TODO + recordRoute := mw_recordroute(?), // @TODO + route := mw_route(?), // TODO + pChargingVector := omit + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5046_01 + */ + template INVITE_Request mdw_TP_IMS_5046_01_ic (template SipUrl p_pcscfEutAUri, template SipUrl p_userEutBUrl) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5048_01 + */ + template INVITE_Request mdw_TP_IMS_5048_01_ic (template SipUrl p_pcscfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_pcscfEutAUri)), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5052_01 on MW + */ + template BYE_Request mdw_TP_IMS_5052_01_p_ic(template CallId p_callId, template RecordRoute p_route) + modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := p_route + } + } + + template BYE_Request mdw_TP_IMS_5052_01_f_ic( + template CallId p_callId, + template SipUrl p_pcscfEutAUri) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + mw_routeBody(p_pcscfEutAUri), + * + } + } + } + } + + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5055_01 on MW + */ + template Response mdw_TP_IMS_5055_01_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_180Ringing_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5055_02 on MW + */ + template Response mdw_TP_IMS_5055_02_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_200OK_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5067_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5067_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc CANCEL Request checking TP_IMS_572_02 on gm + */ + template CANCEL_Request mdw_TP_IMS_5072_02_gm (template CallId p_callId) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + reason := { + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5073_01 on MW + */ + template BYE_Request mdw_TP_IMS_5073_01_ic(template CallId p_callId) + modifies mw_BYE_Request_Base := { + msgHeader := { + reason := { + fieldName := REASON_E, + reasonValues := {{ + token := "503", + reasonParams := * + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5080_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5080_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated + * + }) + } + } + + /** + * + * @desc UPDATE Request checking TP_IMS_5080_02 on MW + */ + template UPDATE_Request mdw_TP_IMS_5080_02_ic(template CallId p_callId) + modifies mw_UPDATE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5082_01 on MW + */ + template Response mdw_TP_IMS_5082_01_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc SUBSCRIBE checking TP_IMS_5096_01. + */ + template SUBSCRIBE_Request mdw_TP_IMS_5096_01_ic_when modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + event := m_Event_reg + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_01 + */ + template INVITE_Request mdw_TP_IMS_5097_01_ic (template SipUrl p_SCSCF_SIP_URI) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, + complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IMS_5097_02 + */ + template INVITE_Request mdw_TP_IMS_5097_02_ic ( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + * + } + } + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_04 + */ + template INVITE_Request mdw_TP_IMS_5097_04_gm(template SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + requestUri := p_requestUri + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_04 + */ + template INVITE_Request mdw_TP_IMS_5097_04_ic(in template (present) SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_requestUri, + sipVersion := c_sipNameVersion + }, + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5107_01 on MW + */ + template BYE_Request mdw_TP_IMS_5107_01_ic(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// ?, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5107_02 on MW + */ + template ACK_Request mdw_TP_IMS_5107_02_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc CANCEL Request checking TP_IMS_5107_03 on MW + */ + template CANCEL_Request mdw_TP_IMS_5107_03_ic (template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := ( + omit, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + ) + } + } + + /** + * + * @desc REFER Request checking TP_IMS_5107_04 on MW + */ + template REFER_Request mdw_TP_IMS_5107_04_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_REFER_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5108_01_ic( + template SipUrl p_SCSCF_Uri, + template GenericParam p_param + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := (omit, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_Uri)), + * + } + } + ), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + p_param, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01_f on MW + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_01_f_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03 on ISC + */ + template INVITE_Request mdw_TP_IMS_5108_03_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03_f on ISC + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_03_f_isc + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc SUBSCRIBE Request checking TP_IMS_5108_07 on ISC + */ + template SUBSCRIBE_Request mdw_TP_IMS_5108_07_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc SUBSCRIBE Request checking TP_IMS_5108_07_f on ISC + * ifpresent ioi params than fail + */ + template SUBSCRIBE_Request mdw_TP_IMS_5108_07_f_isc + modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_01 on MW + */ + template Response mdw_TP_IMS_5115_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_02 on MW + */ + template Response mdw_TP_IMS_5115_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_03 on MW + */ + template Response mdw_TP_IMS_5115_03_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_180Ringing_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_04 on MW + */ + template Response mdw_TP_IMS_5115_04_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_200OK_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_08 on MW + */ + template Response mdw_TP_IMS_5115_08_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5131_01 on MW + */ + template Response mdw_TP_IMS_5131_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5131_02 on MW + */ + template Response mdw_TP_IMS_5131_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5135_01 + */ + template INVITE_Request mdw_TP_IMS_5135_01_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_ibcfEutAUri), *} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5137_01 + */ + template INVITE_Request mdw_TP_IMS_5137_01_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5137_02 on MW + */ + template Response mdw_TP_IMS_5137_02_ic + modifies mw_180Ringing_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5137_03 on MW + */ + template Response mdw_TP_IMS_5137_03_ic + modifies mw_200OK_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5139_01 on MW + */ + template BYE_Request mdw_TP_IMS_5139_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI, + template To p_to, + template From p_from, + template CSeq p_cSeq, + template Route p_route + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + reason := ?, + route := p_route, + toField := p_to + } + } + + + /** + * + * @desc BYE Request checking TP_IMS_5301_01 on MW + */ + template BYE_Request mdw_TP_IMS_5301_01_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5308_01 on GM + */ + template Response mdw_TP_IMS_5308_01_gm + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5308_01 on ISC + */ + template Response mdw_TP_IMS_5308_01_isc + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses :=? + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5308_02 on GM + */ + template Response mdw_TP_IMS_5308_02_gm + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5308_02 on ISC + */ + template Response mdw_TP_IMS_5308_02_isc + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5310_01 on GM + */ + template INVITE_Request mdw_TP_IMS_5310_01_gm + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5310_01 on AS + */ + template INVITE_Request mdw_TP_IMS_5310_01_isc + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5312_01 on MW + */ + template Response mdw_TP_IMS_5312_01_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + /** + * + * @desc 200 OK Response checking TP_IMS_5312_01 on AS + */ + template Response mdw_TP_IMS_5312_01_isc + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on MW + */ + template Response mdw_TP_IMS_5313_01_ic + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on AS + */ + template Response mdw_TP_IMS_5313_01_isc + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on GM + */ + template INVITE_Request mdw_TP_IMS_5404_01_gm + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5404_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5408_01 on MW + */ + template ACK_Request mdw_TP_IMS_5408_01_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_02 on MW + */ + template CANCEL_Request mdw_TP_IMS_5408_02_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_03 on MW + */ + template BYE_Request mdw_TP_IMS_5408_03_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5408_04 + */ + template INVITE_Request mdw_TP_IMS_5408_04_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5097_09 + */ + template INVITE_Request mdw_TP_IMS_5097_09_isc (template SipUrl p_EutB_ASUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := {mw_routeBody(p_EutB_ASUri), *} + }, + pChargingFunctionAddresses := ?, + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := *}, // NOTE indicating also operator identifier for IMSA + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * @desc INVITE Request checking TP_IMS_5097_09 false + */ + template INVITE_Request mdw_TP_IMS_5097_09_f_isc + modifies mw_INVITE_Request_Base := { + + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc PUBLISH Request checking TP_IMS_5097_13 + */ + template PUBLISH_Request mdw_TP_IMS_5097_13_isc (template CallId p_callId, template SipUrl p_EutB_ASUri) + modifies mw_PUBLISH_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := {mw_routeBody(p_EutB_ASUri), *} + }, + pChargingFunctionAddresses := ?, + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := *}, // NOTE indicating also operator identifier for IMSA + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * @desc PUBLISH Request checking TP_IMS_5097_13 false + */ + template PUBLISH_Request mdw_TP_IMS_5097_13_f_isc(template CallId p_callId) + modifies mw_PUBLISH_Request_Base := { + + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_p_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + pAccessNetworkInfo := omit + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_f2_ic( + template CallId p_callId, + template SipUrl p_SCSCF_SIP_URI + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_SIP_URI), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_05_f_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := ?}, + {id := "access-network-charging-info", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_08_gm( + template SipUrl p_requestUri + ) modifies mw_MESSAGE_Request_Base := { + requestLine := { requestUri := p_requestUri } + } + + template MESSAGE_Request mdw_TP_IMS_5097_08_ic( + template SipUrl p_requestUri + ) modifies mw_MESSAGE_Request_Base := { + requestLine := { requestUri := p_requestUri + }, + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5097_07_ic( + template CallId p_callId, + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + ({nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02a_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02b_p_ic( + template CallId p_callId, + template SipUrl p_SCSCF_Uri, + template GenericParam p_param + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := omit, // TODO TP is not clear please double check + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + p_param, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5108_02b_f_ic( + template CallId p_callId + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IMS_5120_01 + */ + template INVITE_Request mdw_TP_IMS_5120_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + /** + * @desc UPDATE Request checking TP_IMS_5120_02 + */ + template UPDATE_Request mdw_TP_IMS_5120_02_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + template Response mw_TP_IMS_5121_02_ic modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template Response mw_TP_IMS_5117_02_ic modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + template Response mw_TP_IMS_5117_06_ic modifies mdw_2XX_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + {nameAddr := mw_NameAddr(mw_SIP_URI_Base)}, + {nameAddr := mw_NameAddr(mw_TEL_URI_Base)}, + * + } + } + } + } + + template Response mw_TP_IMS_5118_01_ic modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + template MESSAGE_Request mdw_TP_IMS_5050_01_ic( + template CallId p_callId, + template SipUrl p_PCSCF_URI, + template SipUrl p_UE_A_URI + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := complement(p_PCSCF_URI) + }, + rrParam := * + },* + } + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_UE_A_URI)), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + * + } + } + } + } + + template Response mdw_2XX_Base modifies m_Response_Dummy := { + statusLine := {c_sipNameVersion, (200..299), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_100Trying_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine100, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_180Ringing_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine180, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_183SessionProgress_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine183, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_200OK_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine200, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_202Accepted_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine202, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_401Unauthorized_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 401, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_4XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (400..499), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_403Forbidden_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 403, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_404NotFound_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 404, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_480TemporaryUnavailable_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine480, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_486Busy_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine486, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_600BusyEverywhere_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine600, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_487RequestTerminated_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine487, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_404Or604NotFound_Base modifies m_Response_Dummy := + { + statusLine := ({c_sipNameVersion, 404, ?}, {c_sipNameVersion, 604, ?}), + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_408Or5XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (408,(500..599)), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_433Anony_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine433, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_603Decline_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine603, + msgHeader := ?, + messageBody := *, + payload := * + } + + template REGISTER_Request mdw_TP_IMS_5088_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := {authorization := mw_Authorization(mw_credentialIntegrityYes)} + } + + template NOTIFY_Request mdw_TP_IMS_5088_01_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5093_01_UE_ic(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5093_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5094_01_UE(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + template NOTIFY_Request mdw_TP_IMS_5094_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + + /** + * @desc INVITE Request checking TP_IMS_5106_01 + */ + template INVITE_Request mdw_TP_IMS_5106_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + }, + pAccessNetworkInfo := omit, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + /** + * @desc BYE Request checking TP_IMS_5074_01 + */ + template BYE_Request mdw_TP_IMS_5074_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI // must be the IP address + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + toField := ?, + fromField := ?, + cSeq := ?, + route := ?, + reason := { + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } + } + } + + + /** + * @desc UPDATE Request checking TP_IMS_5106_02 + */ + template UPDATE_Request mdw_TP_IMS_5106_02_p_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + *, + mw_routeBody(p_SCSCF_URI), + * + } + }, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + + template UPDATE_Request mdw_TP_IMS_5106_02_f_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + + + /** + * @desc OPTIONS Request checking TP_IMS_CONTENT_SHARE_01 + */ + template OPTIONS_Request mdw_TP_IMS_CONTENT_SHARE_01_ic( + template CallId p_callId + ) modifies mw_OPTIONS_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } + } + + + /** + * @desc INVITE Request checking TP_IMS_CONTENT_SHARE_02 + */ + template INVITE_Request mdw_TP_IMS_CONTENT_SHARE_02_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } + } + + }//end group + group HeaderTemplates { + + template Path mw_PathDef (charstring p_Host) := { + fieldName := PATH_E, + pathValues := {{ + nameAddr:= { + displayName := *, + addrSpec := { + scheme := "sip", + components := {sip := { + userInfo := *, + hostPort := {host := p_Host,portField := *} + }}, + urlParameters := *, + headers := omit} + }, + rrParam := omit + }} + } // template + + template Require mw_Require (template OptionTag_List p_optionsList) := { + fieldName := REQUIRE_E, + optionsTags := p_optionsList + } // template + + template PChargingVector mw_PChargingVector (template SemicolonParam_List p_List) := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, + chargeParams := p_List + } // template + + template ServiceRoute mw_ServiceRoute (template SipUrl p_eutAddr) := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_eutAddr + }, + rrParam := * + }, + * + } + } // template + + + + template PVisitedNetworkID mw_PVisitedNetworkIDAny := { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := ? + } // template + + template PAssociatedURI + mw_PAssociatedURI(template SemicolonParam_List p_SemicolonParam_List) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + {nameAddr := ?, genericParams := p_SemicolonParam_List}, * + } + } + template WwwAuthenticate mw_WwwAuthenticate_AKA := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "rand", paramValue := ?}, + {id := "autn", paramValue := ?}, + {id := "ik", paramValue := ?}, + {id := "ck", paramValue := ?}, + {id := "algorithm", paramValue := { quotedString := "AKAv1-MD5" }}, + *} + + } + } // template + + template WwwAuthenticate mw_WwwAuthenticate_MD5 := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "qop", paramValue := ?}, + {id := "algorithm", paramValue := { quotedString := "MD5" }}, + *} + + } + } + + template WwwAuthenticate mw_WwwAuthenticate := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := { //{id := "username", paramValue := ?}, + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "qop", paramValue := ?}, + *} + + } + } // template + + template AcceptContact mw_AcceptContact_share := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := "*", + acRcParams := { + { + id := "Video Sharing Feature Tag", + paramValue := {quotedString:="+g.3gpp.cs-voice"} + } + } + } + } + } + + template Contact mw_Contact_share := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := ?, + contactParams := { + { + id := "Video Sharing Feature Tag", + paramValue := {quotedString:="+g.3gpp.cs-voice"} + } + } + } + } + } + } + + + } // end group HeaderTemplates + + group AuxiliaryInformationElementTemplates { + + template Credentials mw_credentialIntegrityYes := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="yes"}},*} // TODO + }} + + template Credentials mw_credentialIntegrityNo := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="no"}},*} // TODO + }} + + template Credentials mw_credentialIntegrityIpAssocPending := { + otherResponse := { + authScheme := ?, + authParams := { + complement ({"integrity-protected", {quotedString:="no"}},{"integrity-protected", {quotedString:="yes"}},{"integrity-protected", {quotedString:="ip-assoc-yes"}}), * //alowed parameters are {"integrity-protected" id with "ip-assoc-pending" value or no "integrity-protected" id} + } + } + } + + template Credentials mw_credentialIntegrityIpAssocYes := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="ip-assoc-yes"}},*} // TODO + }} + + template RouteBody mw_routeBodyTH (template SipUrl p_sipurl):= { + nameAddr := + { + displayName := *, + addrSpec := p_sipurl + }, + rrParam := {{ + id:="tokenized-by", + paramValue := * + }} + } + + template NameAddr mw_NameAddr(template SipUrl p_URI) := { + displayName := *, + addrSpec := p_URI + } + + template SipUrl mw_SIP_URI_Base := { + scheme := "sip", // meaning "not tel" + components := { sip := { + userInfo := ?, + hostPort := ? + } + }, + urlParameters := *, + headers := * + } + + template SipUrl mw_TEL_URI_Base := { + scheme := "tel", + components := { tel := { + subscriber := ? + } + }, + urlParameters := *, + headers := * + } + + template SipUrl mw_SIP_URI_ConfFactory + modifies mw_SIP_URI_Base := { + components := { sip := { + userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, + hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} + } } + } + + } //end group + + group adapterTemplates { + + template GeneralConfigurationReq m_generalConfigurationReq_offline := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := PX_IOT_PCAP_SESSIONS_PATH, + mergeFileList := { + mergeFileList := { }, + mergeFilePath := "", + mergeToolPath := "" + } + } + } + }, + eutInfoList := omit + } + template GeneralConfigurationReq m_generalConfigurationReq_online := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + liveCpature := { + physicalInterfaces := { + PX_IOT_IFACES + }, + recordMode := PX_IOT_RECORD_MODE + } + }, + eutInfoList := PX_IOT_EUTs_IFACE_INFO_LIST + } + template GeneralConfigurationReq m_generalConfigurationReq_merge := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := "", + mergeFileList := { + mergeFileList := PX_IOT_FILE_MERGE_LIST, + mergeFilePath := PX_IOT_FILE_MERGE_PATH, + mergeToolPath := PX_IOT_MERGE_TOOL_PATH + } + } + } + }, + eutInfoList := omit + } + template GeneralConfigurationRsp m_generalConfigurationRsp_success := { + status := { + code := e_success, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_timeout := { + status := { + code := e_timeout, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_error := { + status := { + code := e_error, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_any := { + status := { + code := ?, + reason := * + } + } + template StartTrafficCaptureReq m_startTrafficCaptureReq := { + } + template StartTrafficCaptureRsp m_startTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + template StopTrafficCaptureReq m_stopTrafficCaptureReq :={ + } + template StopTrafficCaptureRsp m_stopTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + + template SetFilterReq m_setFilterReq (ProtocolFilter p_proto, IpAddress p_addr1, + IpAddress p_addr2, UInt16 p_port) :={ + protocol := p_proto, + interfaceInfos := { + { + IpInterfaceInfo := { + { + domainName := omit, + IpAddress := p_addr1, + portNumbers := { p_port } + }, + { + domainName := omit, + IpAddress := p_addr2, + portNumbers := { p_port } + } + } + } + } + } + + template SetFilterRsp m_setFilterRspAny := { + status := { + code := ?, + reason := * + } + } + } // adapterTemplates + +}//end module + diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn new file mode 100644 index 0000000..ce18a37 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -0,0 +1,694 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_GM { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group sip_templates { + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + template(present) From mw_From_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + fromParams := * + } // End of template mw_From_AddrUnion_SipUrl + + template(present) From mw_From_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_TelUrl(p_number), + fromParams := * + } // End of template mw_From_AddrUnion_TelUrl + + template From mw_From_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + fromParams := * + } // End of template mw_From_NameAddr_TelUrl + + template(present) To mw_To_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + toParams := * + } // End of template mw_To_AddrUnion_SipUrl + + template(present) To mw_To_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_TelUrl(p_number), + toParams := * + } // End of template mw_To_AddrUnion_TelUrl + + template To mw_To_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + toParams := * + } // End of template mw_To_NameAddr_TelUrl + + template (present) Response mw_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_200OK + + template (present) Response mw_401Unauthorized( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_401Unauthorized_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_401Unauthorized + + template (present) Response mw_404NotFound( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_404NotFound_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_404NotFound + + template Response mw_480TemporaryUnavailable( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mw_480TemporaryUnavailable_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_480TemporaryUnavailable + + template (present) Response mw_486Busy( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_486Busy_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_486Busy + + template (present) Response mw_600BusyEverywhere( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_600BusyEverywhere_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_600BusyEverywhere + + template (present) Response mw_487RequestTerminated( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_487RequestTerminated_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_487RequestTerminated + + } // End of group sip_templates + + group g_gmA { + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID + //require := mw_require_path + } + } // End of template mw_TP_GM_PCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_GM_PCSCF_REGISTER_07 + + template (present) SUBSCRIBE_Request mw_TP_GM_PCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_GM_PCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_GM_PCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_GM_PCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_GM_PCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_GM_PCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_GM_PCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_GM_PCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_RE_INVITE_014 + + template (present) Response mw_TP_GM_PCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_100Trying_01 + + template (present) Response mw_TP_GM_PCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_02 + + template (present) Response mw_TP_GM_PCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_03 + + template (present) Response mw_TP_GM_PCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_100Trying_01 := { + } // End of template mw_TP_GM_PCSCF_100Trying_04 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_180Ringing_01 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_02 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_03 + + template (present) Response mw_TP_GM_PCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_180Ringing_01 := { + } // End of template mw_TP_GM_PCSCF_180Ringing_04 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_GM_PCSCF_183SessionProgress_01 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_02 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_03 + + template (present) Response mw_TP_GM_PCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_GM_PCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_ACK_01 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_02 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_03 + + template (present) ACK_Request mw_TP_GM_PCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_ACK_01 := { + } // End of template mw_TP_GM_PCSCF_ACK_04 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_BYE_01 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_02 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_03 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_04 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_05 + + template (present) BYE_Request mw_TP_GM_PCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_BYE_01 := { + } // End of template mw_TP_GM_PCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_GM_PCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_GM_PCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_GM_PCSCF_CANCEL_01 := { + } // End of template mw_TP_GM_PCSCF_CANCEL_04 + + } // End of group g_gmA + +} // End of module AtsImsIot_Templates_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn new file mode 100644 index 0000000..4624eff --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn @@ -0,0 +1,863 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at IC interface + */ +module AtsImsIot_Templates_IC +{ + + import from LibCommon_BasicTypesAndValues {type UInt16;} + import from LibCommon_VerdictControl {type FncRetCode;} + import from LibIot_TypesAndValues { + type + InterfaceInfoList, + ProtocolFilter, + GeneralConfigurationReq, + GeneralConfigurationRsp, + SetFilterReq, + SetFilterRsp, + StartTrafficCaptureReq, + StartTrafficCaptureRsp, + StopTrafficCaptureReq, + StopTrafficCaptureRsp, + IpAddress, + Status; + } + import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common {type GenericParam, SemicolonParam_List;} + import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} + import from LibIot_PIXITS { + modulepar + PX_IOT_TIMESTAMP_OFFSET, + PX_IOT_PCAP_SESSIONS_PATH, + PX_IOT_RECORD_MODE, + PX_IOT_EUTs_IFACE_INFO_LIST, + PX_IOT_FILE_MERGE_LIST, + PX_IOT_FILE_MERGE_PATH, + PX_IOT_MERGE_TOOL_PATH, + PX_IOT_IFACES; + } + import from AtsImsIot_PIXITS { + modulepar + PX_IMS_SUT_CONF_FACTORY_NAME, + PX_IMS_SUT_CONF_HOME_DOMAIN, + PX_IMS_A_ICID; + } + + import from AtsImsIot_Templates all; + + group g_IBCF { + + group g_IBCF_GC{ + + /** + * + * @desc Message Request containing a message body greater than 1300 bytes. + * @remark source template mdw_TP_IMS_4002_01 + */ + template MESSAGE_Request mdw_TP_IC_IBCF_GC_01 modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contact := * + }, + messageBody := { + textplain := pattern "?#(1300,)" + } + } + + } // group g_IBCF_GC + + group g_IBCF_INVITE { + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_01 + * @remark source template mdw_TP_IMS_5097_01_ic + */ + template(present) INVITE_Request mdw_TP_IC_IBCF_INVITE_01 (template (present) SipUrl p_SCSCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_02 + * @remark source template mdw_TP_IMS_5097_02_ic + */ + template (present) INVITE_Request mdw_TP_IC_IBCF_INVITE_02 ( + template (present) SipUrl p_SIP_URI := ?, + template (present) SipUrl p_TEL_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + (*, + ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + *), + (*, + ({ nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *) + } + } + } + } + + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_03 + * @remark source template mdw_TP_IMS_5097_04_ic + */ + template (present) INVITE_Request mdw_TP_IC_IBCF_INVITE_03( + template (present) SipUrl p_SIP_URI := ?, + template (present) SipUrl p_TEL_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + + } + } + + /** + * + * @desc INVITE Request checking TP_IC_IBCF_INVITE_04 + * @remark source template mdw_TP_IMS_5046_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_INVITE_04 (template SipUrl p_pcscfEutAUri, template SipUrl p_userEutBUrl) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := ?, //mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), + pChargingVector := mw_PChargingVector({ + ?,//{id := "icid-value", paramValue := {quotedString :=PX_IMS_A_ICID}}, + * + }) + } + } + + /** + * @desc INVITE Request checking TP_IC_IBCF_INVITE_05 + * @remark source template mdw_TP_IMS_5097_02_ic and mdw_TP_IMS_5044_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_INVITE_05 ( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), TODO + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) TODO + } + } + + } // end group g_IBCF_INVITE + + group g_IBCF_REINVITE { + + /** + * @desc INVITE Request checking TP_IC_IBCF_REINVITE_01 + * @remark source template mdw_TP_IMS_5106_01_ic + */ + template INVITE_Request mdw_TP_IC_IBCF_REINVITE_01( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + }, +// pAccessNetworkInfo := omit, + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + }) + } + } + + } // end group g_IBCF_REINVITE + + + group g_IBCF_100TRY { + + + + } // end group g_IBCF_100TRY + + group g_IBCF_180RESP { + + /** + * + * @desc 180 Ringing Response checking TP_IBCF_180RESP_01 on MW + * @remark source template mdw_TP_IMS_5115_01_ic + */ + template Response mdw_TP_IC_IBCF_180RESP_01 + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_180RESP_02 on MW + * @remark source template mdw_TP_IMS_5131_01_ic + */ + template Response mdw_TP_IC_IBCF_180RESP_02 + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + } // end group g_IBCF_180RESP + + group g_IBCF_1XXRESP { + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_1XXRESP_01 + * @remark source template mdw_TP_IMS_5115_03_ic + */ + template Response mdw_TP_IC_IBCF_1XXRESP_01( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_180Ringing_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, +// *, +// {nameAddr := mw_NameAddr(p_TEL_URI)}, // only if availble, ie. optional + * + } + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IC_IBCF_1XXRESP_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_1XXRESP_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) + modifies mw_180Ringing_Base := { + msgHeader := { + fromField := (mw_From (p_eutAUri), + + { + fieldName := FROM_E, + addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + }), + + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + pPreferredID := omit, + pAssertedID := ?, +// { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + /** + * + * @desc 183 Ringing Response checking TP_IC_IBCF_183RESP_01 + * @remark source template mdw_TP_IMS_5115_03_ic + */ + template Response mdw_TP_IC_IBCF_183RESP_01( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_183SessionProgress_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, +// *, +// {nameAddr := mw_NameAddr(p_TEL_URI)}, // only if available, ie. optional! + * + } + } + } + } + + + } // end group g_IBCF_1XXRESP + + group g_IBCF_2XXRESP { + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_01 on MW + * @remark source template mdw_TP_IMS_5115_02_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_01 + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_02 on MW + * @remark source template mdw_TP_IMS_5115_04_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_02( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_200OK_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IC_IBCF_2XXRESP_03 on MW + * @remark source template mdw_TP_IMS_5131_02_ic + */ + template Response mdw_TP_IC_IBCF_2XXRESP_03 + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_04 on MW + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_04 modifies mdw_2XX_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_05 + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_05 (template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) modifies mdw_2XX_Base := { + msgHeader := { + cSeq := { + fieldName := CSEQ_E, + seqNumber := ?, + method := "INVITE" + }, + fromField := (mw_From_NameAddr_SipUrl(?,?,?), + { + fieldName := FROM_E, + addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + }), + //mw_From(?)),//mw_From (p_eutAUri), //AXR mw_From added + toField := (mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), mw_To(?)), //AXR mw_To added + pPreferredID := omit, + pAssertedID := *, //AXR +// pAssertedID := { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + /** + * + * @desc checking TP_IC_IBCF_2XXRESP_07 + * @remark source template mw_TP_IMS_5121_02_ic + */ + template Response mw_TP_IC_IBCF_2XXRESP_07 (template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId, + template SipUrl p_SIP_URI, + template RecordRoute p_recordRoute) modifies mdw_2XX_Base := { + msgHeader := { + cSeq := { + fieldName := CSEQ_E, + seqNumber := ?, + method := "BYE" + }, + fromField := ?, +// (mw_From_NameAddr_SipUrl(?,?,?), +// { +// fieldName := FROM_E, +// addressField := {addrSpecUnion:=?},//{nameAddr := mw_NameAddr(*, p_sipUrl)}, +// fromParams := * +// }), + //mw_From(?)),//mw_From (p_eutAUri), //AXR mw_From added + toField := ?,//(mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), mw_To(?)), //AXR mw_To added + pPreferredID := omit, + pAssertedID := *, //AXR +// pAssertedID := { +// fieldName := P_ASSERTED_ID_E, +// pAssertedIDValueList := { +//// *, +// { nameAddr := mw_NameAddr(p_SIP_URI)}, +// * +// } +// }, + recordRoute := p_recordRoute + } + } + + } // end group g_IBCF_2XXRESP + + group g_IBCF_4XX { + + /** + * + * @desc 487 Ringing Response checking TP_IC_IBCF_487INVITE_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_487INVITE_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mdw_4XX_Base := { + statusLine := {c_sipNameVersion, 487, ?}, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + /** + * + * @desc 486 Ringing Response checking TP_IC_IBCF_486INVITE_02 + * @remark source template mdw_TP_IC_IBCF_1XXRESP_01 + */ + template Response mdw_TP_IC_IBCF_486INVITE_02( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mdw_4XX_Base := { + statusLine := {c_sipNameVersion, 486, ?}, + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + } // end group g_IBCF_4XX + + group g_IBCF_200OK { + + /** + * + * @desc 200 OK message for TP_IC_IBCF_REGISTER_02 + * @remark source template mdw_TP_IMS_5092_01_ic + */ + template Response mdw_TP_IC_IBCF_REGISTER200OK_02 (charstring p_EUTHostname, template SipUrl p_eutBUri) modifies mw_200OK_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := ? + }, + pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? + {id := "term-ioi", paramValue := ?}, + * + }), + serviceRoute := mw_ServiceRoute (p_eutBUri), + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + } + } + + template(present) Response mw_Response_Base_ToFrom( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?,//mw_From (p_eutAUri), + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + maxForwards := *, + via := ? + } + } + + } // end group g_IBCF_200OK + + group g_IBCF_401 { + + /** + * + * @desc 401 Unauthorized message checking f_mtc_check_TP_IC_IBCF_REGISTER_01. + * @remark source template mdw_TP_IMS_5089_01_ic + */ + template Response mdw_TP_IC_IBCF_REGISTER401_01 modifies mw_401Unauthorized_Base := { + msgHeader := { + wwwAuthenticate := mw_WwwAuthenticate_AKA + } + } + + + } // end group g_IBCF_401 + + group g_IBCF_ACK { + + /** + * + * @desc ACK Request checking TP_IC_IBCF_ACK_01 on MW + * @remark source template mdw_TP_IMS_5107_02_ic + */ + template ACK_Request mdw_TP_IC_IBCF_ACK_01(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// *, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } + } + } + + /** + * + * @desc ACK Request checking TP_IC_IBCF_4XXINVITE_ACK_01 + */ + template ACK_Request mdw_TP_IC_IBCF_4XXINVITE_ACK_01(template CallId p_callId, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId) + modifies mw_ACK_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?) + } + } + + } // end group g_IBCF_ACK + + group g_IBCF_BYE { + + /** + * + * @desc BYE Request checking TP_IC_IBCF_BYE_01 on MW + * @remark source template mdw_TP_IMS_5107_01_ic + */ + template BYE_Request mdw_TP_IC_IBCF_BYE_01(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + ?, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + } // end group g_IBCF_BYE + + group g_IBCF_CANCEL { + + /** + * + * @desc CANCEL Request checking TP_IC_IBCF_CANCEL_01 + * @remark source template mdw_TP_IMS_5107_03_ic + */ + template CANCEL_Request mdw_TP_IC_IBCF_CANCEL_01 ( + template CallId p_callId, template SipUrl p_SCSCF_SIP_URI, + template SipUrl p_eutAUri, template charstring p_EUTB_PublicId) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + fromField := ?,//mw_From (p_eutAUri), + toField := ?,//mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + route := ( + omit, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + ) + } + } + + } // end group g_IBCF_CANCEL + + group g_IBCF_SUBSCRIBE { + + /** + * + * @desc SUBSCRIBE Request checking TP_IC_IBCF_SUBSCRIBE_01 + * @remark source template mdw_TP_IMS_5044_01_ic + */ + template SUBSCRIBE_Request mdw_TP_IC_IBCF_SUBSCRIBE_01( + template SipUrl p_subscribe_uri, + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_SUBSCRIBE_Request_Base := { + + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + event := m_Event_reg, + expires := ?, // checked outside the template + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_eutAUri)), + pChargingVector := mw_PChargingVector({ + {id := "icid-value", paramValue := *}, + * + }) + } + } + + } // end group g_IBCF_SUBSCRIBE + + group g_IBCF_NOTIFY { + + /** + * + * @desc NOTIFY Request checking mdw_TP_IC_IBCF_NOTIFY_01 + * @remark source template mdw_TP_IMS_5094_01_IMS_ic + */ + template NOTIFY_Request mdw_TP_IC_IBCF_NOTIFY_01(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, +// pChargingVector := mw_PChargingVector({ +// {id := "icid-value", paramValue := *}, +// * +// }), + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + } // end group g_IBCF_NOTIFY + + group g_IBCF_REGISTER { + + /** + * + * @desc REGISTER Request checking TP_IC_IBCF_REGISTER_01. + * @remark source template mdw_TP_IMS_5089_01_ic_when + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_01 modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5092_01. + * @remark source template mdw_TP_IMS_5092_01_ic_when + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_02 modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } + + /** + * + * @desc REGISTER Request checking TP_IC_IBCF_REGISTER_03. + * @remark TODO: template may be moved to LibSip_Templates + */ + template REGISTER_Request mdw_TP_IC_IBCF_REGISTER_EXPIRES_03( + template SipUrl p_eutAUri, + template charstring p_EUTB_PublicId + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + fromField := mw_From (p_eutAUri), + toField := mw_To_NameAddr_SipUrl ({quotedString:=p_EUTB_PublicId}, ?, ?), + expires := mw_Expires("0") + } + } + + /** + * + * @desc REGISTER Request checking TP_ISC_SCSCF_REGISTER_01. + */ + template REGISTER_Request mdw_TP_ISC_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template Authorization p_authorization := *, + template PChargingVector p_pChargingVector := ?, + template PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_Request_Base := { + //requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pChargingVector := p_pChargingVector, + pChargingFunctionAddresses := ?, + pAccessNetworkInfo := ?, + pVisitedNetworkID := p_pVisitedNetworkID, + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + + } + } + + } // end group g_IBCF_REGISTER + + } // end group g_IBCF + + + group g_AuxiliaryInformationElementTemplates { + + /** + * @desc mw_NameAddr + * @remark source template mw_NameAddr from AtsImsIot_Templates + */ + template NameAddr mw_NameAddr(template SipUrl p_URI) := { + displayName := *, + addrSpec := p_URI + } + + } // end group g_AuxiliaryInformationElementTemplates + + +} // end module AtsImsIot_Templates_IC diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn new file mode 100644 index 0000000..4d82cc0 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -0,0 +1,894 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_MW { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group sip_templates { + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + template(present) From mw_From_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + fromParams := * + } // End of template mw_From_AddrUnion_SipUrl + + template(present) From mw_From_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_TelUrl(p_number), + fromParams := * + } // End of template mw_From_AddrUnion_TelUrl + + template From mw_From_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + fromParams := * + } // End of template mw_From_NameAddr_TelUrl + + template(present) To mw_To_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + toParams := * + } // End of template mw_To_AddrUnion_SipUrl + + template(present) To mw_To_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_TelUrl(p_number), + toParams := * + } // End of template mw_To_AddrUnion_TelUrl + + template To mw_To_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + toParams := * + } // End of template mw_To_NameAddr_TelUrl + + template (present) Contact mw_contact( + template (present) ContactAddress p_contactAddresses := ? + ) := { + fieldName := CONTACT_E, + contactBody := { contactAddresses := { p_contactAddresses } } + } // End of template mw_Contact + + template (present) Response mw_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_200OK + + template Response mw_401Unauthorized( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_401Unauthorized_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_401Unauthorized + + template Response mw_404NotFound( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_404NotFound_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_404NotFound + + template Response mw_480TemporaryUnavailable( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mw_480TemporaryUnavailable_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_480TemporaryUnavailable + + template (present) Response mw_486Busy( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_486Busy_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_486Busy + + template (present) Response mw_600BusyEverywhere( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_600BusyEverywhere_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_600BusyEverywhere + + template (present) Response mw_487RequestTerminated( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_487RequestTerminated_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_487RequestTerminated + + } // End of group sip_templates + + group g_pcscf { + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_PCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_MW_PCSCF_REGISTER_02 := { + } // End of template mw_TP_MW_PCSCF_REGISTER_05 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_07 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_09( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_09 + + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_10( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_10 + + template (present) SUBSCRIBE_Request mw_TP_MW_PCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_MW_PCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_MW_PCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_MW_PCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_MW_PCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_MW_PCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_MW_PCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_MW_PCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + } // End of template mw_TP_MW_PCSCF_RE_INVITE_014 + + template (present) Response mw_TP_MW_PCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_100Trying_01 + + template (present) Response mw_TP_MW_PCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_02 + + template (present) Response mw_TP_MW_PCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_03 + + template (present) Response mw_TP_MW_PCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_100Trying_01 := { + } // End of template mw_TP_MW_PCSCF_100Trying_04 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_180Ringing_01 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_02 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_03 + + template (present) Response mw_TP_MW_PCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_180Ringing_01 := { + } // End of template mw_TP_MW_PCSCF_180Ringing_04 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_PCSCF_183SessionProgress_01 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_02 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_03 + + template (present) Response mw_TP_MW_PCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_PCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_PCSCF_ACK_02 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + } // End of template mw_TP_MW_PCSCF_ACK_03 + + template (present) ACK_Request mw_TP_MW_PCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_ACK_01 := { + } // End of template mw_TP_MW_PCSCF_ACK_04 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_02 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_03 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_04 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_05 + + template (present) BYE_Request mw_TP_MW_PCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_BYE_01 := { + } // End of template mw_TP_MW_PCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_MW_PCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_CANCEL_01 := { + } // End of template mw_TP_MW_PCSCF_CANCEL_04 + + } // End of group g_pcscf + + group g_scscf { + + template(present) REGISTER_Request mw_TP_MW_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_SCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_SCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_SCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_SCSCF_REGISTER_02 + + } // End of group g_scscf + + group g_icscf { + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path + } + } // End of template mw_TP_MW_ICSCF_REGISTER_05 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) charstring p_expires := "0" + ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := p_authorization, + pAccessNetworkInfo := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_MW_PCSCF_REGISTER_07 + + } // End of group g_icscf + +} // End of module AtsImsIot_Templates_MW \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn new file mode 100644 index 0000000..237f831 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -0,0 +1,1811 @@ +/* + * @author STF 370 + * @version $Id $ + * @desc This module contains functions which implement the + * configuration of the SUT adapter and mapping of test + * components for establishing and tearing down different + * test configurations. + */ + +module AtsImsIot_TestConfiguration { + + import from LibCommon_VerdictControl { type FncRetCode; } + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + import from LibIms_UpperTester { modulepar PX_IMS_USER_DATA; } + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; } + import from LibIot_TypesAndValues { + type StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product, + ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; } + /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ + import from LibIot_Functions { altstep a_receiveIOTVerdict; function f_setConformanceVerdict, f_setE2EVerdict; } + import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; } + import from LibIot_TestInterface {type IotEquipmentUser;} + import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;} + import from LibIot_TestInterface {type InterfaceMonitor;} + import from AtsImsIot_Templates { + template m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, + m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout, + m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, + m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; } + import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} + + group constantDefinitions { + //* interface monitor name Gm A + const charstring c_gm_A := "Gm A"; + //* interface monitor name Gm B + const charstring c_gm_B := "Gm B"; + //* interface monitor name Mx A + const charstring c_mx_A := "Mx A"; + //* interface monitor name Mx B + const charstring c_mx_B := "Mx B"; + //* interface monitor name Ic + const charstring c_ic := "Ici"; + //* interface monitor name Isc A + const charstring c_isc_A := "Isc A"; + //* interface monitor name Isc B + const charstring c_isc_B := "Isc B"; + //* interface monitor name NAPTR + const charstring c_naptr := "NAPTR"; + //* eut trigger name User A + const charstring c_trigger_A := "User A"; + //* eut trigger name User B + const charstring c_trigger_B := "User B"; + //* eut trigger name User A + const charstring c_userUE_A := "User A"; + const charstring c_userUE_A2 := "User A2"; + //* eut trigger name User B + const charstring c_userUE_B := "User B"; + const charstring c_userUE_B2 := "User B2"; + //* eut trigger name User C + const charstring c_userUE_C := "User C"; + //* interface monitor name Gm C + const charstring c_gm_C := "Gm C"; + //* eut trigger name User D + const charstring c_userUE_D := "User D"; + //* interface monitor name Gm D + const charstring c_gm_D := "Gm D"; + //* interface monitor name Rx + const charstring c_rx := "Rx"; // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + //* interface monitor name Mw + const charstring c_mw := "Mw"; + //* interface monitor name Mx + const charstring c_mx := "Mx"; + //* interface monitor name Sgi + const charstring c_sgi := "Sgi"; + //* interface monitor name Rx + const charstring c_s6a := "S6a"; + //* interface monitor name Rx + const charstring c_gx := "Gx"; + } + + group mappingFunctions { + + /** + * + * @desc initialize the adapter port of MTC + */ + function f_cf_adapter_up() runs on ImsTestCoordinator { + map(self:acPort, system:acPort); + } + + /** + * + * @desc uninitialize the adapter port of MTC + */ + function f_cf_adapter_down() runs on ImsTestCoordinator { + unmap(self:acPort, system:acPort); + } + + /** + * + * @desc initialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // connect sync ports + connect(p_driver:syncPort, self:syncPort); + // connect TSI ports + map(p_driver:eaPort, system:eaPort); + // configure oracle + f_cf_oracle_up(p_driver); + } + + /** + * + * @desc uninitialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // disconnect sync ports + disconnect(p_driver:syncPort, self:syncPort); + // disconnect TSI ports + unmap(p_driver:eaPort, system:eaPort); + // release oracle ports + f_cf_oracle_down(p_driver); + } + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:dPort, system:dPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sipPort, system:sipPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:diameterPort, system:diameterPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:naptrPort, system:naptrPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sgiPort, system:sgiPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); +} + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:dPort, system:dPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sipPort, system:sipPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:diameterPort, system:diameterPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:naptrPort, system:naptrPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sgiPort, system:sgiPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + } + + group adapterConfiguration { + + function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { + var SetFilterRsp v_rsp; + var template Status v_status := { + code := e_success, + reason := * + } + + tc_wait.start; + acPort.send(p_req); + alt { + [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + } + [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + } + [] tc_wait.timeout { + f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + } + } + } + + /** + * @desc Initialize traffic cature process + * + * @param + */ + function f_cf_initCapture () runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + } + /** + * @desc Start traffic cature process + * + * @param + */ + function f_cf_startCapture () runs on ImsTestCoordinator { + + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + //Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc Stops traffic cature + * + * @param + */ + function f_cf_stopCapture() runs on ImsTestCoordinator { + //Stop traffic capture processing. + timer tc_configureGuard; //TODO check to import correct modules + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + } + } + + group componentCreation { + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { + var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; + v_monitor.start(f_setInterfaceNameOnComponent(p_name)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { + var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { + var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { + var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + } + + + group testConfiguration { //TODO: check to delete at end of STF574 ATS devel + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_MxA Mx interface IMS A network + * @param p_ici Mw interface monitor component + * @param p_MxB Mx interface IMS B network + */ + function f_cf_roam_reg_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); + f_cf_monitor_up(p_MxA); + f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_MxB); + + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + + p_MxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_MxA.done; + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + + p_MxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_MxB.done; + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_ic Mw interface monitor component + */ + function f_cf_roam_reg_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); + f_cf_monitor_down(p_MxA); + f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_MxB); + } + + /** + * @desc + * Interworking Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_up( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + if(isvalue(p_config.naptr)) { + f_cf_monitor_up(p_config.naptr); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + if(isvalue(p_config.gmB)) { + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + } + if(isvalue(p_config.naptr)) { + p_config.naptr.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_dns, + {f_getInterfaceInfo("NAPTR", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.naptr.done; + } + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_down( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} + if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} + } + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause + * 4.3.4. + * @param p_Gm Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); + f_cf_monitor_up(p_MxA); + f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_MxB); + + // TODO UE IP address and port is missing + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + + p_MxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_MxA.done; + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + + p_MxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_MxB.done; + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Roaming Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); + f_cf_monitor_down(p_MxA); + f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_MxB); + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_up( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_down( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_up( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.mxB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.mxB.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_down( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.mxB); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.rx); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.mw); + f_cf_monitor_up(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_up + + function f_cf_epc_call_down( + inout CF_EPC_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.rx); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.mw); + f_cf_monitor_down(p_config.sgi); + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_down + } + + function f_getInterfaceInfoList( + in charstring p_interfaceName, + in integer p_product1, + in integer p_product2 + ) return InterfaceInfoList { + var InterfaceInfoList v_list := { + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) + }; + + return v_list; + } + + function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { + var InterfaceInfo v_info := { + IpInterfaceInfo := { + { + domainName := "invalid", + IpAddress := "0.0.0.0", + portNumbers := {0} + } + } + }; + + for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < + if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { + return p_product.monitorInterfaces[i].interfaceInfo; + } + } + + return v_info; + } + + group g_release15 { + + function f_cf_epc_call_rel15_up_old ( in CF_ATT_old p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); + f_cf_monitor_up(p_config.rx); + f_cf_monitor_up(p_config.s6a); + f_cf_monitor_up(p_config.gx); + f_cf_monitor_up(p_config.mxA); + f_cf_monitor_up(p_config.mwPS); + f_cf_monitor_up(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mwPS.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up + + function f_cf_epc_call_rel15_down_old( + inout CF_ATT_old p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); + f_cf_monitor_down(p_config.rx); + f_cf_monitor_down(p_config.s6a); + f_cf_monitor_down(p_config.gx); + f_cf_monitor_down(p_config.mxA); + f_cf_monitor_down(p_config.mwPS); + f_cf_monitor_down(p_config.sgi); + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_rel15_down + + function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up_sip(p_config.gmA); + f_cf_monitor_up_diameter(p_config.rx); + f_cf_monitor_up_diameter(p_config.s6a); + f_cf_monitor_up_diameter(p_config.gx); + f_cf_monitor_up_sip(p_config.mxA); + f_cf_monitor_up_sip(p_config.mw); + f_cf_monitor_up_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up_sip(p_config.gmB); + } + + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; + + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; + + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up + + function f_cf_epc_call_rel15_down( + inout CF_ATT p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down_sip(p_config.gmA); + f_cf_monitor_down_diameter(p_config.rx); + f_cf_monitor_down_diameter(p_config.s6a); + f_cf_monitor_down_diameter(p_config.gx); + f_cf_monitor_down_sip(p_config.mxA); + f_cf_monitor_down_sip(p_config.mw); + f_cf_monitor_down_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_down_sip(p_config.gmB); + } + + } // end of function f_cf_epc_call_rel15_down + + } // end group g_release15 + +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn new file mode 100644 index 0000000..71567c6 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn @@ -0,0 +1,74 @@ +/** + * @author STF 574 + * @version $Id: $ + * @desc This module provides ATS specific test control declarations. + */ +module AtsImsIot_TestControl { + import from AtsImsIot_TD_ATT all; + import from AtsImsIot_TD_DRG all; +// import from AtsImsIot_TD_DTC all; + import from AtsImsIot_TD_INI all; + import from AtsImsIot_TD_REG all; + + control { + // ATT TCs + //execute(TC_VxLTE_INT_ATT_01()); + //execute(TC_VxLTE_RMI_ATT_01()); + //execute(TC_VxLTE_RMI_ATT_02()); + + // REG TCs + execute(TC_VxLTE_INT_REG_01()); + //execute(TC_VxLTE_INT_REG_02()); + //execute(TC_VxLTE_INT_REG_03()); + //execute(TC_VxLTE_RMI_REG_01()); + //execute(TC_VxLTE_RMI_REG_02()); + //execute(TC_VxLTE_RMI_REG_03()); + + // INI TCs + //execute(TC_VxLTE_INT_INI_01()); + //execute(TC_VxLTE_INT_INI_02()); + //execute(TC_VxLTE_INT_INI_03()); + //execute(TC_VxLTE_INT_INI_04()); + //execute(TC_VxLTE_INT_REL_01()); + //execute(TC_VxLTE_INT_REL_02()); + //execute(TC_VxLTE_INT_REL_03()); + //execute(TC_VxLTE_INT_ABT_01()); + //execute(TC_VxLTE_INT_ABT_02()); + //execute(TC_VxLTE_INT_REJ_01()); + //execute(TC_VxLTE_INT_REJ_02()); + //execute(TC_VxLTE_RMI_INI_01()); + //execute(TC_VxLTE_RMI_INI_02()); + //execute(TC_VxLTE_RMI_INI_03()); + //execute(TC_VxLTE_RMI_INI_04()); + //execute(TC_VxLTE_RMI_REL_01()); + //execute(TC_VxLTE_RMI_REL_02()); + //execute(TC_VxLTE_RMI_REL_03()); + //execute(TC_VxLTE_RMI_ABT_01()); + //execute(TC_VxLTE_RMI_ABT_02()); + //execute(TC_VxLTE_RMI_REJ_01()); + //execute(TC_VxLTE_RMI_REJ_02()); + + + // DRG TCs + //execute(TC_VxLTE_INT_DRG_01()); + //execute(TC_VxLTE_INT_DRG_02()); + //execute(TC_VxLTE_INT_DRG_03()); + //execute(TC_VxLTE_INT_DRG_04()); + //execute(TC_VxLTE_RMI_DRG_01()); + //execute(TC_VxLTE_RMI_DRG_02()); + //execute(TC_VxLTE_RMI_DRG_03()); + //execute(TC_VxLTE_RMI_DRG_04()); + + // DTC TCs + //execute(TC_VxLTE_INT_DTC_01()); + //execute(TC_VxLTE_INT_DTC_02()); + //execute(TC_VxLTE_INT_DTC_03()); + //execute(TC_VxLTE_INT_DTC_04()); + //execute(TC_VxLTE_INT_DTC_05()); + //execute(TC_VxLTE_RMI_DTC_01()); + //execute(TC_VxLTE_RMI_DTC_02()); + //execute(TC_VxLTE_RMI_DTC_03()); + //execute(TC_VxLTE_RMI_DTC_04()); + //execute(TC_VxLTE_RMI_DTC_05()); + } +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn new file mode 100644 index 0000000..a86c232 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -0,0 +1,165 @@ +module AtsImsIot_TestSystem { + + import from LibSip_SIPTypesAndValues {type Request, Response;} + import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} + import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} + import from LibIot_TestInterface {type EquipmentAccessPort;} + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues {type VxLTEMonitorInterfaceList;} + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port SipPort sipPort; + port DiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port DiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port SipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port DiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port SipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port NaptrPort message { + in NAPTRmessage; + } + type port DiameterPort message { + in DIAMETER_MSG; + } + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor naptr optional + } + type record CF_INT_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } + + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } + + type record CF_ATT_old { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor rx, + ImsInterfaceMonitor s6a, + ImsInterfaceMonitor gx, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 +} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn new file mode 100644 index 0000000..61a232b --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -0,0 +1,210 @@ +/* + * @author STF 370 + * @version $Id: $ + * @desc This module provides the templates for Interoperability tests. + */ + +module AtsImsIot_TypesAndValues { + + import from LibCommon_BasicTypesAndValues all; + import from LibSip_SIPTypesAndValues {type Request, SipUrl, Response;} + import from LibMsrp_TypesAndValues { + type + SEND_request, + RECEIVE_response + }; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG} + import from LibCommon_DataStrings {type Bit1, Bit3}; + + group SIPmessageTypes { + /** + * @desc SIP Message Type + * @member request SIP request + * @member response SIP response + * @member msrpRequest MSRP SEND/AUTH request messages + * @member msrpResponse MSRP response message + */ + + type union SipMessage { + Request request, + Response response, + SEND_request msrpRequest, + RECEIVE_response msrpResponse, + NAPTRmessage naptrmessage + } + /** + * @desc SIP Message List Type + */ + type record of SipMessage SipMessageList; + type record SkipType { + integer skipCount, + SipMessage skipMessage optional + } + } + + group DiameterMessageTypes{ + /** + * @desc DIAMETER Message List Type + */ + type record of DIAMETER_MSG DiameterMessageList; + type record SkipTypeDiameter { + integer skipCount, + DIAMETER_MSG skipMessage optional + } + } + + group DnsEnumMessageTypes { + /** + * @desc NAPTR Message Type + */ + type union NAPTRmessage { + DnsMessage dnsMessage, + EnumMessage enumMessage + } + /** + * @desc DNS Message Type + * @member request DNS query + * @member response DNS response + */ + type union DnsMessage { + DnsQuery query, + DnsResponse response + } + /** + * @desc DnsQuery Message Type + */ + type record DnsQuery { + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + /** + * @desc DnsResponse Message Type + */ + type record DnsResponse { + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record DnsHeader + { + UInt16 id, + Bit1 qR_flag, + UInt4 opcode, + Bit1 aA_flag, + Bit1 tC_flag, + Bit1 rD_flag, + Bit1 rA_flag, + Bit3 z_field, + UInt4 rCODE, + UInt16 qDCOUNT, + UInt16 aNCOUNT, + UInt16 nSCOUNT, + UInt16 aRCOUNT + } with { encode "NAPTRCodec"} + + type charstring DnsDomainName;//NB! DNS pointers are handled codec + + type record DnsQuestion + { + DnsDomainName qNAME, + UInt16 qTYPE, + UInt16 qCLASS + } with { encode "NAPTRCodec"} + + type record of DnsQuestion DnsQuestionList; + type record of DnsResourceRecord DnsAnswerList; + type record of DnsResourceRecord DnsAuthorityList; + type record of DnsResourceRecord DnsAdditionalList; + + type record DnsResourceRecord + { + DnsDomainName domainName, + Int16 type_, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsRDATA r_data + } with { encode "NAPTRCodec"} + + type octetstring DnsRDATA; + + /** + * @desc ENUM Message Type + * @member request ENUM query + * @member response ENUM response + */ + type union EnumMessage { + EnumQuery query, + EnumResponse response + } + + /** + * @desc EnumQuery Message Type + */ + type record EnumQuery { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumResponse_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record EnumResponse + { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumAnswer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + + type record EnumQuestion + { + E164TN e164TelNumber, + UInt16 qTYPE, //35 + UInt16 qCLASS // + }with { encode "NAPTRCodec"} + + type record of EnumQuestion EnumQuestionList; + type record of EnumAnswer EnumAnswerList; + + /** + * @desc EnumAnswer Message Type + */ + type record EnumAnswer + { + E164TN e164TelNumber, + Int16 naptrType, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsNaptrRRData naptrRR + } with { encode "NAPTRCodec"} + type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible + + + type record DnsNaptrRRData + { + UInt16 naptrOrder, + UInt16 naptrPreference, + UInt8 flags_length, + NaptrCharString naptrFlags, + UInt8 service_length, + NaptrCharString naptrService, + UInt8 regex_length, + NaptrCharString naptrRegex, + UInt8 replacementLength, + DnsDomainName naptrReplacement + } with { encode "NAPTRCodec"} + + type charstring NaptrCharString; + } +}//end module diff --git a/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn new file mode 100644 index 0000000..15598fb --- /dev/null +++ b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn @@ -0,0 +1,519 @@ +/** + * @author STF 370 + * @version $Id:$ + * @desc This module provides trigger and configuration functions for IMS. + */ +module LibIms_UpperTester { + + + import from LibIot_Functions {function f_sendEquipmentCmd;} + + import from LibUpperTester { + template m_EQ_Request; + type EquipmentCommand; + } + + import from LibIot_TestInterface {type TestCoordinator, EquipmentUser;} + + group ue { + group ueTypes { + group ueCommands { + + /** + * @desc Command to trigger registration of the UE + * @remark + * Note that the registration trigger command needs has + * additional parameter for the public, private user id and + * password. + * @remark + * Note that the user friendly application and the upper test + * adapter may need to be uparaded if new messages are added. + */ + const EquipmentCommand c_UE_REGISTRATION := "UE_REGISTRATION"; + const EquipmentCommand c_UE_CHECKisREGISTERED := "UE_CHECK_IS_REGISTER"; + const EquipmentCommand c_UE_CHECKisnotREGISTERED := "UE_CHECK_IS_NOT_REGISTERED"; + const EquipmentCommand c_UE_CHECK_CALLisINITIALIZED := "UE_CHECK_CALL_IS_INITIALIZED"; + const EquipmentCommand c_UE_CHECK_CALLisANSWERED := "UE_CHECK_CALL_IS_ANSWERED"; + const EquipmentCommand c_UE_CHECK_CALLisENDED := "UE_CHECK_CALL_IS_ENDED"; + const EquipmentCommand c_UE_CHECK_NEWMEDIASTREAMisADDED := "UE_CHECK_NEW_MEDIA_STREAM_IS_ADDED"; + const EquipmentCommand c_UE_CHECK_REMOVEMEDIASTREAMisADDED := "UE_CHECK_NEW_MEDIA_STREAM_IS_REMOVED"; + + + /** + * + * @desc Command to trigger de-registration of the UE + */ + const EquipmentCommand c_UE_DEREGISTRATION := "UE_DEREGISTRATION"; + + /** + * @desc Command to trigger UE to send a message + */ + const EquipmentCommand c_UE_SEND_MESSAGE := "UE_SEND_MESSAGE"; + + /** + * @desc Command to check if UE has receipt of a message + */ + const EquipmentCommand c_UE_CHECK_MESSAGE_RECEIPT := "UE_CHECK_MESSAGE_RECEIPT"; + + + /** + * @desc Command to check if UE is informed about that the message request could not be delivered. + */ + const EquipmentCommand c_UE_CHECK_MESSAGE_NOT_DELIVERED := "UE_CHECK_MESSAGE_NOT_DELIVERED"; + } + } + + group ueFunctions { + + + /** + * + * @desc Triggers registration of a given user via UE + * @param p_publicId The public user identity + * @param p_privateId The private user identity + * @param p_pw The users password + * @verdict e2e verdict will be set depending on the result of trigger action + */ + function f_userRegistration(in charstring p_publicId, in charstring p_privateId, in charstring p_pw) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_REGISTRATION, {p_publicId, p_privateId, p_pw}))); + } + + function f_checkUserIsRegistered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECKisREGISTERED, {}))); + } + function f_checkUserIsNotRegistered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECKisnotREGISTERED, {}))); + } + function f_checkUserCallIsInitiated() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisINITIALIZED, {}))); + } + function f_checkUserCallIsAnswered() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisANSWERED, {}))); + } + function f_checkUserCallIsEnded() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_CALLisENDED, {}))); + } + function f_checkUserAddNewMediaStream() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_NEWMEDIASTREAMisADDED, {}))); + } + function f_checkUserRemoveNewMediaStream() + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_REMOVEMEDIASTREAMisADDED, {}))); + } + /** + * + * @desc Triggers de-registration of a given user via UE + * @param p_publicId The public user name + * @verdict e2e verdict will be set depending on the result of trigger action + */ + function f_userDeregistration(in charstring p_publicId) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_DEREGISTRATION, {p_publicId}))); + } + + /** + * + * @desc Trigger sending an instant message via UE + */ + function f_userSendMessage(in charstring p_body) + runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_SEND_MESSAGE, {p_body}))); + } + + /** + * + * @desc Trigger checking the receipt of instant message at UE + */ + function f_userCheckMessageReceipt() runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_MESSAGE_RECEIPT, {}))); + } + + /** + * + * @desc Trigger checking the receipt of instant message at UE + */ + function f_userCheckMessageNotDelivered() runs on EquipmentUser { + f_sendEquipmentCmd(valueof(m_EQ_Request(c_UE_CHECK_MESSAGE_NOT_DELIVERED, {}))); + } + } + } + + group LibUEModuleParameters { + + /** + * + * @desc Required information for user components + * @member publicId public user identity + * @member privateId private user identity + * @member password user password + * @member domain Home domain of user + * @member domainProxy Entry point to either home or roaming IMS network + */ + type record ImsUserInfo { + charstring publicId, // (default) id to be used by UE + charstring privateId, + charstring password, + charstring domain, + charstring domainProxy + } + + type union ImsUserIdentity { + ImsUserInfo genUserId, + ImsUserInfo sipUserId, + ImsUserInfo telUserId, + ImsUserInfo noasUserId, + ImsUserInfo holdUserId, + ImsUserInfo oipUserId, + ImsUserInfo oirUserId, + ImsUserInfo acrUserId, + ImsUserInfo cfuUserId, + ImsUserInfo presUserId, + ImsUserInfo ftUserId, + ImsUserInfo imUserId, + ImsUserInfo shareUserId, + ImsUserInfo iptvUserId + } + + /** + * + * @desc List of IMS user information + */ + type record of ImsUserIdentity ImsUserIdentityList ; + + /** + * + * @desc The record collects IMS user information configured in one specific core IMS + * @member productIndex index pointing to the entry of the core IMS product in PX_PRODUCTS + * @member userInfos Lists information about all users configured in the HSS of this core IMS + */ + type record CoreImsUserInfo { + integer productIndex, + ImsUserIdentityList userIds + } + + /** + * + * @desc Collects IMS user information configured in all core IMS participating in the interoperability event + */ + type record of CoreImsUserInfo CoreImsUserInfoList; + + + /** + * + * @desc Example of module parameter based entry of EUT interface information for all products particpating in an interoperability event + */ + modulepar CoreImsUserInfoList PX_IMS_USER_DATA := { + { + productIndex := 0, // Ericsson + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + + }}, + { + telUserId := { + publicId := "tel: 3344123432", + privateId := "userTEL_priv", + password := "123456", + domain := "ericsson.etsi", + domainProxy := "pcscf.ericsson.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 1, // Thomson + userIds := { + { + genUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "thomson.etsi", + domainProxy := "pcscf.thomson.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 2, // NSN + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "nsn.etsi", + domainProxy := "pcscf.nsn.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 3, // Italtel + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "italtel.etsi", + domainProxy := "pcscf.italtel.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 4, // EXFO + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "exfo.etsi", + domainProxy := "pcscf.exfo.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 5, // Iskratel + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "iskratel.etsi", + domainProxy := "pcscf.iskratel.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 6, // Testing Tech IMS Core + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "testingtech.com", + domainProxy := "pcscf.testingtech.com" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 7, // Acme + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "pcscf.acme.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "acme" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "acme.etsi", + domainProxy := "pcscf.acme.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 8, // Nexcom + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userSIP_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userGEN", + privateId := "userSIP_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "nexcom.etsi", + domainProxy := "pcscf.nexcom.etsi" //pcscf domain or IPaddress + }} + } + }, + { + productIndex := 9, // Hotaro + userIds := { + { + genUserId := { + publicId := "userGEN", + privateId := "userGEN_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + + }}, + { + sipUserId := { + publicId := "userSIP", + privateId := "userSIP_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + }}, + { + telUserId := { + publicId := "tel: 3344123443", + privateId := "userTEL_priv", + password := "123456", + domain := "hotaro.etsi", + domainProxy := "pcscf.hotaro.etsi" //pcscf domain or IPaddress + }} + } + } + }// end modulepar + } // end group + + group eut { + } +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_Functions.ttcn b/ttcn/LibIot/LibIot_Functions.ttcn new file mode 100644 index 0000000..076c9af --- /dev/null +++ b/ttcn/LibIot/LibIot_Functions.ttcn @@ -0,0 +1,231 @@ +/* + * @author STF 370 + * @version $Id: LibIot_Functions.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the functions used by the test component + */ + +module LibIot_Functions { + import from LibCommon_VerdictControl {type FncRetCode;} + + import from LibUpperTester { + template mw_EO_Response; + type EquipmentOperationReq, EquipmentOperationRsp; + } + + import from LibIot_TypesAndValues { + type IotVerdict, IotVerdictType, Status, VerdictType; + } + + import from LibIot_PIXITS { + modulepar PX_EUT_TRIGGER_RESPONSE, PX_TTCN3_VERDICT; + } + + import from LibIot_TestInterface { + type IotEquipmentUser, OracleClient, OracleServer, TestCoordinator, EquipmentUser; + } + + + group oracleFunctions { + + /** + * @desc Sets the conformance verdict on the oracle client and sends it to the oracle server + * @param p_verdict conformance verdict set by the monitor + * @param p_reason reason why the verdict has been set + */ + function f_setConformanceVerdict(in verdicttype p_verdict, + in charstring p_reason) + runs on OracleClient { + var IotVerdict v_verdict := {conformance := {p_verdict, p_reason}}; + log("Conformance verdict set to: ", p_verdict, p_reason); + vPort.send(v_verdict); + } + + /** + * @desc Sets the end-to-end verdict on the oracle client and sends it to the oracle server + * @param p_verdict e2e verdict set by the monitor + * @param p_reason reason why the verdict has been set + */ + function f_setE2EVerdict(in verdicttype p_verdict, in charstring p_reason) + runs on OracleClient { + var IotVerdict v_verdict := {e2e := {p_verdict, p_reason}}; + log("E2E verdict set to: ", p_verdict, p_reason); + vPort.send(v_verdict); + } + + /** + * @desc Gets the conformance verdict on the oracle client + * @return conformance verdict of oracle server + */ + function f_getConformanceVerdict() + runs on OracleServer + return verdicttype { + return vc_conf_verdict.verdict; + } + + /** + * @desc Gets the end-to-end verdict on the oracle client + * @return end-to-end verdict of oracle server + */ + function f_getE2EVerdict() + runs on OracleServer + return verdicttype { + return vc_e3e_verdict.verdict; + } + + /** + * @desc Computes and logs overall verdict for end-to-end and conformance separately on oracle server + * @param p_verdict the verdict received + */ + function f_setIotVerdict(in IotVerdict p_verdict) runs on OracleServer { + f_logIotVerdict(p_verdict); + if (ischosen(p_verdict.e2e) and PX_TTCN3_VERDICT == e_e2e) { + setverdict(p_verdict.e2e.verdict, p_verdict.e2e.reason); + } else if (ischosen(p_verdict.conformance) and PX_TTCN3_VERDICT == e_conformance) { + setverdict(p_verdict.conformance.verdict, p_verdict.conformance.reason); + } + } + + /** + * @desc Set verdict PASS on main component (to be used, e.g on TestCoordinator) + */ + function f_setIotVerdictPASS(in charstring p_reason) runs on OracleServer { + var IotVerdict p_verdict := { + conformance := {verdict := pass, reason := p_reason} + }; + f_setIotVerdict(p_verdict); + } + /** + * @desc Set verdict PASS on main component (to be used, e.g on TestCoordinator) + */ + function f_setIotVerdictFAIL(in charstring p_reason) runs on OracleServer { + var IotVerdict p_verdict := { + conformance := {verdict := fail, reason := p_reason} + }; + f_setIotVerdict(p_verdict); + } + + + /** + * + * @desc logs the received IOT verdict + * @param p_verdict The verdict to set + */ + function f_logIotVerdict(in IotVerdict p_verdict) runs on OracleServer { + if (ischosen(p_verdict.e2e)) { + vc_e3e_verdict := f_getWorseVerdict(vc_e3e_verdict, p_verdict.e2e); + log("E2E verdict set to: ", p_verdict.e2e.verdict, "Reason: " & p_verdict.e2e.reason); + } else { + vc_conf_verdict := f_getWorseVerdict(vc_conf_verdict, p_verdict.conformance); + log("Conformance verdict set to: ", p_verdict.conformance.verdict, "Reason: " & p_verdict.conformance.reason); + } + } + + /** + * + * @desc returns the worse verdict + * @param p_org the original verdict + * @param p_new the new verdict + * @return the worse verdict + */ + function f_getWorseVerdict(in VerdictType p_org, in VerdictType p_new) return VerdictType { + if(p_org.verdict == pass) { + + if(p_new.verdict != pass) { + return p_new; + } + else { + return p_org; + } + } + else if (p_org.verdict == inconc) { + + if(p_new.verdict != pass) { + return p_new; + } + else { + return p_org; + } + } + else if (p_org.verdict == fail) { + if(p_new.verdict == pass) { + return p_org; + } + else if(p_new.verdict == inconc) { + return p_org; + } + else { + return p_new; + } + } + else if (p_org.verdict == error) { + return p_org; + } + + return p_org; + } + + /** + * @desc Altstep to be used for listening continously on the verdict port of the oracle server for receiving verdicts from oracle clients + */ + altstep a_receiveIOTVerdict() runs on OracleServer { + var IotVerdict v_verdict; + [] vPort.receive(IotVerdict:?) -> value v_verdict { + f_setIotVerdict(v_verdict); + repeat; + } + } + } + + group equipmentOperationFunctions { // TODO Update! + function f_sendEquipmentCmd(in EquipmentOperationReq p_req) runs on EquipmentUser { + var EquipmentOperationRsp v_response; + var charstring v_reason := ""; + + T_Equipment.start(PX_EUT_TRIGGER_RESPONSE); + eaPort.send(p_req); + + alt{ + [] eaPort.receive(mw_EO_Response(e_success)) -> value v_response { + T_Equipment.stop; + if(ispresent(v_response.status.reason)) { + v_reason := v_response.status.reason; + f_setE2EVerdict(pass, "Equipment command """ & p_req.cmd & """successful: " & v_reason); + }else { + f_setE2EVerdict(pass, "Equipment command successful"); + } + } + [] eaPort.receive(mw_EO_Response(?)) -> value v_response { + T_Equipment.stop; + if(ispresent(v_response.status.reason)) { + v_reason := v_response.status.reason; + f_setE2EVerdict(fail, "Equipment command """ & p_req.cmd & """unsuccessful: " & v_reason); + }else { + f_setE2EVerdict(fail, "Equipment command unsuccessful: no reason given"); + } + } + [] T_Equipment.timeout { + f_setE2EVerdict(inconc, "Timer expired while waiting for reponse of Trigger command """ & p_req.cmd & """"); + } + } + } + } + + group miscFunctions { + /** + * @desc searches the array for a given name and returns + * the corresponding index + * @param p_idx index of the port + * @return the index + */ + function f_getMonitorIdx(in charstring p_name) + runs on TestCoordinator return integer { + var integer v_size := lengthof(vc_compIds); + for (var integer i := 0; i < v_size; i := i + 1) { + if (vc_compIds[i].name == p_name) { + return vc_compIds[i].index; + } + } + return - 1; + } + } +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn new file mode 100644 index 0000000..f5112ac --- /dev/null +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -0,0 +1,379 @@ +/* + * @author STF370 + * @version $Id: LibIot_PIXITS.ttcn $ + * @desc This module provides PIXIT parameters which need to be + * changeable within validation + */ + +module LibIot_PIXITS { + + import from LibIot_TypesAndValues + { + type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, + ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; + } + + /** + * @desc PIXIT defines which verdict (E2E or conformance)is to be kept track of with the TTCN-3 verdict. + * Note that the verdict not chosen will be only available in log statements. + */ + modulepar IotVerdictType PX_TTCN3_VERDICT := e_conformance; + + /** + * + * @desc Maximum time limit used by monitor component for waiting for expected incoming messages + */ + modulepar float PX_MAX_MSG_WAIT := 10.0; + + /** + * + * @desc Example of module parameter based entry of EUT interface information for all products particpating in an interoperability event + */ +// remove at end of validation phase + modulepar ProductList PX_PRODUCTS := { + { + // productIndex = 0 + productName := "ProductA", + monitorInterfaces := { + { + interfaceName := "Gm", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:32e0", //"192.86.1.97", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fe80::21a:a0ff:fe07:98", //"10.10.20.98", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fe80::21a:a0ff:fe07:99", //"10.10.20.99", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Mx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:32e0", //"192.86.1.97", + portNumbers := {5060} + }, + { + domainName := "icscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:98", //"192.86.1.98", + portNumbers := {5060} + }, + { + domainName := "scscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:99", //"192.86.1.99", + portNumbers := {5060} + }, + { + domainName := "ibcf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:100", //"192.86.1.100", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Ici", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ibcf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:100", //"192.86.1.100", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "ISC", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "as.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:109", //"192.86.1.109", + portNumbers := {} + }, + { + domainName := "scscf.ProductA.etsi", + IpAddress := "fe80::21a:a0ff:fe07:99", //"192.86.1.99", + portNumbers := {5060} + } + + } + } + }, + { + interfaceName := "Rx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {1111} + } + } + } + }, + { + interfaceName := "Sgi", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {1111} + } + } + } + }, + { + interfaceName := "Mw", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "", + IpAddress := "", + portNumbers := {2222} + } + } + } + } + } + }, + { + // productIndex = 1 + productName := "ProductB", + monitorInterfaces := { + { + interfaceName := "Gm", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:22c", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fec0::216:d3ff:fe0d:106", + portNumbers := {5060} + }, + { + domainName := omit, + IpAddress := "fec0::216:d3ff:fe0d:107", + portNumbers := {5060} + } + } + } + }, + { + interfaceName := "Mx", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:22c", + portNumbers := {5060} + }, + { + domainName := "icscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5180,5185} + }, + { + domainName := "scscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5185,5187,5188,5189} + }, + { + domainName := "ibcf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5190} + } + } + } + }, + { + interfaceName := "Ici", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ibcf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5185,5187,5188,5189} + } + } + } + }, + { + interfaceName := "ISC", + //available := true, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ProductB.etsi", + IpAddress := "fec0::216:d3ff:fe0d:10", + portNumbers := {5060} + }, + { + domainName := "as.ProductB.net", + IpAddress := "fec0::216:d3ff:fe0d:20", + portNumbers := {5076} + } + } + } + } + } + } + } + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_A + * + */ + modulepar integer PX_EUT_A := 0; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B + */ + modulepar integer PX_EUT_B := 1; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_C + */ + modulepar integer PX_EUT_C := 10; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_D + */ + modulepar integer PX_EUT_D := 11; + + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B_B2 + */ + modulepar integer PX_EUT_B_B2 := 2; + + + /** + * + * @desc Selects if interfaces should be considered in the evaluation + * interfaceName needs to be consistent to AtsImsIot_TestConfiguration + */ + modulepar InterfaceAvailableList PX_AVAILABLE_INTERFACES := { + { interfaceName := "Gm A", available := true }, + { interfaceName := "Gm B", available := true }, + { interfaceName := "Gm C", available := true }, + { interfaceName := "Gm D", available := true }, + { interfaceName := "Mx", available := true }, + { interfaceName := "Rx", available := true }, + { interfaceName := "Mw", available := false }, + { interfaceName := "Sgi", available := false }, + { interfaceName := "Ici", available := true }, + { interfaceName := "ISC A", available := true }, + { interfaceName := "ISC B", available := true }, + { interfaceName := "User A", available := true }, + { interfaceName := "User B", available := true }, + { interfaceName := "User A2", available := true }, + { interfaceName := "User B2", available := true } + } + + group adapterGeneralConfiguration { + /** + * + * @desc Maximum time limit used by trigger component for waiting for EUT response after command has been sent + */ + modulepar float PX_EUT_TRIGGER_RESPONSE := 15.0; + + /** + * @desc + * In case of offline mode, it defines the path where all sessions's Pcap files are located. + */ + modulepar charstring PX_IOT_PCAP_SESSIONS_PATH := "C:/cygwin/tmp/IMS-UE_tool_pcaps"; // Do not forget to upgrade PX_EUT_A and PX_EUT_B + + /** + * @desc + * Defines if the record traffic capture mode must be activated or not. + */ + modulepar RecordMode PX_IOT_RECORD_MODE := e_norecord; + + /** + * @desc + * Defines list of the files to merge. + */ + modulepar FileList PX_IOT_FILE_MERGE_LIST := { }; + + /** + * @desc + * Defines the location of the files to merge. + */ + modulepar charstring PX_IOT_FILE_MERGE_PATH := "."; + + /** + * @desc + * Defines the location of the files to merge. + */ + modulepar charstring PX_IOT_MERGE_TOOL_PATH := "C:\Program Files\WireShark"; + + /** + * @desc + * Defines the time stamp offset to start playing record traffic capture file. + */ + modulepar TimeOffset PX_IOT_TIMESTAMP_OFFSET := + { + seconds := 0, + microseconds := 0 + }; + + /** + * @desc + * List of the network interfaces to monitor. + * Use ';' to separate the interfaces + */ + modulepar charstring PX_IOT_IFACES := "rpcap://\Device\NPF_{60DAA80A-2AC6-4592-B3A7-80FC0FF08908}"; + + modulepar EutInterfaceInfoList PX_IOT_EUTs_IFACE_INFO_LIST := + { + { + eut := "User A", + ipAddress := "3ffe:501:ffff:100::10", // "127.0.0.1", + portNumber := 5060 + }, + { + eut := "User B", + ipAddress := "3ffe:501:ffff:1000::1000", //"127.0.0.1", + portNumber := 5060 + } + }; + + } // group adapterGlobalConfiguration + + +} + diff --git a/ttcn/LibIot/LibIot_TestConfiguration.ttcn b/ttcn/LibIot/LibIot_TestConfiguration.ttcn new file mode 100644 index 0000000..bfa147b --- /dev/null +++ b/ttcn/LibIot/LibIot_TestConfiguration.ttcn @@ -0,0 +1,50 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TestConfiguration.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc xxx. + */ + +module LibIot_TestConfiguration { + + import from LibIot_TestInterface { + type + InterfaceMonitor, + IotEquipmentUser, + OracleClient, + OracleServer, + TestCoordinator; + } + + /** + * @desc connects the port of the monitor component to the + * port of the test oracle and activates the default + * @param p_monitor monitor component + */ + function f_cf_oracle_up(in OracleClient p_client) runs on OracleServer { + connect(self:vPort, p_client:vPort); + } + + /** + * @desc deactivates the default and disconnects the port of the monitor + * component + * @param p_monitor monitor component + */ + function f_cf_oracle_down(in OracleClient p_client) runs on OracleServer { + disconnect(self:vPort, p_client:vPort); + } + + /** + * @desc creates a IOT equipment user component + * @param p_name name of the equipment user component + * @return reference to the created equipment user component + */ + function f_cf_create_IotEquipmentUser(in charstring p_name) runs on TestCoordinator return IotEquipmentUser { + var IotEquipmentUser v_iotEquipmentUser := IotEquipmentUser.create(p_name) alive; + // TODO var IotEquipmentUser v_iotEquipmentUser := IotEquipmentUser.create alive; + /* YANN + It's really better to use named port for debug and so on + */ + + return v_iotEquipmentUser; + } +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_TestInterface.ttcn b/ttcn/LibIot/LibIot_TestInterface.ttcn new file mode 100644 index 0000000..6baefb0 --- /dev/null +++ b/ttcn/LibIot/LibIot_TestInterface.ttcn @@ -0,0 +1,117 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TestInterface.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the types and components used by the test + * system component for Interoperability tests. + */ + +module LibIot_TestInterface { + + import from LibUpperTester { + type EquipmentOperationReq, EquipmentOperationRsp; + } + + import from LibIot_TypesAndValues all; + + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + + import from LibCommon_Sync all; + import from LibSip_SIPTypesAndValues all; + import from AtsImsIot_TypesAndValues all; + + + group abstractTestComponents { + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component TestCoordinator extends OracleServer { + var ComponentIdList vc_compIds; + port AdapterConfigPort acPort; + } + + /** + * @desc + * collecting information to manage E2E and conformance verdicts. + * Can be used as MTC. + */ + type component OracleServer extends ServerSyncComp { + port VerdictPort vPort; + var VerdictType vc_e3e_verdict := {none, "init"}; + var VerdictType vc_conf_verdict := {none, "init"}; + } + + type component OracleClient extends SelfSyncComp { + port VerdictPort vPort; + } + + /** + * @desc + * This component type is used to monitor interfaces. + * The library provides on the adapter configuration port. + * @remark + * As part of the ATS test system module this component type must be + * extended to include the ATS specific data port! + */ + type component InterfaceMonitor extends OracleClient { + timer tc_wait := PX_MAX_MSG_WAIT; + var charstring vc_interfaceName := "Undefined"; + var MonitorInterfaceInfo vc_Interface; + port AdapterConfigPort acPort; + } + + + /** + * @desc + * This component type is used to trigger, stimualte, configure etc any + * equipment related to the test, i.e., EUTs or other, or the + * interconnecting network. To be used as PTC. + */ + type component EquipmentUser extends OracleClient{ + port EquipmentAccessPort eaPort; + timer T_Equipment; + } + + /** + * @desc This component type is used to trigger, stimulate, configure etc + * any equipment related to the test, i.e., EUTs or other, or + * the interconnecting network. To be used as PTC. + */ + type component IotEquipmentUser extends EquipmentUser { + } + +// TODO commented out due to problems with tools not accepting 'extends' from several components + /** + * @desc This component type is used to trigger, stimulate, configure etc + * any equipment related to the test, i.e., EUTs or other, or + * the interconnecting network. To be used as PTC. + */ +// type component IotEquipmentUser extends EquipmentUser, OracleClient { +// } + + }// end group abstractTestComponents + + group portDefinitions { + + type port EquipmentAccessPort message { + out EquipmentOperationReq; + in EquipmentOperationRsp; + } + type port VerdictPort message { + inout IotVerdict; + } + + type port AdapterConfigPort message { + out GeneralConfigurationReq; + out SetFilterReq; + out StartTrafficCaptureReq; + out StopTrafficCaptureReq; + in GeneralConfigurationRsp; + in SetFilterRsp; + in StartTrafficCaptureRsp; + in StopTrafficCaptureRsp; + } + }// end group portDefinitions +} diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn new file mode 100644 index 0000000..8a97ca9 --- /dev/null +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -0,0 +1,284 @@ +/* + * @author STF 370 + * @version $Id: LibIot_TypesAndValues.ttcn 16 2009-06-16 15:06:42Z pintar $ + * @desc This module provides the (message) types and constants used by the test component + * for Iot tests. + */ + +module LibIot_TypesAndValues { + + import from LibCommon_BasicTypesAndValues {type UInt32, UInt16;} + + import from LibCommon_VerdictControl {type FncRetCode;} + + group commonTypes { + type enumerated IOTExecMode { e_realtime, e_offline } + + type record Status { + FncRetCode code, + charstring reason optional + } + + } + + group interfaceInformationrelatedTypes { + + /** + * + * @desc IP address type e.g. "127.0.0.1" + */ + type charstring IpAddress; + + /** + * + * @desc Type for port number, e.g. "5060" + */ + type UInt16 PortNumber; + + /** + * + * @desc List of port numbers + */ + type record of PortNumber PortNumberList; + + type record InterfaceAvailable { + charstring interfaceName, + boolean available + } + + type set of InterfaceAvailable InterfaceAvailableList; + + /** + * + * @desc Required information for IP interfaces + * @member domainName the domain name + * @member IpAddress the ip address + * @member portNumbers the list of port numbers where message are received + */ + type record IpInterfaceInfo { + charstring domainName optional, + IpAddress IpAddress, + PortNumberList portNumbers + } + + /** + * + * @desc List of IP interfacees + */ + type record of IpInterfaceInfo IpInterfaceInfoList; + + /** + * + * @desc Collection of different interface types, e.g for IP communications + * This type can be extended with new alternative for other interface types + */ + type union InterfaceInfo { + IpInterfaceInfoList IpInterfaceInfo + } + + /** + * + * @desc Type for representing EUT interface information for monitored logical interfaces + * @member interfaceName Name of logical interface + * @member interfaceInfo Interface information specific to this logical interface + */ + type record MonitorInterfaceInfo { + charstring interfaceName, + InterfaceInfo interfaceInfo + } + + /** + * + * @desc List of monitored interfaces + */ + type record of MonitorInterfaceInfo MonitorInterfaceInfoList; + + /** + * + * @desc List of VxLTE Monitor interfaces + */ + type record VxLTEMonitorInterfaceList{ + MonitorInterfaceInfo gmA optional, + MonitorInterfaceInfo gmB optional, + MonitorInterfaceInfo ic optional, + MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + MonitorInterfaceInfo mwPS optional, + MonitorInterfaceInfo mwIS optional,// Mw interface at I-CSCF/S-CSCF + MonitorInterfaceInfo mwPB optional,// Mw interface at P-CSCF/IBCF + MonitorInterfaceInfo mwIB optional,// Mw interface at I-CSCF/IBCF + MonitorInterfaceInfo isc optional, + MonitorInterfaceInfo cxIH optional, + MonitorInterfaceInfo cxSH optional, + MonitorInterfaceInfo gx optional, + MonitorInterfaceInfo rx optional, + MonitorInterfaceInfo s6a optional, + MonitorInterfaceInfo s9 optional, + MonitorInterfaceInfo sh optional + } + + /** + * + * @desc Product specific EUT interface information + * @member name the name of the vendor + * @member monitorInterfaces monitor interface configuration + */ + type record Product { + charstring productName, + MonitorInterfaceInfoList monitorInterfaces + } + + /** + * + * @desc List of product specificr EUT interface information + */ + type record of Product ProductList; + } + + + + group adapterConfigurationTypes { + + type union CaptureMode { + LiveCapture liveCpature, + OfflineCapture offlineCapture + } + + // + type record of charstring PhysicalInterfaceList; + + type record LiveCapture { + PhysicalInterfaceList physicalInterfaces, // TODO document example syntax + RecordMode recordMode + } + + type enumerated RecordMode { + e_norecord, + e_record + } + + type record of charstring FileList; + + type record MergeFileList { + FileList mergeFileList, + charstring mergeFilePath, + charstring mergeToolPath + } + + type record CaptureSource { + charstring sessionsPath, // e.g., the path where session's PCAP files are located like /tmp/19 + MergeFileList mergeFileList + } + + type record TimeOffset + { + UInt32 seconds, + UInt32 microseconds + } + + type record OfflineCapture { + TimeOffset offset, + CaptureSource captureSource + } + + /** + * + * @desc Required information for EUTs IP interfaces + * @member IpAddress the ip address + * @member portNumber the list of port number where message are received + */ + type record EutInterfaceInfo { + charstring eut, + IpAddress ipAddress, + PortNumber portNumber + } + + /** + * + * @desc List of IP interfaces for EUTs + */ + type record of EutInterfaceInfo EutInterfaceInfoList; + + + + type record GeneralConfigurationReq { + charstring captureProcessIpAddress, + PortNumber captureProcessPort, + CaptureMode captureMode, + EutInterfaceInfoList eutInfoList optional + } + + type record GeneralConfigurationRsp + { + Status status + } + + + //type record (2..infinity) of InterfaceInfo InterfaceInfoList; + type record of InterfaceInfo InterfaceInfoList; + + type enumerated ProtocolFilter { + e_ip, + e_sip, + e_dns, + e_diameter + } + + type record SetFilterReq { + ProtocolFilter protocol, + InterfaceInfoList interfaceInfos + } + + + type record SetFilterRsp + { + Status status + } + + + type record StartTrafficCaptureReq { } + + type record StartTrafficCaptureRsp + { + Status status + } + + + type record StopTrafficCaptureReq { } + + type record StopTrafficCaptureRsp + { + Status status + } + + } + with{ + encode "IOTCodec"; + } + + group oracleRelatedTypes { + // used for PIXIT definition + type enumerated IotVerdictType { e_e2e, e_conformance } + + // used for verdict handling + type record VerdictType { + verdicttype verdict, + charstring reason optional + } + + type union IotVerdict { + VerdictType e2e, + VerdictType conformance + } + } + /** + * @desc Default record + */ + type record of default DefaultList; + + type record ComponentId { + charstring name, + integer index // explain more + } + + type set of ComponentId ComponentIdList; +} \ No newline at end of file diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn new file mode 100644 index 0000000..77bbff2 --- /dev/null +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -0,0 +1,607 @@ +/* + * @author STF 574 + * @version $Id: LibIot_VxLTE_Functions.ttcn 1 2020-05-29 15:06:42Z pintar $ + * @desc This module provides Functions parameters which need to be + * changeable within validation + */ + +module LibIot_VxLTE_Functions { + + import from LibIot_TypesAndValues + { + type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, + ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailable, InterfaceAvailableList,MonitorInterfaceInfo, + VxLTEMonitorInterfaceList; + } + import from AtsImsIot_Templates { + template /*m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, + m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout,*/ + m_SetFilterReq/*, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, + m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any*/; + } + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Templates all; + + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + + type record of charstring InterfaceNamesList; + group ConfigurationFunctions{ + /** + * @desc Check and create a list of monitor interfaces based on PIXITS + * @param + * @return the created monitor component list in vc_MonIntfList + */ + function f_setVxLteMonIterfacesAvailability(/*inout VxLTEMonitorInterfaceList p_vxlteMonIntfList*/)runs on ImsTestCoordinator{ + + + if (PX_SIP_GMA_MONITORENABLED == true){ + //p_vxlteMonIntfList.gmA := valueof(m_MonIntf_Sip_Gm_A); + vc_MonIntfList.gmA := valueof(m_MonIntf_Sip_Gm_A); + } + if (PX_SIP_GMB_MONITORENABLED == true){ + vc_MonIntfList.gmB := valueof(m_MonIntf_Sip_Gm_B); + } + if (PX_SIP_IC_MONITORENABLED == true){ + vc_MonIntfList.ic := valueof(m_MonIntf_Sip_Ic); + } + if (PX_SIP_MW_PI_MONITORENABLED == true){ + vc_MonIntfList.mwPI := valueof(m_MonIntf_Sip_Mw_PI); + } + if (PX_SIP_MW_PS_MONITORENABLED == true){ + vc_MonIntfList.mwPS := valueof(m_MonIntf_Sip_Mw_PS); + } + if (PX_SIP_MW_IS_MONITORENABLED == true){ + vc_MonIntfList.mwIS := valueof(m_MonIntf_Sip_Mw_IS); + } + if (PX_SIP_MW_PB_MONITORENABLED == true){ + vc_MonIntfList.mwPB := valueof(m_MonIntf_Sip_Mw_PB); + } + if (PX_SIP_MW_IB_MONITORENABLED == true){ + vc_MonIntfList.mwIB := valueof(m_MonIntf_Sip_Mw_IB); + } + if (PX_SIP_ISC_MONITORENABLED == true){ + vc_MonIntfList.isc := valueof(m_MonIntf_Sip_ISC); + } + + + + if (PX_DIAMETER_CX_IH_MONITORENABLED == true){ + vc_MonIntfList.cxIH := valueof(m_MonIntf_Diameter_Cx_IH); + } + if (PX_DIAMETER_CX_SH_MONITORENABLED == true){ + vc_MonIntfList.cxSH := valueof(m_MonIntf_Diameter_Cx_SH); + } + if (PX_DIAMETER_GX_MONITORENABLED == true){ + vc_MonIntfList.gx := valueof(m_MonIntf_Diameter_Gx); + } + if (PX_DIAMETER_RX_MONITORENABLED == true){ + vc_MonIntfList.rx := valueof(m_MonIntf_Diameter_Rx); + } + if (PX_DIAMETER_S6A_MONITORENABLED == true){ + vc_MonIntfList.s6a := valueof(m_MonIntf_Diameter_S6a); + } + if (PX_DIAMETER_S9_MONITORENABLED == true){ + vc_MonIntfList.s9 := valueof(m_MonIntf_Diameter_S9); + } + if (PX_DIAMETER_SH_MONITORENABLED == true){ + vc_MonIntfList.sh := valueof(m_MonIntf_Diameter_Sh); + } + + } + + /** + * @desc Create monitor components based on vc_MonIntfList + * @param + * @return the created monitor components in vc_vxlte_monitor_components + */ + function f_cf_createVxLteMonitor() runs on ImsTestCoordinator{ + + if (isvalue(vc_MonIntfList.gmA)){ + vc_vxlte_monitor_components.gmA := f_cf_create_monitor_sip ( vc_MonIntfList.gmA); + } + if (isvalue(vc_MonIntfList.gmB)){ + vc_vxlte_monitor_components.gmB := f_cf_create_monitor_sip ( vc_MonIntfList.gmB); + } + + if (isvalue(vc_MonIntfList.ic)){ + vc_vxlte_monitor_components.ic := f_cf_create_monitor_sip ( vc_MonIntfList.ic); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + vc_vxlte_monitor_components.mwPI := f_cf_create_monitor_sip ( vc_MonIntfList.mwPI); + } + if (isvalue(vc_MonIntfList.mwPS)){ + vc_vxlte_monitor_components.mwPS := f_cf_create_monitor_sip ( vc_MonIntfList.mwPS); + } + if (isvalue(vc_MonIntfList.mwIS)){ + vc_vxlte_monitor_components.mwIS := f_cf_create_monitor_sip ( vc_MonIntfList.mwIS); + } + if (isvalue(vc_MonIntfList.mwPB)){ + vc_vxlte_monitor_components.mwPB := f_cf_create_monitor_sip ( vc_MonIntfList.mwPB); + } + if (isvalue(vc_MonIntfList.mwIB)){ + vc_vxlte_monitor_components.mwIB := f_cf_create_monitor_sip ( vc_MonIntfList.mwIB); + } + + if (isvalue(vc_MonIntfList.isc)){ + vc_vxlte_monitor_components.isc := f_cf_create_monitor_sip ( vc_MonIntfList.isc); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + vc_vxlte_monitor_components.cxIH := f_cf_create_monitor_diameter ( vc_MonIntfList.cxIH); + } + if (isvalue(vc_MonIntfList.cxSH)){ + vc_vxlte_monitor_components.cxSH := f_cf_create_monitor_diameter ( vc_MonIntfList.cxSH); + } + if (isvalue(vc_MonIntfList.gx)){ + vc_vxlte_monitor_components.gx := f_cf_create_monitor_diameter ( vc_MonIntfList.gx); + } + if (isvalue(vc_MonIntfList.rx)){ + vc_vxlte_monitor_components.rx := f_cf_create_monitor_diameter ( vc_MonIntfList.rx); + } + if (isvalue(vc_MonIntfList.s6a)){ + vc_vxlte_monitor_components.s6a := f_cf_create_monitor_diameter ( vc_MonIntfList.s6a); + } + if (isvalue(vc_MonIntfList.s9)){ + vc_vxlte_monitor_components.s9 := f_cf_create_monitor_diameter ( vc_MonIntfList.s9); + } + if (isvalue(vc_MonIntfList.sh)){ + vc_vxlte_monitor_components.sh := f_cf_create_monitor_diameter ( vc_MonIntfList.sh); + } + } + + /** + * @desc Start monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are connected/mapped + */ + function f_cf_VxLteMonitor_Up() runs on ImsTestCoordinator{ + //Initialize the Adapter (including the TrafficCapture process). + timer tc_noAct; + f_cf_initCapture(); + + if (isvalue(vc_MonIntfList.gmA)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmA); + vc_vxlte_monitor_components.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.gmA.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.gmB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmB); + vc_vxlte_monitor_components.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.gmB.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.ic)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.ic); + vc_vxlte_monitor_components.ic.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.ic.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPI); + vc_vxlte_monitor_components.mwPI.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPI.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwPS)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPS); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwIS)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIS); + vc_vxlte_monitor_components.mwIS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIS.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwPB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPB); + vc_vxlte_monitor_components.mwPB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwIB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIB); + vc_vxlte_monitor_components.mwIB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIB.interfaceInfo} + ) + ))); + } + + if (isvalue(vc_MonIntfList.isc)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.isc); + vc_vxlte_monitor_components.isc.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.isc.interfaceInfo} + ) + ))); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.cxIH); + vc_vxlte_monitor_components.cxIH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.cxIH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.cxSH)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.cxSH); + vc_vxlte_monitor_components.cxSH.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.cxSH.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.gx)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.gx); + vc_vxlte_monitor_components.gx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.gx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.rx)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.rx); + vc_vxlte_monitor_components.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.rx.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.s6a)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.s6a); + vc_vxlte_monitor_components.s6a.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.s6a.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.s9)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.s9); + vc_vxlte_monitor_components.s9.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.s9.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.sh)){ + f_cf_monitor_up_diameter(vc_vxlte_monitor_components.sh); + vc_vxlte_monitor_components.sh.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {vc_MonIntfList.sh.interfaceInfo} + ) + ))); + } + + tc_noAct.start(3.0); + alt { + [] tc_noAct.timeout { + } + } + f_cf_startCapture(); + } + + /** + * @desc Stops monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are disconnected/unmapped + */ + function f_cf_VxLteMonitor_Down() runs on ImsTestCoordinator{ + //Stop traffic capture processing. + f_cf_stopCapture(); + + if (isvalue(vc_MonIntfList.gmA)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmA); + } + if (isvalue(vc_MonIntfList.gmB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmB); + } + + if (isvalue(vc_MonIntfList.ic)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.ic); + } + + if (isvalue(vc_MonIntfList.mwPI)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPI); + } + if (isvalue(vc_MonIntfList.mwPS)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPS); + } + if (isvalue(vc_MonIntfList.mwIS)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIS); + } + if (isvalue(vc_MonIntfList.mwPB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPB); + } + if (isvalue(vc_MonIntfList.mwIB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIB); + } + + if (isvalue(vc_MonIntfList.isc)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.isc); + } + + + + if (isvalue(vc_MonIntfList.cxIH)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.cxIH); + } + if (isvalue(vc_MonIntfList.cxSH)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.cxSH); + } + if (isvalue(vc_MonIntfList.gx)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.gx); + } + if (isvalue(vc_MonIntfList.rx)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.rx); + } + if (isvalue(vc_MonIntfList.s6a)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.s6a); + } + if (isvalue(vc_MonIntfList.s9)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.s9); + } + if (isvalue(vc_MonIntfList.sh)){ + f_cf_monitor_down_diameter(vc_vxlte_monitor_components.sh); + } + } + }//end group ConfigurationFunctions + group CheckFunctions{ + + /** + * @desc Check monitor components based on interfaces names + * @param + * @return true - Monitorinteface available/active + * false - Monitorinteface not exists or not available/active + */ + function f_checkVxLteRequiredMonitorInterface(InterfaceNamesList p_interfaces) runs on ImsTestCoordinator return boolean{ + var integer v_len:=lengthof(p_interfaces); + var integer i:=0; + var boolean v_check := false; + + if (v_len>0){ + for(i:=0;i + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + * Existing templates shall not be changed or removed - + * change requests shall be made to http://t-ort.etsi.org + */ +module LibMsrp_Templates { + + // LibMsrp + import from LibMsrp_TypesAndValues all; + + /** + * @desc Declaration of constants used by templates + */ + group constants { + + group codes { + + /** + * @desc 200 status OK + * @see RFC 4975 - Clause 10.1 + */ + const StatusCode c_OKCode := 200; + + /** + * @desc 400 status Bad request + * @see RFC 4975 - Clause 10.2 + */ + const StatusCode c_BadRequestCode := 400; + + /** + * @desc 403 status Forbidden + * @see RFC 4975 - Clause 10.3 + */ + const StatusCode c_ForbiddenCode := 403; + + /** + * @desc 408 status Request Time-out + * @see RFC 4975 - Clause 10.4 + */ + const StatusCode c_RequestTimeoutCode := 408; + + /** + * @desc 413 status Request Entity Too Large + * @see RFC 4975 - Clause 10.5 + */ + const StatusCode c_RequestEntityTooLargeCode := 413; + + /** + * @desc 415 status Unsupported Media Type + * @see RFC 4975 - Clause 10.6 + */ + const StatusCode c_UnsupportedMediaTypeCode := 415; + + /** + * @desc 423 status Locked + * @see RFC 4975 - Clause 10.7 + */ + const StatusCode c_LockedCode := 423; + + /** + * @desc 481 status Call/Transaction Does Not Exist + * @see RFC 4975 - Clause 10.8 + */ + const StatusCode c_CallTransactionDoesNotExistCode := 481; + + /** + * @desc 501 status Not Implemented + * @see RFC 4975 - Clause 10.9 + */ + const StatusCode c_NotImplementedCode := 501; + + /** + * @desc 506 status Variant also negotiates + * @see RFC 4975 - Clause 10.10 + */ + const StatusCode c_VariantNegotiatesCode := 506; + + } // End of group codes + + group comments { + + /** + * @desc Comment for 200 status + * @see RFC 4975 - Clause 10.1 + */ + const charstring c_OKComment := "OK"; + + /** + * @desc Comment for 400 Bad request + * @see RFC 4975 - Clause 10.2 + */ + const charstring c_BadRequestComment := "Bad request"; + + /** + * @desc Comment for 403 Forbidden + * @see RFC 4975 - Clause 10.3 + */ + const charstring c_ForbiddenComment := "Forbidden"; + + /** + * @desc Comment for 408 Request Time-out + * @see RFC 4975 - Clause 10.4 + */ + const charstring c_RequestTimeoutComment := "Request Time-out"; + + /** + * @desc 413 status Request Entity Too Large + * @see RFC 4975 - Clause 10.5 + */ + const charstring c_RequestEntityTooLargeComment := "Request Entity Too Large"; + + /** + * @desc 415 status Unsupported Media Type + * @see RFC 4975 - Clause 10.6 + */ + const charstring c_UnsupportedMediaTypeComment := "Unsupported Media Type"; + + /** + * @desc 423 status Locked + * @see RFC 4975 - Clause 10.7 + */ + const charstring c_LockedComment := "Locked"; + + /** + * @desc 481 status Call/Transaction Does Not Exist + * @see RFC 4975 - Clause 10.8 + */ + const charstring c_CallTransactionDoesNotExistComment := "Call/Transaction Does Not Exist"; + + /** + * @desc 501 status Not Implemented + * @see RFC 4975 - Clause 10.9 + */ + const charstring c_NotImplementedComment := "Not Implemented"; + + /** + * @desc 506 status Variant also negotiates + * @see RFC 4975 - Clause 10.10 + */ + const charstring c_VariantNegotiatesComment := "Variant also negotiates"; + + } // End of group comments + + } // End of group constants + + /** + * @desc Start and End line descriptions + */ + group delimiterLines { + + /** + * @desc Generic receive template for SEND start request line + */ + template MsrpRequestLine mw_RequestLine_SEND_any := { + tagMsrp := e_MSRP, + transactionID := ?, + method := SEND_E + } // End of template mw_RequestLine_SEND_any + + template MsrpRequestLine mw_RequestLine_REPORT_any := { + tagMsrp := e_MSRP, + transactionID := ?, + method := REPORT_E + } // End of template mw_RequestLine_SEND_any + + /** + * @desc Generic receive template for RECEIVE start response line + */ + template MsrpResponseLine mw_ResponseLine_any := { + tagMsrp := e_MSRP, + transactionID := ?, + statusCode := ?, + comment := * + } // End of template mw_ResponseLine_any + + template MsrpResponseLine mw_ResponseLine_success + modifies mw_ResponseLine_any := { + statusCode := c_OKCode, + comment := c_OKComment + } // End of template mw_ResponseLine_success + + /** + * @desc Receive template for SEND/RECEIVE end line, assuming that message are small enought to prevent chunk + */ + template EndLine mw_EndLine_noMore := { + transactionID := ?, + continuationFlag := e_endMessage // No chunk + } // End of template mw_EndLine_noMore + + } // End of group delimiterLines + + /** + * @see RFC 4975 - Clause 5.2. MSRP Addressing + */ + group msrpAddressing { + + /** + * @desc Dummy send template for MsrpURI used by ToPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+ */ + template (value) MsrpURI m_msrpURIs_ToPath_Dummy := { + scheme := { + scheme := e_SCHEME + }, + authority := { + userinfo := omit, + host := "biloxi.example.com", + portNumber := 12763 + }, + sessionID := "kjhd37s2s20w2a", + transport := "tcp", + uriParams := omit + } // End of template m_msrpURIs_ToPath_Dummy + + /** + * @desc Dummy send template for MsrpURI used by FromPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) MsrpURI m_msrpURIs_FromPath_Dummy := { + scheme := { + scheme := e_SCHEME + }, + authority := { + userinfo := omit, + host := "atlanta.example.com", + portNumber := 7654 + }, + sessionID := "jshA7weztas", + transport := "tcp", + uriParams := omit + } // End of template m_msrpURIs_FromPath_Dummy + + /** + * @desc Dummy send template for ToPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) ToPath m_msrpToPath_Dummy := { + headerName := TO_PATH_E, + msrpURIs := { + m_msrpURIs_ToPath_Dummy + } + } // End of template m_msrpToPath_Dummy + + /** + * @desc Dummy send template for FromPath + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
msrp://atlanta.example.com:7654/jshA7weztas;tcp
+ */ + template (value) FromPath m_msrpFromPath_Dummy := { + headerName := FROM_PATH_E, + msrpURIs := { + m_msrpURIs_FromPath_Dummy + } + } // End of template m_msrpFromPath_Dummy + + template ToPath mw_toPath(in template (present) MsrpURI p_path) := { + headerName := TO_PATH_E, + msrpURIs := { + p_path + } + } // End of template mw_toPath + + template FromPath mw_fromPath(in template (present) MsrpURI p_path) := { + headerName := FROM_PATH_E, + msrpURIs := { + p_path + } + } // End of template mw_fromPath + + } // End of group msrpAddressing + + group msrpHeaders { + + /** + * @desc Dummy send template for MessageID + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
Message-ID: 87652491
+ */ + template (value) MessageID m_msrpMessageID_Dummy := { + headerName := MESSAGE_ID_E, + messageId := "87652491" + + } // End of template m_msrpMessageID_Dummy + + /** + * @desc Dummy send template for ByteRange + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
Byte-Range: 1-25/25
+ */ + template (value) ByteRange m_msrpByteRange_Dummy := { + headerName := BYTE_RANGE_E, + startValue := 1, + endValue := { intValue := 25 }, + totalValue := { intValue := 25 } + } // End of template m_msrpByteRange_Dummy + + template Headers mw_Headers_any := { + toPath := ?, + fromPath := ?, + headers := * + } // End of template mw_Headers_any + + template Headers mw_Headers_toPath_FromPath( + in template ToPath p_toPath, + in template FromPath p_fromPath + ) modifies mw_Headers_any := { + toPath := p_toPath, + fromPath := p_fromPath + } // End of template mw_Headers_toPath_FromPath + + } // End of group msrpHeaders + + group msrpContent { + + /** + * @desc Dummy send template for ContentStuff + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+         * Content-Type: text/plain
+         * 
+         * 
+         * Hey Bob, are you there?
+         * 
+ */ + template (value) ContentStuff m_msrpContentStuff_Dummy := { + mimeHeaders := omit, + contentType := { + headerName := CONTENT_TYPE_E, + mediaType := { + mediaType := "text", + subType := "plain", + genParams := omit + } // End of 'mediaType' field + }, // End of 'contentType' field + data := char2oct("Hey Bob, are you there?") + } // End of template m_msrpByteRange_Dummy + + template MediaType mw_mediaType_any := { + mediaType := ?, + subType := ?, + genParams := * + } // End of template mw_mediaType_any + + template MsrpContentType mw_contentType_any := { + headerName := CONTENT_TYPE_E, + mediaType := mw_mediaType_any + } // End of template mw_contentType_any + + template ContentStuff mw_contentStuff_any := { + mimeHeaders := *, + contentType := mw_contentType_any, + data := ? + + } // End of template mw_contentStuff_any + + template MsrpContentType mw_contentType( + in charstring p_mediaType, + in charstring p_subType + ) modifies mw_contentType_any := { + headerName := CONTENT_TYPE_E, + mediaType := { + mediaType := p_mediaType, + subType := p_subType, + genParams := * + } // End of 'mediaType' field + } // End of template mw_contentType + + } // End of group msrpContent + + /** + * Provides types for MSRP request + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4976 - Relay Extensions for the Message Session Relay Protocol (MSRP) + */ + group msrpRequest { + + group msrpAUTH { + + } // End of group msrpSEND + + group msrpSEND { + + /** + * @desc Dummy send template for SEND request + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+             *     MSRP a786hjs2 SEND
+             *     To-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+             *     From-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp
+             *     Message-ID: 87652491
+             *     Byte-Range: 1-25/25
+             *     Content-Type: text/plain
+             *  
+             *     Hey Bob, are you there?
+             *     -------a786hjs2$
+             *  
+             *     MSRP a786hjs2 200 OK
+             *     To-Path: msrp://atlanta.example.com:7654/jshA7weztas;tcp
+             *     From-Path: msrp://biloxi.example.com:12763/kjhd37s2s20w2a;tcp
+             *     -------a786hjs2$
+             * 
+ */ + template (value) SEND_request m_msrpSend_Dummy := { + startLine := { + tagMsrp := e_MSRP, + transactionID := "a786hjs2", + method := SEND_E + }, // End of 'startLine' field + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + authenticationInfo := omit, + authorization := omit, + byteRange := m_msrpByteRange_Dummy, + expires := omit, + extHeaders := omit, + failureReport := omit, + maxExpires := omit, + messageID := m_msrpMessageID_Dummy, + minExpires := omit, + status := omit, + successReport := omit, + usePath := omit, + wwwAuthenticate := omit + } + }, // End of 'headers' field + contentStuff := m_msrpContentStuff_Dummy, + endLine := { + transactionID := "a786hjs2", + continuationFlag := e_endMessage + } + } // End of template m_msrpSend_Dummy + + /** + * @desc Dummy send template for SEND request + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + *
+             *      MSRP a786hjs2 REPORT
+             *      To-Path: msrp://alicepc.example.com:7777/iau39soe2843z;tcp
+             *      From-Path: msrp://bob.example.com:8888/9di4eae923wzd;tcp
+             *      Message-ID: 87652491
+             *      Byte-Range: 1-25/25
+             *      Status: 000 200 OK
+             *      ——-a786hjs2$
+             * 
+ */ + template (value) SEND_request m_msrpReport_Dummy + modifies m_msrpSend_Dummy := { + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + messageID := m_msrpMessageID_Dummy, + byteRange := m_msrpByteRange_Dummy + } + } // End of 'headers' field + } // End of template m_msrpSend_Dummy + + /** + * @desc Generic receive template for SEND request + */ + template SEND_request mw_msrpSEND_any := { + startLine := mw_RequestLine_SEND_any, + headers := mw_Headers_any, + contentStuff := mw_contentStuff_any, + endLine := mw_EndLine_noMore + } // End of template mw_msrpSEND_any + + template SEND_request mw_msrpSEND_toPath_fromPath_contentType( + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath, + in template (present) MsrpContentType p_contentType + ) modifies mw_msrpSEND_any := { + headers := mw_Headers_toPath_FromPath( + p_toPath, + p_fromPath), + contentStuff := { + contentType := p_contentType + } + } // End of template mw_msrpSEND_toPath_fromPath_contentType + + template SEND_request mw_msrpREPORT_success modifies mw_msrpSEND_any := { + startLine := mw_RequestLine_REPORT_any, + headers := { + headers := { + messageID := *, + successReport := *, + failureReport := *, + byteRange := *, + status := { + headerName := STATUS_E, + namespace := 0, + statusCode := c_OKCode, + comment := c_OKComment + }, // End of 'status' field + expires := *, + minExpires := *, + maxExpires := *, + usePath := *, + wwwAuthenticate := *, + authorization := *, + authenticationInfo := *, + extHeaders := * + } + } // End of 'headers' field + } // End of template mw_msrpREPORT_success + + } // End of group msrpSEND + + } // End of group msrpRequest + + group msrpResponse { + + /** + * @desc Dummy send template for RECEIVE response + * @ see RFC 4975 - Figure 2: Example MSRP Exchange + */ + template (value) RECEIVE_response m_msrpResponse_Dummy := { + startLine := { + tagMsrp := e_MSRP, + transactionID := "a786hjs2", + statusCode := c_OKCode, + comment := c_OKComment + }, // End of 'startLine' field + headers := { + toPath := m_msrpToPath_Dummy, + fromPath := m_msrpFromPath_Dummy, + headers := { + authenticationInfo := omit, + authorization := omit, + byteRange := omit, + expires := omit, + extHeaders := omit, + failureReport := omit, + maxExpires := omit, + messageID := m_msrpMessageID_Dummy, + minExpires := omit, + status := omit, + successReport := omit, + usePath := omit, + wwwAuthenticate := omit + } + }, // End of 'headers' field + endLine := { + transactionID := "a786hjs2", + continuationFlag := e_endMessage + } + } // End of template m_msrpResponse_Dummy + + template RECEIVE_response mw_msrpResponse_any := { + startLine := mw_ResponseLine_any, + headers := mw_Headers_any, + endLine := mw_EndLine_noMore + } // End of template mw_msrpResponse_any + + template RECEIVE_response mw_msrpResponse_success + modifies mw_msrpResponse_any := { + startLine := mw_ResponseLine_success + } // End of template mw_msrpResponse_success + + template RECEIVE_response mw_msrpResponse_toPath_fromPath( + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath + ) modifies mw_msrpResponse_success := { + headers := { + toPath := p_toPath, + fromPath := p_fromPath + } // End of 'headers' field + } // End of template mw_msrpResponse_toPath_fromPath + + template RECEIVE_response mw_msrpResponse_toPath_fromPath_with_transferReports( // TODO Check if it it really used + in template (present) ToPath p_toPath, + in template (present) FromPath p_fromPath + ) modifies mw_msrpResponse_toPath_fromPath := { + headers := { + headers := { + authenticationInfo := *, + authorization := *, + byteRange := *, + expires := *, + extHeaders := *, + maxExpires := *, + messageID := *, + minExpires := *, + status := *, + successReport := { + headerName := SUCCESS_REPORT_E, + reportStatus := e_YES + }, + failureReport := { + headerName := FAILURE_REPORT_E, + reportStatus := e_NO + }, + usePath := *, + wwwAuthenticate := * + } // End of 'header' field + } // End of 'headers' field + } // // End of template mw_msrpResponse_toPath_fromPath_with_transferReports + + } // End of group msrpResponse + +} // End of LibMsrp_Templates \ No newline at end of file diff --git a/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn b/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn new file mode 100644 index 0000000..790a413 --- /dev/null +++ b/ttcn/LibMsrp/LibMsrp_TypesAndValues.ttcn @@ -0,0 +1,626 @@ +/* + * @author STF 435 + * @version $Id:$ + * @desc This module provides the (message) types and constants used by the test component + * for MSRP tests. + */ +module LibMsrp_TypesAndValues { + + group msrpKeywords { + + /** + * @desc Enumerate MSRP keywords + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type enumerated MsrpKeywords { + e_MSRP, // pMSRP = %x4D.53.52.50 ; MSRP in caps + e_SCHEME, // msrp-scheme = "msrp" / ... + e_SCHEMES, //"msrps" + e_YES, // "yes" + e_NO, // "no" + e_PARTIAL, // "partial" + e_WILDCARD // "*" + } // End of type MsrpKeywords + + type enumerated MsrpMethod { + //RFC 4975 + SEND_E, // mSEND = %x53.45.4e.44 ; SEND in caps + REPORT_E, // mREPORT = %x52.45.50.4f.52.54; REPORT in caps + //RFC 4976 + AUTH_E, // mAUTH = %x41.55.54.48 ; AUTH in caps + UNKNOWN_METHOD_E + } + + type enumerated HeaderName { + //RFC 4975 + TO_PATH_E, // "To-Path" + FROM_PATH_E, // "From-Path" + MESSAGE_ID_E, // "Message-ID" + SUCCESS_REPORT_E, //"Success-Report" + FAILURE_REPORT_E, //"Failure-Report" + BYTE_RANGE_E, // "Byte-Range" + STATUS_E, // "Status" + //MIME headers + CONTENT_ID_E, // "Content-ID" + CONTENT_DESCRIPTION_E, // "Content-Description" + CONTENT_DISPOSITION_E, // "Content-Disposition" + MIME_EXT_FIELD_E, // RFC2045 Section 9. "Content-*" + CONTENT_TYPE_E, // "Content-Type" + //RFC 4976 + EXPIRES_E, //"Expires" + MIN_EXPIRES_E, // "Min-Expires" + MAX_EXPIRES_E, // "Max-Expires" + USE_PATH_E, // "Use-Path" + WWW_AUTHENTICATE_E, // "WWW-Authenticate" + AUTHORIZATION_E, // "Authorization" + AUTHENTICATION_INFO_E, // "Authentication-Info" + EXT_HEADER_E //any other header + } + + } // End of group tokens + + /** + * @desc Start and End line descriptions + */ + group delimiterLines { + + type enumerated ContinuationFlag { + e_endMessage, // "$" + e_continueMessage, // "+" + e_cancelMessage // "#" + } + + /** + * @desc Desciption of the start line + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpRequestLine { + MsrpKeywords tagMsrp (e_MSRP), // MSRP keyword + TransactionID transactionID, // The transaction identifier created by sender + MsrpMethod method // The method name + } // End of type RequestLine + + /** + * @desc Desciption of the Response line + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpResponseLine { + MsrpKeywords tagMsrp (e_MSRP), // MSRP keyword + TransactionID transactionID, // The transaction identifier created by sender + StatusCode statusCode, // The status code, e.g. 200 + charstring comment optional // E.g. OK + } // End of type ResponseLine + + /** + * @desc Desciption of the end line + * @see RFC 4975 - Clause 5.1. MSRP Framing and Message Chunking + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record EndLine { // "-------" transact-id continuation-flag CRLF + TransactionID transactionID, // The transaction identifier created by sender + ContinuationFlag continuationFlag // "+"/"$"/"#" + } // End of type RequestLine + + } // End of group delimiterLines + + group msrpHeaders { + + group RFC4975HeaderTypes { + /** + * @desc Used to correlate status reports with the original message + * @member headerName Message-ID identifier + * @member messageId Value of the Message-ID + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MessageID { + HeaderName headerName (MESSAGE_ID_E), + Ident messageId + } // End of type MessageID + + type record SuccessReport { + HeaderName headerName (SUCCESS_REPORT_E), + MsrpKeywords reportStatus + } + + type record FailureReport { + HeaderName headerName (FAILURE_REPORT_E), + MsrpKeywords reportStatus + } + + /** + * @desc TODO + * @member byteRangeID Report status identifier + * @member startValue TODO + * @member endValue TODO + * @member totalValue TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ByteRange { + HeaderName headerName (BYTE_RANGE_E), + integer startValue, // [1..infinity) + ByteRangeValue endValue, // [0..infinity) TODO can take also wilcard value: "*" + ByteRangeValue totalValue // [0..infinity) TODO can take also wilcard value: "*" + } // End of type ByteRange + + type union ByteRangeValue { + integer intValue, // [0..infinity) + MsrpKeywords wildcard // "*" + } + + /** + * @desc TODO + * @member statusID TODO + * @member namespace TODO + * @member statusCode TODO + * @member comment TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpStatus { + HeaderName headerName (STATUS_E), + Namespace namespace, + StatusCode statusCode, + charstring comment optional + } // End of type Status + } + + group RFC4976HeaderTypes { + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpExpires { + HeaderName headerName (STATUS_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpMinExpires { + HeaderName headerName (MIN_EXPIRES_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MaxExpires { + HeaderName headerName (MAX_EXPIRES_E), + integer intValue + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record UsePath { + HeaderName headerName (USE_PATH_E), + MsrpURIs msrpURIs + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpWWWAuthenticate { + HeaderName headerName (WWW_AUTHENTICATE_E), + Digest digest + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record Digest { + charstring realm optional, // quoted-string + charstring nonce optional, // quoted-string + charstring opaque optional, // quoted-string + charstring stale optional, // "true" / "false" (no quates) + charstring algorithm optional, // "MD5" / token (no quates) + Qop_ValueList qopOptions optional, // quoted-string + AuthParamList authParams optional + } + + type charstring Qop_Value; // "auth" / token + + type set of Qop_Value Qop_ValueList; + + type record AuthParam { + charstring pvalue, // token + charstring pname // token / quoted-string + } + + type set of AuthParam AuthParamList; + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpAuthorization { + HeaderName headerName (AUTHORIZATION_E), + DigestResponse digestResponse + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record DigestResponse { + charstring username optional, // quoted-string + charstring realm optional, // quoted-string + charstring nonce optional, // quoted-string + charstring response optional, // DQUOTE 32LHEX DQUOTE; LHEX = DIGIT / %x61-66 ;lowercase a-f + charstring algorithm optional, // "MD5" / token + charstring cnonce optional, // quoted-string + charstring opaque optional, // quoted-string + Qop_Value message_qop optional, // no quates + charstring nonce_count optional, // no quates + AuthParamList authParams optional + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type record MsrpAuthenticationInfo { + HeaderName headerName (AUTHENTICATION_INFO_E), + AInfo ainfo + } + + /** + * @see RFC 4976 - Clause 7. Formal Syntax + */ + type set AInfo { // order is not important + charstring nextnonce optional, + Qop_Value message_qop optional, // no quates + charstring response_auth optional, + charstring cnonce optional, + charstring nonce_count optional // no quates + } + } + + /** + * @desc TODO + * @member hname TODO + * @member hval TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ExtHeader { + charstring hname, + charstring hval + } // End of type ExtHeader + + /** + * @desc Description of Header structure + * @member messageID + * @member reportStatus + * @member byteRange + * @member status + * @member extheader + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record HeaderList { + //RFC 4975 + MessageID messageID optional, + SuccessReport successReport optional, + FailureReport failureReport optional, + ByteRange byteRange optional, + MsrpStatus status optional, + //RFC 4976 + MsrpExpires expires optional, + MsrpMinExpires minExpires optional, + MaxExpires maxExpires optional, + UsePath usePath optional, + MsrpWWWAuthenticate wwwAuthenticate optional, + MsrpAuthorization authorization optional, + MsrpAuthenticationInfo authenticationInfo optional, + ExtHeaderList extHeaders optional + } // End of type Header + + type set of ExtHeader ExtHeaderList; + + type record Headers { + ToPath toPath, + FromPath fromPath, + HeaderList headers optional // for AUTH, a request with only To-Path and From-Path is valid + } // End of type Headers + + + + + /** + * @desc Description of a transaction ID structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring TransactionID; + + /** + * @desc Description of an identifier structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring Ident length (3..31); + + /** + * @desc Description of a Token structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring Token; //token is compared case-insensitive + + /** + * @desc Description of a Namespace structure + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type integer Namespace;// length (3); + + /** + * @desc Description of a Status structure, e.g. 200 + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type integer StatusCode; // FIXME Use range instead? length (3); + + + + } // End of group msrpHeaders + + /** + * @see RFC 4975 - Clause 5.2. MSRP Addressing + */ + group msrpAddressing { + + /** + * @desc Description of URI-parameter item + * @member paramID Identifier of the parameter + * @member paramValue Value of the parameter + */ + type record MsrpGenericParam { // URI-parameter = token ["=" token] + Token paramID, + Token paramValue optional + } // End of type GenericParam + + /** + * @desc Description of URI-parameter list, separated by a semicolon + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type set of MsrpGenericParam URIParams; + + /** + * @desc Authorized MSRP scheme + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type union MsrpSchemes { + MsrpKeywords scheme (e_SCHEME), + MsrpKeywords secureScheme (e_SCHEMES) + } // End of type MsrpSchemes + + /** + * @desc identifies a participant in a particular MSRP session + * @see RFC 4975 - Clause 6. MSRP URIs + * @see RFC 4975 - Clause 9. Formal Syntax + * @see RFC 3986 - Clause 3.2. Authority + */ + type record Authority { // authority = [ userinfo "@" ] host [ ":" port ] + charstring userinfo optional, + charstring host, // if host is IPv6 the "[" and "]" should be removed when decoding and added when encoding + integer portNumber optional + } + + /** + * @desc Identifies a particular session of the participant + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type charstring SessionID; + + /** + * @desc Desciption of a MSRP-URI + * @member toPath The path of URIs to the destination + * @member fromPath The path of URIs of the sender + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpURI { // scheme://domain:port/path?query_string#fragment_id + MsrpSchemes scheme, + Authority authority, + SessionID sessionID optional, + charstring transport, // transport = "tcp" / 1*ALPHANUM + URIParams uriParams optional // List of URI-parameter + } // End of type Values + + type set of MsrpURI MsrpURIs;// length (1..infinity); + + /** + * @desc The path of URIs to the destination + * @member pathID The To-Path identifier + * @member msrpURIs The URIs to the destination + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ToPath { + HeaderName headerName (TO_PATH_E), + MsrpURIs msrpURIs + } // End of type Path + + /** + * @desc The path of URIs of the sender + * @member pathID The To-Path identifier + * @member msrpURIs The URIs of the sender + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record FromPath { + HeaderName headerName (FROM_PATH_E), + MsrpURIs msrpURIs + } // End of type Path + + } // End of group msrpAddressing + + group msrpContent { + + group msrpMimeTypes { // TODO To be refined + + /** + * @see RFC 2045 - Clause 7. Content-ID Header Field + */ + type record ContentID { + HeaderName headerName (CONTENT_ID_E), + charstring msgId + } + + /** + * @see RFC 2045 - Clause 8. Content-Description Header Field + */ + type record ContentDescription { + HeaderName headerName (CONTENT_DESCRIPTION_E), + charstring text + } + + /** + * @see RFC 2183 - Clause 2. The Content-Disposition Header Field + */ + type record MsrpContentDisposition { + HeaderName headerName (CONTENT_DISPOSITION_E), + charstring dispositionType, + GenParams dispositionParams optional + } + + /** + * @see RFC 2045 - Clause 9. Additional MIME Header Fields + */ + type record MimeExtensionField { + HeaderName headerName (MIME_EXT_FIELD_E), + charstring hname, + charstring hval + } + + type set of MimeExtensionField MimeExtensionFieldList; + + } // End of group msrpMimeTypes + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MimeHeaders { + ContentID contentID optional, + ContentDescription contentDescription optional, + MsrpContentDisposition contentDisposition optional, + MimeExtensionFieldList mimeExtensionFields optional + } + + /** + * @desc TODO + * @member pname TODO + * @member pval TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record GenParam { + Token pname, + charstring pval optional // TODO To be refined + } // End of type GenParam + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type set of GenParam GenParams; + + /** + * @desc TODO + * @member mediaType TODO + * @member subType TODO + * @member genParams TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MediaType { + Token mediaType, + Token subType, + GenParams genParams optional + } // End of type MediaType + + /** + * @desc TODO + * @member contentTypeID + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record MsrpContentType { + HeaderName headerName (CONTENT_TYPE_E), + MediaType mediaType + } // End of type ContentType + + /** + * @desc TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type octetstring Data; + + /** + * @desc TODO + * @member TODO + * @see RFC 4975 - Clause 9. Formal Syntax + */ + type record ContentStuff { + MimeHeaders mimeHeaders optional, + MsrpContentType contentType, + Data data + + } // End of type ContentStuff + + } // End of group msrpContent + + group msrpAuth { + + } // End of group msrpAuth + + /** + * Provides types for MSRP request + * @see RFC 4975 - Clause 7.1. Constructing Requests + * @see RFC 4976 - Relay Extensions for the Message Session Relay Protocol (MSRP) + */ + group msrpRequests { + + /** + * @desc TODO + * @see RFC 4975 - Clause 7.1.1. Sending SEND Requests + */ + type record SEND_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, + EndLine endLine + } // End of type SEND_request + + /** + * @desc TODO + * @see RFC 4975 - Clause 7.1.2. Sending REPORT Requests + */ + type record REPORT_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, + EndLine endLine + } // End of type REPORT_request + + /** + * @desc TODO + * @see RFC 4976 - Clause 5.1. Connecting to Relays Acting on Your Behalf + */ + type record AUTH_request { + MsrpRequestLine startLine, + Headers headers, + ContentStuff contentStuff optional, // TODO not sure is body is allowed or not + EndLine endLine + } // End of type AUTH_request + + + } // End of group msrpRequests + + group msrpResponses { + + /** + * @desc + * @see RFC 4975 - Clause 7.1.2. Sending REPORT Requests + */ + type record RECEIVE_response { + MsrpResponseLine startLine, + Headers headers, + EndLine endLine + } // End of type RECEIVE_response + + } // End of group msrpResponses + +} // End of LibMsrp_TypesAndValues +with { + encode "MSRPCodec" +} \ No newline at end of file diff --git a/ttcn/LibUpperTester/LibUpperTester.ttcn b/ttcn/LibUpperTester/LibUpperTester.ttcn new file mode 100644 index 0000000..0c01624 --- /dev/null +++ b/ttcn/LibUpperTester/LibUpperTester.ttcn @@ -0,0 +1,60 @@ +/* + * @author STF 370 + * @version $Id$ + * @desc xxx + */ +module LibUpperTester { + import from LibCommon_VerdictControl {type FncRetCode;} + import from LibIot_TypesAndValues {type Status;} + + // TODO - move to common lib + /*type record Status { + FncRetCode code, charstring reason optional + }*/ +// TODO commented out due to problems with tools not accepting 'extends' from several components + /** + * @desc + * This component type is used to trigger, stimualte, configure etc any + * equipment related to the test, i.e., EUTs or other, or the + * interconnecting network. To be used as PTC. + */ +// type component EquipmentUser { +// port EquipmentAccessPort eaPort; +// timer T_Equipment; +// } + + group equipmentOperationTypes { + + type record of charstring ParameterList; + + type charstring EquipmentCommand; + + type record EquipmentOperationReq { + EquipmentCommand cmd, ParameterList params optional + } + + type record EquipmentOperationRsp { + Status status + } + } + with{ + encode "LibUpperTesterCodec" + } + + group equipmentOperationTemplates { + + template EquipmentOperationReq m_EQ_Request(in EquipmentCommand p_cmd, ParameterList p_params) := { + cmd := p_cmd, + params := p_params + } + + template EquipmentOperationRsp mw_EO_Response(in template FncRetCode p_code) := { + status := { + code := p_code, + reason := * + } + } + } + + +} \ No newline at end of file diff --git a/ttcn/README.md b/ttcn/README.md new file mode 100644 index 0000000..136d063 --- /dev/null +++ b/ttcn/README.md @@ -0,0 +1 @@ + \ No newline at end of file -- GitLab From 2fc98bdb8736ea221cb18f06deb0c9d5ac4a5ce1 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Tue, 30 May 2023 14:31:05 +0200 Subject: [PATCH 16/16] Create TTF T010 TTCN-3 skeletons --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 230 ++ ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 3405 ++++++++++++----------- 2 files changed, 1935 insertions(+), 1700 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn new file mode 100644 index 0000000..ab2dbcb --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -0,0 +1,230 @@ +/** + * @author TTF 010 + * @version $Id: $ + * @desc This module provides ATS specific test case definitions for IMS Emergency calls. + * @see ETSI TS 103 795-2 + */ +module AtsImsIot_Emergency { + + // LibCommon + // LibSip + // LibIms + import from LibIms_UpperTester { type ImsUserInfo }; + // LibIot + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_VxLTE_Functions all; + // LibImsIot + import from AtsImsIot_Functions { function f_getImUser }; + // ImsIot + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_TP_behavior_GM all; + import from AtsImsIot_TP_behavior_MW_PS all; + import from AtsImsIot_TP_behavior_MW_SI all; + import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_IC all; + import from AtsImsIot_TP_behavior_CX all; + import from AtsImsIot_TP_behavior_GX all; + import from AtsImsIot_TP_behavior_ISC all; + import from AtsImsIot_TP_behavior_S6A all; + import from AtsImsIot_TP_behavior_S9 all; + import from AtsImsIot_TP_behavior_SH all; + import from AtsImsIot_TP_behavior_RX all; + + + /** + * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) + */ + group Interoperability { + + /** + * @see ETSI TS 103 795-2 Clause 5.1 Network Attachment + */ + group NetworkAttachment { + + group UENetworkAttachmentWithUSIM { + + } // End of group UENetworkAttachmentWithUSIM + + group UENetworkAttachmentWithoutUSIM { + + } // End of group UENetworkAttachmentWithoutUSIM + + } // End of group NetworkAttachment + + /** + * @see ETSI TS 103 795-2 Clause 5.2 IMS Emergency Registration + */ + group EmergencyRegistration { + + /** + * @desc To perform emergency registration via the established emergency bearer. Note that some UEs perform emergency registration automatically on attachment - in which case this test becomes merged with the previous ones. + * @see ETSI TS 103 795-2 Clause 5.2.1 IMS Emergency Registration - Successful + */ + testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + + f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 + + f_mtc_check_TP_GM_PCSCF_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + + f_mtc_check_TP_CX_HSS_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 + f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoLTE_ECO_INT_REG_01 + + /** + * @desc To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration. + * @see ETSI TS 103 795-2 Clause 5.2.2 IMS Emergency Registration - Unsuccessful + */ + testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_SIP_MW_IS_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + + f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 + + f_mtc_check_TP_GM_PCSCF_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_REGISTER_04(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of testcase TD_VoLTE_ECO_INT_REG_02 + + } // End of group EmergencyRegistration + + /** + * @see ETSI TS 103 795-2 Clause 5.3 Emergency Session and Emergency Bearer Operations + */ + group EmergencySessionEmergencyBearerOperations { + + } // End of group EmergencySessionEmergencyBearerOperations + + /** + * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration + */ + group EmergencyNetworkDetachment { + + group EmergencySessionEstablishment { + + } // End of group EmergencySessionEstablishment + + group EmergencySessionRelease { + + } // End of group EmergencySessionRelease + + group EmergencySessionAbortOrReject { + + } // End of group EmergencySessionAbortOrReject + + } // End of group EmergencyNetworkDetachment + + } // End of group Interoperability + + /** + * @see ETSI TS 103 795-2 Clause 6 Test Descriptions (Roaming) + */ + group Roaming { + + /** + * @see ETSI TS 103 795-2 6.1 Network Attachment + */ + group NetworkAttachment { + + } // End of group NetworkAttachment + + /** + * @see ETSI TS 103 795-2 Clause 6.2 IMS Emergency Registration in a visited network + */ + group IMSEmergencyRegistration { + + } // End of group IMSEmergencyRegistration + + } // End of group Roaming + +} // End of module AtsImsIot_Emergency + diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 94df95f..eb1a9bc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -1,107 +1,107 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id: $ - * @desc This module provides the templates for Interoperability tests. + * @desc This module provides the templates for Interoperability tests. */ module AtsImsIot_Templates { - import from LibCommon_BasicTypesAndValues {type UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_TypesAndValues { - type - InterfaceInfoList, - ProtocolFilter, - GeneralConfigurationReq, - GeneralConfigurationRsp, - SetFilterReq, - SetFilterRsp, - StartTrafficCaptureReq, - StartTrafficCaptureRsp, - StopTrafficCaptureReq, - StopTrafficCaptureRsp, - IpAddress, - Status; - } + import from LibCommon_BasicTypesAndValues {type UInt16;} + import from LibCommon_VerdictControl {type FncRetCode;} + import from LibIot_TypesAndValues { + type + InterfaceInfoList, + ProtocolFilter, + GeneralConfigurationReq, + GeneralConfigurationRsp, + SetFilterReq, + SetFilterRsp, + StartTrafficCaptureReq, + StartTrafficCaptureRsp, + StopTrafficCaptureReq, + StopTrafficCaptureRsp, + IpAddress, + Status; + } import from AtsImsIot_TypesAndValues { type SipMessage, NAPTRmessage }; - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common { + type + GenericParam, + SemicolonParam_List + } import from LibMsrp_TypesAndValues { type SEND_request, RECEIVE_response }; - import from LibIot_PIXITS { - modulepar - PX_IOT_TIMESTAMP_OFFSET, - PX_IOT_PCAP_SESSIONS_PATH, - PX_IOT_RECORD_MODE, - PX_IOT_EUTs_IFACE_INFO_LIST, - PX_IOT_FILE_MERGE_LIST, - PX_IOT_FILE_MERGE_PATH, - PX_IOT_MERGE_TOOL_PATH, - PX_IOT_IFACES; - } - import from AtsImsIot_PIXITS { - modulepar - PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN - }; - - group adapterMsgTemplates { - template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { - protocol := p_protocol, - interfaceInfos := p_iterfaces - } - - template SetFilterRsp mw_SetFilterRsp(in template (present) Status p_status) := { - status := p_status - } - } - - group sipTemplates { - - /** - * @desc SIP request template - * @param p_request SIP request - */ - template SipMessage mw_SipRequest(in template (present) Request p_request) := { - request := p_request - } - - /** - * @desc SIP response template - * @param p_response SIP response - */ - template SipMessage mw_SipResponse(in template (present) Response p_response) := { - response := p_response - } - }//end group - - group msrpMessages { - - /** - * @desc MSRP request template - * @param p_msrpRequest MSRP request - */ - template SipMessage mw_MsrpRequest(in template (present) SEND_request p_msrpRequest) := { + import from LibIot_PIXITS { + modulepar + PX_IOT_TIMESTAMP_OFFSET, + PX_IOT_PCAP_SESSIONS_PATH, + PX_IOT_RECORD_MODE, + PX_IOT_EUTs_IFACE_INFO_LIST, + PX_IOT_FILE_MERGE_LIST, + PX_IOT_FILE_MERGE_PATH, + PX_IOT_MERGE_TOOL_PATH, + PX_IOT_IFACES; + } + import from AtsImsIot_PIXITS { + modulepar + PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN + }; + + group adapterMsgTemplates { + template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { + protocol := p_protocol, + interfaceInfos := p_iterfaces + } + + template SetFilterRsp mw_SetFilterRsp(in template (present) Status p_status) := { + status := p_status + } + } + + group sipTemplates { + + /** + * @desc SIP request template + * @param p_request SIP request + */ + template SipMessage mw_SipRequest(in template (present) Request p_request) := { + request := p_request + } + + /** + * @desc SIP response template + * @param p_response SIP response + */ + template SipMessage mw_SipResponse(in template (present) Response p_response) := { + response := p_response + } + }// End of group + + group msrpMessages { + + /** + * @desc MSRP request template + * @param p_msrpRequest MSRP request + */ + template SipMessage mw_MsrpRequest(in template (present) SEND_request p_msrpRequest) := { msrpRequest := p_msrpRequest - } + } - /** - * @desc MSRP response template - * @param p_msrpResponse MSRP response - */ - template SipMessage mw_MsrpResponse(in template (present) RECEIVE_response p_msrpResponse) := { + /** + * @desc MSRP response template + * @param p_msrpResponse MSRP response + */ + template SipMessage mw_MsrpResponse(in template (present) RECEIVE_response p_msrpResponse) := { msrpResponse := p_msrpResponse - } + } template REFER_Request mdw_TP_MSRP_9000_07( in template CallId p_callId, @@ -117,160 +117,160 @@ module AtsImsIot_Templates { } } - } // End of group msrpMessages + } // End of group msrpMessages group naptrTemplates { - template NAPTRmessage mw_EnumQuery_Base := { - enumMessage := { - query := { - header := ?, - enumQuestion_list := ? length (1 .. infinity), - enumResponse_list := *, - authority_list := *, - additional_list := * + template NAPTRmessage mw_EnumQuery_Base := { + enumMessage := { + query := { + header := ?, + enumQuestion_list := ? length (1 .. infinity), + enumResponse_list := *, + authority_list := *, + additional_list := * } } } - template NAPTRmessage mw_EnumResponse_Base := { - enumMessage := { - response := { + template NAPTRmessage mw_EnumResponse_Base := { + enumMessage := { + response := { header:=?, - enumQuestion_list := ?, - enumAnswer_list := - { - { - e164TelNumber := ?, - naptrType := 35, - class_ := ?, - ttl := ?, - rd_length := ?, - naptrRR := ? - },//TODO:this might not be the first item - * - }, - authority_list := ?, - additional_list := ? + enumQuestion_list := ?, + enumAnswer_list := + { + { + e164TelNumber := ?, + naptrType := 35, + class_ := ?, + ttl := ?, + rd_length := ?, + naptrRR := ? + },//TODO:this might not be the first item + * + }, + authority_list := ?, + additional_list := ? } } } } - group rcseTemplates { - template OPTIONS_Request mw_OPTIONS_Request ( charstring p_rcseTags ) := { - requestLine := { method := OPTIONS_E, requestUri := ?, sipVersion := c_sipNameVersion }, - msgHeader := mw_msgHeader_Options ( p_rcseTags ), - messageBody := *, - payload := * - } + group rcseTemplates { + template OPTIONS_Request mw_OPTIONS_Request ( charstring p_rcseTags ) := { + requestLine := { method := OPTIONS_E, requestUri := ?, sipVersion := c_sipNameVersion }, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } - template Response mw_Response ( template StatusLine p_statusLine, charstring p_rcseTags ) := { - statusLine := p_statusLine, - msgHeader := mw_msgHeader_Options ( p_rcseTags ), - messageBody := *, - payload := * - } + template Response mw_Response ( template StatusLine p_statusLine, charstring p_rcseTags ) := { + statusLine := p_statusLine, + msgHeader := mw_msgHeader_Options ( p_rcseTags ), + messageBody := *, + payload := * + } - template MessageHeader mw_msgHeader_Options ( charstring p_rcseTags ) modifies mw_msgHeader_dummy := { - acceptContact := { - fieldName := ACCEPT_CONTACT_E, - acValues := superset ( mw_Rcse_Tags ( p_rcseTags ) ) + template MessageHeader mw_msgHeader_Options ( charstring p_rcseTags ) modifies mw_msgHeader_dummy := { + acceptContact := { + fieldName := ACCEPT_CONTACT_E, + acValues := superset ( mw_Rcse_Tags ( p_rcseTags ) ) } } - template AcRcValue mw_Rcse_Tags ( charstring p_rcseTags ) := { - wildcard := c_WILDCARD, - acRcParams := superset ( mw_User_Caps ( p_rcseTags )) + template AcRcValue mw_Rcse_Tags ( charstring p_rcseTags ) := { + wildcard := c_WILDCARD, + acRcParams := superset ( mw_User_Caps ( p_rcseTags )) } - template GenericParam mw_User_Caps ( charstring p_rcseTags ) := { - id := ?, - paramValue := { quotedString := p_rcseTags } - } - } - - group modifiedSIPBaseTemplates { - - /** - * - * @desc Message Request containing a message body greater than 1500 bytes. - */ - template MESSAGE_Request mdw_MESSAGE_1500c(template CallId p_callId := ?) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - contact := * - }, - messageBody := { - textplain := pattern "?#(1500,)" - } - } - - /** - * - * @desc REGISTER Request containing secuity client header. - */ - template REGISTER_Request mdw_TP_IMS_5011_01_gm modifies mw_REGISTER_Request_Base := { - msgHeader := { - securityClient := ? - } + template GenericParam mw_User_Caps ( charstring p_rcseTags ) := { + id := ?, + paramValue := { quotedString := p_rcseTags } + } } - /** - * - * @desc REGISTER Request containing secuity client header. - */ - template REGISTER_Request mdw_TP_IMS_5011_02_gm modifies mw_REGISTER_Request_Base := { - msgHeader := { - securityClient := ? - } - } + group modifiedSIPBaseTemplates { + + /** + * + * @desc Message Request containing a message body greater than 1500 bytes. + */ + template MESSAGE_Request mdw_MESSAGE_1500c(template CallId p_callId := ?) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + contact := * + }, + messageBody := { + textplain := pattern "?#(1500,)" + } + } + + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } - /** - * - * @desc REGISTER Request checking TP_IMS_5011_01. - */ - template REGISTER_Request mdw_TP_IMS_5011_01p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { - msgHeader := { - path := mw_PathDef (p_EUTHostname), - require := mw_Require ({"path", *}), - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "icid-value", paramValue := ?}, - {id := "orig-ioi", paramValue := ?}, - * - } - }, - authorization := mw_Authorization(mw_credentialIntegrityNo), - securityClient := omit, - securityVerify :=omit, - pVisitedNetworkID := mw_PVisitedNetworkIDAny - } - } + /** + * + * @desc REGISTER Request containing secuity client header. + */ + template REGISTER_Request mdw_TP_IMS_5011_02_gm modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityClient := ? + } + } - /** - * - * @desc REGISTER Request checking TP_IMS_5011_01. - */ - template REGISTER_Request mdw_TP_IMS_5011_01f_ic modifies mw_REGISTER_Request_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "term-ioi", paramValue := ?}, - * - } - } - } - } + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01p_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname), + require := mw_Require ({"path", *}), + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "icid-value", paramValue := ?}, + {id := "orig-ioi", paramValue := ?}, + * + } + }, + authorization := mw_Authorization(mw_credentialIntegrityNo), + securityClient := omit, + securityVerify :=omit, + pVisitedNetworkID := mw_PVisitedNetworkIDAny + } + } - /** - * - * @desc REGISTER Request checking TP_IMS_5134_01. - */ - template REGISTER_Request mdw_TP_IMS_5134_01_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { - msgHeader := { - path := mw_PathDef (p_EUTHostname) - } - } + /** + * + * @desc REGISTER Request checking TP_IMS_5011_01. + */ + template REGISTER_Request mdw_TP_IMS_5011_01f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc REGISTER Request checking TP_IMS_5134_01. + */ + template REGISTER_Request mdw_TP_IMS_5134_01_ic ( charstring p_EUTHostname ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + path := mw_PathDef (p_EUTHostname) + } + } /** * @@ -292,18 +292,18 @@ module AtsImsIot_Templates { } } - /** - * - * @desc REGISTER Request checking TP_IMS_5011_02. - */ - template REGISTER_Request mdw_TP_IMS_5011_02f_ic modifies mw_REGISTER_Request_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "term-ioi", paramValue := ?}, - * - }) - } - } + /** + * + * @desc REGISTER Request checking TP_IMS_5011_02. + */ + template REGISTER_Request mdw_TP_IMS_5011_02f_ic modifies mw_REGISTER_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "term-ioi", paramValue := ?}, + * + }) + } + } /** * @@ -348,15 +348,15 @@ module AtsImsIot_Templates { } } - /** - * - * @desc REGISTER Request checking TP_IMS_5089_01. - */ - template REGISTER_Request mdw_TP_IMS_5089_01_ic_when modifies mw_REGISTER_Request_Base := { - msgHeader := { - authorization := mw_Authorization(mw_credentialIntegrityNo) - } - } + /** + * + * @desc REGISTER Request checking TP_IMS_5089_01. + */ + template REGISTER_Request mdw_TP_IMS_5089_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } /** * @@ -368,39 +368,39 @@ module AtsImsIot_Templates { } } - /** - * - * @desc REGISTER Request checking TP_IMS_5092_01. - */ - template REGISTER_Request mdw_TP_IMS_5092_01_ic_when modifies mw_REGISTER_Request_Base := { - msgHeader := { - authorization := mw_Authorization(mw_credentialIntegrityNo) - } - } + /** + * + * @desc REGISTER Request checking TP_IMS_5092_01. + */ + template REGISTER_Request mdw_TP_IMS_5092_01_ic_when modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := mw_Authorization(mw_credentialIntegrityNo) + } + } /** * * @desc 200 OK message for TP_IMS_5092_01 */ template Response mdw_TP_IMS_5092_01_ic (charstring p_EUTHostname, template SipUrl p_eutBUri) modifies mw_200OK_Base := { - msgHeader := { - path := mw_PathDef (p_EUTHostname), - pAssociatedURI := { - fieldName := P_ASSOCIATED_URI_E, - nameAddrList := ? - }, - pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? - {id := "term-ioi", paramValue := ?}, - * - }), - serviceRoute := mw_ServiceRoute (p_eutBUri), - contact := { - fieldName := CONTACT_E, - contactBody := { - contactAddresses := ? - } - } - } + msgHeader := { + path := mw_PathDef (p_EUTHostname), + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := ? + }, + pChargingVector := mw_PChargingVector({ // @TODO indicating operator_identifier of IMS_? (IUT_?)? + {id := "term-ioi", paramValue := ?}, + * + }), + serviceRoute := mw_ServiceRoute (p_eutBUri), + contact := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := ? + } + } + } } /** * @@ -428,8 +428,8 @@ module AtsImsIot_Templates { * @desc SUBSCRIBE checking TP_IMS_5044_01. */ template SUBSCRIBE_Request mdw_TP_IMS_5044_01_ic( - template SipUrl p_subscribe_uri, - template SipUrl p_eutAUri, + template SipUrl p_subscribe_uri, + template SipUrl p_eutAUri, template charstring p_EUTB_PublicId ) modifies mw_SUBSCRIBE_Request_Base := { @@ -460,9 +460,9 @@ module AtsImsIot_Templates { sipVersion := c_sipNameVersion }, msgHeader := { - via := mw_Via (?), // TODO - recordRoute := mw_recordroute(?), // @TODO - route := mw_route(?), // TODO + via := mw_Via (?), // TODO + recordRoute := mw_recordroute(?), // @TODO + route := mw_route(?), // TODO pChargingVector := omit } } @@ -474,20 +474,20 @@ module AtsImsIot_Templates { template INVITE_Request mdw_TP_IMS_5046_01_ic (template SipUrl p_pcscfEutAUri, template SipUrl p_userEutBUrl) modifies mw_INVITE_Request_Base := { msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template - }, - via := { - fieldName := VIA_E, - viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template - }, - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_pcscfEutAUri), *} - }, - pPreferredID := omit, - pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), + route := { + fieldName := ROUTE_E, + routeBody := ? // complement (mw_routeBody(p_pcscfEutAUri)) // to be checked outside template + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutBUrl)), pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * @@ -495,109 +495,109 @@ module AtsImsIot_Templates { } } - /** - * - * @desc INVITE Request checking TP_IMS_5048_01 - */ - template INVITE_Request mdw_TP_IMS_5048_01_ic (template SipUrl p_pcscfEutAUri) - modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_pcscfEutAUri)), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template - } - } - } - - /** - * - * @desc BYE Request checking TP_IMS_5052_01 on MW - */ - template BYE_Request mdw_TP_IMS_5052_01_p_ic(template CallId p_callId, template RecordRoute p_route) - modifies mw_BYE_Request_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ + /** + * + * @desc INVITE Request checking TP_IMS_5048_01 + */ + template INVITE_Request mdw_TP_IMS_5048_01_ic (template SipUrl p_pcscfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_pcscfEutAUri)), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := ? // superset(mw_ViaBody_interface(p_pcscfEutAUri.hostPort)) // to be checked outside template + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5052_01 on MW + */ + template BYE_Request mdw_TP_IMS_5052_01_p_ic(template CallId p_callId, template RecordRoute p_route) + modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }), - route := { - fieldName := ROUTE_E, - routeBody := ? - }, - recordRoute := p_route - } - } + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := p_route + } + } - template BYE_Request mdw_TP_IMS_5052_01_f_ic( - template CallId p_callId, - template SipUrl p_pcscfEutAUri) - modifies mw_BYE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - *, - mw_routeBody(p_pcscfEutAUri), - * - } - } - } - } + template BYE_Request mdw_TP_IMS_5052_01_f_ic( + template CallId p_callId, + template SipUrl p_pcscfEutAUri) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + mw_routeBody(p_pcscfEutAUri), + * + } + } + } + } - /** - * - * @desc 180 Ringing Response checking TP_IMS_5055_01 on MW - */ - template Response mdw_TP_IMS_5055_01_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) - modifies mw_180Ringing_Base := { - msgHeader := { - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_pcscfEutAUri), *} - }, - pPreferredID := omit, - pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5055_02 on MW - */ - template Response mdw_TP_IMS_5055_02_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) - modifies mw_200OK_Base := { - msgHeader := { - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_pcscfEutAUri), *} - }, - pPreferredID := omit, - pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request - } - } + /** + * + * @desc 180 Ringing Response checking TP_IMS_5055_01 on MW + */ + template Response mdw_TP_IMS_5055_01_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_180Ringing_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5055_02 on MW + */ + template Response mdw_TP_IMS_5055_02_ic(template SipUrl p_pcscfEutAUri, template SipUrl p_userEutAUri) + modifies mw_200OK_Base := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_pcscfEutAUri), *} + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_userEutAUri))//TODO containing public identitiy sent in P-Called_Party-ID header in the initial request + } + } - /** - * - * @desc INVITE Request checking TP_IMS_5067_01 on MW - */ - template INVITE_Request mdw_TP_IMS_5067_01_ic - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "access-network-charging-info", paramValue := ?}, - * - }) - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5067_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5067_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } /** * @@ -606,16 +606,16 @@ module AtsImsIot_Templates { template CANCEL_Request mdw_TP_IMS_5072_02_gm (template CallId p_callId) modifies mw_CANCEL_Request_Base := { msgHeader := { - reason := { - fieldName := REASON_E, - reasonValues := { - { - token := "503 Service Unavailable", - reasonParams := * - }, - * - } - } + reason := { + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } } } @@ -628,27 +628,27 @@ module AtsImsIot_Templates { msgHeader := { reason := { fieldName := REASON_E, - reasonValues := {{ - token := "503", - reasonParams := * - }} + reasonValues := {{ + token := "503", + reasonParams := * + }} } } } - /** - * - * @desc INVITE Request checking TP_IMS_5080_01 on MW - */ - template INVITE_Request mdw_TP_IMS_5080_01_ic - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated - * - }) - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5080_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5080_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, //note access-network-charging-info should be updated + * + }) + } + } /** * @@ -664,28 +664,28 @@ module AtsImsIot_Templates { } } - /** - * - * @desc 200 OK Response checking TP_IMS_5082_01 on MW - */ - template Response mdw_TP_IMS_5082_01_ic - modifies mw_200OK_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "access-network-charging-info", paramValue := ?}, - * - }) - } - } + /** + * + * @desc 200 OK Response checking TP_IMS_5082_01 on MW + */ + template Response mdw_TP_IMS_5082_01_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } /** * * @desc SUBSCRIBE checking TP_IMS_5096_01. */ template SUBSCRIBE_Request mdw_TP_IMS_5096_01_ic_when modifies mw_SUBSCRIBE_Request_Base := { - msgHeader := { - event := m_Event_reg - } + msgHeader := { + event := m_Event_reg + } } /** @@ -694,326 +694,326 @@ module AtsImsIot_Templates { template INVITE_Request mdw_TP_IMS_5097_01_ic (template SipUrl p_SCSCF_SIP_URI) modifies mw_INVITE_Request_Base := { msgHeader := { - route := ({ - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_SCSCF_SIP_URI)), - * - } - }, omit), - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} - }, - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - *, - {id := "icid-value", paramValue := ?}, - *, - {id := "orig-ioi", paramValue := ?}, - *, - complement({id := "term-ioi", paramValue := ?}), - *, - complement({id := "access-network-charging-info", paramValue := ?}), - * - } - } + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, + {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, + complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + } } } - /** - * @desc INVITE Request checking TP_IMS_5097_02 - */ - template INVITE_Request mdw_TP_IMS_5097_02_ic ( - template SipUrl p_SIP_URI, - template SipUrl p_TEL_URI) - modifies mw_INVITE_Request_Base := { - msgHeader := { - pAssertedID := { - fieldName := P_ASSERTED_ID_E, - pAssertedIDValueList := { - *, - ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), - *, - ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), - * - } - } - } - } - - /** - * @desc INVITE Request checking TP_IMS_5097_04 - */ - template INVITE_Request mdw_TP_IMS_5097_04_gm(template SipUrl p_requestUri) - modifies mw_INVITE_Request_Base := { - requestLine := { - requestUri := p_requestUri - } - } - - /** - * @desc INVITE Request checking TP_IMS_5097_04 - */ - template INVITE_Request mdw_TP_IMS_5097_04_ic(in template (present) SipUrl p_requestUri) - modifies mw_INVITE_Request_Base := { - requestLine := { - method := INVITE_E, - requestUri := p_requestUri, - sipVersion := c_sipNameVersion - }, - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - *, - complement({id := "access-network-charging-info", paramValue := ?}), - * - } - } - - } - } - - /** - * - * @desc BYE Request checking TP_IMS_5107_01 on MW - */ - template BYE_Request mdw_TP_IMS_5107_01_ic(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) - modifies mw_BYE_Request_Base := { - msgHeader := { - route := * -// route := { -// fieldName := ROUTE_E, -// routeBody := { -// ?, -// complement(mw_routeBody(p_SCSCF_SIP_URI)), -// * -// } -// } - } - } - - /** - * - * @desc ACK Request checking TP_IMS_5107_02 on MW - */ - template ACK_Request mdw_TP_IMS_5107_02_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) - modifies mw_ACK_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_SCSCF_SIP_URI)), - * - } - } - } - } - - /** - * - * @desc CANCEL Request checking TP_IMS_5107_03 on MW - */ - template CANCEL_Request mdw_TP_IMS_5107_03_ic (template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) - modifies mw_CANCEL_Request_Base := { - msgHeader := { - route := ( - omit, - { - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_SCSCF_SIP_URI)), - * - } - } - ) - } - } - /** - * - * @desc REFER Request checking TP_IMS_5107_04 on MW + * @desc INVITE Request checking TP_IMS_5097_02 */ - template REFER_Request mdw_TP_IMS_5107_04_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) - modifies mw_REFER_Request_Base := { + template INVITE_Request mdw_TP_IMS_5097_02_ic ( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_INVITE_Request_Base := { msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { *, - complement(mw_routeBody(p_SCSCF_SIP_URI)), + ({ nameAddr := mw_NameAddr(p_SIP_URI)}, {addrSpecUnion := mw_SIP_URI_Base}), + *, + ({nameAddr := mw_NameAddr(p_TEL_URI)}, {addrSpecUnion := mw_TEL_URI_Base}), * } - } + } } } - /** - * - * @desc INVITE Request checking TP_IMS_5108_01 on MW - */ - template INVITE_Request mdw_TP_IMS_5108_01_ic( - template SipUrl p_SCSCF_Uri, - template GenericParam p_param - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - route := (omit, - { - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_SCSCF_Uri)), - * - } - } - ), - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {{ - nameAddr := { - displayName := *, - addrSpec := p_SCSCF_Uri - }, - rrParam := * - }, *} - }, - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - p_param, - * - } - } - } - } - - /** - * - * @desc INVITE Request checking TP_IMS_5108_01_f on MW - * ifpresent ioi params than fail - */ - template INVITE_Request mdw_TP_IMS_5108_01_f_ic - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * - } - } - } - } - - /** - * - * @desc INVITE Request checking TP_IMS_5108_03 on ISC - */ - template INVITE_Request mdw_TP_IMS_5108_03_isc( - template SipUrl p_ASB_Uri, - template SipUrl p_SCSCF_Uri - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := *, - addrSpec := p_ASB_Uri - }, - rrParam := * - }, - { - nameAddr := { - displayName := *, - addrSpec := p_SCSCF_Uri - }, - rrParam := * - }, - * - - } - }, - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "orig-ioi", paramValue := ?}, - * - } - } - } - } - - /** - * - * @desc INVITE Request checking TP_IMS_5108_03_f on ISC - * ifpresent ioi params than fail - */ - template INVITE_Request mdw_TP_IMS_5108_03_f_isc - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "term-ioi", paramValue := *}, - * - } - } - } - } + /** + * @desc INVITE Request checking TP_IMS_5097_04 + */ + template INVITE_Request mdw_TP_IMS_5097_04_gm(template SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + requestUri := p_requestUri + } + } /** - * - * @desc SUBSCRIBE Request checking TP_IMS_5108_07 on ISC + * @desc INVITE Request checking TP_IMS_5097_04 */ - template SUBSCRIBE_Request mdw_TP_IMS_5108_07_isc( - template SipUrl p_ASB_Uri, - template SipUrl p_SCSCF_Uri - ) modifies mw_SUBSCRIBE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := *, - addrSpec := p_ASB_Uri - }, - rrParam := * - }, - { - nameAddr := { - displayName := *, - addrSpec := p_SCSCF_Uri - }, - rrParam := * - }, - * - - } - }, + template INVITE_Request mdw_TP_IMS_5097_04_ic(in template (present) SipUrl p_requestUri) + modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_requestUri, + sipVersion := c_sipNameVersion + }, + msgHeader := { pChargingVector := { fieldName := P_CHARGING_VECTOR_E, chargeParams := { - {id := "orig-ioi", paramValue := ?}, + *, + complement({id := "access-network-charging-info", paramValue := ?}), * } - } + } + } } - + + /** + * + * @desc BYE Request checking TP_IMS_5107_01 on MW + */ + template BYE_Request mdw_TP_IMS_5107_01_ic(template CallId p_callId, in template (present) SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// ?, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5107_02 on MW + */ + template ACK_Request mdw_TP_IMS_5107_02_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc CANCEL Request checking TP_IMS_5107_03 on MW + */ + template CANCEL_Request mdw_TP_IMS_5107_03_ic (template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := ( + omit, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + ) + } + } + + /** + * + * @desc REFER Request checking TP_IMS_5107_04 on MW + */ + template REFER_Request mdw_TP_IMS_5107_04_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_REFER_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5108_01_ic( + template SipUrl p_SCSCF_Uri, + template GenericParam p_param + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := (omit, + { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_Uri)), + * + } + } + ), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + p_param, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_01_f on MW + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_01_f_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03 on ISC + */ + template INVITE_Request mdw_TP_IMS_5108_03_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + + /** + * + * @desc INVITE Request checking TP_IMS_5108_03_f on ISC + * ifpresent ioi params than fail + */ + template INVITE_Request mdw_TP_IMS_5108_03_f_isc + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } + + /** + * + * @desc SUBSCRIBE Request checking TP_IMS_5108_07 on ISC + */ + template SUBSCRIBE_Request mdw_TP_IMS_5108_07_isc( + template SipUrl p_ASB_Uri, + template SipUrl p_SCSCF_Uri + ) modifies mw_SUBSCRIBE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_ASB_Uri + }, + rrParam := * + }, + { + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }, + * + + } + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + * + } + } + } + } + /** * * @desc SUBSCRIBE Request checking TP_IMS_5108_07_f on ISC - * ifpresent ioi params than fail + * ifpresent ioi params than fail */ template SUBSCRIBE_Request mdw_TP_IMS_5108_07_f_isc modifies mw_SUBSCRIBE_Request_Base := { @@ -1024,120 +1024,120 @@ module AtsImsIot_Templates { {id := "term-ioi", paramValue := *}, * } - } + } } } - /** - * - * @desc 180 Ringing Response checking TP_IMS_5115_01 on MW - */ - template Response mdw_TP_IMS_5115_01_ic - modifies mw_180Ringing_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * - }) - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5115_02 on MW - */ - template Response mdw_TP_IMS_5115_02_ic - modifies mw_200OK_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * - }) - } - } - - /** - * - * @desc 180 Ringing Response checking TP_IMS_5115_03 on MW - */ - template Response mdw_TP_IMS_5115_03_ic( - template SipUrl p_SIP_URI, - template SipUrl p_TEL_URI) - modifies mw_180Ringing_Base := { - msgHeader := { - pAssertedID := { - fieldName := P_ASSERTED_ID_E, - pAssertedIDValueList := { - *, - { nameAddr := mw_NameAddr(p_SIP_URI)}, - *, - {nameAddr := mw_NameAddr(p_TEL_URI)}, - * - } - } - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5115_04 on MW - */ - template Response mdw_TP_IMS_5115_04_ic( - template SipUrl p_SIP_URI, - template SipUrl p_TEL_URI) - modifies mw_200OK_Base := { - msgHeader := { - pAssertedID := { - fieldName := P_ASSERTED_ID_E, - pAssertedIDValueList := { - *, - { nameAddr := mw_NameAddr(p_SIP_URI)}, - *, - {nameAddr := mw_NameAddr(p_TEL_URI)}, - * - } - } - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5115_08 on MW - */ - template Response mdw_TP_IMS_5115_08_ic - modifies mw_200OK_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * - }) - } - } - - /** - * - * @desc 180 Ringing Response checking TP_IMS_5131_01 on MW - */ - template Response mdw_TP_IMS_5131_01_ic - modifies mw_180Ringing_Base := { - msgHeader := { - pChargingFunctionAddresses := omit - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5131_02 on MW - */ - template Response mdw_TP_IMS_5131_02_ic - modifies mw_200OK_Base := { - msgHeader := { - pChargingFunctionAddresses := omit - } - } + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_01 on MW + */ + template Response mdw_TP_IMS_5115_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_02 on MW + */ + template Response mdw_TP_IMS_5115_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5115_03 on MW + */ + template Response mdw_TP_IMS_5115_03_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_180Ringing_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_04 on MW + */ + template Response mdw_TP_IMS_5115_04_ic( + template SipUrl p_SIP_URI, + template SipUrl p_TEL_URI) + modifies mw_200OK_Base := { + msgHeader := { + pAssertedID := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := { + *, + { nameAddr := mw_NameAddr(p_SIP_URI)}, + *, + {nameAddr := mw_NameAddr(p_TEL_URI)}, + * + } + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5115_08 on MW + */ + template Response mdw_TP_IMS_5115_08_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5131_01 on MW + */ + template Response mdw_TP_IMS_5131_01_ic + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5131_02 on MW + */ + template Response mdw_TP_IMS_5131_02_ic + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } /** * @@ -1148,128 +1148,128 @@ module AtsImsIot_Templates { msgHeader := { recordRoute := { fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_ibcfEutAUri), *} + routeBody := {mw_routeBody(p_ibcfEutAUri), *} } } } - /** - * - * @desc INVITE Request checking TP_IMS_5137_01 - */ - template INVITE_Request mdw_TP_IMS_5137_01_ic (template SipUrl p_ibcfEutAUri) - modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBodyTH(p_ibcfEutAUri), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } - - /** - * - * @desc 180 Ringing Response checking TP_IMS_5137_02 on MW - */ - template Response mdw_TP_IMS_5137_02_ic - modifies mw_180Ringing_Base := { - msgHeader := { - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } - - /** - * - * @desc 200 OK Response checking TP_IMS_5137_03 on MW - */ - template Response mdw_TP_IMS_5137_03_ic - modifies mw_200OK_Base := { - msgHeader := { - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } - - /** - * - * @desc BYE Request checking TP_IMS_5139_01 on MW - */ - template BYE_Request mdw_TP_IMS_5139_01_ic( - template CallId p_callId, - template SipUrl p_UE_URI, - template To p_to, - template From p_from, - template CSeq p_cSeq, - template Route p_route - ) modifies mw_BYE_Request_Base := { - requestLine := { - requestUri := p_UE_URI - }, - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - reason := ?, - route := p_route, - toField := p_to - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5137_01 + */ + template INVITE_Request mdw_TP_IMS_5137_01_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 180 Ringing Response checking TP_IMS_5137_02 on MW + */ + template Response mdw_TP_IMS_5137_02_ic + modifies mw_180Ringing_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc 200 OK Response checking TP_IMS_5137_03 on MW + */ + template Response mdw_TP_IMS_5137_03_ic + modifies mw_200OK_Base := { + msgHeader := { + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5139_01 on MW + */ + template BYE_Request mdw_TP_IMS_5139_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI, + template To p_to, + template From p_from, + template CSeq p_cSeq, + template Route p_route + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + reason := ?, + route := p_route, + toField := p_to + } + } - - /** - * - * @desc BYE Request checking TP_IMS_5301_01 on MW - */ - template BYE_Request mdw_TP_IMS_5301_01_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) - modifies mw_BYE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_SCSCF_SIP_URI)), - * - } - }, - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} - } - } - } + + /** + * + * @desc BYE Request checking TP_IMS_5301_01 on MW + */ + template BYE_Request mdw_TP_IMS_5301_01_ic(template CallId p_callId, template SipUrl p_SCSCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_SCSCF_SIP_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_SCSCF_SIP_URI), *} + } + } + } /** * @@ -1278,20 +1278,20 @@ module AtsImsIot_Templates { template Response mdw_TP_IMS_5308_01_gm modifies mw_180Ringing_Base := { msgHeader := { - pChargingFunctionAddresses := ? + pChargingFunctionAddresses := ? } } - /** - * - * @desc 180 Ringing Response checking TP_IMS_5308_01 on ISC - */ - template Response mdw_TP_IMS_5308_01_isc - modifies mw_180Ringing_Base := { - msgHeader := { - pChargingFunctionAddresses :=? - } - } + /** + * + * @desc 180 Ringing Response checking TP_IMS_5308_01 on ISC + */ + template Response mdw_TP_IMS_5308_01_isc + modifies mw_180Ringing_Base := { + msgHeader := { + pChargingFunctionAddresses :=? + } + } /** * @@ -1304,16 +1304,16 @@ module AtsImsIot_Templates { } } - /** - * - * @desc 200 OK Response checking TP_IMS_5308_02 on ISC - */ - template Response mdw_TP_IMS_5308_02_isc - modifies mw_200OK_Base := { - msgHeader := { - pChargingFunctionAddresses := ? - } - } + /** + * + * @desc 200 OK Response checking TP_IMS_5308_02 on ISC + */ + template Response mdw_TP_IMS_5308_02_isc + modifies mw_200OK_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } /** * @@ -1370,167 +1370,167 @@ module AtsImsIot_Templates { } } - /** - * - * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on MW - */ - template Response mdw_TP_IMS_5313_01_ic - modifies mw_433Anony_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "access-network-charging-info", paramValue := ?}, - * - }) - } - } - - /** - * - * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on AS - */ - template Response mdw_TP_IMS_5313_01_isc - modifies mw_433Anony_Base := { - msgHeader := { - pChargingVector := mw_PChargingVector({ - {id := "access-network-charging-info", paramValue := ?}, - * - }) - } - } + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on MW + */ + template Response mdw_TP_IMS_5313_01_ic + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } + + /** + * + * @desc 433 Anonymity Disallowe Response checking TP_IMS_5313_01 on AS + */ + template Response mdw_TP_IMS_5313_01_isc + modifies mw_433Anony_Base := { + msgHeader := { + pChargingVector := mw_PChargingVector({ + {id := "access-network-charging-info", paramValue := ?}, + * + }) + } + } - /** - * - * @desc INVITE Request checking TP_IMS_5404_01 on GM - */ - template INVITE_Request mdw_TP_IMS_5404_01_gm - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := ? - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on GM + */ + template INVITE_Request mdw_TP_IMS_5404_01_gm + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } - /** - * - * @desc INVITE Request checking TP_IMS_5404_01 on MW - */ - template INVITE_Request mdw_TP_IMS_5404_01_ic - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit - } - } - - /** - * - * @desc ACK Request checking TP_IMS_5408_01 on MW - */ - template ACK_Request mdw_TP_IMS_5408_01_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) - modifies mw_ACK_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBodyTH(p_IBCF_SIP_URI), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } - - /** - * - * @desc BYE Request checking TP_IMS_5408_02 on MW - */ - template CANCEL_Request mdw_TP_IMS_5408_02_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) - modifies mw_CANCEL_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBodyTH(p_IBCF_SIP_URI), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } - - /** - * - * @desc BYE Request checking TP_IMS_5408_03 on MW - */ - template BYE_Request mdw_TP_IMS_5408_03_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) - modifies mw_BYE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBodyTH(p_IBCF_SIP_URI), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5404_01 on MW + */ + template INVITE_Request mdw_TP_IMS_5404_01_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * + * @desc ACK Request checking TP_IMS_5408_01 on MW + */ + template ACK_Request mdw_TP_IMS_5408_01_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_ACK_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_02 on MW + */ + template CANCEL_Request mdw_TP_IMS_5408_02_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_CANCEL_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } + + /** + * + * @desc BYE Request checking TP_IMS_5408_03 on MW + */ + template BYE_Request mdw_TP_IMS_5408_03_ic(template CallId p_callId, template SipUrl p_IBCF_SIP_URI) + modifies mw_BYE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_IBCF_SIP_URI), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } - /** - * - * @desc INVITE Request checking TP_IMS_5408_04 - */ - template INVITE_Request mdw_TP_IMS_5408_04_ic (template SipUrl p_ibcfEutAUri) - modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBodyTH(p_ibcfEutAUri), - * - } - }, - via := { - fieldName := VIA_E, - viaBody := {{ - sentProtocol := ?, - sentBy := ?, - viaParams :={{ - id:="tokenized-by", - paramValue := * - }} - }} - } - } - } + /** + * + * @desc INVITE Request checking TP_IMS_5408_04 + */ + template INVITE_Request mdw_TP_IMS_5408_04_ic (template SipUrl p_ibcfEutAUri) + modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBodyTH(p_ibcfEutAUri), + * + } + }, + via := { + fieldName := VIA_E, + viaBody := {{ + sentProtocol := ?, + sentBy := ?, + viaParams :={{ + id:="tokenized-by", + paramValue := * + }} + }} + } + } + } /** * @@ -1539,11 +1539,11 @@ module AtsImsIot_Templates { template INVITE_Request mdw_TP_IMS_5097_09_isc (template SipUrl p_EutB_ASUri) modifies mw_INVITE_Request_Base := { msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := {mw_routeBody(p_EutB_ASUri), *} - }, - pChargingFunctionAddresses := ?, + route := { + fieldName := ROUTE_E, + routeBody := {mw_routeBody(p_EutB_ASUri), *} + }, + pChargingFunctionAddresses := ?, pChargingVector := mw_PChargingVector({ {id := "orig-ioi", paramValue := *}, // NOTE indicating also operator identifier for IMSA {id := "access-network-charging-info", paramValue := ?}, @@ -1552,22 +1552,22 @@ module AtsImsIot_Templates { } } - /** - * @desc INVITE Request checking TP_IMS_5097_09 false - */ - template INVITE_Request mdw_TP_IMS_5097_09_f_isc - modifies mw_INVITE_Request_Base := { - - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "term-ioi", paramValue := *}, - * - } - } - } - } + /** + * @desc INVITE Request checking TP_IMS_5097_09 false + */ + template INVITE_Request mdw_TP_IMS_5097_09_f_isc + modifies mw_INVITE_Request_Base := { + + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "term-ioi", paramValue := *}, + * + } + } + } + } /** * @@ -1594,7 +1594,7 @@ module AtsImsIot_Templates { */ template PUBLISH_Request mdw_TP_IMS_5097_13_f_isc(template CallId p_callId) modifies mw_PUBLISH_Request_Base := { - + msgHeader := { pChargingVector := { fieldName := P_CHARGING_VECTOR_E, @@ -1607,7 +1607,7 @@ module AtsImsIot_Templates { } template MESSAGE_Request mdw_TP_IMS_5097_05_p_ic( - template CallId p_callId + template CallId p_callId ) modifies mw_MESSAGE_Request_Base := { msgHeader := { pChargingVector := { @@ -1622,23 +1622,23 @@ module AtsImsIot_Templates { } } - template MESSAGE_Request mdw_TP_IMS_5097_05_f2_ic( - template CallId p_callId, - template SipUrl p_SCSCF_SIP_URI - ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_SIP_URI), - * - } - } - } - } + template MESSAGE_Request mdw_TP_IMS_5097_05_f2_ic( + template CallId p_callId, + template SipUrl p_SCSCF_SIP_URI + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_SIP_URI), + * + } + } + } + } template MESSAGE_Request mdw_TP_IMS_5097_05_f_ic( - template CallId p_callId + template CallId p_callId ) modifies mw_MESSAGE_Request_Base := { msgHeader := { pChargingVector := { @@ -1653,25 +1653,25 @@ module AtsImsIot_Templates { } template MESSAGE_Request mdw_TP_IMS_5097_08_gm( - template SipUrl p_requestUri + template SipUrl p_requestUri ) modifies mw_MESSAGE_Request_Base := { requestLine := { requestUri := p_requestUri } } template MESSAGE_Request mdw_TP_IMS_5097_08_ic( - template SipUrl p_requestUri + template SipUrl p_requestUri ) modifies mw_MESSAGE_Request_Base := { requestLine := { requestUri := p_requestUri - }, - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { + }, + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { complement({id := "access-network-charging-info", paramValue := ?}), - * - } - } - } + * + } + } + } } template MESSAGE_Request mdw_TP_IMS_5097_07_ic( @@ -1694,15 +1694,15 @@ module AtsImsIot_Templates { template MESSAGE_Request mdw_TP_IMS_5108_02a_ic( template CallId p_callId ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pChargingVector := { + msgHeader := { + pChargingVector := { fieldName := P_CHARGING_VECTOR_E, chargeParams := { {id := "icid-value", paramValue := ?}, * } - } - } + } + } } template MESSAGE_Request mdw_TP_IMS_5108_02b_p_ic( @@ -1710,73 +1710,73 @@ module AtsImsIot_Templates { template SipUrl p_SCSCF_Uri, template GenericParam p_param ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - route := omit, // TODO TP is not clear please double check - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {{ - nameAddr := { - displayName := *, - addrSpec := p_SCSCF_Uri - }, - rrParam := * - }} - }, - pChargingVector := { + msgHeader := { + route := omit, // TODO TP is not clear please double check + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {{ + nameAddr := { + displayName := *, + addrSpec := p_SCSCF_Uri + }, + rrParam := * + }} + }, + pChargingVector := { fieldName := P_CHARGING_VECTOR_E, chargeParams := { p_param, * } - } - } + } + } } template MESSAGE_Request mdw_TP_IMS_5108_02b_f_ic( template CallId p_callId ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pChargingVector := { + msgHeader := { + pChargingVector := { fieldName := P_CHARGING_VECTOR_E, chargeParams := { {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * + {id := "term-ioi", paramValue := ?}, + * } - } - } + } + } } - - - /** + + + /** * @desc INVITE Request checking TP_IMS_5120_01 */ - template INVITE_Request mdw_TP_IMS_5120_01_ic( - template SipUrl p_SCSCF_URI - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - complement(mw_routeBody(p_SCSCF_URI)), - * - } - }, - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_URI), - * - } - } - } - } - + template INVITE_Request mdw_TP_IMS_5120_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } + /** * @desc UPDATE Request checking TP_IMS_5120_02 */ template UPDATE_Request mdw_TP_IMS_5120_02_ic( - template CallId p_callId, + template CallId p_callId, template SipUrl p_SCSCF_URI ) modifies mw_UPDATE_Request_Base := { msgHeader := { @@ -1792,38 +1792,38 @@ module AtsImsIot_Templates { routeBody := { mw_routeBody(p_SCSCF_URI), * - } + } } } } template Response mw_TP_IMS_5121_02_ic modifies mdw_2XX_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { complement({id := "access-network-charging-info", paramValue := ?}), - * - } - } - } + * + } + } + } } template Response mw_TP_IMS_5117_02_ic modifies mdw_2XX_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { complement({id := "access-network-charging-info", paramValue := ?}), - * - } - } - } + * + } + } + } } template Response mw_TP_IMS_5117_06_ic modifies mdw_2XX_Base := { - msgHeader := { - pAssertedID := { + msgHeader := { + pAssertedID := { fieldName := P_ASSERTED_ID_E, pAssertedIDValueList := { {nameAddr := mw_NameAddr(mw_SIP_URI_Base)}, @@ -1831,20 +1831,20 @@ module AtsImsIot_Templates { * } } - } + } } template Response mw_TP_IMS_5118_01_ic modifies mw_200OK_Base := { - msgHeader := { - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - {id := "orig-ioi", paramValue := ?}, - {id := "term-ioi", paramValue := ?}, - * - } - } - } + msgHeader := { + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + {id := "orig-ioi", paramValue := ?}, + {id := "term-ioi", paramValue := ?}, + * + } + } + } } template MESSAGE_Request mdw_TP_IMS_5050_01_ic( @@ -1852,53 +1852,53 @@ module AtsImsIot_Templates { template SipUrl p_PCSCF_URI, template SipUrl p_UE_A_URI ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := *, - addrSpec := complement(p_PCSCF_URI) - }, - rrParam := * - },* - } - }, - pPreferredID := omit, - pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_UE_A_URI)), - pChargingVector := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := complement(p_PCSCF_URI) + }, + rrParam := * + },* + } + }, + pPreferredID := omit, + pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(p_UE_A_URI)), + pChargingVector := { fieldName := P_CHARGING_VECTOR_E, chargeParams := { {id := "icid-value", paramValue := ?}, - * + * } - } - } + } + } } - template Response mdw_2XX_Base modifies m_Response_Dummy := { - statusLine := {c_sipNameVersion, (200..299), ?}, - msgHeader := ?, - messageBody := *, - payload := * - } + template Response mdw_2XX_Base modifies m_Response_Dummy := { + statusLine := {c_sipNameVersion, (200..299), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_100Trying_Base modifies m_Response_Dummy := - { - statusLine := c_statusLine100, - msgHeader := ?, - messageBody := *, - payload := * - } + { + statusLine := c_statusLine100, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_180Ringing_Base modifies m_Response_Dummy := - { - statusLine := c_statusLine180, - msgHeader := ?, - messageBody := *, - payload := * - } + { + statusLine := c_statusLine180, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_183SessionProgress_Base modifies m_Response_Dummy := { statusLine := c_statusLine183, @@ -1907,50 +1907,50 @@ module AtsImsIot_Templates { payload := * } template Response mw_200OK_Base modifies m_Response_Dummy := - { - statusLine := c_statusLine200, - msgHeader := ?, - messageBody := *, - payload := * - } + { + statusLine := c_statusLine200, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_202Accepted_Base modifies m_Response_Dummy := - { - statusLine := c_statusLine202, - msgHeader := ?, - messageBody := *, - payload := * - } + { + statusLine := c_statusLine202, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_401Unauthorized_Base modifies m_Response_Dummy := - { - statusLine := {c_sipNameVersion, 401, ?}, - msgHeader := ?, - messageBody := *, - payload := * - } - + { + statusLine := {c_sipNameVersion, 401, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mdw_4XX_Base modifies m_Response_Dummy := { - statusLine := {c_sipNameVersion, (400..499), ?}, - msgHeader := ?, - messageBody := *, - payload := * + statusLine := {c_sipNameVersion, (400..499), ?}, + msgHeader := ?, + messageBody := *, + payload := * } template Response mw_403Forbidden_Base modifies m_Response_Dummy := - { - statusLine := {c_sipNameVersion, 403, ?}, - msgHeader := ?, - messageBody := *, - payload := * - } - - template Response mw_404NotFound_Base modifies m_Response_Dummy := - { - statusLine := {c_sipNameVersion, 404, ?}, - msgHeader := ?, - messageBody := *, - payload := * - } - + { + statusLine := {c_sipNameVersion, 403, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_404NotFound_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 404, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_480TemporaryUnavailable_Base modifies m_Response_Dummy := { statusLine := c_statusLine480, @@ -1983,216 +1983,216 @@ module AtsImsIot_Templates { payload := * } - template Response mdw_404Or604NotFound_Base modifies m_Response_Dummy := - { - statusLine := ({c_sipNameVersion, 404, ?}, {c_sipNameVersion, 604, ?}), - msgHeader := ?, - messageBody := *, - payload := * - } - - template Response mdw_408Or5XX_Base modifies m_Response_Dummy := - { - statusLine := {c_sipNameVersion, (408,(500..599)), ?}, - msgHeader := ?, - messageBody := *, - payload := * - } - - template Response mw_433Anony_Base modifies m_Response_Dummy := - { - statusLine := c_statusLine433, - msgHeader := ?, - messageBody := *, - payload := * - } - + template Response mdw_404Or604NotFound_Base modifies m_Response_Dummy := + { + statusLine := ({c_sipNameVersion, 404, ?}, {c_sipNameVersion, 604, ?}), + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mdw_408Or5XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (408,(500..599)), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + + template Response mw_433Anony_Base modifies m_Response_Dummy := + { + statusLine := c_statusLine433, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_603Decline_Base modifies m_Response_Dummy := { statusLine := c_statusLine603, msgHeader := ?, messageBody := *, - payload := * + payload := * } - template REGISTER_Request mdw_TP_IMS_5088_01_gm modifies mw_REGISTER_Request_Base := { - msgHeader := {authorization := mw_Authorization(mw_credentialIntegrityYes)} - } - - template NOTIFY_Request mdw_TP_IMS_5088_01_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { - requestLine := { requestUri := p_PCSCF_SIP_URI }, - msgHeader := { - event := { - fieldName := EVENT_E, - eventType := pattern "*reg*", - eventParams := *}, - route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) - messageBody := ? // TODO - } - + template REGISTER_Request mdw_TP_IMS_5088_01_gm modifies mw_REGISTER_Request_Base := { + msgHeader := {authorization := mw_Authorization(mw_credentialIntegrityYes)} + } + + template NOTIFY_Request mdw_TP_IMS_5088_01_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + template NOTIFY_Request mdw_TP_IMS_5093_01_UE_ic(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { - requestLine := { requestUri := p_UE_SIP_URI }, - msgHeader := { - event := { - fieldName := EVENT_E, - eventType := pattern "*reg*", - eventParams := *}, - pChargingVector := mw_PChargingVector({ + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, + pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }), - route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) - messageBody := ? // TODO + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO } template NOTIFY_Request mdw_TP_IMS_5093_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { - requestLine := { requestUri := p_PCSCF_SIP_URI }, - msgHeader := { - event := { - fieldName := EVENT_E, - eventType := pattern "*reg*", - eventParams := *}, + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }), - route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) - messageBody := ? // TODO + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO } - - template NOTIFY_Request mdw_TP_IMS_5094_01_UE(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { - requestLine := { requestUri := p_UE_SIP_URI }, - msgHeader := { - event := { - fieldName := EVENT_E, - eventType := pattern "*reg*", - eventParams := *}, + + template NOTIFY_Request mdw_TP_IMS_5094_01_UE(template CallId p_callId, template SipUrl p_UE_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_UE_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }), - route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) - messageBody := ? // TODO - } + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } - template NOTIFY_Request mdw_TP_IMS_5094_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { - requestLine := { requestUri := p_PCSCF_SIP_URI }, - msgHeader := { - event := { - fieldName := EVENT_E, - eventType := pattern "*reg*", - eventParams := *}, + template NOTIFY_Request mdw_TP_IMS_5094_01_IMS_ic(template CallId p_callId, template SipUrl p_PCSCF_SIP_URI) modifies mw_NOTIFY_Request_Base := { + requestLine := { requestUri := p_PCSCF_SIP_URI }, + msgHeader := { + event := { + fieldName := EVENT_E, + eventType := pattern "*reg*", + eventParams := *}, pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }), - route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) - messageBody := ? // TODO - } - - - /** - * @desc INVITE Request checking TP_IMS_5106_01 - */ - template INVITE_Request mdw_TP_IMS_5106_01_ic( - template SipUrl p_SCSCF_URI - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - complement(mw_routeBody(p_SCSCF_URI)), - * - } - }, - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_URI), - * - } - }, - pAccessNetworkInfo := omit, + route := ? }, // TODO route header indicating the original Route_header from SUBSCRIBE (SUBSCRIBE not defined in the test description) + messageBody := ? // TODO + } + + + /** + * @desc INVITE Request checking TP_IMS_5106_01 + */ + template INVITE_Request mdw_TP_IMS_5106_01_ic( + template SipUrl p_SCSCF_URI + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + complement(mw_routeBody(p_SCSCF_URI)), + * + } + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + }, + pAccessNetworkInfo := omit, pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }) - } - } - - /** - * @desc BYE Request checking TP_IMS_5074_01 - */ - template BYE_Request mdw_TP_IMS_5074_01_ic( - template CallId p_callId, - template SipUrl p_UE_URI // must be the IP address - ) modifies mw_BYE_Request_Base := { - requestLine := { - requestUri := p_UE_URI - }, - msgHeader := { - toField := ?, - fromField := ?, - cSeq := ?, - route := ?, + } + } + + /** + * @desc BYE Request checking TP_IMS_5074_01 + */ + template BYE_Request mdw_TP_IMS_5074_01_ic( + template CallId p_callId, + template SipUrl p_UE_URI // must be the IP address + ) modifies mw_BYE_Request_Base := { + requestLine := { + requestUri := p_UE_URI + }, + msgHeader := { + toField := ?, + fromField := ?, + cSeq := ?, + route := ?, reason := { - fieldName := REASON_E, - reasonValues := { - { - token := "503 Service Unavailable", - reasonParams := * - }, - * - } - } - } - } - - - /** - * @desc UPDATE Request checking TP_IMS_5106_02 - */ - template UPDATE_Request mdw_TP_IMS_5106_02_p_ic( - template CallId p_callId, - template SipUrl p_SCSCF_URI - ) modifies mw_UPDATE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := ? - }, - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := { - *, - mw_routeBody(p_SCSCF_URI), - * - } - }, + fieldName := REASON_E, + reasonValues := { + { + token := "503 Service Unavailable", + reasonParams := * + }, + * + } + } + } + } + + + /** + * @desc UPDATE Request checking TP_IMS_5106_02 + */ + template UPDATE_Request mdw_TP_IMS_5106_02_p_ic( + template CallId p_callId, + template SipUrl p_SCSCF_URI + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := ? + }, + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := { + *, + mw_routeBody(p_SCSCF_URI), + * + } + }, pChargingVector := mw_PChargingVector({ {id := "icid-value", paramValue := *}, * }) - } - } - + } + } + template UPDATE_Request mdw_TP_IMS_5106_02_f_ic( - template CallId p_callId, - template SipUrl p_SCSCF_URI + template CallId p_callId, + template SipUrl p_SCSCF_URI ) modifies mw_UPDATE_Request_Base := { msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_URI), - * - } - } + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } } } - - + + /** * @desc OPTIONS Request checking TP_IMS_CONTENT_SHARE_01 */ @@ -2204,22 +2204,27 @@ module AtsImsIot_Templates { contact := mw_Contact_share } } - - - /** - * @desc INVITE Request checking TP_IMS_CONTENT_SHARE_02 - */ - template INVITE_Request mdw_TP_IMS_CONTENT_SHARE_02_ic - modifies mw_INVITE_Request_Base := { - msgHeader := { - acceptContact := mw_AcceptContact_share, - contact := mw_Contact_share - } - } + + + /** + * @desc INVITE Request checking TP_IMS_CONTENT_SHARE_02 + */ + template INVITE_Request mdw_TP_IMS_CONTENT_SHARE_02_ic + modifies mw_INVITE_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } + } - }//end group - group HeaderTemplates { - + } // End of group modifiedSIPBaseTemplates + + group EmergencySIPTemplates { + + } // End of group EmergencySIPTemplates + + group HeaderTemplates { + template Path mw_PathDef (charstring p_Host) := { fieldName := PATH_E, pathValues := {{ @@ -2227,10 +2232,10 @@ module AtsImsIot_Templates { displayName := *, addrSpec := { scheme := "sip", - components := {sip := { - userInfo := *, - hostPort := {host := p_Host,portField := *} - }}, + components := {sip := { + userInfo := *, + hostPort := {host := p_Host,portField := *} + }}, urlParameters := *, headers := omit} }, @@ -2245,7 +2250,7 @@ module AtsImsIot_Templates { template PChargingVector mw_PChargingVector (template SemicolonParam_List p_List) := { fieldName := P_CHARGING_VECTOR_E, - icidValue := ?, + icidValue := ?, chargeParams := p_List } // template @@ -2271,28 +2276,28 @@ module AtsImsIot_Templates { } // template template PAssociatedURI - mw_PAssociatedURI(template SemicolonParam_List p_SemicolonParam_List) := { - fieldName := P_ASSOCIATED_URI_E, - nameAddrList := { - {nameAddr := ?, genericParams := p_SemicolonParam_List}, * - } - } + mw_PAssociatedURI(template SemicolonParam_List p_SemicolonParam_List) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + {nameAddr := ?, genericParams := p_SemicolonParam_List}, * + } + } template WwwAuthenticate mw_WwwAuthenticate_AKA := { fieldName := WWW_AUTHENTICATE_E, challenge := { digestCln := { //{id := "username", paramValue := ?}, - {id := "realm", paramValue := ?}, // TODO containing operator ID - {id := "nonce", paramValue := ?}, - {id := "rand", paramValue := ?}, - {id := "autn", paramValue := ?}, - {id := "ik", paramValue := ?}, - {id := "ck", paramValue := ?}, - {id := "algorithm", paramValue := { quotedString := "AKAv1-MD5" }}, - *} + {id := "realm", paramValue := ?}, // TODO containing operator ID + {id := "nonce", paramValue := ?}, + {id := "rand", paramValue := ?}, + {id := "autn", paramValue := ?}, + {id := "ik", paramValue := ?}, + {id := "ck", paramValue := ?}, + {id := "algorithm", paramValue := { quotedString := "AKAv1-MD5" }}, + *} } } // template - + template WwwAuthenticate mw_WwwAuthenticate_MD5 := { fieldName := WWW_AUTHENTICATE_E, challenge := { @@ -2351,199 +2356,199 @@ module AtsImsIot_Templates { } - } // end group HeaderTemplates + } // end group HeaderTemplates group AuxiliaryInformationElementTemplates { - template Credentials mw_credentialIntegrityYes := { - otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="yes"}},*} // TODO - }} - - template Credentials mw_credentialIntegrityNo := { - otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="no"}},*} // TODO - }} - + template Credentials mw_credentialIntegrityYes := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="yes"}},*} // TODO + }} + + template Credentials mw_credentialIntegrityNo := { + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="no"}},*} // TODO + }} + template Credentials mw_credentialIntegrityIpAssocPending := { - otherResponse := { - authScheme := ?, - authParams := { - complement ({"integrity-protected", {quotedString:="no"}},{"integrity-protected", {quotedString:="yes"}},{"integrity-protected", {quotedString:="ip-assoc-yes"}}), * //alowed parameters are {"integrity-protected" id with "ip-assoc-pending" value or no "integrity-protected" id} - } - } - } - + otherResponse := { + authScheme := ?, + authParams := { + complement ({"integrity-protected", {quotedString:="no"}},{"integrity-protected", {quotedString:="yes"}},{"integrity-protected", {quotedString:="ip-assoc-yes"}}), * //alowed parameters are {"integrity-protected" id with "ip-assoc-pending" value or no "integrity-protected" id} + } + } + } + template Credentials mw_credentialIntegrityIpAssocYes := { otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="ip-assoc-yes"}},*} // TODO }} - template RouteBody mw_routeBodyTH (template SipUrl p_sipurl):= { - nameAddr := - { - displayName := *, - addrSpec := p_sipurl - }, - rrParam := {{ - id:="tokenized-by", - paramValue := * - }} - } - - template NameAddr mw_NameAddr(template SipUrl p_URI) := { - displayName := *, - addrSpec := p_URI - } - - template SipUrl mw_SIP_URI_Base := { - scheme := "sip", // meaning "not tel" - components := { sip := { - userInfo := ?, - hostPort := ? - } - }, - urlParameters := *, - headers := * - } - - template SipUrl mw_TEL_URI_Base := { + template RouteBody mw_routeBodyTH (template SipUrl p_sipurl):= { + nameAddr := + { + displayName := *, + addrSpec := p_sipurl + }, + rrParam := {{ + id:="tokenized-by", + paramValue := * + }} + } + + template NameAddr mw_NameAddr(template SipUrl p_URI) := { + displayName := *, + addrSpec := p_URI + } + + template SipUrl mw_SIP_URI_Base := { + scheme := "sip", // meaning "not tel" + components := { sip := { + userInfo := ?, + hostPort := ? + } + }, + urlParameters := *, + headers := * + } + + template SipUrl mw_TEL_URI_Base := { scheme := "tel", - components := { tel := { - subscriber := ? - } - }, + components := { tel := { + subscriber := ? + } + }, urlParameters := *, headers := * } - template SipUrl mw_SIP_URI_ConfFactory - modifies mw_SIP_URI_Base := { - components := { sip := { - userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, - hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} - } } - } + template SipUrl mw_SIP_URI_ConfFactory + modifies mw_SIP_URI_Base := { + components := { sip := { + userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, + hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} + } } + } - } //end group + } // End of group AuxiliaryInformationElementTemplates - group adapterTemplates { - - template GeneralConfigurationReq m_generalConfigurationReq_offline := { - captureProcessIpAddress := "127.0.0.1", - captureProcessPort := 5501, - captureMode := { - offlineCapture := { - offset := PX_IOT_TIMESTAMP_OFFSET, - captureSource := { - sessionsPath := PX_IOT_PCAP_SESSIONS_PATH, - mergeFileList := { - mergeFileList := { }, - mergeFilePath := "", - mergeToolPath := "" + group adapterTemplates { + + template GeneralConfigurationReq m_generalConfigurationReq_offline := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := PX_IOT_PCAP_SESSIONS_PATH, + mergeFileList := { + mergeFileList := { }, + mergeFilePath := "", + mergeToolPath := "" + } } - } + } + }, + eutInfoList := omit } - }, - eutInfoList := omit - } - template GeneralConfigurationReq m_generalConfigurationReq_online := { - captureProcessIpAddress := "127.0.0.1", - captureProcessPort := 5501, - captureMode := { - liveCpature := { - physicalInterfaces := { - PX_IOT_IFACES - }, - recordMode := PX_IOT_RECORD_MODE + template GeneralConfigurationReq m_generalConfigurationReq_online := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + liveCpature := { + physicalInterfaces := { + PX_IOT_IFACES + }, + recordMode := PX_IOT_RECORD_MODE + } + }, + eutInfoList := PX_IOT_EUTs_IFACE_INFO_LIST } - }, - eutInfoList := PX_IOT_EUTs_IFACE_INFO_LIST - } - template GeneralConfigurationReq m_generalConfigurationReq_merge := { - captureProcessIpAddress := "127.0.0.1", - captureProcessPort := 5501, - captureMode := { - offlineCapture := { - offset := PX_IOT_TIMESTAMP_OFFSET, - captureSource := { - sessionsPath := "", - mergeFileList := { - mergeFileList := PX_IOT_FILE_MERGE_LIST, - mergeFilePath := PX_IOT_FILE_MERGE_PATH, - mergeToolPath := PX_IOT_MERGE_TOOL_PATH + template GeneralConfigurationReq m_generalConfigurationReq_merge := { + captureProcessIpAddress := "127.0.0.1", + captureProcessPort := 5501, + captureMode := { + offlineCapture := { + offset := PX_IOT_TIMESTAMP_OFFSET, + captureSource := { + sessionsPath := "", + mergeFileList := { + mergeFileList := PX_IOT_FILE_MERGE_LIST, + mergeFilePath := PX_IOT_FILE_MERGE_PATH, + mergeToolPath := PX_IOT_MERGE_TOOL_PATH + } } - } + } + }, + eutInfoList := omit } - }, - eutInfoList := omit - } - template GeneralConfigurationRsp m_generalConfigurationRsp_success := { - status := { - code := e_success, - reason := * - } - } - template GeneralConfigurationRsp m_generalConfigurationRsp_timeout := { - status := { - code := e_timeout, - reason := * - } - } - template GeneralConfigurationRsp m_generalConfigurationRsp_error := { - status := { - code := e_error, - reason := * - } - } - template GeneralConfigurationRsp m_generalConfigurationRsp_any := { - status := { - code := ?, - reason := * - } - } - template StartTrafficCaptureReq m_startTrafficCaptureReq := { - } - template StartTrafficCaptureRsp m_startTrafficCaptureRsp_any := { - status := { - code := ?, - reason := * - } - } - template StopTrafficCaptureReq m_stopTrafficCaptureReq :={ - } - template StopTrafficCaptureRsp m_stopTrafficCaptureRsp_any := { - status := { - code := ?, - reason := * - } - } - - template SetFilterReq m_setFilterReq (ProtocolFilter p_proto, IpAddress p_addr1, - IpAddress p_addr2, UInt16 p_port) :={ - protocol := p_proto, - interfaceInfos := { - { - IpInterfaceInfo := { - { - domainName := omit, - IpAddress := p_addr1, - portNumbers := { p_port } - }, + template GeneralConfigurationRsp m_generalConfigurationRsp_success := { + status := { + code := e_success, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_timeout := { + status := { + code := e_timeout, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_error := { + status := { + code := e_error, + reason := * + } + } + template GeneralConfigurationRsp m_generalConfigurationRsp_any := { + status := { + code := ?, + reason := * + } + } + template StartTrafficCaptureReq m_startTrafficCaptureReq := { + } + template StartTrafficCaptureRsp m_startTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + template StopTrafficCaptureReq m_stopTrafficCaptureReq :={ + } + template StopTrafficCaptureRsp m_stopTrafficCaptureRsp_any := { + status := { + code := ?, + reason := * + } + } + + template SetFilterReq m_setFilterReq (ProtocolFilter p_proto, IpAddress p_addr1, + IpAddress p_addr2, UInt16 p_port) :={ + protocol := p_proto, + interfaceInfos := { { - domainName := omit, - IpAddress := p_addr2, - portNumbers := { p_port } + IpInterfaceInfo := { + { + domainName := omit, + IpAddress := p_addr1, + portNumbers := { p_port } + }, + { + domainName := omit, + IpAddress := p_addr2, + portNumbers := { p_port } + } } - } + } + } } - } - } - - template SetFilterRsp m_setFilterRspAny := { - status := { - code := ?, - reason := * - } - } - } // adapterTemplates + + template SetFilterRsp m_setFilterRspAny := { + status := { + code := ?, + reason := * + } + } + } // End of group adapterTemplates }//end module -- GitLab