diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a2f2b7f346c8115ede5f718e3afa0906bd40606e --- /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/.gitmodules b/.gitmodules index a0190691dc9b6dd49e1c4ffa41a963518932b0ba..7f0c753616b09df31f8192a165902f9b8d2986d7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,16 +1,16 @@ [submodule "ttcn/LibCommon"] path = ttcn/LibCommon url = https://forge.etsi.org/rep/LIBS/LibCommon.git - branch = master + branch = STF574 [submodule "ttcn/LibSip"] path = ttcn/LibSip url = https://forge.etsi.org/rep/LIBS/LibSip.git - branch = master + branch = STF574 [submodule "ttcn/LibDiameter"] path = ttcn/LibDiameter url = https://forge.etsi.org/rep/LIBS/LibDiameter.git - branch = master + branch = STF574 [submodule "ttcn/LibIms"] path = ttcn/LibIms url = https://forge.etsi.org/rep/LIBS/LibIms.git - branch = master + branch = STF574 diff --git a/.project b/.project deleted file mode 100644 index 696eeef40740f5b604655cbe29b990e8cfb9bbc4..0000000000000000000000000000000000000000 --- a/.project +++ /dev/null @@ -1,18 +0,0 @@ - - - STF574_vxlte-iop - - - Abstract_Socket_CNL113384 - - - - org.eclipse.xtext.ui.shared.xtextBuilder - - - - - - org.eclipse.xtext.ui.shared.xtextNature - - diff --git a/build_ta_vxlte.xml b/build_ta_vxlte.xml new file mode 100644 index 0000000000000000000000000000000000000000..25780c078ccbdfdedab79e5623097c582e39197b --- /dev/null +++ b/build_ta_vxlte.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Compile ${ant.project.name} Test Adapter and Codec + + + + + + + + + + + + + Create ${ant.project.name}TA.jar + + + + + + + + + + + + + + + + + + + diff --git a/javasrc/com/iskratel/protocol/diameter/parser/AVP.java b/javasrc/com/iskratel/protocol/diameter/parser/AVP.java new file mode 100644 index 0000000000000000000000000000000000000000..e91ae8eecf3f9129dee97c1c7ee9719392f1696e --- /dev/null +++ b/javasrc/com/iskratel/protocol/diameter/parser/AVP.java @@ -0,0 +1,504 @@ +/* ######################################################################### */ +/* # # */ +/* # # */ +/* # Copyright (c) 2012 Sintesio Org. # */ +/* # # */ +/* # # */ +/* # File Name : AVP.java # */ +/* # # */ +/* # File Code : # */ +/* # # */ +/* # Description : Implementation of DIAMETER parser class. # */ +/* # # */ +/* # Revision : 1.0 # */ +/* # # */ +/* # Project Name : # */ +/* # # */ +/* # Date : Apr 2012 # */ +/* # # */ +/* # Author : Sintesio # */ +/* # # */ +/* # Translation : javac # */ +/* # # */ +/* # # */ +/* ######################################################################### */ + +package com.iskratel.protocol.diameter.parser; + +import java.util.Vector; + +/** + * Provides methods to create and manipulate of AVPs and Diameter messages. + */ + +/** + * This class defines the basic AVP data structure. + * + * The attributes can be accessed directly. + * + */ +public class AVP { + + /** The AVP code */ + public int code=0; + + /** The AVP Vendor Specific flag. If not set, vendor_id will not be used */ + public boolean flag_vendor_specific=false; + + /** The AVP Mandatory Flag */ + public boolean flag_mandatory=true; + + /** The AVP Protected Flag indicating the need for end-to-end security */ + public boolean flag_protected=false; + + /** The Vendor Identifier. Should only be used when the vendor specific flag is set */ + public int vendor_id=0; + + /** The length of the encoded data of this AVP with padded bytes*/ + public int encoded_length=0; + + /** The length of the encoded data of this AVP */ + public int length=0; + + /** The binary data actually contained inside */ + public byte[] data={}; + + /** The integer value, precomputed for faster operation if the data is an integer */ + public int int_data; + public long long_data; + + /** Vector of child AVPs if the avps is a grouped one */ + public Vector childs = null; + + /** Indication if this AVP actually is a grouped AVP */ + public boolean is_ungrouped=false; + + + /** + * Dumb constructor used on decoding + */ + public AVP() + { + } + + /** + * Creates a new AVP. + * + * @param Code AVP code. + * @param Vendor_Specific true, if this AVP is vendor specific. + * @param Mandatory true, if mandatory tag should be set. + * @param Protected true, if protected tag should be send. + * @param Vendor_id Vendor-Id. + */ + public AVP(int Code,boolean Vendor_Specific,boolean Mandatory,boolean Protected, + int Vendor_id) + { + this.code = Code; + this.flag_vendor_specific = Vendor_Specific; + this.flag_mandatory = Mandatory; + this.flag_protected = Protected; + this.vendor_id = Vendor_id; + if (this.vendor_id!=0) this.flag_vendor_specific = true; + } + + + /** + * Creates a new AVP. + * + * @param Code AVP code. + * @param Mandatory true, if mandatory tag should be set. + * @param Vendor_id Vendor-Id + */ + public AVP(int Code,boolean Mandatory,int Vendor_id) + { + this.code = Code; + this.flag_mandatory = Mandatory; + this.vendor_id = Vendor_id; + if (this.vendor_id!=0) this.flag_vendor_specific = true; + } + + /** + * Sets the data to an array of bytes. + * + * @param Data Date field of an AVP represented in byte[]. + */ + public void setData(byte[] Data) + { + this.data = Data; + for(int i=0;i<4&&i>24) &0xFF); + data[1] = (byte)((Data>>16) &0xFF); + data[2] = (byte)((Data>> 8) &0xFF); + data[3] = (byte)((Data ) &0xFF); + int_data = Data; + long_data= Data; + } + + + /** + * Get String value. + * + * @return The data field of an AVP converted to string. + */ + public String getStringData() { + StringBuffer x = new StringBuffer(); + + for(int i=0;i=32&&data[i]<=126) + x.append((char)data[i]); + else + x.append("."); + + return x.toString(); + } + + /** + * Get int value. + * + * @return The data field of an AVP converted to int. + */ + public int getIntData() { + return int_data; + } + + /** + * Get int value. + * + * @return The data field of an AVP converted to int. + */ + public long getLongData() { + return long_data; + } + + /** + * Get byte[] value. + * + * @return The data field of an AVP converted to byte[]. + */ + public byte[] getData() { + return data; + } + + /** + * Adds one child avp to the avp and converts it to a grouped one. + * + * @param child Child AVP added to this AVP. + */ + public void addChildAVP(AVP child) + { + if (!is_ungrouped) is_ungrouped = true; + if (childs == null) childs = new Vector(); + childs.add(child); + } + + /** + * Returns the count of the child AVPs if the AVP is a grouped one, or 0 if not. + * + * @return the count of child avps, 0 if not. + */ + public int getChildCount() + { + if (!is_ungrouped||childs==null) return 0; + return childs.size(); + } + + /** + * Returns the child AVP at index if the AVP is a grouped one. + * + * @param index The position of the child AVP. + * @return the found AVP or null if out of bounds. + */ + public AVP getChildAVP(int index) + { + if (!is_ungrouped||childs==null) return null; + if (index>4)&0x0F]); + x.append(hexa[data[i]&0x0F]); + } + x.append(" INT_Data=");x.append(int_data); + x.append(" Char_Data=\""); + for(i=0;i=32&&data[i]<=126) + x.append((char)data[i]); + else + x.append("."); + x.append("\""); + if (is_ungrouped){ + x.append(" {"); + for(i=0;i + *
  • An AVP can be created most simply by parsing an array of bytes starting at at position + * and decoding it from the network format using the AVP decode(buffer,start) method. + *
  • To convert one AVP to the network format just call the byte[] encode(AVP) method + *
  • To compute the network representation of an AVP just call the avp.group() method. This will + * refresh the data attribute, but will not reset the is_ungrouped flag as the childs Vector is + * still filled with data. You don't need to call this before an encode as it is automatically + * called if the is_ungrouped flag is set. + * + * + */ +public class Codec { + + /** + * Creates an AVP object by decoding data from a byte array as represented on network + * + * @param from the byte array + * @param start from where to start decoding in the byte array + * @return the newly created AVP object + * @throws AVPDecodeException + */ + public static AVP decodeAVP(byte[] from,int start) throws AVPDecodeException + { + AVP to = new AVP(); + int i,j,len; + + if (from.length-start<8) throw new AVPDecodeException("Data is shorter than AVP Header"); + + to.code = ((int)from[start+0]&0xFF)<<24 | + ((int)from[start+1]&0xFF)<<16 | + ((int)from[start+2]&0xFF)<< 8 | + ((int)from[start+3]&0xFF); + + to.flag_vendor_specific = (from[start+4] & 0x80)!=0; + to.flag_mandatory = (from[start+4] & 0x40)!=0; + to.flag_protected = (from[start+4] & 0x20)!=0; + len = ((int)from[start+5]&0xFF)<<16 | + ((int)from[start+6]&0xFF)<< 8 | + ((int)from[start+7]&0xFF); + + if (to.flag_vendor_specific){ + to.vendor_id = ((int)from[start+ 8]&0xFF)<<24 | + ((int)from[start+ 9]&0xFF)<<16 | + ((int)from[start+10]&0xFF)<< 8 | + ((int)from[start+11]&0xFF); + j = 12; + } else { + to.vendor_id = 0; + j = 8; + } + + if (len>from.length-start) len = from.length-start; + to.data = new byte[len-j]; + System.arraycopy(from,start+j,to.data,0,len-j); + + if (len!=0) + for(i=0;i<4&&i> 24) & 0xFF); + to[1] = (byte) ((from.code >> 16) & 0xFF); + to[2] = (byte) ((from.code >> 8) & 0xFF); + to[3] = (byte) ( from.code & 0xFF); + + if (from.flag_vendor_specific) to[4] |= 0x80; + if (from.flag_mandatory) to[4] |= 0x40; + if (from.flag_protected) to[4] |= 0x20; + to[5] = (byte) ((send_len >> 16) & 0xFF); + to[6] = (byte) ((send_len >> 8) & 0xFF); + to[7] = (byte) ( send_len & 0xFF); + + if (from.flag_vendor_specific){ + to[ 8] = (byte) ((from.vendor_id >> 24) & 0xFF); + to[ 9] = (byte) ((from.vendor_id >> 16) & 0xFF); + to[10] = (byte) ((from.vendor_id >> 8) & 0xFF); + to[11] = (byte) ( from.vendor_id & 0xFF); + j = 12; + } + else j = 8; + + if (from.data.length!=0) + System.arraycopy(from.data,0,to,j,from.data.length); + + return to; + } + + /** + * Calculates the needed space for an encoded AVP + * + * @param avp + * @return The size of the AVP. + */ + public static int getEncodedAVPSize(AVP avp) + { + AVP avp2; + int datalen=0; + int i; + if (avp.is_ungrouped&&avp.childs!=null){ + for(i=0;ifrom.length-start) len=from.length-start; + to.flags=from[start+4]; + to.flagRequest = (from[start+4] & 0x80)!=0; + to.flagProxiable = (from[start+4] & 0x40)!=0; + to.flagError = (from[start+4] & 0x20)!=0; + to.flagRetransmission = (from[start+4] & 0x10)!=0; + + to.commandCode = ((int)from[start+ 5]&0xFF)<<16 | + ((int)from[start+ 6]&0xFF)<< 8 | + ((int)from[start+ 7]&0xFF); + + to.applicationID = ((int)from[start+ 8]&0xFF)<<24 | + ((int)from[start+ 9]&0xFF)<<16 | + ((int)from[start+10]&0xFF)<< 8 | + ((int)from[start+11]&0xFF); + + to.hopByHopID = ((int)from[start+12]&0xFF)<<24 | + ((int)from[start+13]&0xFF)<<16 | + ((int)from[start+14]&0xFF)<< 8 | + ((int)from[start+15]&0xFF); + + to.endToEndID = ((int)from[start+16]&0xFF)<<24 | + ((int)from[start+17]&0xFF)<<16 | + ((int)from[start+18]&0xFF)<< 8 | + ((int)from[start+19]&0xFF); + + i = start+20; + while (i temp; + byte[] t; + + temp = new Vector(); + for(i=0;i> 16) & 0xFF); + to[2] = (byte) ((total_len >> 8) & 0xFF); + to[3] = (byte) ( total_len & 0xFF); + + if (from.flagRequest) to[4] |= 0x80; + if (from.flagProxiable) to[4] |= 0x40; + if (from.flagError) to[4] |= 0x20; + if (from.flagRetransmission) to[4] |= 0x10; + to[5] = (byte) ((from.commandCode >> 16) & 0xFF); + to[6] = (byte) ((from.commandCode >> 8) & 0xFF); + to[7] = (byte) ( from.commandCode & 0xFF); + + to[ 8] = (byte) ((from.applicationID >> 24) & 0xFF); + to[ 9] = (byte) ((from.applicationID >> 16) & 0xFF); + to[10] = (byte) ((from.applicationID >> 8) & 0xFF); + to[11] = (byte) ( from.applicationID & 0xFF); + + to[12] = (byte) ((from.hopByHopID >> 24) & 0xFF); + to[13] = (byte) ((from.hopByHopID >> 16) & 0xFF); + to[14] = (byte) ((from.hopByHopID >> 8) & 0xFF); + to[15] = (byte) ( from.hopByHopID & 0xFF); + + to[16] = (byte) ((from.endToEndID >> 24) & 0xFF); + to[17] = (byte) ((from.endToEndID >> 16) & 0xFF); + to[18] = (byte) ((from.endToEndID >> 8) & 0xFF); + to[19] = (byte) ( from.endToEndID & 0xFF); + + len = 20; + for(i=0;i avps; + public int numberOfAvps=0; + + + /** statistical time - close to media */ + public long networkTime=0; + + + /** + * Dumb constructor. + */ + public DiameterMessage() + { + avps = new Vector(); + } + + /** + * Constructor that initializes everything. + * @param Command_Code + * @param Request + * @param Proxiable + * @param Application_id + * @param HopByHop_id + * @param EndToEnd_id + */ + public DiameterMessage(int Command_Code,boolean Request,boolean Proxiable, + int Application_id,/*long*/int HopByHop_id, /*long*/int EndToEnd_id) + { + this.commandCode = Command_Code; + this.flagRequest = Request; + this.flagProxiable = Proxiable; + this.applicationID = Application_id; + this.hopByHopID = HopByHop_id; + this.endToEndID = EndToEnd_id; + avps = new Vector(); + } + + /** + * Constructor that initializes just the needed attributes. + * @param Command_Code + * @param Request + * @param Application_id + */ + public DiameterMessage(int Command_Code,boolean Request,int Application_id) + { + this.commandCode = Command_Code; + this.flagRequest = Request; + this.flagProxiable = false; + this.applicationID = Application_id; + avps = new Vector(); + } + + /** + * Adds one AVP to the message. + * @param child + */ + public void addAVP(AVP child) + { + avps.add(child); + } + + /** + * Returns the count of the AVPs. + * + * @return The number of all available AVPs. + */ + public int getAVPCount() + { + return avps.size(); + } + + /** + * Returns the AVP. + * @param index + * @return the found AVP or null if out of bounds + */ + public AVP getAVP(int index) + { + if (index + * + * Class DIAMETER Codec is extending AbstractBaseCodec class + * and provides DIAMETER Codec and Decodec. + *

    + * @author SINTESIO + * + * */ +public class DIAMETERCodec extends AbstractBaseCodec implements TciCDProvided { + + private TciCDRequired typeServer; + private TciTMProvided management; + + private Type booleanType; + private Type octetstringType; + private Type charstringType; + private Type universalcharstringType; + private Type integerType; + private Type bigintegerType; + + private byte[] encodedMsg = null ; + private int UsedBitsInByte; + private boolean padding = true; + + /*used for decoding of unsupported AVPs inside messages*/ + RecordOfValue rov_any_AVP; + + /** Command code of Request/Answer */ + public static final int Code_CE=257;// Capabilities-Exchange + public static final int Code_RA=258;// Re-Auth + public static final int Code_AC=271;// Accounting + public static final int Code_AS=274;// Abort-Session + public static final int Code_ST=275;// Session-Termination + public static final int Code_DW=280;// Device-Watchdog + public static final int Code_DP=282;// Disconnect-Peer + + /* Codes on Cx */ + public static final int Code_UA=300;// User-Authorization + public static final int Code_SA=301;// Server-Assignment-Request SAR (284 in RFC4740 or 301 in TS 129 229) + public static final int Code_LI=302;// Location-Info-Request LIR (285 in RFC4740 or 302 in TS 129 229) + public static final int Code_MA=303;// Multimedia-Auth-Request MAR (286 in RFC4740 or 303 in TS 129 229) + public static final int Code_RT=304;// Registration-Termination-Request RTR (287 in RFC4740 or 304 in TS 129 229) + public static final int Code_PP=305;// Push-Profile-Request PPR (288 in RFC4740 or 305 in TS 129 229) + + /* Codes on Sh/Dh interface */ + public static final int Code_UD=306;// UDR User-Data-Request AS->HSS UDR (306) + public static final int Code_PU=307;// PUR Profile-Update-Request AS->HSS PUR (307) + public static final int Code_SN=308;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + public static final int Code_PN=309;// PNR Profile-Notification-Request HSS->AS PNR (309) + + /* Codes on Rx interface */ + public static final int Code_AA=265;// Auth-Accounting + + /* Codes on Gx interface - RFC4006 and TS 129 212 */ + public static final int Code_CC=272;// Credit-Control + + /* Codes on S6a interface - TS 129 272 */ + public static final int Code_UL=316; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + public static final int Code_CL=317; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + public static final int Code_AI=318; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + public static final int Code_ID=319; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + public static final int Code_DS=320; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + public static final int Code_PUE=321; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + public static final int Code_RS=322; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + public static final int Code_NO=323; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + + + /*RFC3588 AVP codes*/ + private static final int AVP_Accounting_Realtime_Required_AVP = 483; //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + private static final int AVP_Accounting_Record_Number_AVP = 485; //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + private static final int AVP_Accounting_Record_Type_AVP = 480; //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + private static final int AVP_Accounting_Sub_Session_Id_AVP = 287; //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + private static final int AVP_Acct_Application_Id_AVP = 259; //Ref: RFC3588 6.9. Acct-Application-Id AVP + private static final int AVP_Acct_Interim_Interval_AVP = 85; //Ref: RFC3588 9.8.2. Acct-Interim-Interval + private static final int AVP_Acct_Multi_Session_Id_AVP = 50; //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + private static final int AVP_Acct_Session_Id_AVP = 44; //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + private static final int AVP_Auth_Application_Id_AVP = 258; //Ref: RFC3588 6.8. Auth-Application-Id AVP + private static final int AVP_Class_AVP = 25; //Ref: RFC3588 8.20. Class AVP + private static final int AVP_Destination_Host_AVP = 293; //Ref: RFC3588 6.5. Destination-Host AVP + private static final int AVP_Destination_Realm_AVP = 283; //Ref: RFC3588 6.6. Destination-Realm AVP + private static final int AVP_Disconnect_Cause_AVP = 273; //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + private static final int AVP_Error_Message_AVP = 281; //Ref: RFC3588 7.3. Error-Message AVP + private static final int AVP_Error_Reporting_Host_AVP = 294; //Ref: RFC3588 7.4. Error-Reporting-Host AVP + private static final int AVP_Event_Timestamp_AVP = 55; //Ref: RFC3588 8.21. Event-Timestamp AVP + private static final int AVP_Failed_AVP = 279; //Ref: RFC3588 7.5. Failed-AVP AVP + private static final int AVP_Firmware_Revision_AVP = 267; //Ref: RFC3588 5.3.4. Firmware-Revision AVP + private static final int AVP_Host_IP_Address_AVP = 257; //Ref: RFC3588 5.3.5. Host-IP-Address AVP + private static final int AVP_Inband_Security_Id_AVP = 299; //Ref: RFC3588 6.10. Inband-Security-Id AVP + private static final int AVP_Origin_Host_AVP = 264; //Ref: RFC3588 6.3. Origin-Host AVP + private static final int AVP_Origin_Realm_AVP = 296; //Ref: RFC3588 6.4. Origin-Realm AVP + private static final int AVP_Origin_State_Id_AVP = 278; //Ref: RFC3588 8.16. Origin-State-Id AVP + private static final int AVP_Product_Name_AVP = 269; //Ref: RFC3588 5.3.7. Product-Name AVP + private static final int AVP_Proxy_Host_AVP = 280; //Ref: RFC3588 6.7.3. Proxy-Host AVP + private static final int AVP_Proxy_Info_AVP = 284; //Ref: RFC3588 6.7.2. Proxy-Info AVP + private static final int AVP_Proxy_State_AVP = 33; //Ref: RFC3588 6.7.4. Proxy-State AVP + private static final int AVP_Re_Auth_Request_Type_AVP = 285; //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + private static final int AVP_Redirect_Host_AVP = 292; //Ref: RFC3588 6.12. Redirect-Host AVP + private static final int AVP_redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 redirect_Max_Cache_Time_AVP is not defined. + private static final int AVP_Redirect_Host_Usage_AVP = 261; //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + private static final int AVP_Result_Code_AVP = 268; //Ref: RFC3588 7.1. Result-Code AVP + private static final int AVP_Route_Record_AVP = 282; //Ref: RFC3588 6.7.1. Route-Record AVP + private static final int AVP_Session_Id_AVP = 263; //Ref: RFC3588 8.8. Session-Id AVP + private static final int AVP_Supported_Vendor_Id_AVP = 265; //Ref; RFC3588 5.3.6. Supported-Vendor-Id AVP + private static final int AVP_Termination_Cause_AVP = 295; //Ref: RFC3588 8.15. Termination-Cause AVP + private static final int AVP_User_Name_AVP = 1; //Ref: RFC3588 8.14. User-Name AVP + private static final int AVP_Vendor_Id_AVP = 266; //Ref: RFC3588 5.3.3. Vendor-Id AVP + private static final int AVP_Vendor_Specific_Appl_Id_AVP = 260; //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + /*end RFC3588 AVP codes*/ + + //RFC4740 AVP codes{ +// private static final int AVP_Auth_Grace_Period_AVP = 276; //Ref: RFC3588 8.10. Auth-Grace-Period AVP + private static final int AVP_Auth_Session_State_AVP = 277; //Ref: RFC3588 8.11. Auth-Session-State AVP +// private static final int AVP_Authorization_Lifetime_AVP = 291; //Ref: RFC3588 8.9. Authorization-Lifetime AVP +// private static final int AVP_Redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP +// private static final int AVP_SIP_Accounting_Information_AVP = 368; //Ref: RFC4740 9.1. SIP-Accounting-Information AVP +// private static final int AVP_SIP_Accounting_Server_URI_AVP = 369; //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP +// private static final int AVP_SIP_AOR_AVP = 122; //Ref: RFC4740 9.8. SIP-AOR AVP + private static final int AVP_SIP_Auth_Data_Item_RFC_AVP = 376; //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + private static final int AVP_SIP_Item_Number_AVP = 378; + private static final int AVP_SIP_Authenticate_RFC_AVP = 379; //Ref: RFC4740 9.5.3. SIP-Authenticate AVP +// private static final int AVP_SIP_Authentication_Info_AVP = 381; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + private static final int AVP_SIP_Authentication_Scheme_RFC_AVP = 377; //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + private static final int AVP_SIP_Authorization_RFC_AVP = 380; //Ref: RFC4740 9.5.4. SIP-Authorization AVP +// private static final int AVP_SIP_Credit_Control_Server_URI_AVP = 370; //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP +// private static final int AVP_SIP_Deregistration_Reason_AVP = 383; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP +// private static final int AVP_SIP_Item_Number_AVP = 378; //Ref: RFC4740 9.5.2 SIP-Item-Number AVP +// private static final int AVP_SIP_MandatoryCapability_AVP = 373; //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + private static final int AVP_SIP_Method_AVP = 393; //Ref: RFC4740 9.14. SIP-Method AVP + private static final int AVP_SIP_Number_Auth_Items_RFC_AVP = 382; //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP +// private static final int AVP_SIP_OptionalCapability_AVP = 374; //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP +// private static final int AVP_SIP_Reason_Code_AVP = 384; //Ref: RFC4740 9.7.1. SIP-Reason-Code AVP +// private static final int AVP_SIP_Reason_Info_AVP = 385; //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP +// private static final int AVP_SIP_Server_Assignment_Type_AVP = 375; //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP +// private static final int AVP_SIP_Server_Capabilities_AVP = 372; //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP +// private static final int AVP_SIP_Server_URI_AVP = 371; //Ref: RFC4740 9.2 SIP-Server-URI AVP +// private static final int AVP_SIP_Supported_User_Data_Type_AVP = 388; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// private static final int AVP_SIP_User_Authorization_Type_AVP = 387; //Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP +// private static final int AVP_SIP_User_Data_Already_Available_AVP = 392; //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP +// private static final int AVP_SIP_User_Data_AVP = 389; //Ref: RFC4740 9.12. SIP-User-Data AVP +// private static final int AVP_SIP_User_Data_Contents_AVP = 391; //Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP +// private static final int AVP_SIP_User_Data_Type_AVP = 390; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// private static final int AVP_SIP_Visited_Network_Id_AVP = 386; //Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + //end of RFC4740 AVP codes + + private static final int AVP_Digest_Realm_AVP = 104; + private static final int AVP_Digest_Nonce_AVP = 105; + private static final int AVP_Digest_Domain_AVP = 119; + private static final int AVP_Digest_Opaque_AVP = 116; + private static final int AVP_Digest_Stale_AVP = 120; + private static final int AVP_Digest_Algorithm_AVP = 111; + private static final int AVP_Digest_QoP_AVP = 110; + private static final int AVP_Digest_HA1_AVP = 121; + private static final int AVP_Digest_Auth_Param_AVP = 117; + private static final int AVP_Digest_Username_AVP = 115; + private static final int AVP_Digest_URI_AVP = 109; + private static final int AVP_Digest_Response_AVP = 103; + private static final int AVP_Digest_CNonce_AVP = 113; + private static final int AVP_Digest_Nonce_Count_AVP = 114; + private static final int AVP_Digest_Method_AVP = 108; + private static final int AVP_Digest_Entity_Body_Hash_AVP = 112; + private static final int AVP_Digest_Nextnonce_AVP = 107; + private static final int AVP_Digest_Response_Auth_AVP = 106; + + + //RFC4005 AVP codes + private static final int AVP_Called_Station_Id_AVP = 30; + private static final int AVP_Framed_IP_Address_AVP = 8; + private static final int AVP_Framed_IPv6_Prefix_AVP = 97; + private static final int AVP_Framed_Interface_Id_AVP = 96; + //end of RFC4005 AVP codes + + //RFC4006 AVP codes +// private static final int AVP_Rating_Group_AVP = 433; //Ref: RFC4006 8.29. Rating-Group AVP +private static final int AVP_Tariff_Time_Change_AVP = 451; //Ref: RFC4006 8.20. Tariff-Time-Change AVP +// private static final int AVP_CC_Correlation_Id_AVP = 411; //Ref: RFC4006 8.1. CC-Correlation-Id AVP +private static final int AVP_CC_Input_Octets_AVP = 412; //Ref: RFC4006 8.24. CC-Input-Octets AVP +private static final int AVP_CC_Money_AVP = 413; //Ref: RFC4006 8.22. CC-Money AVP +private static final int AVP_CC_Output_Octets_AVP = 414; //Ref: RFC4006 8.25. CC-Output-Octets AVP + private static final int AVP_CC_Request_Number_AVP = 415; //Ref: RFC4006 8.2. CC-Request-Number AVP + private static final int AVP_CC_Request_Type_AVP = 416; //Ref: RFC4006 8.3. CC-Request-Type AVP +private static final int AVP_CC_Service_Specific_Units_AVP = 417; //Ref: RFC4006 8.26. CC-Service-Specific-Units AVP +private static final int AVP_CC_Session_Failover_AVP = 418; //Ref: RFC4006 8.4. CC-Session-Failover AVP +// private static final int AVP_vendIdCC_Sub_Session_Id_AVP = 419; //Ref: RFC4006 8.5. CC-Sub-Session-Id AVP +private static final int AVP_CC_Time_AVP = 420; //Ref: RFC4006 8.21. CC-Time AVP +private static final int AVP_CC_Total_Octets_AVP = 421; //Ref: RFC4006 8.23. CC-Total-Octets AVP +private static final int AVP_CC_Unit_Type_AVP = 454; //Ref: RFC4006 8.32. CC-Unit-Type AVP +// private static final int AVP_vendIdCheck_Balance_Result_AVP = 422; //Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP +private static final int AVP_Cost_Information_AVP = 423; //Ref: RFC4006 8.7. Cost-Information AVP +private static final int AVP_Cost_Unit_AVP = 424; //Ref: RFC4006 8.12. Cost-Unit AVP +private static final int AVP_Credit_Control_Failure_Handling_AVP = 427; //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP +private static final int AVP_Currency_Code_AVP = 425; //Ref: RFC4006 8.11. Currency-Code AVP +private static final int AVP_Direct_Debiting_Failure_Handling_AVP = 428; //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP +private static final int AVP_Exponent_AVP = 429; //Ref: RFC4006 8.9. Exponent AVP +private static final int AVP_Filter_Id_AVP = 11; //Ref: RFC4005 6.7. Filter-Id AVP +private static final int AVP_Final_Unit_Action_AVP = 449; //Ref: RFC4006 8.35. Final-Unit-Action AVP +private static final int AVP_Final_Unit_Indication_AVP = 430; //Ref: RFC4006 8.34. Final-Unit-Indication AVP +private static final int AVP_G_S_U_Pool_Identifier_AVP = 453; //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP +private static final int AVP_G_S_U_Pool_Reference_AVP = 457; //Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP +private static final int AVP_Granted_Service_Unit_AVP = 431; //Ref: RFC4006 8.17. Granted-Service-Unit AVP +// private static final int AVP_vendIdMultiple_Services_Credit_Control_AVP = 456; //Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP +private static final int AVP_Multiple_Services_Indicator_AVP = 455; //Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + private static final int AVP_Redirect_Address_Type_AVP = 433; //Ref: RFC4006 8.38. Redirect-Address-Type AVP + private static final int AVP_Redirect_Server_Address_AVP = 435; //Ref: RFC4006 8.39. Redirect-Server-Address AVP + private static final int AVP_Redirect_Server_AVP = 434; //Ref: RFC4006 8.37. Redirect-Server AVP +// private static final int AVP_vendIdRequested_Action_AVP = 436; //Ref: RFC4006 8.41. Requested-Action AVP +private static final int AVP_Requested_Service_Unit_AVP = 437; //Ref: RFC4006 8.18. Requested-Service-Unit AVP +private static final int AVP_Restriction_Filter_Rule_AVP = 438; //Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + private static final int AVP_Service_Context_Id_AVP = 461; //Ref: RFC4006 8.42. Service-Context-Id AVP + private static final int AVP_Service_Identifier_AVP = 439; //Ref: RFC4006 8.28. Service-Identifier AVP + private static final int AVP_Requested_Action_AVP = 436; + // private static final int AVP_vendIdService_Parameter_Info_AVP = 440; //Ref: RFC4006 8.43. Service-Parameter-Info AVP +// private static final int AVP_vendIdService_Parameter_Type_AVP = 441; //Ref: RFC4006 8.44. Service-Parameter-Type AVP +// private static final int AVP_vendIdService_Parameter_Value_AVP = 442; //Ref: RFC4006 8.45. Service-Parameter-Value AVP + private static final int AVP_Subscription_Id_AVP = 443; //Ref: RFC4006 8.46. Subscription-Id AVP + private static final int AVP_Subscription_Id_Data_AVP = 444; //Ref: RFC4006 + private static final int AVP_Subscription_Id_Type_AVP = 450; //Ref: RFC4006 8.47. Subscription-Id-Type AVP + private static final int AVP_Tariff_Change_Usage_AVP = 452;//Ref: RFC4006 8.27. Tariff-Change-Usage AVP + private static final int AVP_Rating_Group_AVP = 433; +private static final int AVP_Unit_Value_AVP = 445; //Ref: RFC4006 8.8. Unit-Value AVP +private static final int AVP_Used_Service_Unit_AVP = 446; //Ref: RFC4006 8.19. Used-Service-Unit AVP +// private static final int AVP_vendIdUser_Equipment_Info_AVP = 458; //Ref: RFC4006 8.49. User-Equipment-Info AVP +// private static final int AVP_vendIdUser_Equipment_Info_Type_AVP = 459; //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP +// private static final int AVP_vendIdUser_Equipment_Info_Value_AVP = 460; //Ref: RFC4006 8.51. User-Equipment-Info-Value AVP +private static final int AVP_Validity_Time_AVP = 448; //Ref: RFC4006 8.33. Validity-Time AVP +private static final int AVP_Value_Digits_AVP = 447; //Ref: RFC4006 8.10. Value-Digits AVP + /*end of RFC4006 AVP codes*/ + + //TS129_229 AVP codes +// private static final int AVP_vendIdCharging_Information_AVP = 61; //Ref: ETSI TS 129 229 Charging_Information_AVP +// private static final int AVP_vendIdPrimary_Event_Charging_Function_Name_AVP = 619; //Ref: ETSI TS 129 229 Primary_Event_Charging_Function_Name_AVP +// private static final int AVP_vendIdSecondary_Event_Charging_Function_Name_AVP = 620; //Ref: ETSI TS 129 229 Secondary_Event_Charging_Function_Name_AVP +// private static final int AVP_vendIdPrimary_Charging_Collection_Function_Name_AVP = 621; //Ref: ETSI TS 129 229 Primary_Charging_Collection_Function_Name_AVP +// private static final int AVP_vendIdSecondary_Charging_Collection_Function_Name_AVP = 622; //Ref: ETSI TS 129 229 Secondary_Charging_Collection_Function_Name_AVP + private static final int AVP_Charging_Rule_Remove_AVP = 1002; + private static final int AVP_Charging_Rule_Install_AVP = 1001; + private static final int AVP_Charging_Rule_Report_AVP = 1018; + private static final int AVP_Routing_Rule_Install_AVP = 1081; + private static final int AVP_Routing_Rule_Remove_AVP = 1075; + private static final int AVP_QoS_Information_AVP = 1016; + private static final int AVP_Default_EPS_Bearer_QoS_AVP = 1049; + private static final int AVP_Server_Capabilities_AVP = 603; //Ref: ETSI TS 129 229 Server_Capabilities_AVP +// private static final int AVP_vendIdMandatory_Capability_AVP = 604; //Ref: ETSI TS 129 229 Mandatory_Capability_AVP +// private static final int AVP_vendIdOptional_Capability_AVP = 605; //Ref: ETSI TS 129 229 Optional_Capability_AVP + private static final int AVP_IP_CAN_Type_AVP = 1027; + private static final int AVP_RAT_Type_AVP = 1032; //Ref: ETSI TS 129 212 RAT_Type_AVP + private static final int AVP_Event_Trigger_AVP = 1006; + private static final int AVP_Session_Release_Cause_AVP = 1045; + private static final int AVP_Charging_Rule_Name_AVP = 1005; + private static final int AVP_AN_GW_Address_AVP = 1050; + + private static final int AVP_Experimental_Result_AVP = 297; + private static final int AVP_Experimental_Result_Code_AVP = 298; + private static final int AVP_User_Data_AVP = 606; + + /*end of TS129_229 AVP codes*/ + + //tS129_329 + private static final int AVP_Public_Identity_AVP = 601; + private static final int AVP_Server_Name_AVP = 602; + private static final int AVP_Feature_List_ID_AVP = 629; // Ref: 3GPP TS 29.229, clause 6.3.30 + private static final int AVP_Feature_List_AVP = 630; // Ref: 3GPP TS 29.229, clause 6.3.31 + private static final int AVP_Supported_Features_AVP = 628; // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) + /*End TS129_329*/ + + //Sh AVP codes + + ////private static final int AVP_Public_Identity_AVP = 601; + private static final int AVP_User_Identity_AVP = 700; + private static final int AVP_MSISDN_AVP= 701; + private static final int AVP_User_Data_Sh_AVP= 702; + private static final int AVP_Data_Reference_AVP = 703; + private static final int AVP_Service_Indication_AVP = 704; + private static final int AVP_Subs_Req_Type_AVP =705; + private static final int AVP_Requested_Domain_AVP = 706; + private static final int AVP_Current_Location_AVP = 707; + private static final int AVP_Identity_Set_AVP = 708; + private static final int AVP_Expiry_Time_AVP= 709; + private static final int AVP_Send_Data_Indication_AVP = 710; + private static final int AVP_Repository_Data_ID_AVP = 715; + private static final int AVP_Sequence_Number_AVP = 716; + ////private static final int AVP_Server_Name_AVP = 602; + ////private static final int AVP_Supported_Features_AVP = 628; + ////private static final int AVP_Feature_List_ID_AVP = 629; + ////private static final int AVP_Feature_List_AVP = 630; + private static final int AVP_Wildcarded_PSI_AVP = 634; + private static final int AVP_Wildcarded_IMPU_AVP = 636; + private static final int AVP_DSAI_Tag_AVP = 711; + ////private static final int AVP_Experimental_Result_Code_AVP = 298; + ////private static final int AVP_Experimental_Result_AVP = 297; + ////private static final int AVP_User_Data_AVP = 606; + //TS129_214 AVP codes + private static final int AVP_Media_Component_Description_AVP = 517; + private static final int AVP_Media_Component_Nr_AVP = 518; + private static final int AVP_Media_Sub_Component_AVP = 519; + private static final int AVP_AF_Application_Identifier_AVP = 504; + private static final int AVP_Media_Type_AVP = 520; + private static final int AVP_AF_Signalling_Protocol_AVP = 529; + private static final int AVP_Reservation_Priority_AVP = 458; + private static final int AVP_RS_Bandwidth_AVP = 522; + private static final int AVP_RR_Bandwidth_AVP = 521; + private static final int AVP_Codec_Data_AVP = 524; + private static final int AVP_Flow_Description_AVP = 507; + private static final int AVP_Flow_Number_AVP = 509; + private static final int AVP_Flow_Status_AVP = 511; + private static final int AVP_Flow_Usage_AVP = 512; + private static final int AVP_Specific_Action_AVP = 513; + private static final int AVP_Service_Info_Status_AVP = 527; + private static final int AVP_Rx_Request_Type_AVP = 533; + + //TS129_215 AVP codes + private static final int AVP_QoS_Rule_Name_AVP = 1054; + private static final int AVP_Rule_Failure_Code_AVP = 1031; + private static final int AVP_PDN_Connection_ID_AVP = 1065; + private static final int AVP_QoS_Rule_Report_AVP = 1055; + private static final int AVP_QoS_Rule_Install_AVP = 1051; + private static final int AVP_Multiple_BBERF_Action_AVP = 2204; + private static final int AVP_Session_Linking_Indicator_AVP = 1064; + private static final int AVP_Subses_Decision_Info_AVP = 2200; + private static final int AVP_Subses_Enforcement_Info_AVP = 2201; + private static final int AVP_Subsession_Id_AVP = 2202; + private static final int AVP_Subsession_Operation_AVP = 2203; + //End TS129_215 AVP codes + + //TS129_272 AVP codes + private static final int AVP_ULR_Flags_AVP = 1405; //ref: 7.3.7 ETSI TS 129 272 + private static final int AVP_ULA_Flags_AVP = 1406; //ref: 7.3.8 + private static final int AVP_Visited_PLMN_Id_AVP = 1407; //ref: 7.3.9 + private static final int AVP_UE_SRVCC_Capability_AVP = 1615; //ref: 7.3.130 + private static final int AVP_SGSN_Number_AVP = 1489; //ref: 7.3.102 + private static final int AVP_Homogeneous_Support_AVP = 1493; //ref: 7.3.107 + + private static final int AVP_Context_Identifier_AVP = 1423; //ref: 7.3.27 + private static final int AVP_Service_Selection_AVP = 493; //ref: 7.3.36 + private static final int AVP_MIP_Home_Agent_Address_AVP = 334; //ref: 7.3.42 - IETF RFC 4004 7.4 + private static final int AVP_MIP_Home_Agent_Host_AVP = 348; //ref: 7.3.43 - IETF RFC 4004 7.11 + private static final int AVP_MIP6_Home_Link_Prefix_AVP = 125; //ref:IETF RFC 5447 4.2.4 + private static final int AVP_MIP6_Agent_Info_AVP = 486; //ref: 7.3.45 + private static final int AVP_Visited_Network_Identifier_AVP = 600; //ref: 7.3.105 - TS 129 229 6.3.1 + private static final int AVP_SIP_Authentication_Context_AVP = 611; + private static final int AVP_UAR_Flags_AVP = 637; + private static final int AVP_User_Authorization_Type_AVP = 623; + private static final int AVP_Server_Assignment_Type_AVP = 614; + private static final int AVP_User_Data_Already_Available_AVP = 624; + private static final int AVP_SIP_Digest_Authenticate_AVP = 635; + private static final int AVP_SCSCF_Restoration_Info_AVP = 639; + private static final int AVP_Restoration_Info_AVP = 649; + private static final int AVP_Path_AVP = 640; + private static final int AVP_Contact_AVP = 641; + private static final int AVP_Subscription_Info_AVP = 642; + private static final int AVP_Originating_Request_AVP = 652; + private static final int AVP_Deregistration_Reason_AVP = 615; + private static final int AVP_Reason_Code_AVP = 616; + private static final int AVP_Reason_Info_AVP = 617; + private static final int AVP_Specific_APN_Info_AVP = 1472; //ref: 7.3.82 + private static final int AVP_Active_APN_AVP = 1612; //ref: 7.3.127 + private static final int AVP_Error_Diagnostic_AVP = 1614; //ref: 7.3.128; + private static final int AVP_Subscriber_Status_AVP = 1424; + private static final int AVP_Operator_Determined_Barring_AVP = 1425; + private static final int AVP_HPLMN_ODB_AVP = 1418; + private static final int AVP_Access_Restriction_Data_AVP = 1426; + private static final int AVP_APN_OI_Replacement_AVP = 1427; + private static final int AVP_Max_Requested_Bandwidth_UL_AVP = 516; + private static final int AVP_Max_Requested_Bandwidth_DL_AVP = 515; + private static final int AVP_APN_Aggregate_Max_Bitrate_UL_AVP = 1041; + private static final int AVP_APN_Aggregate_Max_Bitrate_DL_AVP = 1040; + private static final int AVP_AMBR_AVP = 1435; + + private static final int AVP_All_APN_Conf_Included_Id_AVP = 1428; + private static final int AVP_APN_Configuration_Profile_AVP = 1429; + private static final int AVP_PDN_Type_AVP = 1456; + private static final int AVP_QoS_Class_Identifier_AVP=1028; + private static final int AVP_Priority_Level_AVP = 1046; + private static final int AVP_Pre_emption_Capability_AVP = 1047; + private static final int AVP_Pre_emption_Vulnerability_AVP = 1048; + + private static final int AVP_Allocation_Retention_Priority_AVP =1034; + private static final int AVP_EPS_Subscribed_QoS_Profile_AVP = 1431; + private static final int AVP_APN_Configuration_AVP = 1430; + private static final int AVP_GMLC_Address_AVP = 2405; //ref: 7.3.109 - TS 129 173 6.4.7 + //.... + private static final int AVP_Complete_DL_Included_Indicator_AVP = 1468; + private static final int AVP_QoS_Subscribed_AVP = 1404; + private static final int AVP_PDP_Type_AVP = 1470; + private static final int AVP_PDP_Context_AVP = 1469; + private static final int AVP_GPRS_Subscription_Data_AVP = 1467; + private static final int AVP_Subscription_Data_AVP = 1400; //ref: 7.3.2 + private static final int AVP_Immediate_Response_Preferred_AVP = 1412; //ref: 7.3.16 + private static final int AVP_Re_synchronization_Info_AVP = 1411; //ref: 7.3.15 + private static final int AVP_Req_EUTRAN_Auth_Info_AVP = 1408; //ref: 7.3.11 + private static final int AVP_Req_UTRAN_GERAN_Auth_Info_AVP = 1409; //ref: 7.3.12 + + private static final int AVP_Item_Number_AVP = 1419; + private static final int AVP_RAND_AVP = 1447; + private static final int AVP_XRES_AVP = 1448; + private static final int AVP_AUTN_AVP = 1449; + private static final int AVP_KASME_AVP = 1450; + private static final int AVP_E_UTRAN_Vector_AVP = 1414; + private static final int AVP_SIP_Authentication_Scheme_3GPP_AVP = 608; + private static final int AVP_SIP_Authenticate_3GPP_AVP = 609; + private static final int AVP_SIP_Authorization_3GPP_AVP = 610; + private static final int AVP_SIP_Number_Auth_Items_3GPP_AVP = 607; + private static final int AVP_SIP_Auth_Data_Item_3GPP_AVP = 612;//ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + private static final int AVP_Identity_with_Emergency_Registration_AVP = 651; + private static final int AVP_Confidentiality_Key_AVP = 625; + private static final int AVP_Integrity_Key_AVP = 626; + private static final int AVP_Line_Identifier_AVP = 500; + private static final int AVP_UTRAN_Vector_AVP = 1415; + private static final int AVP_SRES_AVP = 1454; + private static final int AVP_Kc_AVP = 1453; + private static final int AVP_GERAN_Vector_AVP = 1416; + private static final int AVP_Authentication_Info_AVP = 1413; + + private static final int AVP_Cancellation_Type_AVP = 1420; + private static final int AVP_CLR_Flags_AVP = 1638; //ref: 7.3.152 + private static final int AVP_IDR_Flags_AVP = 1490; //ref: 7.3.103 + private static final int AVP_DSR_Flags_AVP = 1421; //ref: 7.3.25 + private static final int AVP_DSA_Flags_AVP = 1422; //ref: 7.3.26 + private static final int AVP_PUER_Flags_AVP= 1635; //ref: 7.3.149 + private static final int AVP_PUEA_Flags_AVP= 1442; //ref: 7.3.48 + private static final int AVP_IDA_Flags_AVP = 1441; //ref: 7.3.47 + private static final int AVP_NOR_Flags_AVP = 1443; //ref: 7.3.49 + private static final int AVP_IMS_Voice_PS_Sessions_Support_AVP = 1492; + private static final int AVP_Last_UE_Activity_Time_AVP = 1494; + private static final int AVP_EPS_User_State_AVP = 1495; + private static final int AVP_EPS_Location_Information_AVP = 1496; + //end TS129_272 AVP codes + + + //TS132_299 AVP codes + private static final int AVP_Charging_Information_AVP = 618; + private static final int AVP_Primary_Event_Charging_Function_Name_AVP = 619; + private static final int AVP_Secondary_Event_Charging_Function_Name_AVP = 620; + private static final int AVP_Primary_Charging_Collection_Function_Name_AVP = 621; + private static final int AVP_Secondary_Charging_Collection_Function_Name_AVP = 622; +// private static final int AVP_User_CSG_Information_AVP = 2319; //Ref: ETSI TS 132 299 User_CSG_Information_AVP +// private static final int AVP_CSG_Id_AVP = 1437; //Ref: ETSI TS 132 299 CSG_Id_AVP +// private static final int AVP_CSG_Access_Mode_AVP = 2317; //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP +// private static final int AVP_CSG_Membership_Indication_AVP = 2318; //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + private static final int AVP_Service_Information_AVP = 873; //Ref: ETSI TS 132 299 Service_Information_AVP + private static final int AVP_PS_Information_AVP = 874; //Ref: ETSI TS 132 299 PS_Information_AVP + private static final int AVP_WLAN_Information_AVP = 875; //Ref: ETSI TS 132 299 WLAN_Information_AVP + private static final int AVP_IMS_Information_AVP = 876; //Ref: ETSI TS 132 299 IMS_Information_AVP +// private static final int AVP_MMS_Information_AVP = 877; //Ref: ETSI TS 132 299 MMS_Information_AVP +// private static final int AVP_LCS_Information_AVP = 878; //Ref: ETSI TS 132 299 LCS_Information_AVP +// private static final int AVP_PoC_Information_AVP = 879; //Ref: ETSI TS 132 299 PoC_Information_AVP +// private static final int AVP_MBMS_Information_AVP = 880; //Ref: ETSI TS 132 299 MBMS_Information_AVP + private static final int AVP_Service_Generic_Information_AVP = 1256; //Ref: ETSI TS 132 299 Service_Generic_Information_AVP + private static final int AVP_Event_Type_AVP = 825; //Ref: ETSI TS 132 299 Event_Type_AVP + private static final int AVP_Event_AVP = 823; //Ref: ETSI TS 132 299 Event_AVP + private static final int AVP_Expires_AVP = 888; //Ref: ETSI TS 132 299 Expires_AVP + private static final int AVP_Role_Of_Node_AVP = 829; //Ref: ETSI TS 132 299 Role_Of_Node_AVP + private static final int AVP_Node_Functionality_AVP = 862; //Ref: ETSI TS 132 299 Node_Functionality_AVP + private static final int AVP_User_Session_ID_AVP = 830; //Ref: ETSI TS 132 299 User_Session_ID_AVP + private static final int AVP_Calling_Party_Address_AVP = 831; //Ref: ETSI TS 132 299 Calling_Party_Address_AVP + private static final int AVP_Called_Party_Address_AVP = 832; //Ref: ETSI TS 132 299 Called_Party_Address_AVP + private static final int AVP_Called_Asserted_Identity_AVP = 1250; //Ref: ETSI TS 132 299 Called_Asserted_Identity_AVP + private static final int AVP_Alternate_Charged_Party_Address_AVP = 1280;//Ref: ETSI TS 132 299 Alternate_Charged_Party_Address_AVP + private static final int AVP_Requested_Party_Address_AVP = 1251; //Ref: ETSI TS 132 299 Requested_Party_Address_AVP + private static final int AVP_Associated_URI_AVP = 856; //Ref: ETSI TS 132 299 Associated_URI_AVP + private static final int AVP_Time_Stamps_AVP = 833; //Ref: ETSI TS 132 299 Time_Stamps_AVP + private static final int AVP_SIP_Request_Timestamp_AVP = 834; //Ref: ETSI TS 132 299 SIP_Request_Timestamp_AVP + private static final int AVP_SIP_Response_Timestamp_AVP = 835; //Ref: ETSI TS 132 299 SIP_Response_Timestamp_AVP + private static final int AVP_Application_Server_Information_AVP = 850;//Ref: ETSI TS 132 299 Application_Server_Information_AVP + private static final int AVP_Application_Server_AVP = 836; //Ref: ETSI TS 132 299 Application_Server_AVP + private static final int AVP_Application_Provided_Called_Party_Address_AVP = 837; //Ref: ETSI TS 132 299 Application_Provided_Called_Party_Address_AVP + private static final int AVP_Inter_Operator_Identifier_AVP = 838; //Ref: ETSI TS 132 299 Inter_Operator_Identifier_AVP + private static final int AVP_Originating_IOI_AVP = 839; //Ref: ETSI TS 132 299 Originating_IOI_AVP + private static final int AVP_Terminating_IOI_AVP = 840; //Ref: ETSI TS 132 299 Terminating_IOI_AVP + private static final int AVP_IMS_Charging_Identifier_AVP = 841; //Ref: ETSI TS 132 299 IMS_Charging_Identifier_AVP + private static final int AVP_SDP_Session_Description_AVP = 842; //Ref: ETSI TS 132 299 SDP_Session_Description_AVP + private static final int AVP_SDP_Media_Component_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// private static final int AVP_SDP_Media_Name_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// private static final int AVP_SDP_Media_Description_AVP = 845; //Ref: ETSI TS 132 299 SDP_Media_Description_AVP +// private static final int AVP_Media_Initiator_Flag_AVP = 882; //Ref: ETSI TS 132 299 Media_Initiator_Flag_AVP +// private static final int AVP_Media_Initiator_Party_AVP = 1288; //Ref: ETSI TS 132 299 Media_Initiator_Party_AVP +// private static final int AVP_Authorized_QoS_AVP = 849; //Ref: ETSI TS 132 299 Authorized_QoS_AVP + private static final int AVP_Served_Party_IP_Address_AVP = 848; //Ref: ETSI TS 132 299 Served_Party_IP_Address_AVP + private static final int AVP_Trunk_Group_ID_AVP = 851; //Ref: ETSI TS 132 299 Trunk_Group_ID_AVP + private static final int AVP_Incoming_Trunk_Group_ID_AVP = 852; //Ref: ETSI TS 132 299 Incoming_Trunk_Group_ID_AVP + private static final int AVP_Outgoing_Trunk_Group_ID_AVP = 853; //Ref: ETSI TS 132 299 Outgoing_Trunk_Group_ID_AVP + + private static final int AVP_Delivery_Status_AVP =2104; + private static final int AVP_Application_Session_ID_AVP=2103; + private static final int AVP_Application_Service_Type_AVP=2102; + private static final int AVP_Application_Server_ID_AVP=2101; + + private static final int AVP_Reporting_Reason_AVP=872; + private static final int AVP_Time_Quota_Threshold_AVP=868; + private static final int AVP_Volume_Quota_Threshold_AVP=869; + private static final int AVP_Unit_Quota_Threshold_AVP=1226; + private static final int AVP_Quota_Holding_Time_AVP=871; + private static final int AVP_Quota_Consumption_Time_AVP=881; + private static final int AVP_Time_Quota_Type_AVP=1271; + private static final int AVP_Base_Time_Interval_AVP=1265; + private static final int AVP_Time_Quota_Mechanism_AVP=1270; + private static final int AVP_Envelope_Start_Time_AVP=1269; + private static final int AVP_Envelope_End_Time_AVP=1267; + private static final int AVP_Envelope_AVP=1266; + private static final int AVP_Envelope_Reporting_AVP=1268; + private static final int AVP_Trigger_AVP=1264; + private static final int AVP_Trigger_Type_AVP=870; + private static final int AVP_Refund_Information_AVP=2022; + private static final int AVP_Multiple_Services_Credit_Control_AVP = 456; + + private static final int AVP_Offline_Charging_AVP = 1278; + private static final int AVP_Low_Balance_Indication_AVP=2020; + private static final int AVP_Remaining_Balance_AVP = 2021; + //end of TS132_299 AVP codes + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] command_codes ={ + /* Ref: RFC3588 p.3.1 */ + + Code_CE, // Capabilities-Exchange-Request CER (257) + Code_CE, // Capabilities-Exchange-Answer CEA (257) + Code_RA, // Re-Auth-Request RAR (258) + Code_RA, // Re-Auth-Answer RAA (258) + /**/ + Code_AC, // Accounting-Request ACR(271) + Code_AC, // Accounting-Answer ACA (271) + /**/ + Code_AS, // Abort-Session-Request ASR (274) + Code_AS, // Abort-Sesion-Answer ASA (274) + Code_ST, // Session-Termination-Request STR (275) + Code_ST, // Session-Termination-Answer STA (275) + /**/ + Code_DW, // Device-Watchdog-Request DWR (280) + Code_DW, // Device-Watchdog-Answer DWA (280) + Code_DP, // Disconnect-Peer-Request DPR (282) + Code_DP, // Disconnect-Peer-Answer DPA (282) + + /* Codes on Cx */ + Code_UA, // User-Authorization-Request UAR 300 + Code_UA, // User-Authorization-Answer UAA 300 + Code_SA, // Server-Assignment-Request SAR 301 + Code_SA, // Server-Assignment-Answer SAA 301 + Code_LI, // Location-Info-Request LIR 302 + Code_LI, // Location-Info-Answer LIA 302 + Code_MA, // Multimedia-Auth-Request MAR 303 + Code_MA, // Multimedia-Auth-Answer MAA 303 + Code_RT, // Registration-Termination-Request RTR 304 + Code_RT, // Registration-Termination-Answer RTA 304 + Code_PP, // Push-Profile-Request PPR 305 + Code_PP, // Push-Profile-Answer PPA 305 + + /* Codes on Sh/Dh interface */ + Code_UD, // UDR User-Data-Request AS->HSS 306 + Code_UD, // UDA User-Data-Answer HSS->AS 306 + Code_PU, // PUR Profile-Update-Request AS->HSS 307 + Code_PU, // PUA Profile-Update-Answer HSS->AS 307 + Code_SN, // SNR Subscribe-Notifications-Request AS->HSS 308 + Code_SN, // SNA Subscribe-Notifications-Answer HSS->AS 308 + Code_PN, // PNR Profile-Notification-Request HSS->AS 309 + Code_PN, // PNA Profile-Notification-Answer AS->HSS 309 + + /* Codes on Rx interface */ + Code_AA, // AAR Auth-Accounting-Request 265 + Code_AA, // AAA Auth-Accounting-Request 265 + + /*RFC4006*/ + Code_CC, // CCR Credit-Control-Request 272 + Code_CC, // CCA Credit-Control-Answer 272 + + /* Codes on S6a interface - TS 129 272 */ + Code_UL, // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3 + Code_UL, // Update-Location-Answer ULA (316)- Ref: TS 129 272 7.2.4 + Code_CL, // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7 + Code_CL, // Cancel-Location-Answer CLA (317)- Ref: TS 129 272 7.2.8 + Code_AI, // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5 + Code_AI, // Authentication-Information-Answer AIA (318)- Ref: TS 129 272 7.2.6 + Code_ID, // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9 + Code_ID, // Insert-Subscriber-Data-Answer IDA (319)- Ref: TS 129 272 7.2.10 + Code_DS, // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11 + Code_DS, // Delete-Subscriber-Data-Answer DSA (320)- Ref: TS 129 272 7.2.12 + Code_PUE, // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13 + Code_PUE, // Purge-UE-Answer PUA (321)- Ref: TS 129 272 7.2.14 + Code_RS, // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15 + Code_RS, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 + Code_NO, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 + Code_NO // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] result_codes ={ + 0, // DIAMETER_DUMMY_E (0), + + 1001, // DIAMETER_MULTI_ROUND_AUTH_E (1001), + + 2001, // DIAMETER_SUCCESS_E (2001), + 2002, // DIAMETER_LIMITED_SUCCESS_E (2002), + + 3001, // DIAMETER_COMMAND_UNSUPPORTED_E (3001), + 3002, // DIAMETER_UNABLE_TO_DELIVER_E (3002), + 3003, // DIAMETER_REALM_NOT_SERVED_E (3003), + 3004, // DIAMETER_TOO_BUSY_E (3004), + 3005, // DIAMETER_LOOP_DETECTED_E (3005), + 3006, // DIAMETER_REDIRECT_INDICATION_E (3006), + 3007, // DIAMETER_APPLICATION_UNSUPPORTED_E (3007), + 3008, // DIAMETER_INVALID_HDR_BITS_E (3008), + 3009, // DIAMETER_INVALID_AVP_BITS_E (3009), + 3010, // DIAMETER_UNKNOWN_PEER_E (3010), + + 4001, // DIAMETER_AUTHENTICATION_REJECTED_E (4001), + 4002, // DIAMETER_OUT_OF_SPACE_E (4002), + 4003, // DIAMETER_ELECTION_LOST_E (4003), + + 5001, // DIAMETER_AVP_UNSUPPORTED_E (5001), + 5002, // DIAMETER_UNKNOWN_SESSION_ID_E (5002), + 5003, // DIAMETER_AUTHORIZATION_REJECTED_E (5003), + 5004, // DIAMETER_INVALID_AVP_VALUE_E (5004), + 5005, // DIAMETER_MISSING_AVP_E (5005), + 5006, // DIAMETER_RESOURCES_EXCEEDED_E (5006), + 5007, // DIAMETER_CONTRADICTING_AVPS_E (5007), + 5008, // DIAMETER_AVP_NOT_ALLOWED_E (5008), + 5009, // DIAMETER_AVP_OCCURS_TOO_MANY_TIMES_E (5009), + 5010, // DIAMETER_NO_COMMON_APPLICATION_E (5010), + 5011, // DIAMETER_UNSUPPORTED_VERSION_E (5011), + 5012, // DIAMETER_UNABLE_TO_COMPLY_E (5012), + 5013, // DIAMETER_INVALID_BIT_IN_HEADER_E (5013), + 5014, // DIAMETER_INVALID_AVP_LENGTH_E (5014), + 5015, // DIAMETER_INVALID_MESSAGE_LENGTH_E (5015), + 5016, // DIAMETER_INVALID_AVP_BIT_COMBO_E (5016), + 5017 // DIAMETER_NO_COMMON_SECURITY_E (5017) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Redirect_Host_Usage={ + 0,// DONT_CACHE_E (0), + 1,// ALL_SESSION_E (1), + 2,// ALL_REALM_E (2), + 3,// REALM_AND_APPLICATION_E (3), + 4,// ALL_APPLICATION_E (4), + 5,// ALL_HOST_E (5), + 6 // ALL_USER_E (6) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Acc_Record={ + 1,// EVENT_RECORD_E (1), + 2,// START_RECORD_E (2), + 3,// INTERIM_RECORD_E (3), + 4 // STOP_RECORD_E (4) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Acc_Realtime_Req={ + 1,// DELIVER_AND_GRANT_E (1), + 2,// GRANT_AND_STORE_E (2), + 3 // GRANT_AND_LOSE_E (3) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Termination_Cause={ + 1,// DIAMETER_LOGOUT_E (1), + 2,// DIAMETER_SERVICE_NOT_PROVIDED_E (2), + 3,// DIAMETER_BAD_ANSWER_E (3), + 4,// DIAMETER_ADMINISTRATIVE_E (4), + 5,// DIAMETER_LINK_BROKEN_E (5), + 6,// DIAMETER_AUTH_EXPIRED_E (6), + 7,// DIAMETER_USER_MOVED_E (7), + 8 // DIAMETER_SESSION_TIMEOUT_E (8) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Disconnect_Cause={ + 0,// REBOOTING_E (0), + 1,// BUSY_E (1), + 2 // DO_NOT_WANT_TO_TALK_TO_YOU_E (2) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Role_Of_Node={ + 0,// ORIGINATING_ROLE_E (0), + 1,// TERMINATING_ROLE_E (1), + 2,// PROXY_ROLE_E (2), + 3 // B2BUA_ROLE_E (3) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Node_Functionality={ + 0,// S_CSCF_E (0), + 1,// P_CSCF_E (1), + 2,// I_CSCF_E (2), + 3,// MRFC_E (3), + 4,// MGCF_E (4), + 5,// BGCF_E (5), + 6 // AS_E (6) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] CC_Request={ + // Ref: RFC4006 8.3. CC-Request-Type AVP + 1,// INITIAL_REQUEST_E (1), + 2,// UPDATE_REQUEST_E (2), + 3,// TERMINATION_REQUEST_E (3), + 4 // EVENT_REQUEST_E (4) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Requested_Action={ + // Ref: RFC4006 8.41. Requested-Action AVP + 0,// DIRECT_DEBITING_E (0), + 1,// REFUND_ACCOUNT_E (1), + 2,// CHECK_BALANCE_E (2), + 3 // PRICE_ENQUIRY_E (3) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Multi_Serv_Indi={ + // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + 0,// MULTIPLE_SERVICES_NOT_SUPPORTED_E (0), + 1 // MULTIPLE_SERVICES_SUPPORTED_E (1) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] User_Equipment_Info={ + //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + 0,// IMEISV_E (0), + 1,// MAC_E (1), + 2,// EUI64_E (2), + 3 // MODIFIED_EUI64_E (3) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] CC_Session_Failover={ + // Ref: RFC4006 8.4. CC-Session-Failover AVP + 0,// FAILOVER_NOT_SUPPORTED_E (0), + 1 // FAILOVER_SUPPORTED_E (1) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] CC_Failure_Handling={ + //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + 0,// TERMINATE_E (0), + 1,// CONTINUE_E (1), + 2 // RETRY_AND_TERMINATE_E (2) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] DD_Failure_Handling={ + //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + 0,// TERMINATE_OR_BUFFER_E (0), + 1 // CONTINUE_E (1) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Tariff_Change_Usage={ + // Ref: RFC4006 8.27. Tariff-Change-Usage AVP + 0,// UNIT_BEFORE_TARIFF_CHANGE_E (0), + 1,// UNIT_AFTER_TARIFF_CHANGE_E (1), + 2 // UNIT_INDETERMINATE_E (2) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] CC_Unit_Type={ + //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + 0,// TIME_E (0), + 1,// MONEY_E (1), + 2,// TOTAL_OCTETS_E (2), + 3,// INPUT_OCTETS_E (3), + 4,// OUTPUT_OCTETS_E (4), + 5 // SERVICE_SPECIFIC_UNITS_E (5) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[]Final_Unit_Action_Type={ + // Ref: RFC4006 8.35. Final-Unit-Action AVP + 0,// TERMINATE_E (0), + 1,// REDIRECT_E (1), + 2 // RESTRICT_ACCESS_E (2) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Redirect_Address_Type={ + // Ref: RFC4006 8.38. Redirect-Address-Type AVP + 0,// IPV4_ADDRESS_E (0), + 1,// IPV6_ADDRESS_E (1), + 2,// URL_E (2), + 3 // SIP_URI_E (3) + }; + + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + private final int[] Auth_Session_State_Type={ + 0,// STATE_MAINTAINED_E (0), + 1,// NO_STATE_MAINTAINED_E (1) + }; + + private final int[] RAT_Type={ + // Ref: ETSI TS 129 212 5.3.31 + 0,// WLAN_E (0), + 1,//VIRTUAL_E (1), + 1000,//UTRAN_E (1000), + 1001,//GERAN_E (1001), + 1002,//GAN_E (1002), + 1003,//HSPA_EVOLUTION_E (1003), + 1004,//EUTRAN_E (1004), + 2000,//CDMA2000_IX_E (2000), + 2002,//(2002), + 2003//EHRPD_E(2003) + }; + + //129.329 -sh + private final int[] Experimental_Result_Type={ + 2001,//DIAMETER_FIRST_REGISTRATION_E (2001), + 2002,//DIAMETER_SUBSEQUENT_REGISTRATION_E (2002), + 2003,//DIAMETER_UNREGISTERED_SERVICE_E (2003), + 2004,//DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED_E (2004), + 4181,//DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE_E (4181), + 5001,//DIAMETER_ERROR_USER_UNKNOWN_E (5001), + 5002,//DIAMETER_ERROR_IDENTITIES_DONT_MATCH_E (5002), + 5003,//DIAMETER_ERROR_IDENTITY_NOT_REGISTERED_E (5003), + 5004,//DIAMETER_ERROR_ROAMING_NOT_ALLOWED_E (5004), + 5005,//DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED_E (5005), + 5006,//DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED_E (5006), + 5007,//DIAMETER_ERROR_IN_ASSIGNMENT_TYPE_E (5007), + 5008,//DIAMETER_ERROR_TOO_MUCH_DATA_E (5008), + 5009,//DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA_E (5009), + // Ref: ETSI TS 129 214 5.5 + 5061,//INVALID_SERVICE_INFORMATION_E (5061), + 5062,//FILTER_RESTRICTIONS_E (5062), + 5063,//REQUESTED_SERVICE_NOT_AUTHORIZED_E (5063), + 5064,//DUPLICATED_AF_SESSION_E (5064), + 5065,//IP_CAN_SESSION_NOT_AVAILABLE_E (5065), + 5066,//UNAUTHORIZED_NON_EMERGENCY_SESSION_E (5066), + 5067,//UNAUTHORIZED_SPONSORED_DATA_CONNECTIVITY_E (5067), + 5140,//DIAMETER_ERROR_INITIAL_PARAMETERS_E (5140), + 5141,//DIAMETER_ERROR_TRIGGER_EVENT_E (5141), + 5142,//DIAMETER_PCC_RULE_EVENT_E (5142), + 5143,//DIAMETER_ERROR_BEARER_NOT_AUTHORIZED_E (5143), + 5144,//DIAMETER_ERROR_TRAFFIC_MAPPING_INFO_REJECTED_E (5144), + 5147,//DIAMETER_ERROR_CONFLICTING_REQUEST_E (5147), + // Ref: 3GPP TS 29.215 + 5470,//DIAMETER_ERROR_SUBSESSION_E (5470), + 5420,//DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION_E (5420),//(9990), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + 5421,//DIAMETER_ERROR_RAT_NOT_ALLOWED_E (5421),//(9991), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + 5422,//DIAMETER_ERROR_EQUIPMENT_UNKNOWN_E (5422), + 5423//DIAMETER_ERROR_UNKOWN_SERVING_NODE_E (5423), + + //unknown + }; + + private final int[] Cancellation_Type_Code_Type ={ + 0, //MME_UPDATE_PROCEDURE_E (0), + 1,//SGSN_UPDATE_PROCEDURE_E (1), + 2,//SUBSCRIPTION_WITHDRAWAL_E (2), + 3,//UPDATE_PROCEDURE_IWF_E (3), + 4//INITIAL_ATTACH_PROCEDURE_E (4) + }; + + //*End 129.329 -sh + + //129_272 + private final int[] UE_SRVCC_Capability_Type={ + 0, //UE_SRVCC_NOT_SUPPORTED_E (0), + 1 //UE_SRVCC_SUPPORTED_E (1) + }; + + private final int[] Homogeneous_Support_Type={ + 0,// NOT_SUPPORTED_E (0), + 1 // SUPPORTED_E (1) + }; + + private final int[] Error_Diagnostic_Code_Type={ + 0,// GPRS_DATA_SUBSCRIBED_E (0), + 1,// NO_GPRS_DATA_SUBSCRIBED_E (1), + 2,// ODB_ALL_APN_E (2), + 3,// ODB_HPLMN_APN_E (3), + 4 // ODB_VPLMN_APN_E (4) + }; + + //End 129_272 + + /** + * + * Constructor method DefaultCodec creates new object and prepares RB. + *

    + * @param rb needed to resolve specific information (e.g. which logging to + * use) + * + * */ + public DIAMETERCodec(RB rb) { + super(rb); + typeServer = RB.getTciCDRequired(); + octetstringType = typeServer.getOctetstring(); + charstringType = typeServer.getCharstring(); + universalcharstringType = typeServer.getUniversalCharstring(); + integerType = typeServer.getInteger(); + bigintegerType = typeServer.getFloat(); + booleanType = typeServer.getBoolean(); + management = RB.getTciTMProvided(); + } + + /** + * + * Method encode codes a message according to the native encoding + * rules. + *

    + * @param template value should be encoded. + *

    + * @return TriMessage represents the collected byteArray + * message. + * + * */ + public TriMessage encode(Value template) { + // The template is given to the AbstractBaseCodec which handles the basic encoding + TriMessage encodedMessage = super.encode(template); + return encodedMessage; + } + + /** + * + * Method decode decodes a received message according to the native + * decoding rules. + *

    + * @param rcvdMessage message that shall be decoded. + * @param decodingHypothesis the decoding hypothesis against which the + * message will be decoded. + *

    + * @return the received message decoded according to the decoding hypothesis + * or null if message was not of type + * decodingHypothesis. + * + * */ + public Value decode(TriMessage rcvdMessage, Type decodingHypothesis) { + DiameterMessage Message = null; + // Get the received byte array + encodedMsg = rcvdMessage.getEncodedMessage(); + // Set the bitpos to 0 (this is needed to know the actual bit position from the byte array) + bitpos = 0; + // The the encoded message is null, nothing can be done, so return null + if(encodedMsg.length == 0) return null; + + // Check which type class the decoding hypothesis is of + switch (decodingHypothesis.getTypeClass()) { + + case TciTypeClass.BOOLEAN: + BooleanValue booleanValue = (BooleanValue) booleanType.newInstance(); + + if (encodedMsg[0] == 0x00) {booleanValue.setBoolean(false);} + else {booleanValue.setBoolean(true);} + + return booleanValue; + + case TciTypeClass.UNION: + //UnionValue NewHypotesisu = (UnionValue) decodingHypothesis.newInstance(); + try { + // Now we parse the received String instead of the byteArray + Message = Codec.decodeDiameterMessage(encodedMsg,0); + } + catch (DiameterMessageDecodeException ex) { + RB.getTciTLProvidedV321TT().tliRT("", System.currentTimeMillis(), "", -1, null, RTLoggingConstants.RT_LOG_ERROR, "DIAMETERCodec: exception:"+ex.getMessage()); + return null; + } + + return decode_DIAMETERMessage(Message, decodingHypothesis); + + case TciTypeClass.RECORD: + //RecordValue NewHypotesis = (RecordValue) decodingHypothesis.newInstance(); + try { + // Now we parse the received String instead of the byteArray + Message = Codec.decodeDiameterMessage(encodedMsg,0); + } + catch (DiameterMessageDecodeException ex) { + RB.getTciTLProvidedV321TT().tliRT("", System.currentTimeMillis(), "", -1, null, RTLoggingConstants.RT_LOG_ERROR, "DIAMETERCodec: exception:"+ex.getMessage()); + return null; + } + + return decode_DIAMETERMessage(Message, decodingHypothesis); + + default: + + return super.decode(rcvdMessage,decodingHypothesis); + } + } + + public Value decode_DIAMETERMessage(DiameterMessage parsedMessage, Type type){ + + switch (type.getTypeClass()){ + case TciTypeClass.UNION: + + UnionValue uDM = (UnionValue) type.newInstance(); + + String messagebodyvar=MessageVariant(parsedMessage.commandCode,parsedMessage.flagRequest); + String messagevar = messagebodyvar + "MSG"; + String bodyvar = messagebodyvar + "Body"; + + RecordValue DM = (RecordValue) uDM.getVariant(messagevar).getType().newInstance(); + RecordValue DMBody = (RecordValue) DM.getField(bodyvar).getType().newInstance(); + + decode_DiameterHeader(DM,parsedMessage); + decode_Session_Id_AVP(DM,parsedMessage); + decode_DiameterAVPs(DMBody,parsedMessage); + //decode_DiameterAVPs_(DMBody,parsedMessage); + + DM.setField(bodyvar, DMBody); + uDM.setVariant(messagevar, DM); + + return uDM; + + case TciTypeClass.RECORD: + //RecordValue rDM = (RecordValue) type.newInstance(); + //decode_DiameterHeader(rDM,parsedMessage); + return null;//rDM; + default:return null; + } + } + + private String MessageVariant(int code, boolean r_a){ + + String variant="uNKNOWN_"/*"uNKNOWN_MSG"*/; + if(r_a){ + switch(code){ + case Code_CE: variant="cER_"/*"cER_MSG"*/; break; + case Code_RA: variant="rAR_"/*"rAR_MSG"*/; break; + case Code_AC: variant="aCR_"/*"aCR_MSG"*/; break; + case Code_AS: variant="aSR_"/*"aSR_MSG"*/; break; + case Code_ST: variant="sTR_"/*"sTR_MSG"*/; break; + case Code_DW: variant="dWR_"/*"dWR_MSG"*/; break; + case Code_DP: variant="dPR_"/*"dPR_MSG"*/; break; + + /* Codes on Cx */ + case Code_UA: variant="uAR_"/*"uAR_MSG"*/; break; + case Code_SA: variant="sAR_"/*"sAR_MSG"*/; break; + case Code_LI: variant="lIR_"/*"lIR_MSG"*/; break; + case Code_MA: variant="mAR_"/*"mAR_MSG"*/; break; + case Code_RT: variant="rTR_"/*"rTR_MSG"*/; break; + case Code_PP: variant="pPR_"/*"pPR_MSG"*/; break; + + /* Codes on Sh/Dh interface */ + case Code_UD: variant="uDR_"/*"uDR_MSG"*/; break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: variant="pUR_"/*"pUR_MSG"*/; break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: variant="sNR_"/*"sNR_MSG"*/; break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: variant="pNR_"/*"pNR_MSG"*/; break;// PNR Profile-Notification-Request HSS->AS PNR (309) + + /* Codes on Rx */ + case Code_AA: variant="aAR_"/*"aAR_MSG"*/; break; + //4006 + case Code_CC: variant="cCR_"/*"cCR_MSG"*/; break; + + /* Codes on S6a interface - TS 129 272 */ + case Code_UL: variant="uLR_"/*"uLR_MSG"*/; break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: variant="cLR_"/*"cLR_MSG"*/; break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: variant="aIR_"/*"aIR_MSG"*/; break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: variant="iDR_"/*"iDR_MSG"*/; break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: variant="dSR_"/*"dSR_MSG"*/; break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: variant="pUER_"/*"pUER_MSG"*/; break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: variant="rSR_"/*"rSR_MSG"*/; break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: variant="nOR_"/*"nOR_MSG"*/; break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + } + }else{ + switch(code){ + case Code_CE: variant="cEA_"/*"cEA_MSG"*/; break; + case Code_RA: variant="rAA_"/*"rAA_MSG"*/; break; + case Code_AC: variant="aCA_"/*"aCA_MSG"*/; break; + case Code_AS: variant="aSA_"/*"aSA_MSG"*/; break; + case Code_ST: variant="sTA_"/*"sTA_MSG"*/; break; + case Code_DW: variant="dWA_"/*"dWA_MSG"*/; break; + case Code_DP: variant="dPA_"/*"dPA_MSG"*/; break; + //CxDx + case Code_UA: variant="uAA_"/*"uAA_MSG"*/; break; + case Code_SA: variant="sAA_"/*"sAA_MSG"*/; break; + case Code_LI: variant="lIA_"/*"lIA_MSG"*/; break; + case Code_MA: variant="mAA_"/*"mAA_MSG"*/; break; + case Code_RT: variant="rTA_"/*"rTA_MSG"*/; break; + case Code_PP: variant="pPA_"/*"pPA_MSG"*/; break; + + /* Codes on Sh/Dh interface */ + case Code_UD: variant="uDA_"/*"uDA_MSG"*/; break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: variant="pUA_"/*"pUA_MSG"*/; break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: variant="sNA_"/*"sNA_MSG"*/; break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: variant="pNA_"/*"pNA_MSG"*/; break;// PNR Profile-Notification-Request HSS->AS PNR (309) + + //Rx + case Code_AA: variant="aAA_"/*"aAA_MSG"*/; break; + //4006 + case Code_CC: variant="cCA_"/*"cCA_MSG"*/; break; + + /* Codes on S6a interface - TS 129 272 */ + case Code_UL: variant="uLA_"/*"uLA_MSG"*/; break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: variant="cLA_"/*"cLA_MSG"*/; break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: variant="aIA_"/*"aIA_MSG"*/; break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: variant="iDA_"/*"iDA_MSG"*/; break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: variant="dSA_"/*"dSA_MSG"*/; break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: variant="pUEA_"/*"pUEA_MSG"*/; break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: variant="rSA_"/*"rSA_MSG"*/; break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: variant="nOA_"/*"nOA_MSG"*/; break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + } + } + return variant; + } + + private void decode_DiameterHeader(RecordValue rv_DiameterM, DiameterMessage msg){ + + RecordValue DH = (RecordValue) rv_DiameterM.getField("header").getType().newInstance(); + + IntegerValue version = (IntegerValue)DH.getField("version").getType().newInstance(); + version.setInt(1); + DH.setField("version", version); + + IntegerValue msglen = (IntegerValue)DH.getField("msglen").getType().newInstance(); + msglen.setInt(msg.length); + DH.setField("msglen", msglen); + + RecordValue cmdf = (RecordValue)DH.getField("cmdflags").getType().newInstance(); + byte[] buffer = new byte[] {msg.flags}; + UsedBitsInByte = 0; + cmdf.setField("r_bit", BufferToBitString(buffer, 1)); //Request + cmdf.setField("p_bit", BufferToBitString(buffer, 1)); //Proxiable + cmdf.setField("e_bit", BufferToBitString(buffer, 1)); //Error + cmdf.setField("t_bit", BufferToBitString(buffer, 1)); //Potentialy re-transmited message + cmdf.setField("reserved_bits", BufferToBitString(buffer, 4)); //reserved_bits + DH.setField("cmdflags", cmdf); + + EnumeratedValue cmd = (EnumeratedValue) DH.getField("cmdcode").getType().newInstance(); + cmd.setEnum(CommandCodeEnumerated(msg.commandCode,msg.flagRequest)); + DH.setField("cmdcode", cmd); + + IntegerValue applid = (IntegerValue)DH.getField("applid").getType().newInstance(); + applid.setInt(msg.applicationID); + DH.setField("applid", applid); + + IntegerValue hopid = (IntegerValue)DH.getField("hopid").getType().newInstance(); + hopid.setInt(msg.hopByHopID); + DH.setField("hopid", hopid); + + DH.setField("endid", mkInt((long)msg.endToEndID)); + + rv_DiameterM.setField("header", DH); + } + + private String CommandCodeEnumerated(int code, boolean r_a){ + + String codeEnum=""; + if(r_a){ + switch(code){ + case Code_CE: codeEnum="CER_E"; break; + case Code_RA: codeEnum="RAR_E"; break; + case Code_AC: codeEnum="ACR_E"; break; + case Code_AS: codeEnum="ASR_E"; break; + case Code_ST: codeEnum="STR_E"; break; + case Code_DW: codeEnum="DWR_E"; break; + case Code_DP: codeEnum="DPR_E"; break; + //CxDx + case Code_UA: codeEnum="UAR_E"; break; + case Code_SA: codeEnum="SAR_E"; break; + case Code_LI: codeEnum="LIR_E"; break; + case Code_MA: codeEnum="MAR_E"; break; + case Code_RT: codeEnum="RTR_E"; break; + case Code_PP: codeEnum="PPR_E"; break; + + /* Codes on Sh/Dh interface */ + case Code_UD: codeEnum="UDR_E"; break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: codeEnum="PUR_E"; break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: codeEnum="SNR_E"; break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: codeEnum="PNR_E"; break;// PNR Profile-Notification-Request HSS->AS + + //Rx + case Code_AA: codeEnum="AAR_E"; break; + //4006 + case Code_CC: codeEnum="CCR_E"; break; + + //s6a + case Code_UL: codeEnum="ULR_E"; break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: codeEnum="CLR_E"; break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: codeEnum="AIR_E"; break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: codeEnum="IDR_E"; break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: codeEnum="DSR_E"; break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: codeEnum="PUER_E"; break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: codeEnum="RSR_E"; break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: codeEnum="NOR_E"; break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + } + }else{ + switch(code){ + case Code_CE: codeEnum="CEA_E"; break; + case Code_RA: codeEnum="RAA_E"; break; + case Code_AC: codeEnum="ACA_E"; break; + case Code_AS: codeEnum="ASA_E"; break; + case Code_ST: codeEnum="STA_E"; break; + case Code_DW: codeEnum="DWA_E"; break; + case Code_DP: codeEnum="DPA_E"; break; + //CxDx + case Code_UA: codeEnum="UAA_E"; break; + case Code_SA: codeEnum="SAA_E"; break; + case Code_LI: codeEnum="LIA_E"; break; + case Code_MA: codeEnum="MAA_E"; break; + case Code_RT: codeEnum="RTA_E"; break; + case Code_PP: codeEnum="PPA_E"; break; + + /* Codes on Sh/Dh interface */ + case Code_UD: codeEnum="UDA_E"; break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: codeEnum="PUA_E"; break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: codeEnum="SNA_E"; break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: codeEnum="PNA_E"; break;// PNR Profile-Notification-Request HSS->AS + //Rx + case Code_AA: codeEnum="AAA_E"; break; + //4006 + case Code_CC: codeEnum="CCA_E"; break; + + //S6a + case Code_UL: codeEnum="ULA_E"; break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: codeEnum="CLA_E"; break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: codeEnum="AIA_E"; break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: codeEnum="IDA_E"; break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: codeEnum="DSA_E"; break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: codeEnum="PUEA_E"; break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: codeEnum="RSA_E"; break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: codeEnum="NOA_E"; break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-1 + } + } + return codeEnum; + } + + private void decode_AVPHeader (RecordValue rvAvp, AVP avp) { + + RecordValue AvpH = (RecordValue)rvAvp.getField("aVP_Header").getType().newInstance(); + + IntegerValue avpcode = (IntegerValue)AvpH.getField("aVP_Code").getType().newInstance(); + avpcode.setInt(avp.code); + AvpH.setField("aVP_Code", avpcode); + + RecordValue avpflags = (RecordValue) AvpH.getField("aVP_flags").getType().newInstance(); + byte[] buffer = new byte[] {(byte) ((((avp.flag_vendor_specific?1:0)<<7) | ((avp.flag_mandatory?1:0)<<6) | ((avp.flag_protected?1:0)<<5)) & 0xFF)}; + UsedBitsInByte = 0; + avpflags.setField("v_bit", BufferToBitString(buffer, 1)); // + avpflags.setField("m_bit", BufferToBitString(buffer, 1)); // + avpflags.setField("p_bit", BufferToBitString(buffer, 1)); // + avpflags.setField("reserved_bits", BufferToBitString(buffer, 5)); //reserved_bits + AvpH.setField("aVP_flags", avpflags); + + IntegerValue avplen = (IntegerValue)AvpH.getField("aVP_len").getType().newInstance(); + avplen.setInt(avp.length); + AvpH.setField("aVP_len", avplen); + + if(avp.vendor_id!=0){ + IntegerValue avpvid = (IntegerValue)AvpH.getField("aVP_vid").getType().newInstance(); + avpvid.setInt(avp.vendor_id); + AvpH.setField("aVP_vid", avpvid); + } + + rvAvp.setField("aVP_Header",AvpH); + return; + } + + private void decode_DiameterAVPs_(RecordValue rv_, DiameterMessage msg){ + + rov_any_AVP = (RecordOfValue) rv_.getField("aVP_Type").getType().newInstance(); + System.out.println("decode_DiameterAVPs_"); + String[] fields = rv_.getFieldNames(); + for(int i=0;i avps=msg.avps; + for(int i=0;i0){ + rv_.setField("aVP_Type", rov_any_AVP); + } + } + private void decode_DiameterAVPs(RecordValue rv_DiameterM, DiameterMessage msg){ + + rov_any_AVP = (RecordOfValue) rv_DiameterM.getField("aVP_Type").getType().newInstance(); + + /*RFC3588 AVPs*/ + decode_Origin_Host_AVP( rv_DiameterM, msg); + decode_Origin_Realm_AVP( rv_DiameterM, msg); + decode_Host_IP_Address_AVP( rv_DiameterM, msg); + decode_Vendor_Id_AVP( rv_DiameterM, msg); + decode_Product_Name_AVP( rv_DiameterM, msg); + decode_Origin_State_Id_AVP( rv_DiameterM, msg); + decode_Supported_Vendor_Id_AVP( rv_DiameterM, msg); + decode_Auth_Application_Id_AVP( rv_DiameterM, msg); + decode_Inband_Security_Id_AVP( rv_DiameterM, msg); + decode_Acct_Application_Id_AVP( rv_DiameterM, msg); + decode_Vendor_Specific_Appl_Id_AVP( rv_DiameterM, msg); + decode_Firmware_Revision_AVP( rv_DiameterM, msg); + decode_Result_Code_AVP( rv_DiameterM, msg); + decode_Error_Message_AVP( rv_DiameterM, msg); + decode_Failed_AVP( rv_DiameterM, msg); + decode_Destination_Realm_AVP( rv_DiameterM, msg); + decode_Destination_Host_AVP( rv_DiameterM, msg); + decode_Re_Auth_Request_Type_AVP( rv_DiameterM, msg); + decode_User_Name_AVP( rv_DiameterM, msg); + //decode_Proxy_Host_AVP( rv_DiameterM, msg); + //decode_Proxy_State_AVP( rv_DiameterM, msg); + decode_Proxy_Info_AVP( rv_DiameterM, msg); + decode_Route_Record_AVP( rv_DiameterM, msg); + decode_Error_Reporting_Host_AVP( rv_DiameterM, msg); + decode_Redirect_Host_AVP( rv_DiameterM, msg); + decode_Redirect_Host_Usage_AVP( rv_DiameterM, msg); + decode_redirect_Max_Cache_Time_AVP( rv_DiameterM, msg); + decode_Accounting_Record_Type_AVP( rv_DiameterM, msg); + decode_Accounting_Record_Number_AVP( rv_DiameterM, msg); + decode_Accounting_Sub_Session_Id_AVP( rv_DiameterM, msg); + decode_Acct_Session_Id_AVP( rv_DiameterM, msg); + decode_Acct_Multi_Session_Id_AVP( rv_DiameterM, msg); + decode_Acct_Interim_Interval_AVP( rv_DiameterM, msg); + decode_Accounting_Realtime_Required_AVP( rv_DiameterM, msg); + decode_Event_Timestamp_AVP( rv_DiameterM, msg); + decode_Termination_Cause_AVP( rv_DiameterM, msg); + decode_Class_AVP( rv_DiameterM, msg); + decode_Disconnect_Cause_AVP( rv_DiameterM, msg); + /*End RFC3588 AVPs*/ + + /*RFC4740*/ + decode_Auth_Session_State_AVP(rv_DiameterM, msg); + decode_SIP_Number_Auth_Items_AVP(rv_DiameterM, msg); + decode_SIP_Auth_Data_Item_AVP(rv_DiameterM, msg); + /*End RFC4740 AVPs*/ + + /*RFC4005*/ + decode_Framed_IP_Address_AVP(rv_DiameterM, msg); + decode_Framed_IPv6_Prefix_AVP(rv_DiameterM, msg); + decode_Called_Station_Id_AVP(rv_DiameterM ,msg); + /*End RFC4005 AVPs*/ + + /*RFC4006*/ + decode_Service_Context_Id_AVP(rv_DiameterM, msg); + decode_CC_Request_Type_AVP(rv_DiameterM, msg); + decode_CC_Request_Number_AVP(rv_DiameterM, msg); + //decode_CC_Sub_Session_Id_AVP(rv_DiameterM, msg); + decode_Subscription_Id_AVP(rv_DiameterM, msg); + decode_Service_Identifier_AVP(rv_DiameterM, msg); + decode_Requested_Service_Unit_AVP(rv_DiameterM, msg); + decode_Requested_Action_AVP(rv_DiameterM, msg); + decode_Used_Service_Unit_AVP(rv_DiameterM, msg);// used_Service_Unit optional, //RFC4006 + decode_Multiple_Services_Indicator_AVP(rv_DiameterM, msg); + decode_Multiple_Services_Credit_Control_AVP(rv_DiameterM, msg); +// set of Service_Parameter_Info_AVP service_Parameter_Info optional, //RFC4006 +// CC_Correlation_Id_AVP cC_Correlation_Id optional, + //decode_User_Equipment_Info_AVP(rv_DiameterM, msg); + decode_CC_Session_Failover_AVP(rv_DiameterM, msg); + decode_Cost_Information_AVP(rv_DiameterM, msg); +// Check_Balance_Result_AVP check_Balance_Result optional, //RFC4006 + decode_Low_Balance_Indication_AVP(rv_DiameterM, msg); + decode_Remaining_Balance_AVP(rv_DiameterM, msg); + decode_Credit_Control_Failure_Handling_AVP(rv_DiameterM, msg); + decode_Direct_Debiting_Failure_Handling_AVP(rv_DiameterM, msg); + /*End RFC4006 AVPs*/ + + //sh-29.329 + decode_Public_Identity_AVP(rv_DiameterM, msg); + decode_User_Identity_AVP(rv_DiameterM, msg); + decode_Data_Reference_AVP(rv_DiameterM, msg); + decode_Service_Indication_AVP(rv_DiameterM, msg); + decode_Subs_Req_Type_AVP(rv_DiameterM, msg); + decode_Requested_Domain_AVP(rv_DiameterM, msg); + decode_Current_Location_AVP(rv_DiameterM, msg); + decode_Identity_Set_AVP(rv_DiameterM, msg); + decode_Expiry_Time_AVP(rv_DiameterM, msg); + decode_Send_Data_Indication_AVP(rv_DiameterM, msg); + decode_Repository_Data_ID_AVP(rv_DiameterM, msg); + decode_Wildcarded_PSI_AVP(rv_DiameterM, msg); + decode_Wildcarded_IMPU_AVP(rv_DiameterM, msg); + decode_DSAI_Tag_AVP(rv_DiameterM, msg); + decode_Server_Name_AVP(rv_DiameterM, msg); + decode_Supported_Features_AVP(rv_DiameterM, msg); + decode_Experimental_Result_AVP(rv_DiameterM, msg); + decode_User_Data_AVP(rv_DiameterM, msg); + /*End Sh*/ + //TS129?214 AVP codes + decode_Media_Component_Description_AVP(rv_DiameterM, msg); + decode_Service_Info_Status_AVP(rv_DiameterM, msg); + decode_Specific_Action_AVP(rv_DiameterM, msg); + decode_Rx_Request_Type_AVP(rv_DiameterM, msg); + //TS129_215 AVP codes + decode_Routing_Rule_Install_AVP(rv_DiameterM, msg); + decode_Routing_Rule_Remove_AVP(rv_DiameterM, msg); + decode_QoS_Rule_Report_AVP(rv_DiameterM, msg); + decode_QoS_Rule_Install_AVP(rv_DiameterM, msg); + decode_Multiple_BBERF_Action_AVP(rv_DiameterM, msg); + decode_Subses_Decision_Info_AVP(rv_DiameterM, msg); + decode_Subses_Enforcement_Info_AVP(rv_DiameterM, msg); + + //TS129_229 + decode_Visited_Network_Identifier_AVP(rv_DiameterM, msg); + decode_UAR_Flags_AVP(rv_DiameterM, msg); + decode_User_Authorization_Type_AVP(rv_DiameterM, msg); + decode_Server_Assignment_Type_AVP_AVP(rv_DiameterM, msg); + decode_User_Data_Already_Available_AVP(rv_DiameterM, msg); + decode_SCSCF_Restoration_Info_AVP(rv_DiameterM, msg); + decode_Originating_Request_AVP(rv_DiameterM, msg); + decode_Deregistration_Reason_AVP(rv_DiameterM, msg); + decode_Identity_with_Emergency_Registration_AVP(rv_DiameterM, msg); + + //TS129_272 AVP codes + decode_ULR_Flags_AVP(rv_DiameterM, msg); + decode_ULA_Flags_AVP(rv_DiameterM, msg); + decode_UE_SRVCC_Capability_AVP(rv_DiameterM, msg); + decode_SGSN_Number_AVP(rv_DiameterM, msg); + decode_Homogeneous_Support_AVP(rv_DiameterM, msg); + decode_Error_Diagnostic_AVP(rv_DiameterM, msg); + decode_GMLC_Address_AVP(rv_DiameterM, msg); + decode_Active_APN_AVP(rv_DiameterM, msg); + + decode_Subscription_Data_AVP(rv_DiameterM, msg); + decode_Req_EUTRAN_Auth_Info_AVP(rv_DiameterM, msg); + decode_Req_UTRAN_GERAN_Auth_Info_AVP(rv_DiameterM, msg); + decode_Authentication_Info_AVP(rv_DiameterM, msg); + decode_Cancellation_Type_AVP(rv_DiameterM, msg); + decode_CLR_Flags_AVP(rv_DiameterM, msg); + decode_IDR_Flags_AVP(rv_DiameterM, msg); + decode_DSR_Flags_AVP(rv_DiameterM, msg); + decode_DSA_Flags_AVP(rv_DiameterM, msg); + decode_PUER_Flags_AVP(rv_DiameterM, msg); + decode_PUEA_Flags_AVP(rv_DiameterM, msg); + decode_IDA_Flags_AVP(rv_DiameterM, msg); + decode_NOR_Flags_AVP(rv_DiameterM, msg); + decode_IMS_Voice_PS_Sessions_Support_AVP(rv_DiameterM, msg); + decode_Last_UE_Activity_Time_AVP(rv_DiameterM, msg); + decode_EPS_User_State_AVP(rv_DiameterM, msg); + decode_EPS_Location_Information_AVP(rv_DiameterM, msg); + + /*TS132_299*/ + decode_Charging_Information_AVP(rv_DiameterM, msg); + decode_Charging_Rule_Report_AVP(rv_DiameterM, msg); + decode_QoS_Information_AVP(rv_DiameterM, msg); + decode_Service_Information_AVP(rv_DiameterM, msg); + decode_Visited_PLMN_Id_AVP(rv_DiameterM, msg); + decode_IP_CAN_Type_AVP(rv_DiameterM, msg); + decode_RAT_Type_AVP(rv_DiameterM, msg); + decode_Event_Trigger_AVP(rv_DiameterM, msg); + decode_Session_Release_Cause_AVP(rv_DiameterM, msg); + decode_AN_GW_Addr_AVP(rv_DiameterM, msg); + + /*TS129_212*/ + decode_Default_EPS_Bearer_QoS_AVP(rv_DiameterM, msg); + decode_Charging_Rule_Install_AVP(rv_DiameterM, msg); + decode_Charging_Rule_Remove_AVP(rv_DiameterM, msg); + + if (rov_any_AVP.getLength()>0){ + rv_DiameterM.setField("aVP_Type", rov_any_AVP); + } + } + + private void decode_DiameterIdentity ( RecordValue rvAvp, AVP avp) { + + if(avp.getStringData()!=null) + rvAvp.setField("aVP_Data",mkCv(avp.getStringData())); + return; + } + + private void decode_DiameterURI ( RecordValue rvAvp, AVP avp) { + + if(avp.getStringData()!=null){ + + URI uri=null; + try{ + uri = new URI(avp.getStringData()); + + RecordValue rv= (RecordValue)rvAvp.getField("aVP_Data").getType().newInstance(); + + //charstring scheme ("aaa", "aaas"), + rv.setField("scheme",mkCv(uri.getScheme())); + //charstring diameterId_FQDN, + rv.setField("diameterId_FQDN",mkCv(uri.getHost())); + //integer portField optional, + //charstring transport ("tcp", "sctp", "udp") optional, + //charstring protocol ("diameter", "radius", "tacacs+") optional + + rvAvp.setField("aVP_Data",rv); + return; + } + catch (Exception ex){ + System.out.println("DiameterURI not in correct format("+avp.getStringData()+")" ); + return; + } + } + return; + } + + private void decode_Origin_Host_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Origin_Host_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue origHost = (RecordValue) rv_DiameterM.getField("origin_Host").getType().newInstance(); + + decode_AVPHeader( origHost ,avps[0]); + decode_DiameterIdentity(origHost, avps[0]); + + rv_DiameterM.setField("origin_Host",origHost); + } + return; + } + + private void decode_Origin_Realm_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Origin_Realm_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue origRealm = (RecordValue) rv_DiameterM.getField("origin_Realm").getType().newInstance(); + + decode_AVPHeader( origRealm ,avps[0]); + decode_DiameterIdentity(origRealm, avps[0]); + + rv_DiameterM.setField("origin_Realm",origRealm); + } + return; + } + +/* private void decode_IPV4Addr (ByteArrayOutputStream out, RecordValue data) { + + return; + } + private void decode_IPV6Addr (ByteArrayOutputStream out, RecordValue data) { + + return; + } +*/ + private void decode_Address (RecordValue data, AVP avp) { + + RecordValue rdata = (RecordValue)data.getField("aVP_Data").getType().newInstance(); + + int version=avp.data[0]<<8|avp.data[1]; + + OctetstringValue family=(OctetstringValue)rdata.getField("addressFamily").getType().newInstance(); + rdata.setField("addressFamily", createOctetstringValue(avp.data, 2 * 8)); + + UnionValue diam_address = (UnionValue)rdata.getField("ipAddress").getType().newInstance(); + if(version==1){ + RecordOfValue IP = (RecordOfValue) diam_address.getVariant("ipv4").getType().newInstance(); + IP.setLength(4); + for(int i=0;i<4;i++){ + IP.setField(i, mkInt((avp.data[i+2]) & 0xff)); + } + diam_address.setVariant("ipv4", IP); + } + else{ + RecordOfValue IP = (RecordOfValue) diam_address.getVariant("ipv6").getType().newInstance(); + IP.setLength(8); + for(int i=0;i<8;i++){ + IP.setField(i, mkInt((avp.data[i+2]) & 0xffff)); + } + diam_address.setVariant("ipv6", IP); + } + + rdata.setField("ipAddress", diam_address); + data.setField("aVP_Data",rdata); + + /*if (udata.getPresentVariantName().equals("ipv4")) { + //decode_IPV4Addr(out, (RecordValue) data.getVariant("ipv4")); + }else if (udata.getPresentVariantName().equals("ipv6")){ + //decode_IPV6Addr(out, (RecordValue) data.getVariant("ipv6")); + }*/ + return; + } + + private void decode_Host_IP_Address_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Host_IP_Address_AVP); + if (avps==null) return; + + if (avps.length>=1){ + + RecordOfValue recOfhostIPAddr = (RecordOfValue) rv_DiameterM.getField("host_IP_Address").getType().newInstance(); + recOfhostIPAddr.setLength(0); + + for(int i=0;i1){} //Should never be more than one AVP + else{ + RecordValue vendor = (RecordValue) rv_DiameterM.getField("vendor_Id").getType().newInstance(); + + decode_AVPHeader( vendor ,avps[0]); + vendor.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("vendor_Id",vendor); + } + return; + } + + private void decode_Product_Name_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Product_Name_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvproduct_Name = (RecordValue) rv_DiameterM.getField("product_Name").getType().newInstance(); + + decode_AVPHeader( rvproduct_Name ,avps[0]); + rvproduct_Name.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_DiameterM.setField("product_Name",rvproduct_Name); + } + return; + } + + private void decode_Origin_State_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Origin_State_Id_AVP); + if (avps==null) return; + + if (avps.length>1){ + + RecordOfValue recOfOrigin_State = (RecordOfValue) rv_DiameterM.getField("origin_State_Id").getType().newInstance(); + recOfOrigin_State.setLength(0); + + for(int i=0;i=1){ + + RecordOfValue recOfSupported_Vendor = (RecordOfValue) rv_DiameterM.getField("supported_Vendor_Id").getType().newInstance(); + recOfSupported_Vendor.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rvAuth_Application = (RecordValue) (RecordValue) rv_DiameterM.getField("auth_Application_Id").getType().newInstance(); + + decode_AVPHeader( rvAuth_Application ,avps[0]); + rvAuth_Application.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("auth_Application_Id",rvAuth_Application); + rv_present=true; + return; + }catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + try{ + RecordOfValue recOfAuth_Application = (RecordOfValue) rv_DiameterM.getField("auth_Application_Id").getType().newInstance(); + recOfAuth_Application.setLength(0); + + for(int i=0;i=1){ + + RecordOfValue recOfInband_Security = (RecordOfValue) rv_DiameterM.getField("inband_Security_Id").getType().newInstance(); + recOfInband_Security.setLength(0); + + for(int i=0;i=1){ + + try{ + RecordValue rvAcct_Application = (RecordValue) (RecordValue) rv_DiameterM.getField("acct_Application_Id").getType().newInstance(); + + decode_AVPHeader( rvAcct_Application ,avps[0]); + rvAcct_Application.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("acct_Application_Id",rvAcct_Application); + rv_present=true; + return; + }catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + + if(!rv_present){ + try{ + RecordOfValue recOfAcct_Application = (RecordOfValue) rv_DiameterM.getField("acct_Application_Id").getType().newInstance(); + recOfAcct_Application.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rv_vSAId = (RecordValue) (RecordValue) rv_DiameterM.getField("vendor_Specific_Application_Id").getType().newInstance(); + + decode_AVPHeader( rv_vSAId ,avps[0]); + decode_Vendor_Specific_Appl_Id_AVP(rv_vSAId,avps[0]); + + rv_DiameterM.setField("vendor_Specific_Application_Id",rv_vSAId); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + try{ + RecordOfValue recOfrv_vSAId = (RecordOfValue) rv_DiameterM.getField("vendor_Specific_Application_Id").getType().newInstance(); + recOfrv_vSAId.setLength(0); + + for(int i=0;i1){} + else{ + RecordValue rvFirmware_Revision = (RecordValue) (RecordValue) rv_DiameterM.getField("firmware_Revision").getType().newInstance(); + + decode_AVPHeader( rvFirmware_Revision ,avps[0]); + rvFirmware_Revision.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("firmware_Revision",rvFirmware_Revision); + } + return; + } + + private void decode_Result_Code_AVP(RecordValue rv_DiameterM, AVP msg){ + + AVP[] avps=msg.findChildAVPs(AVP_Result_Code_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvResult_Code = (RecordValue) (RecordValue) rv_DiameterM.getField("result_Code").getType().newInstance(); + + decode_AVPHeader( rvResult_Code ,avps[0]); + rvResult_Code.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("result_Code",rvResult_Code); + } + return; + } + + private void decode_Result_Code_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Result_Code_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvResult_Code = (RecordValue) (RecordValue) rv_DiameterM.getField("result_Code").getType().newInstance(); + + decode_AVPHeader( rvResult_Code ,avps[0]); + rvResult_Code.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("result_Code",rvResult_Code); + } + return; + } + + private void decode_Error_Message_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Error_Message_AVP); + if (avps==null) return; + + if (useList(rv_DiameterM.getFieldNames(),"error_Message")){ + if (avps.length>1){} + else{ + RecordValue rvError_Message = (RecordValue) (RecordValue) rv_DiameterM.getField("error_Message").getType().newInstance(); + + decode_AVPHeader( rvError_Message ,avps[0]); + //rvError_Message.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + rvError_Message.setField("aVP_Data", mkCv(avps[0].getStringData())); + + rv_DiameterM.setField("error_Message",rvError_Message); + } + } + else{ + RecordValue rv_avp = (RecordValue)rov_any_AVP.getElementType().newInstance(); + decode_AVP_Type(rv_avp,avps[0]); + rov_any_AVP.appendField(rv_avp); + } + return; + } + + private void decode_Failed_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Failed_AVP); + if (avps==null) return; + + if (avps.length>=1){ + + RecordOfValue recOfFailed = (RecordOfValue) rv_DiameterM.getField("failed").getType().newInstance(); + recOfFailed.setLength(0); + + for(int i=0;i1){} + else{ + RecordValue rvSession_Id = (RecordValue) (RecordValue) rv_DiameterM.getField("session_Id").getType().newInstance(); + + decode_AVPHeader( rvSession_Id ,avps[0]); + rvSession_Id.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + ///rvSession_Id.setField("aVP_Data", mkCv(avps[0].getStringData())); + rv_DiameterM.setField("session_Id",rvSession_Id); + } + return; + } + + private void decode_Destination_Realm_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Destination_Realm_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + //String[] fields = rv_DiameterM.getFieldNames(); + if (useList(rv_DiameterM.getFieldNames(),"destination_Realm")){ + RecordValue destRealm = (RecordValue) rv_DiameterM.getField("destination_Realm").getType().newInstance(); + + decode_AVPHeader( destRealm ,avps[0]); + decode_DiameterIdentity(destRealm, avps[0]); + + rv_DiameterM.setField("destination_Realm",destRealm); + }else{ + RecordValue rv_avp = (RecordValue)rov_any_AVP.getElementType().newInstance(); + decode_AVP_Type(rv_avp,avps[0]); + rov_any_AVP.appendField(rv_avp); + } + } + return; + } + + private void decode_Destination_Realm_AVP(RecordValue rv_DiameterM, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Destination_Realm_AVP); + if (avp==null) return; + + RecordValue destRealm = (RecordValue) rv_DiameterM.getField("destination_Realm").getType().newInstance(); + + decode_AVPHeader( destRealm ,avp); + decode_DiameterIdentity(destRealm, avp); + + rv_DiameterM.setField("destination_Realm",destRealm); + return; + } + + private void decode_Destination_Host_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Destination_Host_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + //String[] fields = rv_DiameterM.getFieldNames(); + if (useList(rv_DiameterM.getFieldNames(),"destination_Host")){ + RecordValue destHost = (RecordValue) rv_DiameterM.getField("destination_Host").getType().newInstance(); + + decode_AVPHeader( destHost ,avps[0]); + decode_DiameterIdentity(destHost, avps[0]); + + rv_DiameterM.setField("destination_Host",destHost); + }else{ + RecordValue rv_avp = (RecordValue)rov_any_AVP.getElementType().newInstance(); + decode_AVP_Type(rv_avp,avps[0]); + rov_any_AVP.appendField(rv_avp); + } + } + return; + } + + private void decode_Destination_Host_AVP(RecordValue rv_DiameterM, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Destination_Host_AVP); + if (avp==null) return; + + RecordValue destHost = (RecordValue) rv_DiameterM.getField("destination_Host").getType().newInstance(); + + decode_AVPHeader( destHost ,avp); + decode_DiameterIdentity(destHost, avp); + + rv_DiameterM.setField("destination_Host",destHost); + return; + } + + private void decode_Re_Auth_Request_Type_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Re_Auth_Request_Type_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue reAuthReqType = (RecordValue) rv_DiameterM.getField("re_Auth_Request_Type").getType().newInstance(); + + decode_AVPHeader( reAuthReqType ,avps[0]); + reAuthReqType.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("re_Auth_Request_Type",reAuthReqType); + } + return; + } + + private void decode_User_Name_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avps=avp_.findChildAVPs(AVP_User_Name_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvUser_Name = (RecordValue) (RecordValue) rv_.getField("user_Name").getType().newInstance(); + + decode_AVPHeader( rvUser_Name ,avps[0]); + rvUser_Name.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + //rvUser_Name.setField("aVP_Data", mkCv(avps[0].getStringData())); + rv_.setField("user_Name",rvUser_Name); + } + return; + } + + private void decode_User_Name_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_User_Name_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvUser_Name = (RecordValue) (RecordValue) rv_DiameterM.getField("user_Name").getType().newInstance(); + + decode_AVPHeader( rvUser_Name ,avps[0]); + rvUser_Name.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + //rvUser_Name.setField("aVP_Data", mkCv(avps[0].getStringData())); + rv_DiameterM.setField("user_Name",rvUser_Name); + } + return; + } + + private void decode_Proxy_Host_AVP(RecordValue rv_proxy, AVP pi){ + + AVP[] proxy_Host=pi.findChildAVPs(AVP_Proxy_Host_AVP); + if (proxy_Host==null) return; + + if (proxy_Host.length>1){} //Should never be more than one AVP + else{ + RecordValue proxyHost = (RecordValue) rv_proxy.getField("proxy_Host").getType().newInstance(); + + decode_AVPHeader( proxyHost ,proxy_Host[0]); + decode_DiameterIdentity(proxyHost, proxy_Host[0]); + + rv_proxy.setField("proxy_Host",proxyHost); + } + return; + } + + private void decode_Proxy_State_AVP(RecordValue rv_proxy, AVP pi){ + + AVP[] proxy_State=pi.findChildAVPs(AVP_Proxy_State_AVP); + if (proxy_State==null) return; + + if (proxy_State.length>1){} //Should never be more than one AVP + else{ + RecordValue proxyState = (RecordValue) rv_proxy.getField("proxy_State").getType().newInstance(); + + decode_AVPHeader( proxyState ,proxy_State[0]); + proxyState.setField("aVP_Data", mkOctetstring(proxy_State[0].data)); + + rv_proxy.setField("proxy_State",proxyState); + } + return; + } + + private void decode_Proxy_Info_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Proxy_Info_AVP); + if (avps==null) return; + + if (avps.length>=1){ + RecordOfValue recOfproxy_Info = (RecordOfValue) rv_DiameterM.getField("proxy_Info").getType().newInstance(); + recOfproxy_Info.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfproxy_Info.getElementType().newInstance(); + decode_AVPHeader( rv ,avps[i]); + + decode_Proxy_Host_AVP(rv,avps[i]); + decode_Proxy_State_AVP(rv,avps[i]); + //decode_AVP_Type(rv,avps[i]); + + recOfproxy_Info.appendField(rv); + } + rv_DiameterM.setField("proxy_Info",recOfproxy_Info); + } + return; + } + + private void decode_Route_Record_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Route_Record_AVP); + if (avps==null) return; + + if (avps.length>=1){ + RecordOfValue recOfRoute_Record = (RecordOfValue) rv_DiameterM.getField("route_Record").getType().newInstance(); + recOfRoute_Record.setLength(0); + + for(int i=0;i1){} //Should never be more than one AVP + else{ + RecordValue error_Reporting_Host = (RecordValue) rv_DiameterM.getField("error_Reporting_Host").getType().newInstance(); + + decode_AVPHeader( error_Reporting_Host ,avps[0]); + decode_DiameterIdentity(error_Reporting_Host, avps[0]);//(CharstringValue)rv.getField("aVP_Data")); + + rv_DiameterM.setField("error_Reporting_Host",error_Reporting_Host); + } + return; + } + + private void decode_Redirect_Host_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + boolean rv_present=false; + AVP[] avps=msg.findAVPs(AVP_Redirect_Host_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_DiameterM.getField("redirect_Host").getType().newInstance(); + + decode_AVPHeader( rv ,avps[0]); + decode_DiameterIdentity(rv, avps[0]); + + rv_DiameterM.setField("redirect_Host",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfRedirect_Host = (RecordOfValue) rv_DiameterM.getField("redirect_Host").getType().newInstance(); + recOfRedirect_Host.setLength(0); + + for(int i=0;i1){} + else{ + RecordValue rvRedirect_Host_Usage = (RecordValue) (RecordValue) rv_DiameterM.getField("redirect_Host_Usage").getType().newInstance(); + + decode_AVPHeader( rvRedirect_Host_Usage ,avps[0]); + rvRedirect_Host_Usage.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("redirect_Host_Usage",rvRedirect_Host_Usage); + } + return; + } + + private void decode_redirect_Max_Cache_Time_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_redirect_Max_Cache_Time_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvredirect_Max_Cache_Time = (RecordValue) (RecordValue) rv_DiameterM.getField("redirect_Max_Cache_Time").getType().newInstance(); + + decode_AVPHeader( rvredirect_Max_Cache_Time ,avps[0]); + rvredirect_Max_Cache_Time.setField("aVP_Data", mkInt64(avps[0].int_data)); + + rv_DiameterM.setField("redirect_Max_Cache_Time",rvredirect_Max_Cache_Time); + } + return; + } + + private void decode_Accounting_Record_Type_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Accounting_Record_Type_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvAccounting_Record_Type = (RecordValue) (RecordValue) rv_DiameterM.getField("accounting_Record_Type").getType().newInstance(); + + decode_AVPHeader( rvAccounting_Record_Type ,avps[0]); + rvAccounting_Record_Type.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("accounting_Record_Type",rvAccounting_Record_Type); + } + return; + } + + private void decode_Accounting_Record_Number_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Accounting_Record_Number_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvAccounting_Record_Number = (RecordValue) (RecordValue) rv_DiameterM.getField("accounting_Record_Number").getType().newInstance(); + + decode_AVPHeader( rvAccounting_Record_Number ,avps[0]); + rvAccounting_Record_Number.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("accounting_Record_Number",rvAccounting_Record_Number); + } + return; + } + + private void decode_Accounting_Sub_Session_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Accounting_Sub_Session_Id_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rvAccounting_Sub_Session_Id = (RecordValue) (RecordValue) rv_DiameterM.getField("accounting_Sub_Session_Id").getType().newInstance(); + + decode_AVPHeader( rvAccounting_Sub_Session_Id ,avps[0]); + rvAccounting_Sub_Session_Id.setField("aVP_Data", mkInt64(avps[0].int_data)); + + rv_DiameterM.setField("accounting_Sub_Session_Id",rvAccounting_Sub_Session_Id); + } + return; + } + + private void decode_Acct_Session_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Acct_Session_Id_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvAcct_Session_Id = (RecordValue) rv_DiameterM.getField("acct_Session_Id").getType().newInstance(); + + decode_AVPHeader( rvAcct_Session_Id ,avps[0]); + rvAcct_Session_Id.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_DiameterM.setField("acct_Session_Id",rvAcct_Session_Id); + } + return; + } + + private void decode_Acct_Multi_Session_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Acct_Multi_Session_Id_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvAcct_Multi_Session_Id = (RecordValue) rv_DiameterM.getField("acct_Multi_Session_Id").getType().newInstance(); + + decode_AVPHeader( rvAcct_Multi_Session_Id ,avps[0]); + rvAcct_Multi_Session_Id.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_DiameterM.setField("acct_Multi_Session_Id",rvAcct_Multi_Session_Id); + } + return; + } + + private void decode_Acct_Interim_Interval_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Acct_Interim_Interval_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvAcct_Interim_Interval = (RecordValue) rv_DiameterM.getField("acct_Interim_Interval").getType().newInstance(); + + decode_AVPHeader( rvAcct_Interim_Interval ,avps[0]); + rvAcct_Interim_Interval.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("acct_Interim_Interval",rvAcct_Interim_Interval); + } + return; + } + + private void decode_Accounting_Realtime_Required_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Accounting_Realtime_Required_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvAccounting_Realtime_Required = (RecordValue) rv_DiameterM.getField("accounting_Realtime_Required").getType().newInstance(); + + decode_AVPHeader( rvAccounting_Realtime_Required ,avps[0]); + rvAccounting_Realtime_Required.setField("aVP_Data", mkInt(avps[0].int_data));//TODO:Enumerated!!! + + rv_DiameterM.setField("accounting_Realtime_Required",rvAccounting_Realtime_Required); + } + return; + } + + private void decode_Event_Timestamp_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Event_Timestamp_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvEvent_Timestamp = (RecordValue) rv_DiameterM.getField("event_Timestamp").getType().newInstance(); + + decode_AVPHeader( rvEvent_Timestamp ,avps[0]); + //rvEvent_Timestamp.setField("aVP_Data", mkInt64(avps[0].int_data)); + rvEvent_Timestamp.setField("aVP_Data", mkInt(avps[0].long_data)); + + rv_DiameterM.setField("event_Timestamp",rvEvent_Timestamp); + } + return; + } + + private void decode_Termination_Cause_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Termination_Cause_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvTermination_Cause = (RecordValue) rv_DiameterM.getField("termination_Cause").getType().newInstance(); + + decode_AVPHeader( rvTermination_Cause ,avps[0]); + rvTermination_Cause.setField("aVP_Data", mkInt(avps[0].int_data));//TODO:Enumerated!!! + + rv_DiameterM.setField("termination_Cause",rvTermination_Cause); + } + return; + } + + private void decode_Class_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Class_AVP); + if (avps==null) return; + + if (avps.length>=1){ + RecordOfValue recOfClass = (RecordOfValue) rv_DiameterM.getField("class").getType().newInstance(); + recOfClass.setLength(0); + + for(int i=0;i1){} //Should never be more than one AVP + else{ + RecordValue rvDisconnect_Cause = (RecordValue) rv_DiameterM.getField("disconnect_Cause").getType().newInstance(); + + decode_AVPHeader( rvDisconnect_Cause ,avps[0]); + rvDisconnect_Cause.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("disconnect_Cause",rvDisconnect_Cause); + } + return; + } + /*End RFC3588 Types */ + + /*Rx Types */ + /*End Rx Types */ + + /*RFC4005 Types*/ + private void decode_Called_Station_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + AVP[] avp=msg.findAVPs(AVP_Called_Station_Id_AVP); + + if (avp==null) return; + + if (avp.length>1){} //Should never be more than one AVP + else{ + RecordValue rv = (RecordValue) rv_DiameterM.getField("called_Station_Id").getType().newInstance(); + + decode_AVPHeader( rv ,avp[0]); + rv.setField("aVP_Data", mkCvUTF8(avp[0].getStringData())); + + rv_DiameterM.setField("called_Station_Id",rv); + } + return; + } + + + private void decode_Called_Station_Id_AVP(RecordValue rv_, AVP avp_){ + AVP[] avp=avp_.findChildAVPs(AVP_Called_Station_Id_AVP); + + if (avp==null) return; + + if (avp.length>1){} //Should never be more than one AVP + else{ + RecordValue rv = (RecordValue) rv_.getField("called_Station_Id").getType().newInstance(); + + decode_AVPHeader( rv ,avp[0]); + rv.setField("aVP_Data", mkCvUTF8(avp[0].getStringData())); + + rv_.setField("called_Station_Id",rv); + } + return; + } + + private void decode_Framed_IP_Address_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avps=avp_.findChildAVPs(AVP_Framed_IP_Address_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvframed_IP_Addr = (RecordValue) rv_.getField("framed_IP_Address").getType().newInstance(); + + decode_AVPHeader( rvframed_IP_Addr ,avps[0]); + rvframed_IP_Addr.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_.setField("framed_IP_Address",rvframed_IP_Addr); + } + return; + } + + private void decode_Framed_IP_Address_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Framed_IP_Address_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvframed_IP_Addr = (RecordValue) rv_DiameterM.getField("framed_IP_Address").getType().newInstance(); + + decode_AVPHeader( rvframed_IP_Addr ,avps[0]); + rvframed_IP_Addr.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_DiameterM.setField("framed_IP_Address",rvframed_IP_Addr); + } + return; + } + + private void decode_Framed_IPv6_Prefix_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avps=avp_.findChildAVPs(AVP_Framed_IPv6_Prefix_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvframed_IP_AddrPfx = (RecordValue) rv_.getField("framed_IPv6_Prefix").getType().newInstance(); + + decode_AVPHeader( rvframed_IP_AddrPfx ,avps[0]); + rvframed_IP_AddrPfx.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_.setField("framed_IPv6_Prefix",rvframed_IP_AddrPfx); + } + return; + } + + private void decode_Framed_IPv6_Prefix_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Framed_IPv6_Prefix_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvframed_IP_AddrPfx = (RecordValue) rv_DiameterM.getField("framed_IPv6_Prefix").getType().newInstance(); + + decode_AVPHeader( rvframed_IP_AddrPfx ,avps[0]); + rvframed_IP_AddrPfx.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_DiameterM.setField("framed_IPv6_Prefix",rvframed_IP_AddrPfx); + } + return; + } + + private void decode_Framed_Interface_Id_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avps=avp_.findChildAVPs(AVP_Framed_Interface_Id_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvframed_IP_AddrPfx = (RecordValue) rv_.getField("framed_Interface_Id").getType().newInstance(); + + decode_AVPHeader( rvframed_IP_AddrPfx ,avps[0]); + rvframed_IP_AddrPfx.setField("aVP_Data", mkOctetstring(avps[0].data)); + + rv_.setField("framed_Interface_Id",rvframed_IP_AddrPfx); + } + return; + } + /*EndRFC4005 Types*/ + + /*RFC4006 Types*/ + private void decode_Service_Context_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Service_Context_Id_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvService_Context_Id = (RecordValue) rv_DiameterM.getField("service_Context_Id").getType().newInstance(); + + decode_AVPHeader( rvService_Context_Id ,avps[0]); + rvService_Context_Id.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_DiameterM.setField("service_Context_Id",rvService_Context_Id); + } + return; + } + + private void decode_CC_Request_Type_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_CC_Request_Type_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvCC_Request_Type = (RecordValue) rv_DiameterM.getField("cC_Request_Type").getType().newInstance(); + + decode_AVPHeader( rvCC_Request_Type ,avps[0]); + rvCC_Request_Type.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("cC_Request_Type",rvCC_Request_Type); + } + return; + } + + private void decode_CC_Request_Number_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_CC_Request_Number_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvCC_Request_Number = (RecordValue) rv_DiameterM.getField("cC_Request_Number").getType().newInstance(); + + decode_AVPHeader( rvCC_Request_Number ,avps[0]); + rvCC_Request_Number.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("cC_Request_Number",rvCC_Request_Number); + } + return; + } + + private void decode_Subscription_Id_Type_AVP(RecordValue rv_sid_type, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Subscription_Id_Type_AVP); + if (avp==null) return; + + //if (avp.length>1){} //Should never be more than one AVP + //else{ + RecordValue rvSubscription_Id_Type = (RecordValue) rv_sid_type.getField("subscription_Id_Type").getType().newInstance(); + + decode_AVPHeader( rvSubscription_Id_Type ,avp); + rvSubscription_Id_Type.setField("aVP_Data", mkInt(avp.int_data)); + + rv_sid_type.setField("subscription_Id_Type",rvSubscription_Id_Type); + //} + return; + } + + private void decode_Subscription_Id_Data_AVP(RecordValue rv_sid_data, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Subscription_Id_Data_AVP); + if (avp==null) return; + + //if (avp.length>1){} //Should never be more than one AVP + //else{ + RecordValue rvsubscription_Id_Data = (RecordValue) rv_sid_data.getField("subscription_Id_Data").getType().newInstance(); + + decode_AVPHeader( rvsubscription_Id_Data ,avp); + rvsubscription_Id_Data.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_sid_data.setField("subscription_Id_Data",rvsubscription_Id_Data); + //} + return; + } + + private void decode_Subscription_Id_AVP(RecordValue rv_sid, AVP sid){ + + AVP[] avps=sid.findChildAVPs(AVP_Subscription_Id_AVP); + if (avps==null) return; + + + RecordOfValue rov_Subscription_Id = (RecordOfValue) rv_sid.getField("subscription_Id").getType().newInstance(); + rov_Subscription_Id.setLength(0); + //try{avp.ungroup();}catch(Exception e){return;} + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_Subscription_Id.getElementType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv ,avps[i]); + decode_Subscription_Id_Type_AVP(rv,avps[i]); + decode_Subscription_Id_Data_AVP(rv,avps[i]); + + rov_Subscription_Id.appendField(rv); + } + + rv_sid.setField("subscription_Id",rov_Subscription_Id); + return; + } + + private void decode_Subscription_Id_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + boolean rv_present=false; + AVP[] avps=msg.findAVPs(AVP_Subscription_Id_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_Subscription_Id = (RecordValue) (RecordValue) rv_DiameterM.getField("subscription_Id").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_Subscription_Id ,avps[0]); + decode_Subscription_Id_Type_AVP(rv_Subscription_Id,avps[0]); + decode_Subscription_Id_Data_AVP(rv_Subscription_Id,avps[0]); + + rv_DiameterM.setField("subscription_Id",rv_Subscription_Id); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + + RecordOfValue recOfSubscription_Id = (RecordOfValue) rv_DiameterM.getField("subscription_Id").getType().newInstance(); + recOfSubscription_Id.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfSubscription_Id.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv ,avps[i]); + decode_Subscription_Id_Type_AVP(rv,avps[i]); + decode_Subscription_Id_Data_AVP(rv,avps[i]); + + recOfSubscription_Id.appendField(rv); + } + rv_DiameterM.setField("subscription_Id",recOfSubscription_Id); + } + } + return; + } + + private void decode_Service_Identifier_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + boolean rv_present=false; + AVP[] avps=msg.findAVPs(AVP_Service_Identifier_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rvService_Identifier = (RecordValue) rv_DiameterM.getField("service_Identifier").getType().newInstance(); + + decode_AVPHeader( rvService_Identifier ,avps[0]); + rvService_Identifier.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("service_Identifier",rvService_Identifier); + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfService_Identifier = (RecordOfValue) rv_DiameterM.getField("service_Identifier").getType().newInstance(); + recOfService_Identifier.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfService_Identifier.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkInt(avps[i].int_data)); + + recOfService_Identifier.appendField(rv); + } + rv_DiameterM.setField("service_Identifier",recOfService_Identifier); + } + } + return; + } + + private void decode_Requested_Action_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Requested_Action_AVP); + if (avp==null) return; + + RecordValue rv_Request_Action = (RecordValue) rv_DiameterM.getField("requested_Action").getType().newInstance(); + + decode_AVPHeader( rv_Request_Action ,avp); + rv_Request_Action.setField("aVP_Data", mkInt(avp.int_data)); + + rv_DiameterM.setField("requested_Action",rv_Request_Action); + + return; + } + + private void decode_Multiple_Services_Indicator_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Multiple_Services_Indicator_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("multiple_Services_Indicator").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_DiameterM.setField("multiple_Services_Indicator",rv_); + + return; + } + + private void decode_CC_Session_Failover_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_CC_Session_Failover_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("cC_Session_Failover").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_DiameterM.setField("cC_Session_Failover",rv_); + + return; + } + + private void decode_Cost_Unit_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Cost_Unit_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_sid.getField("cost_Unit").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_sid.setField("cost_Unit",rv_); + + return; + } + + private void decode_Cost_Information_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Cost_Information_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("cost_Information").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_ ,avp); + decode_Unit_Value_AVP( rv_ ,avp); // unit_Value, + decode_Currency_Code_AVP( rv_ ,avp); // currency_Code, + decode_Cost_Unit_AVP( rv_ ,avp); // cost_Unit optional + + rv_DiameterM.setField("cost_Information",rv_); + + return; + } + + private void decode_Low_Balance_Indication_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Low_Balance_Indication_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("low_Balance_Indication").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_DiameterM.setField("low_Balance_Indication",rv_); + + return; + } + + private void decode_Remaining_Balance_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Remaining_Balance_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("remaining_Balance").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_ ,avp); + decode_Unit_Value_AVP( rv_ ,avp);// unit_Value, + decode_Currency_Code_AVP( rv_ ,avp);// currency_Code + + rv_DiameterM.setField("remaining_Balance",rv_); + + return; + } + + private void decode_Credit_Control_Failure_Handling_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Credit_Control_Failure_Handling_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("credit_Control_Failure_Handling").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_DiameterM.setField("credit_Control_Failure_Handling",rv_); + + return; + } + + private void decode_Direct_Debiting_Failure_Handling_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP avp=msg.findAVP(AVP_Direct_Debiting_Failure_Handling_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) rv_DiameterM.getField("direct_Debiting_Failure_Handling").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + + rv_DiameterM.setField("direct_Debiting_Failure_Handling",rv_); + + return; + } + + + + /*End RFC 4006 Types*/ + + /*RFC4740 AVPs*/ + private void decode_Auth_Session_State_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Auth_Session_State_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rv_Auth_Session_State = (RecordValue) rv_DiameterM.getField("auth_Session_State").getType().newInstance(); + + decode_AVPHeader( rv_Auth_Session_State ,avps[0]); + rv_Auth_Session_State.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("auth_Session_State",rv_Auth_Session_State); + } + return; + } + + + private void decode_SIP_Method_AVP(RecordValue rv_sip_m, AVP sip_m){ + + AVP avp=sip_m.findChildAVP(AVP_SIP_Method_AVP); + if (avp==null) return; + + RecordValue rvSIP_Method = (RecordValue) rv_sip_m.getField("sIP_Method").getType().newInstance(); + + decode_AVPHeader( rvSIP_Method ,avp); + rvSIP_Method.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_sip_m.setField("sIP_Method",rvSIP_Method); + + return; + } + + private void decode_SIP_Method_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_SIP_Method_AVP); + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvSIP_Method = (RecordValue) rv_DiameterM.getField("sIP_Method").getType().newInstance(); + + decode_AVPHeader( rvSIP_Method ,avps[0]); + rvSIP_Method.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_DiameterM.setField("sIP_Method",rvSIP_Method); + } + return; + } + + private void decode_SIP_Number_Auth_Items_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avpsrfc=msg.findAVPs(AVP_SIP_Number_Auth_Items_RFC_AVP); + AVP[] avps3gpp=msg.findAVPs(AVP_SIP_Number_Auth_Items_3GPP_AVP); + AVP[] avps=null; + + if (avpsrfc!=null) avps=avpsrfc; + if (avps3gpp!=null) avps=avps3gpp; + + if (avps==null) return; + + if (avps.length>1){} //Should never be more than one AVP + else{ + RecordValue rvSIP_AuthItem = (RecordValue) rv_DiameterM.getField("sIP_Number_Auth_Items").getType().newInstance(); + + decode_AVPHeader( rvSIP_AuthItem ,avps[0]); + rvSIP_AuthItem.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_DiameterM.setField("sIP_Number_Auth_Items",rvSIP_AuthItem); + } + return; + } + + + private void decode_SIP_Auth_Data_Item_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + boolean rv_present=false; + AVP[] avpsrfc=msg.findAVPs(AVP_SIP_Auth_Data_Item_RFC_AVP); + AVP[] avps3gpp=msg.findAVPs(AVP_SIP_Auth_Data_Item_3GPP_AVP); + + if ((avpsrfc==null) && (avps3gpp==null)) return; + + if ((avpsrfc!=null)&&(avpsrfc.length>0)){ + try{ + UnionValue rvSIP_Auth = (UnionValue) rv_DiameterM.getField("sIP_Auth_Data_Item").getType().newInstance(); + RecordValue rv_Auth = (RecordValue) rvSIP_Auth.getVariant("sIP_Auth_Data_Item_RFC_AVP").getType().newInstance(); + + decode_SIP_Auth_Data_Item_RFC_AVP(rv_Auth, avpsrfc[0]); + + rvSIP_Auth.setVariant("sIP_Auth_Data_Item_RFC_AVP", rv_Auth); + rv_DiameterM.setField("sIP_Auth_Data_Item",rvSIP_Auth); + rv_present=true; + } + catch(Exception ex){} + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_DiameterM.getField("sIP_Auth_Data_Item").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avpsrfc.length; i++) { + UnionValue rvSIP_Auth = (UnionValue) rov_rt.getElementType().newInstance(); + RecordValue rv_Auth = (RecordValue) rvSIP_Auth.getVariant("sIP_Auth_Data_Item_RFC_AVP").getType().newInstance(); + + decode_SIP_Auth_Data_Item_RFC_AVP(rv_Auth, avpsrfc[i]); + + rvSIP_Auth.setVariant("sIP_Auth_Data_Item_RFC_AVP", rv_Auth); + rov_rt.appendField(rvSIP_Auth); + } + rv_DiameterM.setField("sIP_Auth_Data_Item",rov_rt); + } + } + + if ((avps3gpp!=null)&&(avps3gpp.length>0)){ + + try{ + UnionValue rvSIP_Auth = (UnionValue) rv_DiameterM.getField("sIP_Auth_Data_Item").getType().newInstance(); + RecordValue rv_Auth = (RecordValue) rvSIP_Auth.getVariant("sIP_Auth_Data_Item_3GPP_AVP").getType().newInstance(); + + decode_SIP_Auth_Data_Item_3GPP_AVP(rv_Auth, avps3gpp[0]); + + rvSIP_Auth.setVariant("sIP_Auth_Data_Item_3GPP_AVP", rv_Auth); + rv_DiameterM.setField("sIP_Auth_Data_Item",rvSIP_Auth); + rv_present=true; + } + catch(Exception ex){} + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_DiameterM.getField("sIP_Auth_Data_Item").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps3gpp.length; i++) { + UnionValue rvSIP_Auth = (UnionValue) rov_rt.getElementType().newInstance(); + RecordValue rv_Auth = (RecordValue) rvSIP_Auth.getVariant("sIP_Auth_Data_Item_3GPP_AVP").getType().newInstance(); + + decode_SIP_Auth_Data_Item_3GPP_AVP(rv_Auth, avps3gpp[i]); + + rvSIP_Auth.setVariant("sIP_Auth_Data_Item_3GPP_AVP", rv_Auth); + rov_rt.appendField(rvSIP_Auth); + } + rv_DiameterM.setField("sIP_Auth_Data_Item",rov_rt); + } + } + return; + } + + private void decode_SIP_Auth_Data_Item_RFC_AVP(RecordValue rv_, AVP avp_){ + + decode_AVPHeader( rv_ ,avp_); + decode_SIP_Authentication_Scheme_AVP( rv_ ,avp_);// sIP_Authentication_Scheme,//requ. + decode_SIP_Item_Number_AVP( rv_ ,avp_);// sIP_Item_Number optional, + decode_SIP_Authenticate_AVP( rv_ ,avp_);// sIP_Authenticate optional, + decode_SIP_Authorization_AVP( rv_ ,avp_);// sIP_Authorization optional, + //decode_SIP_Authentication_Info_AVP( rv_ ,avp_);// sIP_Authentication_Info optional, + //set of AVP_Type aVP_Type optional + return; + } + + private void decode_SIP_Authentication_Scheme_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avpsrfc=avp_.findChildAVPs(AVP_SIP_Authentication_Scheme_RFC_AVP); + AVP[] avps3gpp=avp_.findChildAVPs(AVP_SIP_Authentication_Scheme_3GPP_AVP); + + if ((avpsrfc==null) && (avps3gpp==null)) return; + + UnionValue rvSIP_AuthScheme = (UnionValue) rv_.getField("sIP_Authentication_Scheme").getType().newInstance(); + + if ((avpsrfc!=null)&&(avpsrfc.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_AuthScheme.getVariant("sIP_Authentication_Scheme_RFC_AVP").getType().newInstance(); + + decode_SIP_Authentication_Scheme_RFC_AVP(rv_Auth, avpsrfc[0]); + + rvSIP_AuthScheme.setVariant("sIP_Authentication_Scheme_RFC_AVP", rv_Auth); + } + if ((avps3gpp!=null)&&(avps3gpp.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_AuthScheme.getVariant("sIP_Authentication_Scheme_3GPP_AVP").getType().newInstance(); + + decode_SIP_Authentication_Scheme_3GPP_AVP(rv_Auth, avps3gpp[0]); + + rvSIP_AuthScheme.setVariant("sIP_Authentication_Scheme_3GPP_AVP", rv_Auth); + } + rv_.setField("sIP_Authentication_Scheme",rvSIP_AuthScheme); + return; + } + + private void decode_SIP_Authentication_Scheme_RFC_AVP(RecordValue rv_, AVP avp_){ + + decode_AVPHeader( rv_ ,avp_); + rv_.setField("aVP_Data", mkInt(avp_.int_data)); + + return; + } + + private void decode_SIP_Item_Number_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_SIP_Item_Number_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("sIP_Item_Number").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data",mkInt(avp_.int_data)); + + rv_.setField("sIP_Item_Number",rvSIP_Item); + return; + } + + private void decode_SIP_Authenticate_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avpsrfc=avp_.findChildAVPs(AVP_SIP_Authenticate_RFC_AVP); + AVP[] avps3gpp=avp_.findChildAVPs(AVP_SIP_Authenticate_3GPP_AVP); + + if ((avpsrfc==null) && (avps3gpp==null)) return; + + UnionValue rvSIP_Authenticate = (UnionValue) rv_.getField("sIP_Authenticate").getType().newInstance(); + + if ((avpsrfc!=null)&&(avpsrfc.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_Authenticate.getVariant("sIP_Authenticate_RFC_AVP").getType().newInstance(); + + decode_SIP_Authenticate_RFC_AVP(rv_Auth, avpsrfc[0]); + + rvSIP_Authenticate.setVariant("sIP_Authenticate_RFC_AVP", rv_Auth); + } + if ((avps3gpp!=null)&&(avps3gpp.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_Authenticate.getVariant("sIP_Authenticate_3GPP_AVP").getType().newInstance(); + + decode_SIP_Authenticate_3GPP_AVP(rv_Auth, avps3gpp[0]); + + rvSIP_Authenticate.setVariant("sIP_Authenticate_3GPP_AVP", rv_Auth); + } + rv_.setField("sIP_Authenticate",rvSIP_Authenticate); + return; + } + + private void decode_SIP_Authenticate_RFC_AVP(RecordValue rv_, AVP avp_){ + + decode_AVPHeader( rv_ ,avp_); +// Digest_Realm_AVP digest_Realm,//requ. +// Digest_Nonce_AVP digest_Nonce,//requ. +// Digest_Domain_AVP digest_Domain optional, +// Digest_Opaque_AVP digest_Opaque optional, +// Digest_Stale_AVP digest_Stale optional, +// Digest_Algorithm_AVP digest_Algorithm optional, +// Digest_QoP_AVP digest_QoP optional, +// Digest_HA1_AVP digest_HA1 optional, +// set of Digest_Auth_Param_AVP digest_Auth_Param optional, +// set of AVP_Type aVP_Type optional + + return; + } + + private void decode_SIP_Authorization_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avpsrfc=avp_.findChildAVPs(AVP_SIP_Authorization_RFC_AVP); + AVP[] avps3gpp=avp_.findChildAVPs(AVP_SIP_Authorization_3GPP_AVP); + + if ((avpsrfc==null) && (avps3gpp==null)) return; + + UnionValue rvSIP_Authenticate = (UnionValue) rv_.getField("sIP_Authorization").getType().newInstance(); + + if ((avpsrfc!=null)&&(avpsrfc.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_Authenticate.getVariant("sIP_Authorization_RFC_AVP").getType().newInstance(); + + decode_SIP_Authorization_RFC_AVP(rv_Auth, avpsrfc[0]); + + rvSIP_Authenticate.setVariant("sIP_Authorization_RFC_AVP", rv_Auth); + } + if ((avps3gpp!=null)&&(avps3gpp.length==1)){ + RecordValue rv_Auth = (RecordValue) rvSIP_Authenticate.getVariant("sIP_Authorization_3GPP_AVP").getType().newInstance(); + + decode_SIP_Authorization_3GPP_AVP(rv_Auth, avps3gpp[0]); + + rvSIP_Authenticate.setVariant("sIP_Authorization_3GPP_AVP", rv_Auth); + } + rv_.setField("sIP_Authorization",rvSIP_Authenticate); + return; + } + + private void decode_SIP_Authorization_RFC_AVP(RecordValue rv_, AVP avp_){ + + decode_AVPHeader( rv_ ,avp_); +// Digest_Username_AVP digest_Username,//requi. +// Digest_Realm_AVP digest_Realm, +// Digest_Nonce_AVP digest_Nonce, +// Digest_URI_AVP digest_URI, +// Digest_Response_AVP digest_Response,//requi. +// Digest_Algorithm_AVP digest_Algorithm optional, +// Digest_CNonce_AVP digest_CNonce optional, +// Digest_Opaque_AVP digest_Opaque optional, +// Digest_QoP_AVP digest_QoP optional, +// Digest_Nonce_Count_AVP digest_Nonce_Count optional, +// Digest_Method_AVP digest_Method optional, +// Digest_Entity_Body_Hash_AVP digest_Entity_Body_Hash optional, +// set of Digest_Auth_Param_AVP digest_Auth_Param optional, +// set of AVP_Type aVP_Type optional + + return; + } + /*End RFC4740 AVPs*/ + + /* ******** Digest AVPs ********* */ + private void decode_Digest_Realm_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Realm_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Realm").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Realm",rvSIP_Item); + return; + } + + private void decode_Digest_Nonce_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Nonce_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Nonce").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Nonce",rvSIP_Item); + return; + } + + private void decode_Digest_Domain_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Domain_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Domain").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Domain",rvSIP_Item); + return; + } + + private void decode_Digest_Opaque_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Opaque_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("Digest_Opaque").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("Digest_Opaque",rvSIP_Item); + return; + } + + private void decode_Digest_Stale_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Stale_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Stale").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Stale",rvSIP_Item); + return; + } + + private void decode_Digest_Algorithm_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Algorithm_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Algorithm").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Algorithm",rvSIP_Item); + return; + } + + private void decode_Digest_QoP_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_QoP_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_QoP").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_QoP",rvSIP_Item); + return; + } + + private void decode_Digest_HA1_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_HA1_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_HA1").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_HA1",rvSIP_Item); + return; + } + + private void decode_Digest_Auth_Param_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Auth_Param_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Auth_Param").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Auth_Param",rvSIP_Item); + return; + } + + private void decode_Digest_Username_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Username_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Username").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Username",rvSIP_Item); + return; + } + + private void decode_Digest_URI_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_URI_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_URI").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_URI",rvSIP_Item); + return; + } + + private void decode_Digest_Response_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Response_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Response").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Response",rvSIP_Item); + return; + } + + private void decode_Digest_CNonce_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_CNonce_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_CNonce").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_CNonce",rvSIP_Item); + return; + } + + private void decode_Digest_Nonce_Count_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Nonce_Count_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Nonce_Count").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Nonce_Count",rvSIP_Item); + return; + } + + private void decode_Digest_Method_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Method_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Method").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Method",rvSIP_Item); + return; + } + + private void decode_Digest_Entity_Body_Hash_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Entity_Body_Hash_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Entity_Body_Hash").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Entity_Body_Hash",rvSIP_Item); + return; + } + + private void decode_Digest_Nextnonce_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Nextnonce_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Nextnonce").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Nextnonce",rvSIP_Item); + return; + } + + private void decode_Digest_Response_Auth_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Digest_Response_Auth_AVP); + if (avp==null) return; + + RecordValue rvSIP_Item = (RecordValue) rv_.getField("digest_Response_Auth").getType().newInstance(); + + decode_AVPHeader( rvSIP_Item ,avp); + rvSIP_Item.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("digest_Response_Auth",rvSIP_Item); + return; + } + /* ************ end of Digest AVPs************ */ + + /*TS129_229*/ + private void decode_IP_CAN_Type_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP avp=rt.findAVP(AVP_IP_CAN_Type_AVP); + if (avp==null) return; + + RecordValue rv_rt = (RecordValue) (RecordValue) rv_rid.getField("iP_CAN_Type").getType().newInstance(); + + decode_AVPHeader( rv_rt ,avp); + rv_rt.setField("aVP_Data", mkInt(avp.int_data)); + + rv_rid.setField("iP_CAN_Type",rv_rt); + return; + } + + private void decode_RAT_Type_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP avp=rt.findAVP(AVP_RAT_Type_AVP); + if (avp==null) return; + + RecordValue rv_rt = (RecordValue) (RecordValue) rv_rid.getField("rat_Type").getType().newInstance(); + + decode_AVPHeader( rv_rt ,avp); + rv_rt.setField("aVP_Data", mkInt(avp.int_data)); + + rv_rid.setField("rat_Type",rv_rt); + return; + } + + private void decode_EventTrigger(RecordValue r,AVP a){ + + decode_AVPHeader(r,a); + r.setField("aVP_Data", mkInt(a.int_data)); + + return; + } + + private void decode_Event_Trigger_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avps=avp_.findChildAVPs(AVP_Event_Trigger_AVP); + if (avps==null) return; + + if (avps.length>=1){ + RecordOfValue recOfRoute_Record = (RecordOfValue) rv_.getField("event_Trigger").getType().newInstance(); + recOfRoute_Record.setLength(0); + + for(int i=0;i=1){ + RecordOfValue recOfRoute_Record = (RecordOfValue) rv_DiameterM.getField("event_Trigger").getType().newInstance(); + recOfRoute_Record.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("charging_Rule_Remove").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); + decode_Charging_Rule_Name_AVP( rv ,avps[0]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// set of AVP_Type aVP_Type optional + + rv_rid.setField("charging_Rule_Remove",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("charging_Rule_Remove").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_Charging_Rule_Name_AVP( rv ,avps[i]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// set of AVP_Type aVP_Type optional + rov_rt.appendField(rv); + } + rv_rid.setField("charging_Rule_Remove",rov_rt); + } + } + return; + } + + private void decode_Charging_Rule_Remove_AVP(RecordValue rv_rid, DiameterMessage rt){ + + boolean rv_present=false; + AVP[] avps=rt.findAVPs(AVP_Charging_Rule_Remove_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("charging_Rule_Remove").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); + decode_Charging_Rule_Name_AVP( rv ,avps[0]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// set of AVP_Type aVP_Type optional + + rv_rid.setField("charging_Rule_Remove",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("charging_Rule_Remove").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_Charging_Rule_Name_AVP( rv ,avps[i]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// set of AVP_Type aVP_Type optional + rov_rt.appendField(rv); + } + rv_rid.setField("charging_Rule_Remove",rov_rt); + } + } + return; + } + + private void decode_Charging_Rule_Install_AVP(RecordValue rv_rid, AVP rt){ + + boolean rv_present=false; + AVP[] avps=rt.findChildAVPs(AVP_Charging_Rule_Install_AVP); + if (avps==null) return; + + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("charging_Rule_Install").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); +// set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + decode_Charging_Rule_Name_AVP( rv ,avps[0]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// Rule_Activation_Time_AVP rule_Activation_Time optional, +// Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, +// Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, +// Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, +// set of AVP_Type aVP_Type optional + + rv_rid.setField("charging_Rule_Install",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("charging_Rule_Install").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); +// set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + decode_Charging_Rule_Name_AVP( rv ,avps[i]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// Rule_Activation_Time_AVP rule_Activation_Time optional, +// Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, +// Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, +// Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, +// set of AVP_Type aVP_Type optional + rov_rt.appendField(rv); + } + rv_rid.setField("charging_Rule_Install",rov_rt); + } + } + return; + } + + private void decode_Charging_Rule_Install_AVP(RecordValue rv_rid, DiameterMessage rt){ + + boolean rv_present=false; + AVP[] avps=rt.findAVPs(AVP_Charging_Rule_Install_AVP); + if (avps==null) return; + + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("charging_Rule_Install").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); +// set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + decode_Charging_Rule_Name_AVP( rv ,avps[0]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// Rule_Activation_Time_AVP rule_Activation_Time optional, +// Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, +// Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, +// Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, +// set of AVP_Type aVP_Type optional + + rv_rid.setField("charging_Rule_Install",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("charging_Rule_Install").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); +// set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + decode_Charging_Rule_Name_AVP( rv ,avps[i]);// charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// Rule_Activation_Time_AVP rule_Activation_Time optional, +// Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, +// Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, +// Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, +// set of AVP_Type aVP_Type optional + rov_rt.appendField(rv); + } + rv_rid.setField("charging_Rule_Install",rov_rt); + } + } + return; + } + + private void decode_Charging_Rule_Report_AVP(RecordValue rv_rid, DiameterMessage rt){ + + boolean rv_present=false; + AVP[] avps=rt.findAVPs(AVP_Charging_Rule_Report_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("charging_Rule_Report").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); + decode_Charging_Rule_Name_AVP( rv ,avps[0]); // charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// PCC_Rule_Status_AVP pCC_Rule_Status optional, +// Rule_Failure_Code_AVP rule_Failure_Code optional, +// Final_Unit_Indication_AVP final_Unit_Indication optional, +// set of AVP_Type aVP_Type optional + + rv_rid.setField("charging_Rule_Report",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("charging_Rule_Report").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_Charging_Rule_Name_AVP( rv ,avps[i]); // charging_Rule_Name optional, +// set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, +// Bearer_Identifier_AVP bearer_Identifier optional, +// PCC_Rule_Status_AVP pCC_Rule_Status optional, +// Rule_Failure_Code_AVP rule_Failure_Code optional, +// Final_Unit_Indication_AVP final_Unit_Indication optional, +// set of AVP_Type aVP_Type optional + + rov_rt.appendField(rv); + } + rv_rid.setField("charging_Rule_Report",rov_rt); + } + } + return; + } + + private void decode_QoS_Information_AVP(RecordValue rv_rid, AVP rt){ + + boolean rv_present=false; + AVP[] avps=rt.findChildAVPs(AVP_QoS_Information_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) (RecordValue) rv_rid.getField("qoS_Information").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); + decode_QoS_Class_Identifier_AVP ( rv ,avps[0]);// qoS_Class_Identifier optional, + decode_Max_Requested_Bandwidth_UL_AVP( rv ,avps[0]);// max_Requested_Bandwidth_UL optional, + decode_Max_Requested_Bandwidth_DL_AVP ( rv ,avps[0]);// max_Requested_Bandwidth_DL optional, + //decode_Guaranteed_Bitrate_UL_AVP ( rv ,avps[i]);// guaranteed_Bitrate_UL optional, + //decode_Guaranteed_Bitrate_DL_AVP( rv ,avps[i]);// guaranteed_Bitrate_DL optional, + //decode_Bearer_Identifier_AVP ( rv ,avps[i]);// bearer_Identifier optional, + decode_Allocation_Retention_Priority_AVP( rv ,avps[0]);// allocation_Retention_Priority optional, + decode_APN_Aggregate_Max_Bitrate_UL_AVP( rv ,avps[0]);// aPN_Aggregate_Max_Bitrate_UL optional, + decode_APN_Aggregate_Max_Bitrate_DL_AVP( rv ,avps[0]);// aPN_Aggregate_Max_Bitrate_DL optional, + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rv_rid.setField("qoS_Information",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("qoS_Information").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_QoS_Class_Identifier_AVP ( rv ,avps[i]);// qoS_Class_Identifier optional, + decode_Max_Requested_Bandwidth_UL_AVP( rv ,avps[i]);// max_Requested_Bandwidth_UL optional, + decode_Max_Requested_Bandwidth_DL_AVP ( rv ,avps[i]);// max_Requested_Bandwidth_DL optional, + //decode_Guaranteed_Bitrate_UL_AVP ( rv ,avps[i]);// guaranteed_Bitrate_UL optional, + //decode_Guaranteed_Bitrate_DL_AVP( rv ,avps[i]);// guaranteed_Bitrate_DL optional, + //decode_Bearer_Identifier_AVP ( rv ,avps[i]);// bearer_Identifier optional, + decode_Allocation_Retention_Priority_AVP( rv ,avps[i]);// allocation_Retention_Priority optional, + decode_APN_Aggregate_Max_Bitrate_UL_AVP( rv ,avps[i]);// aPN_Aggregate_Max_Bitrate_UL optional, + decode_APN_Aggregate_Max_Bitrate_DL_AVP( rv ,avps[i]);// aPN_Aggregate_Max_Bitrate_DL optional, + + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rov_rt.appendField(rv); + } + rv_rid.setField("qoS_Information",rov_rt); + } + } + return; + } + + private void decode_QoS_Information_AVP(RecordValue rv_rid, DiameterMessage rt){ + + boolean rv_present=false; + AVP[] avps=rt.findAVPs(AVP_QoS_Information_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv = (RecordValue) rv_rid.getField("qoS_Information").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[0]); + decode_QoS_Class_Identifier_AVP ( rv ,avps[0]);// qoS_Class_Identifier optional, + decode_Max_Requested_Bandwidth_UL_AVP( rv ,avps[0]);// max_Requested_Bandwidth_UL optional, + decode_Max_Requested_Bandwidth_DL_AVP ( rv ,avps[0]);// max_Requested_Bandwidth_DL optional, + //decode_Guaranteed_Bitrate_UL_AVP ( rv ,avps[i]);// guaranteed_Bitrate_UL optional, + //decode_Guaranteed_Bitrate_DL_AVP( rv ,avps[i]);// guaranteed_Bitrate_DL optional, + //decode_Bearer_Identifier_AVP ( rv ,avps[i]);// bearer_Identifier optional, + decode_Allocation_Retention_Priority_AVP( rv ,avps[0]);// allocation_Retention_Priority optional, + decode_APN_Aggregate_Max_Bitrate_UL_AVP( rv ,avps[0]);// aPN_Aggregate_Max_Bitrate_UL optional, + decode_APN_Aggregate_Max_Bitrate_DL_AVP( rv ,avps[0]);// aPN_Aggregate_Max_Bitrate_DL optional, + + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rv_rid.setField("qoS_Information",rv); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("qoS_Information").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_QoS_Class_Identifier_AVP ( rv ,avps[i]);// qoS_Class_Identifier optional, + decode_Max_Requested_Bandwidth_UL_AVP( rv ,avps[i]);// max_Requested_Bandwidth_UL optional, + decode_Max_Requested_Bandwidth_DL_AVP ( rv ,avps[i]);// max_Requested_Bandwidth_DL optional, + //decode_Guaranteed_Bitrate_UL_AVP ( rv ,avps[i]);// guaranteed_Bitrate_UL optional, + //decode_Guaranteed_Bitrate_DL_AVP( rv ,avps[i]);// guaranteed_Bitrate_DL optional, + //decode_Bearer_Identifier_AVP ( rv ,avps[i]);// bearer_Identifier optional, + decode_Allocation_Retention_Priority_AVP( rv ,avps[i]);// allocation_Retention_Priority optional, + decode_APN_Aggregate_Max_Bitrate_UL_AVP( rv ,avps[i]);// aPN_Aggregate_Max_Bitrate_UL optional, + decode_APN_Aggregate_Max_Bitrate_DL_AVP( rv ,avps[i]);// aPN_Aggregate_Max_Bitrate_DL optional, + + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rov_rt.appendField(rv); + } + rv_rid.setField("qoS_Information",rov_rt); + } + } + return; + } + + public void decode_Default_EPS_Bearer_QoS_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP avp=rt.findAVP(AVP_Default_EPS_Bearer_QoS_AVP); + if (avp==null) return; + + RecordValue rv_eps = (RecordValue) (RecordValue) rv_rid.getField("default_EPS_Bearer_QoS").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_eps,avp); + + decode_QoS_Class_Identifier_AVP(rv_eps,avp);// qoS_Class_Identifier optional, + decode_Allocation_Retention_Priority_AVP(rv_eps,avp);// allocation_Retention_Priority optional, + //decode_AVP_Type( rv_eps ,avp); + rv_rid.setField("default_EPS_Bearer_QoS",rv_eps); + return; + + } + + private void decode_Server_Capabilities_AVP(RecordValue rv_sid, AVP sc){ + + AVP avp=sc.findChildAVP(AVP_Server_Capabilities_AVP); + if (avp==null) return; + + RecordValue rv_sc = (RecordValue) (RecordValue) rv_sid.getField("server_Capabilities").getType().newInstance(); + + decode_AVPHeader( rv_sc ,avp); + //decode_Mandatory_Capability_AVP( rv_sc ,avp); + //decode_Optional_Capability_AVP( rv_sc ,avp); + //decode_Server_Name_AVP( rv_sc ,avp); + //decode_AVP_Type( rv_sc ,avp); + + rv_sid.setField("server_Capabilities",rv_sc); + return; + } + + private void decode_Server_Capabilities_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP avp=rt.findAVP(AVP_Server_Capabilities_AVP); + if (avp==null) return; + + RecordValue rv_sc = (RecordValue) (RecordValue) rv_rid.getField("server_Capabilities").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + decode_AVPHeader( rv_sc ,avp); + //TODO:decode_Mandatory_Capability_AVP( rv_sc ,avp); + //TODO:decode_Optional_Capability_AVP( rv_sc ,avp); + //decode_Server_Name_AVP( rv_sc ,avp); + //decode_AVP_Type( rv_sc ,avp); + + rv_rid.setField("server_Capabilities",rv_sc); + return; + } + /*End TS129_229 AVPs*/ + + //TS129_329 AVPs + private void decode_Public_Identity_AVP(RecordValue rv_, AVP avp_){ + + boolean rv_present=false; + AVP avps[]=avp_.findChildAVPs(AVP_Public_Identity_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_rt = (RecordValue) rv_.getField("public_Identity_AVP").getType().newInstance(); + + decode_AVPHeader( rv_rt ,avps[0]); + rv_rt.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_.setField("public_Identity_AVP",rv_rt); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfpi = (RecordOfValue) rv_.getField("public_Identity_AVP").getType().newInstance(); + recOfpi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfpi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfpi.appendField(rv); + } + rv_.setField("public_Identity_AVP",recOfpi); + } + } + return; + } + + private void decode_Public_Identity_AVP(RecordValue rv_rid, DiameterMessage rt){ + + boolean rv_present=false; + AVP avps[]=rt.findAVPs(AVP_Public_Identity_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_rt = (RecordValue) rv_rid.getField("public_Identity").getType().newInstance(); + + decode_AVPHeader( rv_rt ,avps[0]); + rv_rt.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_rid.setField("public_Identity",rv_rt); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfpi = (RecordOfValue) rv_rid.getField("public_Identity").getType().newInstance(); + recOfpi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfpi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfpi.appendField(rv); + } + rv_rid.setField("public_Identity",recOfpi); + } + } + return; + } + + + private void decode_User_Identity_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP avp=rt.findAVP(AVP_User_Identity_AVP); + if (avp==null) return; + + RecordValue rv_ui = (RecordValue) (RecordValue) rv_rid.getField("user_Identity").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_ui ,avp); + decode_Public_Identity_AVP(rv_ui,avp); + decode_MSISDN_AVP(rv_ui,avp); + //decode_AVP_Type( rv_ui ,avp); + + rv_rid.setField("user_Identity",rv_ui); + return; + } + + + private void decode_MSISDN_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_MSISDN_AVP); + if (avp==null) return; + + RecordValue rv_rt = (RecordValue) (RecordValue) rv_.getField("mSISDN_AVP").getType().newInstance(); + + decode_AVPHeader( rv_rt ,avp); + rv_rt.setField("aVP_Data", mkOctetstring(avp.getData())); + + rv_.setField("mSISDN_AVP",rv_rt); + } + + private void decode_Data_Reference_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + +// AVP[] avps=rt.findAVPs(AVP_Data_Reference_AVP); +// if (avps==null) return; +// +// RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("data_Reference").getType().newInstance(); +// rov_rt.setLength(0); +// +// for (int i = 0; i < avps.length; i++) { +// RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); +// +// decode_AVPHeader( rv ,avps[i]); +// rv.setField("aVP_Data", mkInt(avps[i].int_data)); +// +// rov_rt.appendField(rv); +// } +// rv_rid.setField("data_Reference",rov_rt); +// return; + + + boolean rv_present=false; + AVP[] avps=msg.findAVPs(AVP_Data_Reference_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_dr = (RecordValue) (RecordValue) rv_DiameterM.getField("data_Reference").getType().newInstance(); + + decode_AVPHeader( rv_dr ,avps[0]); + decode_Vendor_Specific_Appl_Id_AVP(rv_dr,avps[0]); + + rv_DiameterM.setField("data_Reference",rv_dr); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + try{ + RecordOfValue recOfrv_dr = (RecordOfValue) rv_DiameterM.getField("data_Reference").getType().newInstance(); + recOfrv_dr.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rv_uf = (RecordValue) rv_ufd.getField("specific_Action").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avps[0]); + rv_uf.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_ufd.setField("specific_Action",rv_uf); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfrr = (RecordOfValue) rv_ufd.getField("specific_Action").getType().newInstance(); + recOfrr.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfrr.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkInt(avps[i].int_data)); + + recOfrr.appendField(rv); + } + rv_ufd.setField("specific_Action",recOfrr); + } + } + return; + + + + + } + + + private void decode_Media_Component_Description_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP[] avps=uf.findAVPs(AVP_Media_Component_Description_AVP); + if (avps==null) return; + + + RecordOfValue rov_rt = (RecordOfValue) rv_ufd.getField("media_Component_Description").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + + decode_Media_Component_Number_AVP( rv ,avps[i] );// media_Component_Nr); + /*set of*/decode_Media_Sub_Component_AVP( rv ,avps[i] );// media_Sub_component optional, + decode_AF_Application_Identifier_AVP( rv ,avps[i] );// af_Application_Id optional, + decode_Media_Type_AVP( rv ,avps[i] );// media_type optional, + decode_Max_Requested_Bandwidth_UL_AVP( rv ,avps[i] );// max_Requested_Bw_Ul optional, + decode_Max_Requested_Bandwidth_DL_AVP( rv ,avps[i] );// max_Requested_Bw_Dl optional, + decode_Flow_Status_AVP( rv ,avps[i] );// flow_Status optional, + decode_Reservation_Priority_AVP( rv ,avps[i] );// reservation_Priority optional, + decode_RS_Bandwidth_AVP( rv ,avps[i] );// rs_Bw optional, + decode_RR_Bandwidth_AVP( rv ,avps[i] );// rr_Bw optional, + /*set of*/decode_Codec_Data_AVP( rv ,avps[i] );// codec_data optional + + rov_rt.appendField(rv); + } + rv_ufd.setField("media_Component_Description",rov_rt); + + return; + } + + private void decode_Service_Info_Status_AVP(RecordValue rv_, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Service_Info_Status_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_.getField("service_Info_Status").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + rv_uf.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("service_Info_Status",rv_uf); + + return; + } + + private void decode_Rx_Request_Type_AVP(RecordValue rv_, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Rx_Request_Type_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_.getField("rx_Request_Type").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + rv_uf.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("rx_Request_Type",rv_uf); + + return; + } + + + + /*End TS129_214 AVPS*/ + + /*TS129_215 AVPS*/ + private void decode_Routing_Rule_Install_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Routing_Rule_Install_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_.getField("routing_Rule_Install").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + //set of Routing_Rule_Definition_AVP routing_Rule_Definition optional, + //set of AVP_Type aVP_Type optional + + rv_.setField("routing_Rule_Install",rv_uf); + return; + } + + private void decode_Routing_Rule_Install_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Routing_Rule_Install_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_ufd.getField("routing_Rule_Install").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + //set of Routing_Rule_Definition_AVP routing_Rule_Definition optional, + //set of AVP_Type aVP_Type optional + + rv_ufd.setField("routing_Rule_Install",rv_uf); + return; + } + + private void decode_Routing_Rule_Remove_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Routing_Rule_Remove_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_.getField("routing_Rule_Remove").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + //set of Routing_Rule_Identifier_AVP routing_Rule_Identifier optional, + //set of AVP_Type aVP_Type optional + + rv_.setField("routing_Rule_Remove",rv_uf); + return; + } + + private void decode_Routing_Rule_Remove_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Routing_Rule_Remove_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_ufd.getField("routing_Rule_Remove").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + //set of Routing_Rule_Identifier_AVP routing_Rule_Identifier optional, + //set of AVP_Type aVP_Type optional + + rv_ufd.setField("routing_Rule_Remove",rv_uf); + return; + } + + + private void decode_QoS_Rule_Name_AVP(RecordValue rv_rid, AVP rt){ //ref: TS129 212 5a.3.4 + AVP[] avps=rt.findChildAVPs(AVP_QoS_Rule_Name_AVP); + if (avps==null) return; + + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("qoS_Rule_Name").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + //try{avp.ungroup();}catch(Exception e){} + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkOctetstring(avps[i].data)); + + rov_rt.appendField(rv); + } + rv_rid.setField("qoS_Rule_Name",rov_rt); + return; + } + + private void decode_Rule_Failure_Code_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Rule_Failure_Code_AVP); + if (avp==null) return; + + RecordValue rv = (RecordValue) rv_.getField("rule_Failure_Code").getType().newInstance(); + + decode_AVPHeader( rv ,avp); + rv.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("rule_Failure_Code",rv); + return; + } + + private void decode_PDN_Connection_ID_AVP(RecordValue rv_, AVP avp_){ + + AVP[] avp=avp_.findChildAVPs(AVP_PDN_Connection_ID_AVP); + + if (avp==null) return; + + if (avp.length>1){} //Should never be more than one AVP + else{ + RecordValue rv = (RecordValue) rv_.getField("pDN_Connection_ID").getType().newInstance(); + + decode_AVPHeader( rv ,avp[0]); + rv.setField("aVP_Data", mkOctetstring(avp[0].getData())); + + rv_.setField("pDN_Connection_ID",rv); + } + return; + } + + private void decode_QoS_Rule_Report_AVP(RecordValue rv_rid, AVP rt){ + + AVP[] avps=rt.findChildAVPs(AVP_QoS_Rule_Report_AVP); + if (avps==null) return; + + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("qoS_Rule_Report").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_QoS_Rule_Name_AVP( rv ,avps[i]);// qoS_Rule_Name optional, + //decode_QoS_Rule_Base_Name_AVP( rv ,avps[i]);// qoS_Rule_Base_Name optional, + //decode_PCC_Rule_Status_AVP( rv ,avps[i]);// pCC_Rule_Status optional, + decode_Rule_Failure_Code_AVP( rv ,avps[i]);// rule_Failure_Code optional, + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rov_rt.appendField(rv); + } + rv_rid.setField("qoS_Rule_Report",rov_rt); + return; + } + + private void decode_QoS_Rule_Report_AVP(RecordValue rv_rid, DiameterMessage rt){ + + AVP[] avps=rt.findAVPs(AVP_QoS_Rule_Report_AVP); + if (avps==null) return; + + if (useList(rv_rid.getFieldNames(),"qoS_Rule_Report")){ + RecordOfValue rov_rt = (RecordOfValue) rv_rid.getField("qoS_Rule_Report").getType().newInstance(); + rov_rt.setLength(0); + + for (int i = 0; i < avps.length; i++) { + + RecordValue rv = (RecordValue) rov_rt.getElementType().newInstance(); + + try{avps[i].ungroup();}catch(Exception e){} + + decode_AVPHeader( rv ,avps[i]); + decode_QoS_Rule_Name_AVP( rv ,avps[i]);// qoS_Rule_Name optional, + //decode_QoS_Rule_Base_Name_AVP( rv ,avps[i]);// qoS_Rule_Base_Name optional, + //decode_PCC_Rule_Status_AVP( rv ,avps[i]);// pCC_Rule_Status optional, + decode_Rule_Failure_Code_AVP( rv ,avps[i]);// rule_Failure_Code optional, + //decode_AVP_Type(rv ,avps[i]);// aVP_Data optional //other parameters. + + rov_rt.appendField(rv); + } + rv_rid.setField("qoS_Rule_Report",rov_rt); + }else{ + RecordValue rv_avp = (RecordValue)rov_any_AVP.getElementType().newInstance(); + decode_AVP_Type(rv_avp,avps[0]); + rov_any_AVP.appendField(rv_avp); + } + return; + } + + private void decode_Session_Linking_Indicator_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Session_Linking_Indicator_AVP); + if (avp==null) return; + + RecordValue rv = (RecordValue) rv_.getField("session_Linking_Indicator").getType().newInstance(); + + decode_AVPHeader( rv ,avp); + rv.setField("session_Linking_Indicator", mkInt(avp.int_data)); + + rv_.setField("session_Linking_Indicator",rv); + return; + } + + private void decode_Subses_Decision_Info_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Subses_Decision_Info_AVP); + if (avps==null) return; + + if (avps.length>=1){ + RecordOfValue recOf = (RecordOfValue) rv_DiameterM.getField("subsession_Decision_Info").getType().newInstance(); + recOf.setLength(0); + + for(int i=0;i=1){ + RecordOfValue recOf = (RecordOfValue) rv_DiameterM.getField("subsesion_Enforcement_Info").getType().newInstance(); + recOf.setLength(0); + + for(int i=0;i=1){ + RecordOfValue recOf = (RecordOfValue) rv_.getField("qoS_Rule_Install").getType().newInstance(); + recOf.setLength(0); + + for(int i=0;i=1){ + RecordOfValue recOf = (RecordOfValue) rv_DiameterM.getField("qoS_Rule_Install").getType().newInstance(); + recOf.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rv_uf = (RecordValue) (RecordValue) rv_ufd.getField("sCSCF_Restoration_Info").getType().newInstance(); + + try {avps[0].ungroup();}catch(Exception ex){} + + decode_AVPHeader( rv_uf ,avps[0]); + decode_Restoration_Info_AVP( rv_uf ,avps[0]);// restoration_Info, + decode_SIP_Authentication_Scheme_AVP( rv_uf ,avps[0]);// sIP_Authentication_Scheme, + //set of AVP_Type aVP_Type optional + + rv_ufd.setField("sCSCF_Restoration_Info",rv_uf); + + rv_present=true; + }catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + + RecordOfValue recOfpi = (RecordOfValue) rv_ufd.getField("sCSCF_Restoration_Info").getType().newInstance(); + recOfpi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfpi.getElementType().newInstance(); + + try {avps[i].ungroup();}catch(Exception ex){} + + decode_AVPHeader( rv ,avps[i]); + decode_Restoration_Info_AVP( rv ,avps[i]);// restoration_Info, + decode_SIP_Authentication_Scheme_AVP( rv ,avps[i]);// sIP_Authentication_Scheme, + //set of AVP_Type aVP_Type optional + + recOfpi.appendField(rv); + } + rv_ufd.setField("sCSCF_Restoration_Info",recOfpi); + } + } + return; + } + + private void decode_Originating_Request_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Originating_Request_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_ufd.getField("originating_Request").getType().newInstance(); + + decode_AVPHeader( rv_uf ,avp); + rv_uf.setField("aVP_Data", mkInt(avp.int_data)); + + rv_ufd.setField("originating_Request",rv_uf); + return; + } + + private void decode_Reason_Code_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Reason_Code_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) (RecordValue) rv_.getField("reason_Code").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("reason_Code",rv_c); + return; + } + + private void decode_Reason_Info_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Reason_Info_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) (RecordValue) rv_.getField("reason_Info").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("reason_Info",rv_c); + return; + } + + private void decode_Deregistration_Reason_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Deregistration_Reason_AVP); + if (avp==null) return; + + RecordValue rv_uf = (RecordValue) (RecordValue) rv_ufd.getField("deregistration_Reason").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_uf ,avp); + decode_Reason_Code_AVP( rv_uf ,avp);// reason_Code,//requi. + decode_Reason_Info_AVP( rv_uf ,avp);// reason_Info optional, + //set of AVP_Type aVP_Type optional + + rv_ufd.setField("deregistration_Reason",rv_uf); + return; + } + + private void decode_Specific_APN_Info_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Specific_APN_Info_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) (RecordValue) rv_.getField("specific_APN_Info").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + + decode_Service_Selection_AVP(rv_c,avp); + decode_MIP6_Agent_Info_AVP(rv_c,avp); + decode_Visited_Network_Identifier_AVP(rv_c,avp); + // decode_AVP_Type(rv_c,avp);// optional + + rv_.setField("specific_APN_Info",rv_c); + return; + } + + private void decode_Active_APN_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Active_APN_AVP); + if (avp==null) return; + + RecordValue rv_ActiveAPN_AVP = (RecordValue) rv_ufd.getField("active_APN").getType().newInstance(); + + decode_AVPHeader( rv_ActiveAPN_AVP ,avp); + decode_Context_Identifier_AVP(rv_ActiveAPN_AVP,avp); + decode_Service_Selection_AVP(rv_ActiveAPN_AVP,avp);//optional + decode_MIP6_Agent_Info_AVP(rv_ActiveAPN_AVP,avp);//optional, + decode_Visited_Network_Identifier_AVP(rv_ActiveAPN_AVP,avp); //optional, + decode_Specific_APN_Info_AVP(rv_ActiveAPN_AVP,avp);// optional, + //decode_AVP_Type(rv_ActiveAPN_AVP,avp);// optional + + rv_ufd.setField("active_APN",rv_ActiveAPN_AVP); + return; + } + + private void decode_Error_Diagnostic_AVP(RecordValue rv_ufd, DiameterMessage uf){ + + AVP avp=uf.findAVP(AVP_Error_Diagnostic_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_ufd.getField("error_Diagnostic").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("error_Diagnostic_Code", mkInt(avp.int_data)); + + rv_ufd.setField("error_Diagnostic",rv_ed); + return; + } + + private void decode_Subscriber_Status_AVP(RecordValue rv_ufd, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Subscriber_Status_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) rv_ufd.getField("subscriber_Status").getType().newInstance(); + + decode_AVPHeader(rv_ed,avp); + rv_ed.setField("subscriber_Status_Code", mkInt(avp.int_data)); + + rv_ufd.setField("subscriber_Status",rv_ed); + return; + } + + private void decode_Operator_Determined_Barring_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Operator_Determined_Barring_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("operator_Determined_Barring").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("operator_Determined_Barring",rv_c); + return; + } + + private void decode_HPLMN_ODB_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_HPLMN_ODB_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("hPLMN_ODB").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("hPLMN_ODB",rv_c); + return; + } + + private void decode_Access_Restriction_Data_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Access_Restriction_Data_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("access_Restriction_Data").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("access_Restriction_Data",rv_c); + return; + } + + private void decode_APN_OI_Replacement_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_APN_OI_Replacement_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("aPN_OI_Replacement").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_.setField("aPN_OI_Replacement",rv_c); + return; + } + + private void decode_Max_Requested_Bandwidth_UL_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Max_Requested_Bandwidth_UL_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("max_Requested_Bw_Ul").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("max_Requested_Bw_Ul",rv_ed); + return; + } + + private void decode_Max_Requested_Bandwidth_DL_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Max_Requested_Bandwidth_DL_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("max_Requested_Bw_Dl").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("max_Requested_Bw_Dl",rv_ed); + return; + } + + private void decode_APN_Aggregate_Max_Bitrate_UL_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_APN_Aggregate_Max_Bitrate_UL_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("aPN_Aggregate_Max_Bitrate_UL").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("aPN_Aggregate_Max_Bitrate_UL",rv_ed); + return; + } + + private void decode_APN_Aggregate_Max_Bitrate_DL_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_APN_Aggregate_Max_Bitrate_DL_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("aPN_Aggregate_Max_Bitrate_DL").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("aPN_Aggregate_Max_Bitrate_DL",rv_ed); + return; + } + + + private void decode_AMBR_AVP(RecordValue rv_, AVP avp_) { //ref: 7.3.33 + + String _str=""; + AVP avp=avp_.findChildAVP(AVP_AMBR_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("aMBR").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_c ,avp); + decode_Max_Requested_Bandwidth_UL_AVP( rv_c ,avp);//max_Requested_Bandwidth_UL, + decode_Max_Requested_Bandwidth_DL_AVP( rv_c ,avp);//max_Requested_Bandwidth_DL, + //set of AVP_Type aVP_Type optional + + rv_.setField("aMBR",rv_c); + return; + } + + private void decode_All_APN_Conf_Included_Id_AVP(RecordValue rv_, AVP avp_) { //ref: 7.3.33 + + AVP avp=avp_.findChildAVP(AVP_All_APN_Conf_Included_Id_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("all_APN_Conf_Included_Id").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("all_APN_Conf_Included_Indicator", mkInt(avp.int_data)); + + rv_.setField("all_APN_Conf_Included_Id",rv_c); + return; + } + + private void decode_APN_Configuration_Profile_AVP(RecordValue rv_, AVP avp_){ //ref: 7.3.34 + + AVP avp=avp_.findChildAVP(AVP_APN_Configuration_Profile_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("aPN_Configuration_Profile").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_c ,avp); + decode_Context_Identifier_AVP ( rv_c ,avp);// context_Identifier, + decode_All_APN_Conf_Included_Id_AVP( rv_c ,avp);// all_APN_Conf_Included_Id, + /*set length (1 .. infinity) of*/ decode_APN_Configuration_AVP( rv_c ,avp);// aPN_Configuration, + //set of AVP_Type aVP_Type optional + + rv_.setField("aPN_Configuration_Profile",rv_c); + return; + } + + private void decode_PDN_Type_AVP(RecordValue rv_, AVP avp_) { //ref: 7.3.33 + + AVP avp=avp_.findChildAVP(AVP_PDN_Type_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("pDN_Type").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + rv_c.setField("pDN_Type_Code", mkInt(avp.int_data)); + + rv_.setField("pDN_Type",rv_c); + return; + } + + private void decode_QoS_Class_Identifier_AVP(RecordValue rv_, AVP avp_){ //ref: 7.3.34 + + String _str=""; + + AVP avp=avp_.findChildAVP(AVP_QoS_Class_Identifier_AVP); + + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("qoS_Class_Identifier").getType().newInstance(); + + decode_AVPHeader( rv_c ,avp); + + /*switch(avp.int_data){ + case 0: _str="Reserved1_E";break;// ( 0), + case 1: _str="QCI_1_E";break;// ( 1), + case 2: _str="QCI_2_E";break;// ( 2), + case 3: _str="QCI_3_E";break;// ( 3), + case 4: _str="QCI_4_E";break;// ( 4), + case 5: _str="QCI_5_E";break;// ( 5), + case 6: _str="QCI_6_E";break;// ( 6), + case 7: _str="QCI_7_E";break;// ( 7), + case 8: _str="QCI_8_E";break;// ( 8), + case 9: _str="QCI_9_E";break;// ( 9), + + default:if (avp.int_data>=10 & avp.int_data<=127) _str="Reserved2_E";// ( 10), // .. 127 + else if (avp.int_data>=128 & avp.int_data<=254) _str="OperatorSpecific_E";// (128), // .. 254 + else if (avp.int_data==255 ) _str="Reserved3_E";// (255)break; + } + */ + //EnumeratedValue e= (EnumeratedValue)rv_c.getField("aVP_Data"/*qoS_Class_Identifier_Code"*/); + //e.setEnum(_str); + rv_c.setField("aVP_Data"/*qoS_Class_Identifier_Code", e*/,mkInt(avp.int_data)); + + rv_.setField("qoS_Class_Identifier",rv_c); + return; + } + + private void decode_Priority_Level_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Priority_Level_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("priority_Level").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("priority_Level",rv_ed); + return; + } + + private void decode_Pre_emption_Capability_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Pre_emption_Capability_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("pre_emption_Capability").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("pre_emption_Capability",rv_ed); + return; + } + + private void decode_Pre_emption_Vulnerability_AVP(RecordValue rv_, AVP avp_){ + + AVP avp=avp_.findChildAVP(AVP_Pre_emption_Vulnerability_AVP); + if (avp==null) return; + + RecordValue rv_ed = (RecordValue) (RecordValue) rv_.getField("pre_emption_Vulnerability").getType().newInstance(); + + decode_AVPHeader( rv_ed ,avp); + rv_ed.setField("aVP_Data", mkInt(avp.int_data)); + + rv_.setField("pre_emption_Vulnerability",rv_ed); + return; + } + + private void decode_Allocation_Retention_Priority_AVP(RecordValue rv_, AVP avp_){ //ref: 7.3.34 + + AVP avp=avp_.findChildAVP(AVP_Allocation_Retention_Priority_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("allocation_Retention_Priority").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_c ,avp); + decode_Priority_Level_AVP( rv_c ,avp);// priority_Level, + decode_Pre_emption_Capability_AVP(rv_c ,avp);// pre_emption_Capability optional, + decode_Pre_emption_Vulnerability_AVP( rv_c ,avp);// pre_emption_Vulnerability optional + + rv_.setField("allocation_Retention_Priority",rv_c); + return; + } + + private void decode_EPS_Subscribed_QoS_Profile_AVP(RecordValue rv_, AVP avp_){ //ref: 7.3.34 + + AVP avp=avp_.findChildAVP(AVP_EPS_Subscribed_QoS_Profile_AVP); + if (avp==null) return; + + RecordValue rv_c = (RecordValue) rv_.getField("ePS_Subscribed_QoS_Profile").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){} + + decode_AVPHeader( rv_c ,avp); + decode_QoS_Class_Identifier_AVP( rv_c ,avp); // qoS_Class_Identifier, + decode_Allocation_Retention_Priority_AVP( rv_c ,avp); // allocation_Retention_Priority, + //set of AVP_Type aVP_Type optional + + rv_.setField("ePS_Subscribed_QoS_Profile",rv_c); + return; + } + + private void decode_APN_Configuration_AVP(RecordValue rv_, AVP avp_){ //ref: 7.3.35 + + AVP[] avp=avp_.findChildAVPs(AVP_APN_Configuration_AVP); + if (avp==null) return; + + RecordOfValue rov_c = (RecordOfValue) rv_.getField("aPN_Configuration").getType().newInstance(); + rov_c.setLength(0); + + for(int i=0;i=1){ + + RecordOfValue recOf = (RecordOfValue) rv_DiameterM.getField("identity_with_Emergency_Registration").getType().newInstance(); + recOf.setLength(0); + + for(int i=0;i=1){ + try{ + RecordValue rv_ = (RecordValue) rv_sid.getField("reporting_Reason").getType().newInstance(); + + decode_AVPHeader( rv_ ,avps[0]); + rv_.setField("aVP_Data", mkInt(avps[0].int_data)); + + rv_sid.setField("reporting_Reason",rv_); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfrr = (RecordOfValue) rv_sid.getField("reporting_Reason").getType().newInstance(); + recOfrr.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfrr.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkInt(avps[i].int_data)); + + recOfrr.appendField(rv); + } + rv_sid.setField("reporting_Reason",recOfrr); + } + } + return; + } + + private void decode_Trigger_Type_AVP(RecordValue rv_sid, AVP sid){ + + AVP[] avps=sid.findChildAVPs(AVP_Trigger_Type_AVP); + if (avps==null){ + + RecordOfValue rov_ = (RecordOfValue)rv_sid.getField("trigger_Type").getType().newInstance(); + rov_.setLength(0); + rv_sid.setField("trigger_Type",rov_); + return; + } + + RecordOfValue rov_ = (RecordOfValue)rv_sid.getField("trigger_Type").getType().newInstance(); + rov_.setLength(0); + for(int i=0;i=1){ + try{ + RecordValue rv_cgpa = (RecordValue) (RecordValue) rv_ims_i.getField("calling_Party_Address").getType().newInstance(); + + decode_AVPHeader( rv_cgpa ,avps[0]); + rv_cgpa.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_ims_i.setField("calling_Party_Address",rv_cgpa); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfcgpa = (RecordOfValue) rv_ims_i.getField("calling_Party_Address").getType().newInstance(); + recOfcgpa.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfcgpa.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfcgpa.appendField(rv); + } + rv_ims_i.setField("calling_Party_Address",recOfcgpa); + } + } + return; + } + + private void decode_Called_Party_Address_AVP(RecordValue rv_ims_i, AVP cdpa){ + + AVP avp=cdpa.findChildAVP(AVP_Called_Party_Address_AVP); + if (avp==null) return; + + RecordValue rv_cdpa = (RecordValue) (RecordValue) rv_ims_i.getField("called_Party_Address").getType().newInstance(); + + decode_AVPHeader( rv_cdpa ,avp); + rv_cdpa.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("called_Party_Address",rv_cdpa); + return; + } + + private void decode_Called_Asserted_Identity_AVP(RecordValue rv_ims_i, AVP cdai){ + + boolean rv_present=false; + AVP avps[]=cdai.findChildAVPs(AVP_Called_Asserted_Identity_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_cdai = (RecordValue) (RecordValue) rv_ims_i.getField("called_Asserted_Identity").getType().newInstance(); + + decode_AVPHeader( rv_cdai ,avps[0]); + rv_cdai.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_ims_i.setField("called_Asserted_Identity",rv_cdai); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfcdai = (RecordOfValue) rv_ims_i.getField("called_Asserted_Identity").getType().newInstance(); + recOfcdai.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfcdai.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfcdai.appendField(rv); + } + rv_ims_i.setField("called_Asserted_Identity",recOfcdai); + } + } + return; + } + + private void decode_Alternate_Charged_Party_Address_AVP(RecordValue rv_ims_i, AVP acpa){ + + AVP avp=acpa.findChildAVP(AVP_Alternate_Charged_Party_Address_AVP); + if (avp==null) return; + + RecordValue rv_acpa = (RecordValue) (RecordValue) rv_ims_i.getField("alternate_Charged_Party_Address").getType().newInstance(); + + decode_AVPHeader( rv_acpa ,avp); + rv_acpa.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("alternate_Charged_Party_Address",rv_acpa); + return; + } + + private void decode_Requested_Party_Address_AVP(RecordValue rv_ims_i, AVP rpa){ + + AVP avp=rpa.findChildAVP(AVP_Requested_Party_Address_AVP); + if (avp==null) return; + + RecordValue rv_rpa = (RecordValue) (RecordValue) rv_ims_i.getField("requested_Party_Address").getType().newInstance(); + + decode_AVPHeader( rv_rpa ,avp); + rv_rpa.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("requested_Party_Address",rv_rpa); + return; + } + + private void decode_Associated_URI_AVP(RecordValue rv_ims_i, AVP auri){ + + boolean rv_present=false; + AVP avps[]=auri.findChildAVPs(AVP_Associated_URI_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_auri = (RecordValue) (RecordValue) rv_ims_i.getField("associated_URI").getType().newInstance(); + + decode_AVPHeader( rv_auri ,avps[0]); + rv_auri.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_ims_i.setField("associated_URI",rv_auri); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfauri = (RecordOfValue) rv_ims_i.getField("associated_URI").getType().newInstance(); + recOfauri.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfauri.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfauri.appendField(rv); + } + rv_ims_i.setField("associated_URI",recOfauri); + } + } + return; + } + + private void decode_SIP_Request_Timestamp_AVP(RecordValue rv_ims_i, AVP ts){ + + AVP avp=ts.findChildAVP(AVP_SIP_Request_Timestamp_AVP); + if (avp==null) return; + + RecordValue rv_ts = (RecordValue) (RecordValue) rv_ims_i.getField("sIP_Request_Timestamp").getType().newInstance(); + + decode_AVPHeader( rv_ts ,avp); + rv_ts.setField("aVP_Data", mkInt(avp.int_data)); + + rv_ims_i.setField("sIP_Request_Timestamp",rv_ts); + return; + } + + private void decode_SIP_Response_Timestamp_AVP(RecordValue rv_ims_i, AVP ts){ + + AVP avp=ts.findChildAVP(AVP_SIP_Response_Timestamp_AVP); + if (avp==null) return; + + RecordValue rv_ts = (RecordValue) (RecordValue) rv_ims_i.getField("sIP_Response_Timestamp").getType().newInstance(); + + decode_AVPHeader( rv_ts ,avp); + rv_ts.setField("aVP_Data", mkInt(avp.int_data)); + + rv_ims_i.setField("sIP_Response_Timestamp",rv_ts); + return; + } + + private void decode_Time_Stamps_AVP(RecordValue rv_ims_i, AVP ts){ + + AVP avp=ts.findChildAVP(AVP_Time_Stamps_AVP); + if (avp==null) return; + + RecordValue rv_ts = (RecordValue) (RecordValue) rv_ims_i.getField("time_Stamps").getType().newInstance(); + + decode_AVPHeader( rv_ts ,avp); + decode_SIP_Request_Timestamp_AVP( rv_ts ,avp); + decode_SIP_Response_Timestamp_AVP( rv_ts ,avp); + + rv_ims_i.setField("time_Stamps",rv_ts); + return; + } + + private void decode_Application_Server_AVP(RecordValue rv_ims_i, AVP as){ + + AVP avp=as.findChildAVP(AVP_Application_Server_AVP); + if (avp==null) return; + + RecordValue rv_as = (RecordValue) rv_ims_i.getField("application_Server").getType().newInstance(); + + decode_AVPHeader( rv_as ,avp); + rv_as.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("application_Server",rv_as); + return; + } + + private void decode_Application_Provided_Called_Party_Address_AVP(RecordValue rv_ims_i, AVP cgpa){ + + boolean rv_present=false; + AVP avps[]=cgpa.findChildAVPs(AVP_Application_Provided_Called_Party_Address_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_cgpa = (RecordValue) (RecordValue) rv_ims_i.getField("application_Provided_Called_Party_Address").getType().newInstance(); + + decode_AVPHeader( rv_cgpa ,avps[0]); + rv_cgpa.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_ims_i.setField("application_Provided_Called_Party_Address",rv_cgpa); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfcgpa = (RecordOfValue) rv_ims_i.getField("application_Provided_Called_Party_Address").getType().newInstance(); + recOfcgpa.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfcgpa.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfcgpa.appendField(rv); + } + rv_ims_i.setField("application_Provided_Called_Party_Address",recOfcgpa); + } + } + return; + } + + private void decode_Application_Server_Information_AVP(RecordValue rv_ims_i, AVP asi){ + + boolean rv_present=false; + AVP avps[]=asi.findChildAVPs(AVP_Application_Server_Information_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_asi = (RecordValue) (RecordValue) rv_ims_i.getField("application_Server_Information").getType().newInstance(); + + decode_AVPHeader( rv_asi ,avps[0]); + decode_Application_Server_AVP(rv_asi,avps[0]); + decode_Application_Provided_Called_Party_Address_AVP(rv_asi,avps[0]); + + rv_ims_i.setField("application_Server_Information",rv_asi); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfasi = (RecordOfValue) rv_ims_i.getField("application_Server_Information").getType().newInstance(); + recOfasi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfasi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + decode_Application_Server_AVP(rv,avps[i]); + decode_Application_Provided_Called_Party_Address_AVP(rv,avps[i]); + + recOfasi.appendField(rv); + } + rv_ims_i.setField("application_Server_Information",recOfasi); + } + } + return; + } + + private void decode_Originating_IOI_AVP(RecordValue rv_ims_i, AVP ioi){ + + AVP avp=ioi.findChildAVP(AVP_Originating_IOI_AVP); + if (avp==null) return; + + RecordValue rv_ioi = (RecordValue) rv_ims_i.getField("originating_IOI").getType().newInstance(); + + decode_AVPHeader( rv_ioi ,avp); + rv_ioi.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("originating_IOI",rv_ioi); + return; + } + + private void decode_Terminating_IOI_AVP(RecordValue rv_ims_i, AVP ioi){ + + AVP avp=ioi.findChildAVP(AVP_Terminating_IOI_AVP); + if (avp==null) return; + + RecordValue rv_ioi = (RecordValue) rv_ims_i.getField("terminating_IOI").getType().newInstance(); + + decode_AVPHeader( rv_ioi ,avp); + rv_ioi.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("terminating_IOI",rv_ioi); + return; + } + + private void decode_Inter_Operator_Identifier_AVP(RecordValue rv_ims_i, AVP ioi){ + + boolean rv_present=false; + AVP avps[]=ioi.findChildAVPs(AVP_Inter_Operator_Identifier_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_ioi = (RecordValue) (RecordValue) rv_ims_i.getField("inter_Operator_Identifier").getType().newInstance(); + + decode_AVPHeader( rv_ioi ,avps[0]); + decode_Originating_IOI_AVP(rv_ioi,avps[0]); + decode_Terminating_IOI_AVP(rv_ioi,avps[0]); + + rv_ims_i.setField("inter_Operator_Identifier",rv_ioi); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfioi = (RecordOfValue) rv_ims_i.getField("inter_Operator_Identifier").getType().newInstance(); + recOfioi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfioi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + decode_Originating_IOI_AVP(rv,avps[i]); + decode_Terminating_IOI_AVP(rv,avps[i]); + + recOfioi.appendField(rv); + } + rv_ims_i.setField("inter_Operator_Identifier",recOfioi); + } + } + return; + } + + private void decode_IMS_Charging_Identifier_AVP(RecordValue rv_ims_i, AVP ici){ + + AVP avp=ici.findChildAVP(AVP_IMS_Charging_Identifier_AVP); + if (avp==null) return; + + RecordValue rv_ici = (RecordValue) rv_ims_i.getField("ims_Charging_Identifier").getType().newInstance(); + + decode_AVPHeader( rv_ici ,avp); + rv_ici.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("ims_Charging_Identifier",rv_ici); + return; + } + + private void decode_SDP_Session_Description_AVP(RecordValue rv_ims_i, AVP sdp){ + + boolean rv_present=false; + AVP avps[]=sdp.findChildAVPs(AVP_SDP_Session_Description_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_sdp = (RecordValue) (RecordValue) rv_ims_i.getField("sdp_Session_Description").getType().newInstance(); + + decode_AVPHeader( rv_sdp ,avps[0]); + rv_sdp.setField("aVP_Data", mkCvUTF8(avps[0].getStringData())); + + rv_ims_i.setField("sdp_Session_Description",rv_sdp); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfioi = (RecordOfValue) rv_ims_i.getField("sdp_Session_Description").getType().newInstance(); + recOfioi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfioi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + rv.setField("aVP_Data", mkCvUTF8(avps[i].getStringData())); + + recOfioi.appendField(rv); + } + rv_ims_i.setField("sdp_Session_Description",recOfioi); + } + } + return; + } + + private void decode_SDP_Media_Component_AVP(RecordValue rv_ims_i, AVP sdp){ + + boolean rv_present=false; + AVP avps[]=sdp.findChildAVPs(AVP_SDP_Media_Component_AVP); + if (avps==null) return; + + if (avps.length>=1){ + try{ + RecordValue rv_sdp = (RecordValue) (RecordValue) rv_ims_i.getField("sdp_Media_Component").getType().newInstance(); + + decode_AVPHeader( rv_sdp ,avps[0]); + //decode_SDP_Media_Name_AVP(rv_sdp ,avps[0]); + //decode_SDP_Media_Description_AVP(rv_sdp ,avps[0]); + //decode_Media_Initiator_Flag_AVP(rv_sdp ,avps[0]); + //decode_Media_Initiator_Party_AVP(rv_sdp ,avps[0]); + //decode_Authorized_QoS_AVP(rv_sdp ,avps[0]); + //decode_ThreeGPP_Charging_Id_AVP(rv_sdp ,avps[0]); + //decode_Access_Network_Charging_Identifier_Value_AVP(rv_sdp ,avps[0]); + + rv_ims_i.setField("sdp_Media_Component",rv_sdp); + rv_present=true; + return; + } + catch(Exception ex){ + //System.out.print(ex.getMessage()); + } + if(!rv_present){ + RecordOfValue recOfioi = (RecordOfValue) rv_ims_i.getField("sdp_Media_Component").getType().newInstance(); + recOfioi.setLength(0); + + for (int i = 0; i < avps.length; i++) { + RecordValue rv = (RecordValue) recOfioi.getElementType().newInstance(); + + decode_AVPHeader( rv ,avps[i]); + //decode_SDP_Media_Name_AVP(rv_sdp ,avps[i]); + //decode_SDP_Media_Description_AVP(rv ,avps[i]); + //decode_Media_Initiator_Flag_AVP(rv ,avps[i]); + //decode_Media_Initiator_Party_AVP(rv ,avps[i]); + //decode_Authorized_QoS_AVP(rv ,avps[i]); + //decode_ThreeGPP_Charging_Id_AVP(rv ,avps[i]); + //decode_Access_Network_Charging_Identifier_Value_AVP(rv ,avps[i]);; + + recOfioi.appendField(rv); + } + rv_ims_i.setField("sdp_Media_Component",recOfioi); + } + } + return; + } + + private void decode_Served_Party_IP_Address_AVP(RecordValue rv_ims_i, AVP spip){ + + AVP avp=spip.findChildAVP(AVP_Served_Party_IP_Address_AVP); + if (avp==null) return; + + RecordValue rv_spip = (RecordValue) rv_ims_i.getField("served_Party_IP_Address").getType().newInstance(); + + decode_AVPHeader( rv_spip ,avp); + decode_Address(rv_spip,avp); + + rv_ims_i.setField("served_Party_IP_Address",rv_spip); + return; + } + + private void decode_Incoming_Trunk_Group_ID_AVP(RecordValue rv_ims_i, AVP tgid){ + + AVP avp=tgid.findChildAVP(AVP_Incoming_Trunk_Group_ID_AVP); + if (avp==null) return; + + RecordValue rv_tg = (RecordValue) rv_ims_i.getField("incoming_Trunk_Group_ID").getType().newInstance(); + + decode_AVPHeader( rv_tg ,avp); + rv_tg.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("incoming_Trunk_Group_ID",rv_tg); + return; + } + + private void decode_Outgoing_Trunk_Group_ID_AVP(RecordValue rv_ims_i, AVP tgid){ + + AVP avp=tgid.findChildAVP(AVP_Outgoing_Trunk_Group_ID_AVP); + if (avp==null) return; + + RecordValue rv_tg = (RecordValue) rv_ims_i.getField("outgoing_Trunk_Group_ID").getType().newInstance(); + + decode_AVPHeader( rv_tg ,avp); + rv_tg.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_ims_i.setField("outgoing_Trunk_Group_ID",rv_tg); + return; + } + + private void decode_Trunk_Group_ID_AVP(RecordValue rv_ims_i, AVP tgid){ + + AVP avp=tgid.findChildAVP(AVP_Trunk_Group_ID_AVP); + if (avp==null) return; + + RecordValue rv_tg = (RecordValue) (RecordValue) rv_ims_i.getField("trunk_Group_ID").getType().newInstance(); + + decode_AVPHeader( rv_tg ,avp); + decode_Incoming_Trunk_Group_ID_AVP(rv_tg,avp); + decode_Outgoing_Trunk_Group_ID_AVP(rv_tg,avp); + + rv_ims_i.setField("trunk_Group_ID",rv_tg); + return; + } + + private void decode_IMS_Information_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_IMS_Information_AVP); + if (avp==null) return; + + RecordValue rv_IMS_Information = (RecordValue) (RecordValue) rv_sid.getField("ims_Information").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_IMS_Information ,avp); + decode_Event_Type_AVP(rv_IMS_Information ,avp); + decode_Role_Of_Node_AVP(rv_IMS_Information ,avp); + decode_Node_Functionality_AVP(rv_IMS_Information ,avp); + decode_User_Session_ID_AVP(rv_IMS_Information ,avp); +// Outgoing_Session_Id_AVP outgoing_Session_Id optional, +// Session_Priority_AVP session_Priority optional, + decode_Calling_Party_Address_AVP(rv_IMS_Information ,avp); + decode_Called_Party_Address_AVP(rv_IMS_Information ,avp); + decode_Called_Asserted_Identity_AVP(rv_IMS_Information ,avp); +// Number_Portability_Routing_Information_AVP number_Portability_Routing_Information optional, +// Carrier_Select_Routing_Information_AVP carrier_Select_Routing_Information optional, + decode_Alternate_Charged_Party_Address_AVP(rv_IMS_Information ,avp); + decode_Requested_Party_Address_AVP(rv_IMS_Information ,avp); + decode_Associated_URI_AVP(rv_IMS_Information ,avp); + decode_Time_Stamps_AVP(rv_IMS_Information ,avp); + decode_Application_Server_Information_AVP(rv_IMS_Information ,avp); + decode_Inter_Operator_Identifier_AVP(rv_IMS_Information ,avp); + decode_IMS_Charging_Identifier_AVP(rv_IMS_Information ,avp); + decode_SDP_Session_Description_AVP(rv_IMS_Information ,avp); + decode_SDP_Media_Component_AVP(rv_IMS_Information ,avp); + decode_Served_Party_IP_Address_AVP(rv_IMS_Information ,avp); + decode_Server_Capabilities_AVP(rv_IMS_Information ,avp); + decode_Trunk_Group_ID_AVP(rv_IMS_Information ,avp); +// Bearer_Service_AVP bearer_Service optional, +// Service_Id_AVP service_Id optional, +// set of Service_Specific_Info_AVP service_Specific_Info optional, +// set of Message_Body_AVP message_Body optional, +// Cause_Code_AVP cause_Code optional, +// Access_Network_Information_AVP access_Network_Information optional, +// set of Early_Media_Description_AVP early_Media_Description optional, +// IMS_Communication_Service_Identifier_AVP ims_Communication_Service_Identifier optional, +// Online_Charging_Flag_AVP online_Charging_Flag optional, +// Real_Time_Tariff_Information_AVP real_Time_Tariff_Information optional, +// Account_Expiration_AVP account_Expiration optional, +// Initial_IMS_Charging_Identifier_AVP initial_IMS_Charging_Identifier optional, +// IMS_Emergency_Indicator_AVP ims_Emergency_Indicator optional + + + rv_sid.setField("ims_Information",rv_IMS_Information); + return; + } + + private void decode_Application_Server_ID_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Application_Server_ID_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) (RecordValue) rv_sid.getField("application_Server_ID").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_sid.setField("application_Server_ID",rv_); + return; + } + + private void decode_Application_Service_Type_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Application_Service_Type_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) (RecordValue) rv_sid.getField("application_Service_Type").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_sid.setField("application_Service_Type",rv_); + return; + } + + private void decode_Application_Session_ID_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Application_Session_ID_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) (RecordValue) rv_sid.getField("application_Session_ID").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + //rv_.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + rv_.setField("aVP_Data", mkInt(avp.int_data)); + + rv_sid.setField("application_Session_ID",rv_); + return; + } + + private void decode_Delivery_Status_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Delivery_Status_AVP); + if (avp==null) return; + + RecordValue rv_ = (RecordValue) (RecordValue) rv_sid.getField("delivery_Status").getType().newInstance(); + + decode_AVPHeader( rv_ ,avp); + rv_.setField("aVP_Data", mkCvUTF8(avp.getStringData())); + + rv_sid.setField("delivery_Status",rv_); + return; + } + + + private void decode_Service_Generic_Information_AVP(RecordValue rv_sid, AVP sid){ + + AVP avp=sid.findChildAVP(AVP_Service_Generic_Information_AVP); + if (avp==null) return; + + RecordValue rv_sgi = (RecordValue) (RecordValue) rv_sid.getField("service_Generic_Information").getType().newInstance(); + + try{avp.ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_sgi ,avp); + decode_Application_Server_ID_AVP( rv_sgi ,avp);// application_Server_ID optional, + decode_Application_Service_Type_AVP( rv_sgi ,avp);// application_Service_Type optional, + decode_Application_Session_ID_AVP( rv_sgi ,avp);// application_Session_ID optional, + decode_Delivery_Status_AVP( rv_sgi ,avp);// delivery_Status optional + + rv_sid.setField("service_Generic_Information",rv_sgi); + return; + } + + private void decode_Service_Information_AVP(RecordValue rv_DiameterM, DiameterMessage msg){ + + AVP[] avps=msg.findAVPs(AVP_Service_Information_AVP); + if (avps==null) return; + + if (avps.length>1){} + else{ + RecordValue rv_Service_Information = (RecordValue) (RecordValue) rv_DiameterM.getField("service_Information").getType().newInstance(); + + try{avps[0].ungroup();}catch(Exception e){return;} + + decode_AVPHeader( rv_Service_Information ,avps[0]); + decode_Subscription_Id_AVP(rv_Service_Information,avps[0]); +// AoC_Information_AVP aoc_Information optional, + decode_PS_Information_AVP(rv_Service_Information,avps[0]); + decode_WLAN_Information_AVP(rv_Service_Information,avps[0]); + decode_IMS_Information_AVP(rv_Service_Information,avps[0]); +// MMS_Information_AVP mms_Information optional, +// LCS_Information_AVP lcs_Information optional, +// PoC_Information_AVP poc_Information optional, +// MBMS_Information_AVP mbms_Information optional, +// SMS_Information_AVP sms_Information optional, +// MMTel_Information_AVP mmtel_Information optional, + decode_Service_Generic_Information_AVP(rv_Service_Information,avps[0]); +// IM_Information_AVP im_Information optional, +// DCD_Information_AVP dcd_Information optional + + rv_DiameterM.setField("service_Information",rv_Service_Information); + return; + } + } + /*End TS132_299 AVPs*/ + + //TODO:Continue WITH AVPs + + + private RecordOfValue decode_AVP_Type(byte[] pdata){ + //TODO: decode AVPs..... + RecordOfValue rov; + rov=null; + return rov; + } + + private void decode_AVP_Type(RecordValue rv_avp, AVP pavp){ + + decode_AVPHeader( rv_avp ,pavp); + UnionValue avp_d = (UnionValue)rv_avp.getField("aVP_Data"); + avp_d.setVariant("oCTETSTRING", mkOctetstring(pavp.data)); + + rv_avp.setField("aVP_Data", avp_d); + return; + } + + private void decode_AVP_Type(RecordValue rv_DiameterM, DiameterMessage msg){ + + + return; + } + + private void decode_IntegerValue ( RecordValue rvAvp, AVP avp) { + + IntegerValue AvpData = (IntegerValue)rvAvp.getField("aVP_Data").getType().newInstance(); + AvpData=mkInt(avp.int_data); + rvAvp.setField("aVP_Data",AvpData); + return; + } + + private BitString BufferToBitString(byte[] buf, int SizeOfBitstring/*,int UsedBitsInByte*/) { + try { + BitString bitStr = new BitString(RB, SizeOfBitstring, new byte[1]); + + int Count = 0; + for (Count = 0; Count < SizeOfBitstring; Count++) { + if (((buf[(Count + UsedBitsInByte) / 8]) & (1 << (7 - (UsedBitsInByte + Count) % 8))) != 0) { + bitStr.setBit(Count, 1); + } else { + bitStr.setBit(Count, 0); + } + } + UsedBitsInByte = (UsedBitsInByte + SizeOfBitstring) % 8; + return bitStr; + } catch (Exception ex) { + //ex.printStackTrace(); + return null; + } + } + + private CharstringValue mkCv(String theString) { + + CharstringValue cv = (CharstringValue) charstringType.newInstance(); + cv.setString(theString); + return cv; + + } + + private UniversalCharstringValue mkCvUTF8(String theString) { + + UniversalCharstringValue cv = (UniversalCharstringValue) universalcharstringType.newInstance(); + cv.setString(theString); + return cv; + + } + + private OctetstringValue mkOctetstring(byte[] octetBytes){ + + OctetstringValue ov = (OctetstringValue) octetstringType.newInstance(); + //ov.setString(octetBytes.toString()); + ov.setLength(octetBytes.length); + for (int i = 0; i < octetBytes.length; i++) { + ov.setOctet(i, octetBytes[i]); + } + return ov; + } + + private IntegerValue mkInt(int theInt) { + + IntegerValue iv = (IntegerValue) integerType.newInstance(); + iv.setInt(theInt); + return iv; + } + + private IntegerValue mkInt(long theInt) { + + IntegerValue iv = (IntegerValue) integerType.newInstance();//(IntegerValue) IntegerValue.class.newInstance(); + iv.setBigInt(BigInteger.valueOf(theInt& 0xffffffffL)); + return iv; + } + + private IntegerValue mkInt64(int theInt) { + + IntegerValue in = (IntegerValue) integerType.newInstance(); + in.setInt(theInt); + return in; + } + + public static boolean useList(String[] arr, String targetValue) { + return Arrays.asList(arr).contains(targetValue); + } + +} +/* ######################################################################### */ +/* # End of file # */ +/* ######################################################################### */ diff --git a/javasrc/com/iskratel/ttcn/tci/codec/IOTCodec/IOTCodec.java b/javasrc/com/iskratel/ttcn/tci/codec/IOTCodec/IOTCodec.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa5304e8fc2db95542d83314a232ee5d736379a --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tci/codec/IOTCodec/IOTCodec.java @@ -0,0 +1,705 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides dummuy connection - for unsupported ports for VxLTE. + * @see + */ +package com.iskratel.ttcn.tci.codec.IOTCodec; + +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.lang.reflect.Method; + +import org.etsi.ttcn.tci.BooleanValue; +import org.etsi.ttcn.tci.CharstringValue; +import org.etsi.ttcn.tci.EnumeratedValue; +import org.etsi.ttcn.tci.IntegerValue; +import org.etsi.ttcn.tci.OctetstringValue; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.RecordOfValue; +import org.etsi.ttcn.tci.TciCDProvided; + import org.etsi.ttcn.tci.TciCDRequired; + import org.etsi.ttcn.tci.TciTMProvided; +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.UnionValue; +import org.etsi.ttcn.tci.UniversalCharstringValue; +import org.etsi.ttcn.tci.Value; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriMessage; + +import com.iskratel.protocol.diameter.parser.Codec; +import com.iskratel.protocol.diameter.parser.DiameterMessageDecodeException; +import com.testingtech.ttcn.extension.CodecProvider; +import com.testingtech.ttcn.logging.RTLoggingConstants; +import com.testingtech.ttcn.tri.AbstractCodecPlugin; + +import com.testingtech.ttcn.logging.TciTLProvidedV321TT; +import com.testingtech.ttcn.tci.codec.base.AbstractBaseCodec; + +import de.tu_berlin.cs.uebb.muttcn.runtime.RB; +import de.tu_berlin.cs.uebb.ttcn.runtime.BitString; +import de.tu_berlin.cs.uebb.ttcn.runtime.ForeignMessage; + +public class IOTCodec extends AbstractBaseCodec implements TciCDProvided { + + private static final int CAPTURED_PACKET_IND = 0x0001; /**< ID of CaptureData */ + private static final int SET_FILTER_REQ = 0x0002; /**< ID of SetFilterRequest */ + private static final int START_CAPTURE_REQ = 0x0003; /**< ID of StartCaptureRequest */ + private static final int START_CAPTURE_REP = 0x0004; /**< ID of StartCaptureReply */ + private static final int STOP_CAPTURE_REQ = 0x0005; /**< ID of StopCaptureRequest */ + private static final int STOP_CAPTURE_REP = 0x0006; /**< ID of StopCaptureReply */ + private static final int OPEN_DEVICE_REQ = 0x0007; /**< ID of OpenDeviceRequest */ + private static final int OPEN_DEVICE_REP = 0x0008; /**< ID of OpenDeviceReply */ + private static final int SET_FILTER_REP = 0x0009; /**< ID of SetFilterReply */ + private static final int MERGE_FILES_REQ = 0x000A; /**< ID of MergePcapFilesRequest */ + private static final int MERGE_FILES_REP = 0x000B; /**< ID of MergePcapFilesReply */ + + protected TciTLProvidedV321TT logging; + + protected TciCDRequired typeServer; + protected TciTMProvided management; + + private Type booleanType; + private Type octetstringType; + private Type charstringType; + private Type universalcharstringType; + private Type integerType; + private Type bigintegerType; + + private boolean padding = false; + + /** + * + Constructor method DefaultCodec creates new object and prepares RB. + *

    + * @param rb needed to resolve specific information (e.g. which logging to + * use) + * + * */ + public IOTCodec(RB rb) { + super(rb); + //super(); + typeServer = /*getRB().getTciCDRequired();*/RB.getTciCDRequired(); + octetstringType = typeServer.getOctetstring(); + charstringType = typeServer.getCharstring(); + universalcharstringType = typeServer.getUniversalCharstring(); + integerType = typeServer.getInteger(); + bigintegerType = typeServer.getFloat(); + booleanType = typeServer.getBoolean(); + management = /*getRB().getTciTMProvided();*/RB.getTciTMProvided(); + } + + @Override + public Value decode(TriMessage message, Type decodingHypothesis) { + //Decoding aligned to old TA LibIot + // Get the received byte array + encodedMsg = message.getEncodedMessage(); + // Set the bitpos to 0 (this is needed to know the actual bit position from the byte array) + bitpos = 0; + // The the encoded message is null, nothing can be done, so return null + if(encodedMsg.length == 0) return null; + + // Check which type class the decoding hypothesis is of + switch (decodingHypothesis.getTypeClass()) { + case TciTypeClass.BOOLEAN: + BooleanValue booleanValue = (BooleanValue) booleanType.newInstance(); + + if (encodedMsg[0] == 0x00) {booleanValue.setBoolean(false);} + else {booleanValue.setBoolean(true);} + + return booleanValue; + case TciTypeClass.RECORD: + + int iotmsgType=encodedMsg[0]&0xFF | encodedMsg[1]&0xFF << 8; + int iotmsgLen=2+4+(((encodedMsg[2] & 0xFF))|((encodedMsg[3] & 0xFF) << 8)|((encodedMsg[4] & 0xFF) << 16) | ((encodedMsg[5] & 0xFF)<<24)); + + switch (iotmsgType){ + case CAPTURED_PACKET_IND: + case SET_FILTER_REQ: + case START_CAPTURE_REQ: + case STOP_CAPTURE_REQ: + case OPEN_DEVICE_REQ: + case MERGE_FILES_REQ: + default: + //*_REP + // Fill the NewHypotesis + /*type record GeneralConfigurationRsp + { + Status status + } + + type record SetFilterRsp + { + Status status + } + + type record StartTrafficCaptureRsp + { + Status status + } + + type record StopTrafficCaptureRsp + { + Status status + } + */ + int iotmsgStatus = encodedMsg[2+4]&0xFF;//0+6=7thposition + RecordValue rv = (RecordValue) decodingHypothesis.newInstance(); + + /*type record Status { + FncRetCode code, + charstring reason optional + }*/ + RecordValue rvstatus = (RecordValue) rv.getField("status").getType().newInstance(); + + /*type enumerated FncRetCode { + e_success(0), + // error codes + e_error(1), + e_timeout(2) + }*/ + EnumeratedValue code = (EnumeratedValue) rvstatus.getField("code").getType().newInstance(); + //code.setEnum("e_success"); + code.setInt(iotmsgStatus); + rvstatus.setField("code",code); + + if (iotmsgLen>2+4+1){ + CharstringValue r = (CharstringValue) rvstatus.getField("reason").getType().newInstance(); + r.setString("OK"); + rvstatus.setField("reason",r); + } + //return createNewHypotesis(NewHypotesis,encodedMsg); + //return Newhypotesis; + rv.setField("status", rvstatus); + return rv; + } + + default: + return super.decode(message,decodingHypothesis); + } + //return null; + } + + @Override + public TriMessage encode(Value value) { + // The template is given to the AbstractBaseCodec which handles the basic encoding + //TriMessage encodedMessage = super.encode(template); + //return encodedMessage; + + Type msgType = value.getType(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + switch (msgType.getTypeClass()) { + + case TciTypeClass.INTEGER: + case TciTypeClass.FLOAT: + case TciTypeClass.BITSTRING: + case TciTypeClass.HEXSTRING: + case TciTypeClass.OCTETSTRING: + case TciTypeClass.CHARSTRING: + case TciTypeClass.UNIVERSAL_CHARSTRING: + case TciTypeClass.RECORD_OF: + case TciTypeClass.ENUMERATED: + case TciTypeClass.UNION: + case TciTypeClass.BOOLEAN: + case TciTypeClass.VERDICT: + case TciTypeClass.RECORD: + return encode_IOTMessage(out, (RecordValue) value); + default: + //throw new TciException("Unknown TypeClass"); + logging.tliLog("", System.currentTimeMillis(), "", -1, null, "IOT codec: encode: Unknown TypeClass" + msgType + msgType.getTypeClass()); + + } + return null; + } + + public TriMessage encode_IOTMessage(ByteArrayOutputStream out, RecordValue value_) { + //Encoding aligned to old TA LibIot + if (value_.getType().getName().equals("GeneralConfigurationReq")){ + + /*charstring captureProcessIpAddress, + PortNumber captureProcessPort, + CaptureMode captureMode, + EutInterfaceInfoList eutInfoList optional*/ + +// encode_Charstring(out, (CharstringValue)value_.getField("captureProcessIpAddress")); +// encode_IntegerValue(out,(IntegerValue) value_.getField("captureProcessPort")); +// encode_CaptureMode(out,(UnionValue) value_.getField("captureMode")); +// encode_EutInterfaceInfoList(out,(RecordOfValue) value_.getField("eutInfoList")); + //Implementation due to existing CapturePCO + //Type + encode_UChar(out,0); + //Mode + UnionValue value=(UnionValue)value_.getField("captureMode"); + if (value.getPresentVariantName().equals("liveCpature") && !value.getVariant("liveCpature").notPresent()) { + encode_UChar(out,0); + } + else if (value.getPresentVariantName().equals("offlineCapture") && !value.getVariant("offlineCapture").notPresent()) { + encode_UChar(out,1); + } + + //Timestamp + encode_Time(out,0,0); + //params + encode_StringWithLen(out, (CharstringValue)((RecordValue)((RecordValue)value.getVariant("offlineCapture")).getField("captureSource")).getField("sessionsPath")); + //capturefile + CharstringValue file =(CharstringValue) charstringType.newInstance(); + file.setString(""); + encode_StringWithLen(out, file); + + encode_MsgTypeWithLen(out, OPEN_DEVICE_REQ); + } + //else if(value_.getType().getName().equals("GeneralConfigurationRsp")){} + else if (value_.getType().getName().equals("SetFilterReq")){ + + //tcpdump -qns 0 -XX \(\(tcp or sctp\) and host 172.29.13.100 and port 65535 and \(host 192.168.50.81 or 192.168.50.82\) and port 3868\) -r /home/ttcn3/workspace/TTF006_VxLTE/tracefiles/TC_VxLTE_INT_REG_01.pcapng + + ByteArrayOutputStream filter = new ByteArrayOutputStream(); + write(filter,"("); + /*type record SetFilterReq { + ProtocolFilter protocol, + InterfaceInfoList interfaceInfos + }*/ + encode_ProtocolFilter(filter, (EnumeratedValue)value_.getField("protocol")); + + write(filter," and "); + encode_InterfaceInfoList(filter,(RecordOfValue) value_.getField("interfaceInfos")); + + write(filter,")"); + + //Implementation due to existing CapturePCO + CharstringValue cvfilter =(CharstringValue) charstringType.newInstance(); + cvfilter.setString(filter.toString());// port 5080"); + //filter.setString("tcp port 5501"); + encode_StringWithLen(out, cvfilter); + + encode_MsgTypeWithLen(out, SET_FILTER_REQ); + } + //else if (value_.getType().getName().equals("SetFilterRsp")){} + else if (value_.getType().getName().equals("StartTrafficCaptureReq")){ + + encode_MsgTypeWithLen(out, START_CAPTURE_REQ); + } + //else if (value_.getType().getName().equals("StartTrafficCaptureRsp")){} + else if (value_.getType().getName().equals("StopTrafficCaptureReq")){ + + encode_MsgTypeWithLen(out, STOP_CAPTURE_REQ); + } + //else if (value_.getType().getName().equals("StopTrafficCaptureRsp")){} + else{ + /*error*/ + } + return new ForeignMessage(/*this.getRB(), */out.toByteArray()); + } + + private void encode_MsgTypeWithLen(ByteArrayOutputStream out, int MsgType){ + final ByteArrayOutputStream mt_len = new ByteArrayOutputStream(); + write(mt_len,new byte[]{(byte)(MsgType),(byte)(MsgType>>>8)});//little endian + //encode_IntegerValue(mt_len, (/*2+4+*/out.size())); + write(mt_len,new byte[]{(byte)(out.size()),(byte)(out.size() >>> 8), (byte)(out.size()>>> 16), (byte)(out.size()>>> 24)});//little endian + try { + out.writeTo(mt_len); + out.reset(); + mt_len.writeTo(out); + } + catch(Exception e){e.printStackTrace();} + + } + + ////GeneralConfigurationReq params + private void encode_PhysicalInterfaceList(ByteArrayOutputStream out, RecordOfValue value){ + /*type record of charstring PhysicalInterfaceList;*/ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + //RecordValue rv=(RecordValue) value.getField(i); + encode_Charstring(out, (CharstringValue)value.getField(i)); + } + return; + } + + private void encode_RecordMode(ByteArrayOutputStream out, EnumeratedValue value){ + /* type enumerated RecordMode { + e_norecord, + e_record + }*/ + encode_IntegerValue(out, value.getInt()); + } + + private void encode_LiveCapture(ByteArrayOutputStream out, RecordValue value){ + /*type record LiveCapture { + PhysicalInterfaceList physicalInterfaces, // TODO document example syntax + RecordMode recordMode + }*/ + encode_PhysicalInterfaceList(out,(RecordOfValue)value.getField("physicalInterfaces")); + encode_RecordMode(out,(EnumeratedValue)value.getField("recordMode") ); + } + + + private void encode_TimeOffset(ByteArrayOutputStream out, RecordValue value){ + /*type record TimeOffset + { + //UInt32 seconds, + //UInt32 microseconds + integer seconds (0..4294967295), + integer microseconds (0..4294967295) + }*/ + encode_IntegerValue(out,(IntegerValue) value.getField("seconds")); + encode_IntegerValue(out,(IntegerValue) value.getField("microseconds")); + } + + + private void encode_FileList(ByteArrayOutputStream out, RecordOfValue value){ + /*type record of charstring FileList;*/ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + //RecordValue rv=(RecordValue) value.getField(i); + encode_Charstring(out, (CharstringValue)value.getField(i)); + } + return; + } + + private void encode_MergeFileList(ByteArrayOutputStream out, RecordValue value){ + /*type record MergeFileList { + FileList mergeFileList, + charstring mergeFilePath, + charstring mergeToolPath + }*/ + encode_FileList(out, (RecordOfValue)value.getField("mergeFileList")); + encode_Charstring(out, (CharstringValue)value.getField("mergeFilePath")); + encode_Charstring(out, (CharstringValue)value.getField("mergeToolPath")); + } + + + private void encode_CaptureSource(ByteArrayOutputStream out, RecordValue value){ + /*type record CaptureSource { + charstring sessionsPath, // e.g., the path where session's PCAP files are located like /tmp/19 + MergeFileList mergeFileList + }*/ + encode_Charstring(out, (CharstringValue)value.getField("sessionsPath")); + encode_MergeFileList(out, (RecordValue)value.getField("mergeFileList")); + } + + private void encode_OfflineCapture(ByteArrayOutputStream out, RecordValue value){ + /* type record OfflineCapture { + TimeOffset offset, + CaptureSource captureSource + }*/ + encode_TimeOffset(out,(RecordValue)value.getField("offset")); + encode_CaptureSource(out,(RecordValue)value.getField("captureSource")); + } + + private void encode_CaptureMode(ByteArrayOutputStream out, UnionValue value){ + /*type union CaptureMode { + LiveCapture liveCpature, + OfflineCapture offlineCapture + }*/ + if (value.getPresentVariantName().equals("liveCpature") && !value.getVariant("liveCpature").notPresent()) { + encode_LiveCapture(out, (RecordValue) value.getVariant("liveCpature")); + } + if (value.getPresentVariantName().equals("offlineCapture") && !value.getVariant("offlineCapture").notPresent()) { + encode_OfflineCapture(out, (RecordValue) value.getVariant("offlineCapture")); + } + } + + private void encode_EutInterfaceInfo(ByteArrayOutputStream out, RecordValue value){ + /*type record EutInterfaceInfo { + charstring eut, + IpAddress ipAddress, + PortNumber portNumber + }*/ + encode_Charstring(out, (CharstringValue)value.getField("eut")); + encode_Charstring(out, (CharstringValue)value.getField("ipAddress")); + encode_IntegerValue(out,(IntegerValue) value.getField("portNumber")); + } + + private void encode_EutInterfaceInfoList(ByteArrayOutputStream out, RecordOfValue value){ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + //RecordValue rv=(RecordValue) value.getField(i); + encode_EutInterfaceInfo(out, (RecordValue)value.getField(i)); + } + return; + } + + ////set-filter-REQ params + + private void encode_ProtocolFilter(ByteArrayOutputStream out, EnumeratedValue value){ + /*type enumerated ProtocolFilter { + e_ip, + e_sip, + e_dns, + e_diameter + }*/ + String protocol="ip"; //default + switch (value.getInt()){ + + case 0:protocol= "ip";break; + case 1:protocol= "udp";break; + case 2:/**/ + case 3:protocol= "(tcp or sctp)";break; + default: + + } + protocol="ip"; //default + //encode_IntegerValue(out, value.getInt()); + write(out, protocol); + } + + private void encode_PortNumberList(ByteArrayOutputStream out, RecordOfValue value){ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + //RecordValue rv=(RecordValue) value.getField(i); + //encode_IntegerValue(out,(IntegerValue)value.getField(i)); + //encode_Charstring(out,(CharstringValue)value.getField(i)); + write(out,"port "); + write(out,value.getField(i).toString()); + } + return; + } + + private void encode_IPInterfaceInfo(ByteArrayOutputStream out, RecordValue value){ + /*type record IpInterfaceInfo { + charstring domainName optional, + IpAddress IpAddress, + PortNumberList portNumbers + }*/ + //encode_Charstring(out, (CharstringValue)value.getField("domainName")); + write(out,"host "); + encode_Charstring(out, (CharstringValue)value.getField("IpAddress")); + //write(out," and ");//commented out because of IP fragmentation + //encode_PortNumberList(out,(RecordOfValue)value.getField("portNumbers"));//commented out because of IP fragmentation + + } + + private void encode_IpInterfaceInfoList(ByteArrayOutputStream out, RecordOfValue value){ + /*type record of IpInterfaceInfo IpInterfaceInfoList;*/ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + //RecordValue rv=(RecordValue) value.getField(i); + //write(out,"("); + encode_IPInterfaceInfo(out, (RecordValue)value.getField(i)); + if (i < (len-1)) write(out," and "); + //write(out,")"); + } + return; + } + + private void encode_InterfaceInfo(ByteArrayOutputStream out, UnionValue value){ + /*type union InterfaceInfo { + IpInterfaceInfoList IpInterfaceInfo + }*/ + if (value.getPresentVariantName().equals("IpInterfaceInfo") && !value.getVariant("IpInterfaceInfo").notPresent()) { + encode_IpInterfaceInfoList(out, (RecordOfValue) value.getVariant("IpInterfaceInfo")); + } + } + + private void encode_InterfaceInfoList(ByteArrayOutputStream out, RecordOfValue value){ + /*type record of InterfaceInfo InterfaceInfoList;*/ + if ((value == null) || value.notPresent()) {return;} + + int len = value.getLength(); + for (int i = 0; i < len; i++) { + write(out,"("); + //RecordValue rv=(RecordValue) value.getField(i); + encode_InterfaceInfo(out, (UnionValue)value.getField(i)); + write(out,")"); + } + return; + } + + private void encode_UChar(ByteArrayOutputStream out, int value) { + + //if ((value == null) || value.notPresent()) {return;} + + int ivalue=value; + byte[] IntVal= new byte[]{(byte)ivalue}; + write(out,IntVal); + + } + + private void encode_StringWithLen(ByteArrayOutputStream out, CharstringValue value) { + + if ((value == null) || value.notPresent()) {return;} + + StringBuffer sb = new StringBuffer(); + int len = value.getLength(); + for (int i = 0; i < len; i++) { + sb.append(value.getChar(i)); + } + write(out,new byte[]{(byte)(len),(byte)(len >>> 8), (byte)(len>>> 16), (byte)(len>>> 24)});//little endian + + write(out, sb.toString()); + + //if (padding) + // write_avp_padding(out,value.getLength()); + } + + private void encode_Charstring(ByteArrayOutputStream out, CharstringValue value) { + + if ((value == null) || value.notPresent()) {return;} + + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < value.getLength(); i++) { + sb.append(value.getChar(i)); + } + write(out, sb.toString()); + + if (padding) + write_avp_padding(out,value.getLength()); + } + + private void encode_UniversalCharstring(ByteArrayOutputStream out, UniversalCharstringValue value) { + + if ((value == null) || value.notPresent()) {return;} + + StringBuffer sb = new StringBuffer(); + sb.append(value.getString()); + write(out, sb.toString()); + if (padding) + write_avp_padding(out,sb.length()); + } + + private void encode_Octetstring(ByteArrayOutputStream out, OctetstringValue value) { + + if ((value == null) || value.notPresent()) {return;} + + byte[] OctetVal= new byte[value.getLength()]; + + for (int i = 0; i < value.getLength(); i++) { + OctetVal[i]=(byte)value.getOctet(i); + } + write(out, OctetVal); + if (padding) + write_avp_padding(out,value.getLength()); + } + + private void encode_IntegerValue(ByteArrayOutputStream out, IntegerValue value) { + + if ((value == null) || value.notPresent()) {return;} + + int ivalue=value.getInt(); + byte[] IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + } + + private void encode_IntegerValue(ByteArrayOutputStream out, int value) { + + int ivalue=value; + byte[] IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + } + + private void encode_Integer64Value(ByteArrayOutputStream out, IntegerValue value) { + + if ((value == null) || value.notPresent()) {return;} + + //byte[] IntVal= new byte[8]; + //IntVal = String.valueOf(value).getBytes(); + + int ivalue=value.getInt(); + byte[] IntVal64= new byte[]{ + (byte)((ivalue& 0xffffffffL) >>> 56), + (byte)((ivalue& 0xffffffffL) >>> 48), + (byte)((ivalue& 0xffffffffL) >>> 40), + (byte)((ivalue& 0xffffffffL) >>> 32), + (byte)((ivalue& 0xffffffffL) >>> 24), + (byte)((ivalue& 0xffffffffL) >>> 16), + (byte)((ivalue& 0xffffffffL) >>> 8), + (byte)(ivalue& 0xffffffffL)}; + + write(out,IntVal64); + + } + + private void encode_Integer64Value(ByteArrayOutputStream out, long ivalue) { + + //byte[] IntVal= new byte[8]; + //IntVal = String.valueOf(ivalue).getBytes(); + + byte[] IntVal64= new byte[]{ + (byte)((ivalue& 0xffffffffL) >>> 56), + (byte)((ivalue& 0xffffffffL) >>> 48), + (byte)((ivalue& 0xffffffffL) >>> 40), + (byte)((ivalue& 0xffffffffL) >>> 32), + (byte)((ivalue& 0xffffffffL) >>> 24), + (byte)((ivalue& 0xffffffffL) >>> 16), + (byte)((ivalue& 0xffffffffL) >>> 8), + (byte)(ivalue& 0xffffffffL)}; + + write(out,IntVal64); + //System.out.println(ivalue+" "+IntVal64); + } + private void encode_Time(ByteArrayOutputStream out, int values,int valuems) { + + int ivalue=values; + byte[] IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + ivalue=valuems; + IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + ivalue=0;//valueus; + IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + } + + private void write_avp_padding(ByteArrayOutputStream out, int avp_data_len) { + + final byte[] NullVal = {0x00}; + + if ((avp_data_len % 4)!=0){ + for (int i = 0; i < 4-((avp_data_len % 4)); i++) { + write(out, NullVal); + } + } + } + + private void write(ByteArrayOutputStream out, String outString) { + + try { + out.write(outString.getBytes()); + } catch (IOException iex) { + return; + } + return; + } + + private void write(ByteArrayOutputStream out, byte [] outString) { + + try { + out.write(outString); + } catch (IOException iex) { + return; + } + return; + } + + +} diff --git a/javasrc/com/iskratel/ttcn/tci/codec/LibUpperTesterCodec/LibUpperTesterCodec.java b/javasrc/com/iskratel/ttcn/tci/codec/LibUpperTesterCodec/LibUpperTesterCodec.java new file mode 100644 index 0000000000000000000000000000000000000000..064d7c7d3f2d6643c9a89d9adfc9c79c1554821f --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tci/codec/LibUpperTesterCodec/LibUpperTesterCodec.java @@ -0,0 +1,228 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides dummuy connection - for unsupported ports for VxLTE. + * @see + */ +package com.iskratel.ttcn.tci.codec.LibUpperTesterCodec; + +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import org.etsi.ttcn.tci.BooleanValue; +import org.etsi.ttcn.tci.CharstringValue; +import org.etsi.ttcn.tci.EnumeratedValue; +import org.etsi.ttcn.tci.IntegerValue; +import org.etsi.ttcn.tci.OctetstringValue; +import org.etsi.ttcn.tci.RecordOfValue; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.TciCDProvided; + import org.etsi.ttcn.tci.TciCDRequired; + import org.etsi.ttcn.tci.TciTMProvided; +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.UnionValue; +import org.etsi.ttcn.tci.Value; +import org.etsi.ttcn.tri.TriMessage; + +import com.testingtech.ttcn.extension.CodecProvider; +import com.testingtech.ttcn.logging.RTLoggingConstants; +import com.testingtech.ttcn.tri.AbstractCodecPlugin; + +import com.testingtech.ttcn.logging.TciTLProvidedV321TT; +import com.testingtech.ttcn.tci.codec.base.AbstractBaseCodec; + +import de.tu_berlin.cs.uebb.muttcn.runtime.RB; +import de.tu_berlin.cs.uebb.ttcn.runtime.BitString; +import de.tu_berlin.cs.uebb.ttcn.runtime.ForeignMessage; + +public class LibUpperTesterCodec extends AbstractBaseCodec implements TciCDProvided { + + protected TciTLProvidedV321TT logging; + protected TciCDRequired typeServer; + protected TciTMProvided management; + + private Type booleanType; + private Type octetstringType; + private Type charstringType; + private Type universalcharstringType; + private Type integerType; + private Type bigintegerType; + + @Override + public Value decode(TriMessage message, Type decodingHypothesis) { + // Get the received byte array + encodedMsg = message.getEncodedMessage(); + // Set the bitpos to 0 (this is needed to know the actual bit position from the byte array) + bitpos = 0; + // The the encoded message is null, nothing can be done, so return null + if(encodedMsg.length == 0) return null; + + // Check which type class the decoding hypothesis is of + switch (decodingHypothesis.getTypeClass()) { + case TciTypeClass.BOOLEAN: + BooleanValue booleanValue = (BooleanValue) booleanType.newInstance(); + + if (encodedMsg[0] == 0x00) {booleanValue.setBoolean(false);} + else {booleanValue.setBoolean(true);} + + return booleanValue; + case TciTypeClass.RECORD: + + if (decodingHypothesis.getName().equals("EquipmentOperationReq")) { + /*type record EquipmentOperationReq { + EquipmentCommand cmd, ParameterList params optional + }*/ + RecordValue rv = (RecordValue) decodingHypothesis.newInstance(); + + CharstringValue ccmd = (CharstringValue) rv.getField("cmd").getType().newInstance(); + ccmd.setString("COMMAND"); //parse command from message + rv.setField("cmd",ccmd); + //decode_ParameterList() //parse parameterlist from message + return rv; + } + else if (decodingHypothesis.getName().equals("EquipmentOperationRsp")){ + /*type record EquipmentOperationRsp { + Status status + }*/ + RecordValue rv = (RecordValue) decodingHypothesis.newInstance(); + + RecordValue rvstatus = (RecordValue) rv.getField("status").getType().newInstance(); + + /*type enumerated FncRetCode { + e_success(0), + // error codes + e_error(1), + e_timeout(2) + }*/ + EnumeratedValue code = (EnumeratedValue) rvstatus.getField("code").getType().newInstance(); + code.setEnum("e_success"); + + CharstringValue r = (CharstringValue) rvstatus.getField("reason").getType().newInstance(); + r.setString("OK"); + rvstatus.setField("code",code); + rvstatus.setField("reason",r); + + //return createNewHypotesis(NewHypotesis,encodedMsg); + //return Newhypotesis; + rv.setField("status", rvstatus); + return rv; + } + + default: + return super.decode(message,decodingHypothesis); + } + //return null; + } + + @Override + public TriMessage encode(Value value) { + // The template is given to the AbstractBaseCodec which handles the basic encoding + //TriMessage encodedMessage = super.encode(template); + //return encodedMessage; + + Type msgType = value.getType(); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + switch (msgType.getTypeClass()) { + + case TciTypeClass.INTEGER: + case TciTypeClass.FLOAT: + case TciTypeClass.BITSTRING: + case TciTypeClass.HEXSTRING: + case TciTypeClass.OCTETSTRING: + case TciTypeClass.CHARSTRING: + case TciTypeClass.UNIVERSAL_CHARSTRING: + case TciTypeClass.RECORD_OF: + case TciTypeClass.ENUMERATED: + case TciTypeClass.UNION: + case TciTypeClass.BOOLEAN: + case TciTypeClass.VERDICT: + case TciTypeClass.RECORD: + return encode_LibUpperTesterMessage(out, (RecordValue) value); + default: + //throw new TciException("Unknown TypeClass"); + logging.tliRT("", System.currentTimeMillis(), "", -1, null, RTLoggingConstants.RT_LOG_INFO, "LibUpperTester codec: encode: Unknown TypeClass" + msgType + msgType.getTypeClass()); + } + return null; + } + + public TriMessage encode_LibUpperTesterMessage(ByteArrayOutputStream out, RecordValue value_) { + + if (value_.getType().getName().endsWith("Req")) { + encode_EquipmentOperationReq(out, value_); + } + + if (value_.getType().getName().equals("Rsp")) { + encode_EquipmentOperationRsp(out, value_); + } + + return new ForeignMessage(RB, out.toByteArray()); + } + + private void encode_ParameterList(ByteArrayOutputStream out, RecordOfValue rov){ + + if ((rov == null) | rov.notPresent()) {return;} + + int len = rov.getLength(); + for (int i = 0; i < len; i++) { + encode_Charstring(out, (CharstringValue)rov.getField(i)); + write(out," ".getBytes()); + } + return; + } + + private void encode_EquipmentOperationReq(ByteArrayOutputStream out, RecordValue value_) { + + encode_Charstring(out,(CharstringValue)value_.getField("cmd"));//EquipmentCommand cmd, + write(out,"\n".getBytes()); + encode_ParameterList(out,(RecordOfValue)value_.getField("params"));// params optional + return; + } + + private void encode_EquipmentOperationRsp(ByteArrayOutputStream out, RecordValue value_) { + + RecordValue rvstatus = (RecordValue)value_.getField("status"); + + encode_IntegerValue(out,(IntegerValue)rvstatus.getField("code")); + encode_Charstring(out,(CharstringValue)rvstatus.getField("reason")); + return; + } + + private void write(ByteArrayOutputStream out, byte [] outString) { + + try { + out.write(outString); + } catch (IOException iex) { + return; + } + return; + } + + private void encode_Charstring(ByteArrayOutputStream out, CharstringValue value) { + + if ((value == null) || value.notPresent()) {return;} + + StringBuffer sb = new StringBuffer(); + + for (int i = 0; i < value.getLength(); i++) { + sb.append(value.getChar(i)); + } + write(out, sb.toString().getBytes()); + return; + } + + private void encode_IntegerValue(ByteArrayOutputStream out, IntegerValue value) { + + if ((value == null) || value.notPresent()) {return;} + + int ivalue=value.getInt(); + byte[] IntVal= new byte[]{(byte)(ivalue >>> 24), + (byte)(ivalue >>> 16), + (byte)(ivalue >>> 8), + (byte)ivalue}; + write(out,IntVal); + } +} diff --git a/javasrc/com/iskratel/ttcn/tci/codec/SIPCodec/SIPCodec.java b/javasrc/com/iskratel/ttcn/tci/codec/SIPCodec/SIPCodec.java new file mode 100644 index 0000000000000000000000000000000000000000..f6b0f0ed26db24d775c30d09dbf7f33be0638ccf --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tci/codec/SIPCodec/SIPCodec.java @@ -0,0 +1,81 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides TCI for VxLTE. + * @see + */ +package com.iskratel.ttcn.tci.codec.SIPCodec; + +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import org.apache.log4j.Logger; +import org.etsi.ttcn.tci.BooleanValue; +import org.etsi.ttcn.tci.CharstringValue; +import org.etsi.ttcn.tci.EnumeratedValue; +import org.etsi.ttcn.tci.IntegerValue; +import org.etsi.ttcn.tci.OctetstringValue; +import org.etsi.ttcn.tci.RecordOfValue; +import org.etsi.ttcn.tci.RecordValue; +import org.etsi.ttcn.tci.TciCDProvided; + import org.etsi.ttcn.tci.TciCDRequired; + import org.etsi.ttcn.tci.TciTMProvided; +import org.etsi.ttcn.tci.TciTypeClass; +import org.etsi.ttcn.tci.Type; +import org.etsi.ttcn.tci.UnionValue; +import org.etsi.ttcn.tci.Value; +import org.etsi.ttcn.tri.TriMessage; + +import com.testingtech.ttcn.extension.CodecProvider; +import com.testingtech.ttcn.logging.RTLoggingConstants; +import com.testingtech.ttcn.tri.AbstractCodecPlugin; + +import com.testingtech.ttcn.logging.TciTLProvidedV321TT; +import com.testingtech.ttcn.tci.codec.base.AbstractBaseCodec; + +import de.tu_berlin.cs.uebb.muttcn.runtime.RB; +import de.tu_berlin.cs.uebb.ttcn.runtime.BitString; +import de.tu_berlin.cs.uebb.ttcn.runtime.ForeignMessage; + +public class SIPCodec extends AbstractBaseCodec implements TciCDProvided { + + protected TciTLProvidedV321TT logging; + protected TciCDRequired typeServer; + protected TciTMProvided management; + + private Logger log; + + public SIPCodec(RB rb) { + super(rb); + typeServer = RB.getTciCDRequired(); + management = RB.getTciTMProvided(); + } + + public synchronized void setLogger(Logger logger) { + this.log = logger; + } + + @Override + public Value decode(TriMessage message, Type decodingHypothesis) { + // Get the received byte array + encodedMsg = message.getEncodedMessage(); + // Set the bitpos to 0 (this is needed to know the actual bit position from the byte array) + bitpos = 0; + // The the encoded message is null, nothing can be done, so return null + if(encodedMsg.length == 0) return null; + + return super.decode(message,decodingHypothesis); + } + + @Override + public TriMessage encode(Value value) { + // The template is given to the AbstractBaseCodec which handles the basic encoding + TriMessage encodedMessage = super.encode(value); + return encodedMessage; + } + +} + + diff --git a/javasrc/com/iskratel/ttcn/tri/DummyConnection.java b/javasrc/com/iskratel/ttcn/tri/DummyConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..793099f39327ab84ec4d93f8188dbf5712c1236f --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/DummyConnection.java @@ -0,0 +1,56 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides dummuy connection - for unsupported ports for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriCommunicationTE; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriMessage; +import org.etsi.ttcn.tri.TriPortId; +import org.etsi.ttcn.tri.TriStatus; + +import com.testingtech.ttcn.tci.TciModuleParameterIdImpl; +import com.testingtech.ttcn.tri.TriAddressImpl; +import com.testingtech.ttcn.tri.TriMessageImpl; +import com.testingtech.ttcn.tri.TriStatusImpl; + +public class DummyConnection /*extends *** */ implements LocalAdapterBase { + + TriCommunicationTE cte = null; + TriPortId comPortId = null; + TriPortId tsiPortId = null; + + public DummyConnection(TriCommunicationTE cte) { + this.cte = cte; + } + + public /*synchronized*/ TriStatus triMap(TriPortId comPortId, TriPortId tsiPortId) { + + boolean result=true; + + this.comPortId = comPortId; + this.tsiPortId = tsiPortId; + + return (result == true) ? new TriStatusImpl(TriStatus.TRI_OK) : new TriStatusImpl(TriStatus.TRI_ERROR); + } + + public /*synchronized*/TriStatus triSend(TriComponentId componentId, TriPortId tsiPortId,TriAddress triAddress, TriMessage triMessage) { + + byte[] message = triMessage.getEncodedMessage(); + + return (message == null) ? new TriStatusImpl(TriStatus.TRI_ERROR) : new TriStatusImpl(TriStatus.TRI_OK); + } + + public /*synchronized*/ TriStatus triUnmap() { + + return new TriStatusImpl(TriStatus.TRI_OK); + } + + public /*synchronized*/ TriStatus triUnmap(TriPortId comPortId, TriPortId tsiPortId) { + return triUnmap(); + } +} diff --git a/javasrc/com/iskratel/ttcn/tri/EaPortConnection.java b/javasrc/com/iskratel/ttcn/tri/EaPortConnection.java new file mode 100644 index 0000000000000000000000000000000000000000..af075075d7c9dc7099fb20c61ae2e431a69427c2 --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/EaPortConnection.java @@ -0,0 +1,63 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides connection to control devices for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriCommunicationTE; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriMessage; +import org.etsi.ttcn.tri.TriPortId; +import org.etsi.ttcn.tri.TriStatus; + +import com.testingtech.ttcn.tci.TciModuleParameterIdImpl; +import com.testingtech.ttcn.tri.TriAddressImpl; +import com.testingtech.ttcn.tri.TriMessageImpl; +import com.testingtech.ttcn.tri.TriStatusImpl; + +public class EaPortConnection /*extends *** */ implements LocalAdapterBase { + + TriCommunicationTE cte = null; + TriPortId comPortId = null; + TriPortId tsiPortId = null; + + public EaPortConnection(TriCommunicationTE cte) { + this.cte = cte; + } + + public /*synchronized*/ TriStatus triMap(TriPortId comPortId, TriPortId tsiPortId) { + + boolean result=true; + + this.comPortId = comPortId; + this.tsiPortId = tsiPortId; + + return (result == true) ? new TriStatusImpl(TriStatus.TRI_OK) : new TriStatusImpl(TriStatus.TRI_ERROR); + } + + public /*synchronized*/TriStatus triSend(TriComponentId componentId, TriPortId tsiPortId,TriAddress triAddress, TriMessage triMessage) { + + byte[] message = triMessage.getEncodedMessage(); + + byte[] messagerecv = {0x00}; //Assume status OK Response + TriMessage triMessagerecv =TriMessageImpl.valueOf(messagerecv);//.setEncodedMessage(message); + TriAddress triAddressrecv = new TriAddressImpl(new byte[] {}); + + synchronized(cte) { + cte.triEnqueueMsg(tsiPortId, triAddress, comPortId.getComponent(), triMessage); + } + + return (message == null) ? new TriStatusImpl(TriStatus.TRI_ERROR) : new TriStatusImpl(TriStatus.TRI_OK); + } + + public /*synchronized*/ TriStatus triUnmap() { + return new TriStatusImpl(TriStatus.TRI_OK); + } + + public /*synchronized*/ TriStatus triUnmap(TriPortId comPortId, TriPortId tsiPortId) { + return triUnmap(); + } +} diff --git a/javasrc/com/iskratel/ttcn/tri/IotConnectionOffline.java b/javasrc/com/iskratel/ttcn/tri/IotConnectionOffline.java new file mode 100644 index 0000000000000000000000000000000000000000..0c653fef9c4eb551c216a8f9a5c6272bf7ce6b13 --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/IotConnectionOffline.java @@ -0,0 +1,395 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides offline mode of test adapter for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + +import org.apache.log4j.Logger; +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriCommunicationTE; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriMessage; +import org.etsi.ttcn.tri.TriPortId; +import org.etsi.ttcn.tri.TriStatus; + +import com.testingtech.ttcn.tri.TriAddressImpl; +import com.testingtech.ttcn.tri.TriMessageImpl; +import com.testingtech.ttcn.tri.TriStatusImpl; + +import jpcap.packet.Packet; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +public class IotConnectionOffline extends Thread/*PCAP*/ implements LocalAdapterBase { + + TriCommunicationTE cte = null; + TriPortId comPortId = null; + TriPortId tsiPortId = null; + + protected Logger log = null; + + public static Hashtable ComponentCollection = new Hashtable(); + public static Hashtable ComponentCollectionCompPort = new Hashtable(); + public static Hashtable ComponentCollectionFilter2Port = new Hashtable(); + + private Queue FilterMsgFIFO = new LinkedList<>(); //for selection sequence to which PTC first send resonse + + public String tracefile=""; + + + + public class FilterPackets + { + public List packets; + public String filter; + public TriComponentId componentId; + public TriPortId tsiPortId; + public TriCommunicationTE cte; + final IotConnectionOffline this$0; + + public boolean equals(Object obj) + { + if(obj instanceof FilterPackets) + { + return filter.equals(((FilterPackets)obj).filter); + } else + { + return false; + } + } + + public int hashCode() + { + return filter.hashCode()+componentId.hashCode(); + } + + public FilterPackets(String filter) + { + super(); + this$0 = IotConnectionOffline.this; + this.filter = filter; + } + + public FilterPackets(String filter, TriComponentId componentId, TriPortId tsiPortId, TriCommunicationTE cte) + { + this(filter); + this.componentId = componentId; + this.tsiPortId = tsiPortId; + this.cte = cte; + } + + public void setPackets(List packets){ + this.packets=packets; + } + + public String toString(){ + return (componentId.getComponentName() + " " + tsiPortId.toString() + " " + ((filter != null) ? filter : "(null)"));// + "\n" + "packets count: " + ((packets != null) ? packets.size() : "(null)")); + } + } + + + public IotConnectionOffline(Logger log, TriCommunicationTE cte) { + this.cte = cte; + this.log = log; + } + + + public synchronized TriStatus triMap(TriPortId comPortId, TriPortId tsiPortId) { + try { + boolean result=false; + log.debug("comPortId.getPortName()= " + comPortId.getPortName() + "; tsiPortId.getPortName()= " + tsiPortId.getPortName()); + // Save parameters for later usage + //this.comPortId = comPortId; + //this.tsiPortId = tsiPortId; + + if(tsiPortId.getPortName().equals("acPort")){ + if (comPortId.getComponent().getComponentName().equals("MTC")){ + this.comPortId = comPortId; + this.tsiPortId = tsiPortId; + ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.put(comPortId.getComponent().getComponentName(), comPortId); + //log.debug(""+ComponentCollection.elements().toString()); + //result = connect(); + result=true; + }else{ + ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.put(comPortId.getComponent().getComponentName(), comPortId); + //log.debug(""+ComponentCollection.elements().toString()); + result = true; //assume MTC acport was succesfully conected + } + }else + if (tsiPortId.getPortName().equals("sipPort")){ + ComponentCollection.put(comPortId.getComponent().getComponentName()+"-data", tsiPortId); + ComponentCollectionCompPort.put(comPortId.getComponent().getComponentName()/*+"-sip"*/, comPortId); + //log.debug(""+ComponentCollection.elements().toString()); + result = true; //asuume MTC acport was succesfully conected + }else + if (tsiPortId.getPortName().equals("diameterPort")){ + ComponentCollection.put(comPortId.getComponent().getComponentName()+"-data", tsiPortId); + ComponentCollectionCompPort.put(comPortId.getComponent().getComponentName()/*+"-diameter"*/, comPortId); + //log.debug(""+ComponentCollection.elements().toString()); + result = true; //asuume MTC acport was succesfully conected + }else + if (tsiPortId.getPortName().equals("dPort")){ + ComponentCollection.put(comPortId.getComponent().getComponentName()+"-d", tsiPortId); + ComponentCollectionCompPort.put(comPortId.getComponent().getComponentName()+"-d", comPortId); + //log.debug(""+ComponentCollection.elements().toString()); + result = true; //asuume MTC acport was succesfully conected + }else + if(tsiPortId.getPortName().equals("")){ + result = false; + } + + return (result == true) ? new TriStatusImpl(TriStatus.TRI_OK) + : new TriStatusImpl(TriStatus.TRI_ERROR); + //return new TriStatusImpl(TriStatus.TRI_OK); + } catch (Throwable ex) { + ex.printStackTrace(); + } + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + + //public synchronized TriStatus triSend(TriAddress triAddress, + public TriStatus triSend(TriComponentId componentId, TriPortId tsiPortId,TriAddress triAddress, TriMessage triMessage) { + + try { + byte[] buffer = triMessage.getEncodedMessage(); + + if (buffer == null) { + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + log.debug("Send message: "/*+triMessage.getClass() +"// "*/ + triMessage.toString()); + + int recv_reply = 0; + int iotmsgType = buffer[0]&0xFF | buffer[1]&0xFF << 8; + int iotmsgLen = 2+4+(((buffer[2] & 0xFF))|((buffer[3] & 0xFF) << 8)|((buffer[4] & 0xFF) << 16) | ((buffer[5] & 0xFF)<<24)); + + switch (iotmsgType){ + case 7: /*OPEN_DEVICE_REQ = 0x0007; /**< ID of OpenDeviceRequest */ + log.info("ConfigureREQ"); + byte[] confresp= {0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};/*OPEN_DEVICE_REP = 0x0008; /**< ID of OpenDeviceReply*/ + + log.debug(this.getTraceFile()); + + recv_reply=receiveBuffer(confresp, confresp.length); + break; + + case 2: /*SET_FILTER_REQ = 0x0002; /**< ID of SetFilterRequest */ + log.info("FilterREQ: " + componentId.getComponentName()); + byte[] filterresp= {0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};/*SET_FILTER_REP = 0x0009; /**< ID of SetFilterReply */ + + String filter = new String(buffer,10,buffer.length-10); + log.debug("FilterREQ: filter=" + filter); + try { + FilterPackets fp = new FilterPackets(filter, componentId,ComponentCollection.get(componentId.getComponentName()+"-data"), this.cte/*tsiPortId*/); + ComponentCollectionFilter2Port.put(componentId.getComponentName(), fp); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + FilterMsgFIFO.add(componentId); + recv_reply=receiveBuffer(filterresp, filterresp.length); + break; + + case 3:/*START_CAPTURE_REQ = 0x0003; /**< ID of StartCaptureRequest */ + log.info("StartCaptureREQ: " + componentId.getComponentName()); + log.info("StartCaptureREQ: ComponentCollectionFilter2Port=" + ComponentCollectionFilter2Port.size()); + byte[] startcapresp= {0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};/*START_CAPTURE_REP = 0x0004; /**< ID of StartCaptureReply */ + + if (!ComponentCollectionFilter2Port.isEmpty()) { + + Enumeration keys = ComponentCollectionFilter2Port.keys(); + //log.info("StartCaptureREQ: keys=" + keys); + + do { + try{ + String key = (String) keys.nextElement(); + FilterPackets fp = ComponentCollectionFilter2Port.get(key); + log.info("StartCaptureREQ: launch ReadCaptureThread for component " + fp.componentId.getComponentName()); + ReadCaptureThread t = new ReadCaptureThread (fp.componentId.getComponentName(),log, tracefile,fp); + t.join(1000); + Thread.sleep(100); + }catch(Exception e){ + log.debug(e.getMessage()); + e.printStackTrace(); + } + } while (keys.hasMoreElements()); + //adapterCollection.clear(); + } + + recv_reply=receiveBuffer(startcapresp, startcapresp.length); + break; + + case 5:/*STOP_CAPTURE_REQ = 0x0005; /**< ID of StopCaptureRequest */ + log.info("StopCaptureREQ"); + byte[] stopcapresp= {0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};/*STOP_CAPTURE_REP = 0x0006; /**< ID of StopCaptureReply */ + + if (!ComponentCollectionFilter2Port.isEmpty()) { + + Enumeration keys = ComponentCollectionFilter2Port.keys(); + + do { + try{ + String key = (String) keys.nextElement(); + FilterPackets fp = ComponentCollectionFilter2Port.get(key); + + //Check active capture threads + Thread.sleep(100); + + }catch(Exception e){ + log.debug(e.getMessage()); + } + } while (keys.hasMoreElements()); + //adapterCollection.clear(); + } + + recv_reply=receiveBuffer(stopcapresp, stopcapresp.length); + break; + + default: + + } + +// int packetSize = message.length; +// byte[] packet = new byte[packetSize]; +// System.arraycopy(message, 0, packet, 0, message.length); +// + boolean result=false; + if(tsiPortId.getPortName().equals("acPort")){ + if (componentId.getComponentName().equals("MTC")){ + //result = send(packet); + result = true; + } + else{ + //for selection sequence to which PTC first send resonse //FILTER_REQ - FILTER_REP + //FilterMsgFIFO.add(componentId); + //result = send(packet); + result = true; + } + }else{ + //result = send(packet); + result = true; + } + + return (result == true) ? new TriStatusImpl(TriStatus.TRI_OK) : new TriStatusImpl(TriStatus.TRI_ERROR); + + } catch (Throwable ex) { + log.error("Exception: ", ex); + System.err.println("Exception: " + ex); + } + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + + public TriStatus triUnmap(){ + return new TriStatusImpl(TriStatus.TRI_OK); + } + + //public synchronized TriStatus triUnmap() { + public TriStatus triUnmap(TriPortId comPortId, TriPortId tsiPortId) { + //log.info("triUnmap"); + try { + boolean result = true; + + if(tsiPortId.getPortName().equals("acPort")){ + if (comPortId.getComponent().getComponentName().equals("MTC")){ + //ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + result = true;//disconnect(); + }else{ + ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.remove(comPortId.getComponent().getComponentName(), comPortId); + //log.debug(ComponentCollection.elements().toString()); + result = true; //assume MTC acport was successfully connected + } + }else + if (tsiPortId.getPortName().equals("sipPort")){ + ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.remove(comPortId.getComponent().getComponentName()+"-data", comPortId); + //log.debug(ComponentCollection.elements().toString()); + result = true; //assume MTC acport was successfully connected + }else + if (tsiPortId.getPortName().equals("diameterPort")){ + ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.remove(comPortId.getComponent().getComponentName()+"-data", comPortId); + //log.debug(ComponentCollection.elements().toString()); + result = true; //assume MTC acport was successfully connected + }else + if (tsiPortId.getPortName().equals("dPort")){ + ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + ComponentCollectionCompPort.remove(comPortId.getComponent().getComponentName()+"-d", comPortId); + //log.debug(ComponentCollection.elements().toString()); + result = true; //assume MTC acport was successfully connected + }else{ + result = false;//disconnect(); + } + + return (result == true) ? new TriStatusImpl(TriStatus.TRI_OK) : new TriStatusImpl(TriStatus.TRI_ERROR); + + } catch (Throwable ex) { + log.error("Exception: ", ex); + } + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + + protected int receiveBuffer(byte[] buffer, int bufferSize) { + // Try to decode message + Packet ippacket = new Packet(); + + int packetLength=2+4+(((buffer[2] & 0xFF))|((buffer[3] & 0xFF) << 8)|((buffer[4] & 0xFF) << 16) | ((buffer[5] & 0xFF)<<24)); + if (bufferSize < packetLength) { + return 0; + } + + int iotmsg = ((buffer[0] & 0xFF))|((buffer[1] & 0xFF) << 8);//iot message type + byte[] message = new byte[packetLength]; + + if (iotmsg==1){ //CAPTURE_DATA_IND + byte[] packetb = new byte[packetLength-0x1b]; + System.arraycopy(buffer,0x1b, packetb, 0, packetLength-0x1b); + ippacket.data = packetb; + ippacket.len = packetb.length; + ippacket.sec = 1; + // FIXME Set DataLink properly + //ippacket = PacketFactory.dataToPacket(1, packetb); + message = new byte[packetLength-0x45];//SIP or DIAMETER message content + System.arraycopy(buffer,0x45, message, 0, packetLength-0x45); + }else{ + System.arraycopy(buffer,0, message, 0, packetLength); + } + //base (MTC) component + TriComponentId compid = this.comPortId.getComponent(); + //for selection sequence to which PTC first send response - //FILTER_MSG_RSP + if (!FilterMsgFIFO.isEmpty()){ + compid = FilterMsgFIFO.remove(); + } + + TriMessage triMessage =TriMessageImpl.valueOf(message); + TriAddress triAddress = new TriAddressImpl(new byte[] {}); + + synchronized(cte) { + if (iotmsg==1){ //CAPTURE_DATA_IND + //DONE in separate class + } + else + log.debug("ENQUE"+tsiPortId.toString()+" "+ compid.getComponentName().toString()); + cte.triEnqueueMsg(tsiPortId, triAddress, compid/*comPortId.getComponent()*/, triMessage); + + } + //Return number of bytes to remove from incoming buffer + return packetLength; + } + + public void setTraceFile(String tracefile) { + this.tracefile=tracefile; + } + + public String getTraceFile() { + return this.tracefile; + } +} diff --git a/javasrc/com/iskratel/ttcn/tri/LocalAdapterBase.java b/javasrc/com/iskratel/ttcn/tri/LocalAdapterBase.java new file mode 100644 index 0000000000000000000000000000000000000000..610693681cc141077a32e6f764455252a9a8d8c7 --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/LocalAdapterBase.java @@ -0,0 +1,28 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides interface of test adapter for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + +import java.util.Hashtable; + +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriMessage; +import org.etsi.ttcn.tri.TriPortId; +import org.etsi.ttcn.tri.TriStatus; + +public interface LocalAdapterBase { + + public static Hashtable ComponentCollection = new Hashtable(); + public abstract TriStatus triMap(TriPortId comPortId, TriPortId tsiPortId); + + public abstract TriStatus triSend(TriComponentId componentId, TriPortId tsiPortId,TriAddress triAddress, + TriMessage triMessage); + + public abstract TriStatus triUnmap(); + public abstract TriStatus triUnmap(TriPortId comPortId, TriPortId tsiPortId); + +} \ No newline at end of file diff --git a/javasrc/com/iskratel/ttcn/tri/ReadCaptureThread.java b/javasrc/com/iskratel/ttcn/tri/ReadCaptureThread.java new file mode 100644 index 0000000000000000000000000000000000000000..8cad588efe41d00b75c239dbe71d3e42fcb3dde2 --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/ReadCaptureThread.java @@ -0,0 +1,366 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides offline capturing test adapter for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +//import java.util.Arrays.*; +import org.apache.log4j.Logger; +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriMessage; + +import com.iskratel.ttcn.tri.IotConnectionOffline.FilterPackets; +import com.testingtech.ttcn.tri.TriAddressImpl; +import com.testingtech.ttcn.tri.TriMessageImpl; + +import jpcap.JpcapCaptor; +import jpcap.PacketReceiver; +import jpcap.packet.Packet; +//import jpcap.packet.RawIpPacket; +import jpcap.packet.IPPacket; +import jpcap.packet.TCPPacket; +import jpcap.packet.UDPPacket; +import jpcap.packet.SCTPPacket; + +public class ReadCaptureThread extends Thread implements Runnable{ + + String name; + Thread t; + JpcapCaptor pcap = null; + String tf;//tracefilename + FilterPackets fp; //filterpackets structure with component and ports + Logger log = null; + + ReadCaptureThread (String threadname){ + name = threadname; + t=new Thread(this,name); + t.start(); + } + + ReadCaptureThread (String threadname,Logger loger, String tracefile,FilterPackets filterpackets){ + log = loger; + name = threadname; + tf = tracefile; + fp = filterpackets; + if (fp != null) { + //log.info("ReadCaptureThread: " + threadname + ": fp=" + filterpackets); + } + t=new Thread(this,name); + t.start(); + } + + public String tracefile=""; + PacketHandler ph; + //RawPacketHandler rph; + + + public void run(){ + + //try{ + // open devices for capturing (requires root) + try { + pcap = JpcapCaptor.openFile(this.tf); + } catch (IOException e) { + log.debug(e.getMessage()); + } + + try{ + // add a BPF filter (see tcpdump documentation) + log.debug("ReadCaptureThread: fp.filter=" + ((fp != null) ? fp.filter : "null")); + //if (fp.filter.startsWith("udp")){ + //log.info(">>> filter=" + "(vlan and " + fp.filter+") or ("+fp.filter+")"); + //pcap.setFilter("(vlan and " + fp.filter+") or ("+fp.filter+")", true); + // pcap.setFilter(/*"ip"*/fp.filter, true); + //}else{ + pcap.setFilter(fp.filter, true); + //} + } catch (IOException e) { + + log.debug(this.name+" "+e.getMessage() + "\n");// +e.getStackTrace().toString()); + } + + // create a handler + // packet +// ph = new PacketHandler(fp); +// pcap.addPacketListener(ph); + + // raw + //rph = new RawPacketHandler("offline"); + //JpcapCaptor.addRawPacketListener(rph); + + // capture packets-INFINITE=-1 //***** copied to start capture command +// pcap.capture(200); + + try { + pcap.loopPacket(-1, new PacketHandler(fp)); + } + finally { + + } + + + + //}catch(/*Interrupted*/Exception e){log.debug(this.name+" "+e.getMessage()+ "\n");} + + log.debug("Thread ended! "+name);//+" packets " +fp.packets.size()); + } + + class PacketHandler implements PacketReceiver + { + String name; + private int counter = 0; + //private List packets; + private FilterPackets filterpackets; + private Map _fragments = null; + private Map _tcpBodys = null; + + private class _fragmented_packet { + Packet _packet; + + public _fragmented_packet(Packet p_packet) { + _packet = p_packet; + } + + public void appendData(final byte[] p_data) { + _packet.data = concat(_packet.data, p_data); + _packet.len = _packet.data.length; + _packet.caplen = _packet.data.length; + } + + public Packet getPacket() { + return _packet; + } + + private byte[] concat(byte[]... arrays) { + // Determine the length of the result array + int totalLength = 0; + for (int i = 0; i < arrays.length; i++) { + totalLength += arrays[i].length; + } + + // create the result array + byte[] result = new byte[totalLength]; + + // copy the source arrays into the result array + int currentIndex = 0; + for (int i = 0; i < arrays.length; i++) { + System.arraycopy(arrays[i], 0, result, currentIndex, arrays[i].length); + currentIndex += arrays[i].length; + } + + return result; + } + } // End of class _fragmented_packet + + private class _tcp_data{ + byte[] _data=null; + + public _tcp_data(TCPPacket p_tcppacket) { + _data = p_tcppacket.data; + } + + public void appendData(final byte[] p_data) { + _data = concat(_data, p_data); + } + + public byte[] getData() { + return _data; + } + + private byte[] concat(byte[]... arrays) { + // Determine the length of the result array + int totalLength = 0; + for (int i = 0; i < arrays.length; i++) { + totalLength += arrays[i].length; + } + + // create the result array + byte[] result = new byte[totalLength]; + + // copy the source arrays into the result array + int currentIndex = 0; + for (int i = 0; i < arrays.length; i++) { + System.arraycopy(arrays[i], 0, result, currentIndex, arrays[i].length); + currentIndex += arrays[i].length; + } + + return result; + } + + } // End of class _tcp_data + + private byte[] addBodyData(TCPPacket packet) { + _tcp_data tcpBodyData; + Long ack = new Long(packet.ack_num); + if (_tcpBodys.containsKey(ack)){ + tcpBodyData = _tcpBodys.get(ack); + tcpBodyData.appendData(packet.data); + }else{ + tcpBodyData = new _tcp_data(packet/*.data*/); + _tcpBodys.put(ack, tcpBodyData); + } + + if (packet.psh){ + _tcpBodys.remove(ack); + } + + return tcpBodyData.getData(); + } + + public PacketHandler(String name) { + this.name = name; + _fragments = new HashMap(); + _tcpBodys = new HashMap(); + } + + public PacketHandler(FilterPackets filterpackets) { + this.name = filterpackets.componentId.getComponentName(); + this.filterpackets = filterpackets; + _fragments = new HashMap(); + _tcpBodys = new HashMap(); + } + + public void receivePacket(Packet packet) { + this.counter++; + //String type = packet.getClass().getName(); + //log.debug(name + ": Packet(" + counter + ") is of type " + type +"."); + +// if (packet instanceof EthernetPacket){ +// final byte[] data = ((EthernetPacket)(packet)).getData(); +// //System.err.println(new String( data,0,data.length)); +// //System.err.println(((EthernetPacket)(packet)).getProtocol()); +// } + + Packet new_packet = null; + if (packet instanceof IPPacket) { + IPPacket ipPacket = (IPPacket) packet; + // Check fragmentation + if (ipPacket.more_frag == true) { // First or next fragment + if (!_fragments.containsKey((long) ipPacket.ident)) { + // Create new entry with the first fragment + _fragments.put((long) ipPacket.ident, new _fragmented_packet(packet)); + } else { + // Append the next fragment... + _fragments.get((long) ipPacket.ident).appendData(ipPacket.data); + } + // ...And process next packet + return; + } else if (ipPacket.dont_frag == false) { // Last segment + if (_fragments.containsKey((long) ipPacket.ident)) { + // Add last fragment + _fragments.get((long) ipPacket.ident).appendData(ipPacket.data); + new_packet = _fragments.get((long) ipPacket.ident).getPacket(); + //System.out.println("Final packet: " + new_packet.getClass().getName()); + // Remove entry + _fragments.remove((long) ipPacket.ident); + } else { + new_packet = packet; + } + } else { + new_packet = packet; + } + } + + if(new_packet instanceof TCPPacket) { + TCPPacket tcpPacket = (TCPPacket)new_packet; + //byte[] message= tcpPacket.data;//.getTCPData();//TODO: assume data is in one packet + log.debug(tcpPacket.toString()); + byte[] message = addBodyData(tcpPacket); + if(tcpPacket.psh){ + //body is complete + + //String srcHost = tcpPacket.src_ip.toString(); + //String dstHost = tcpPacket.dst_ip.toString(); + //String isoData = new String(data);//, "ISO-8859-1"); + //log.debug(srcHost+" -> " + dstHost );//+ ": " + isoData); + + TriMessage triMessage =TriMessageImpl.valueOf(message); + TriAddress triAddress = new TriAddressImpl(new byte[] {}); + + synchronized(this.filterpackets.cte) { + log.debug("ENQUE"+this.filterpackets.tsiPortId.toString()+" "+ this.filterpackets.componentId.getComponentName().toString()); + this.filterpackets.cte.triEnqueueMsg(this.filterpackets.tsiPortId, triAddress, this.filterpackets.componentId, triMessage); + } + } + } + + if (new_packet instanceof UDPPacket){ + UDPPacket udpPacket = (UDPPacket)new_packet; + byte[] message = udpPacket.data;//.getUDPData();//TODO: assume data is in one packet + + //String srcHost = udpPacket.src_ip.toString(); + //String dstHost = udpPacket.dst_ip.toString(); + //String isoData = new String(data);//, "ISO-8859-1"); + //log.debug(srcHost+" -> " + dstHost );//+ ": " + isoData); + + TriMessage triMessage =TriMessageImpl.valueOf(message); + TriAddress triAddress = new TriAddressImpl(new byte[] {}); + + synchronized(this.filterpackets.cte) { + log.debug("ENQUE"+this.filterpackets.tsiPortId.toString()+" "+ this.filterpackets.componentId.getComponentName().toString()); + this.filterpackets.cte.triEnqueueMsg(this.filterpackets.tsiPortId, triAddress, this.filterpackets.componentId, triMessage); + } + } + + if (new_packet instanceof SCTPPacket){ + SCTPPacket sctpPacket = (SCTPPacket)new_packet; + byte[] message = sctpPacket.data;//getData();//.getUDPData();//TODO: assume data is in one packet + + //String srcHost = sctpPacket.src_ip.toString();//getSourceAddress(); + //String dstHost = sctpPacket.dst_ip.toString();//getDestinationAddress(); + //String isoData = new String(data);//, "ISO-8859-1"); + //log.debug(srcHost+" -> " + dstHost );//+ ": " + isoData); + //log.debug(sctpPacket.toColoredString(false)); + + int i=0; + while(i < sctpPacket.chunks.length) { + if (sctpPacket.chunks[i].type == 0 ) //DATA_CHUNKTYPE + { + message = java.util.Arrays.copyOfRange(sctpPacket.chunks[i].data, 0+12, sctpPacket.chunks[i].data.length);//12 - length of DATAchunks parameters + + TriMessage triMessage =TriMessageImpl.valueOf(message); + TriAddress triAddress = new TriAddressImpl(new byte[] {}); + + synchronized(this.filterpackets.cte) { + log.debug("ENQUE"+this.filterpackets.tsiPortId.toString()+" "+ this.filterpackets.componentId.getComponentName().toString()); + this.filterpackets.cte.triEnqueueMsg(this.filterpackets.tsiPortId, triAddress, this.filterpackets.componentId, triMessage); + } + } + i++; + } + } + + } + +// public List getPackets(){ +// return this.packets; +// } + } + + class RawPacketHandler implements PacketReceiver + { + String name; + private int counter = 0; + //private List rawpackets; + + public RawPacketHandler(String name) { + this.name = name; + } + + public void receivePacket(Packet packet) { + this.counter++; + //rawpackets.add(rawPacket); + //System.err.println(rawPacket.getClass().toString()/*rawPacket*/); + } + +// public List getPackets(){ +// return this.rawpackets; +// } + } + +} diff --git a/javasrc/com/iskratel/ttcn/tri/VxlteAdapter.java b/javasrc/com/iskratel/ttcn/tri/VxlteAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..e581666b07b153cd3c7f1d569f8bd7ba8eb2f179 --- /dev/null +++ b/javasrc/com/iskratel/ttcn/tri/VxlteAdapter.java @@ -0,0 +1,371 @@ +/** + * @author TTF006 + * @version $Id: $ + * @desc This module provides test adapter for VxLTE. + * @see + */ +package com.iskratel.ttcn.tri; + + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.apache.log4j.PropertyConfigurator; + +import org.etsi.ttcn.tci.CharstringValue; +import org.etsi.ttcn.tci.EnumeratedValue; +import org.etsi.ttcn.tci.TciCDProvided; +import org.etsi.ttcn.tci.TciCDRequired; +import org.etsi.ttcn.tci.TciModuleId; +import org.etsi.ttcn.tci.TciModuleParameterId; +import org.etsi.ttcn.tci.TciParameterList; +import org.etsi.ttcn.tci.TciTMProvided; +import org.etsi.ttcn.tri.TriAddress; +import org.etsi.ttcn.tri.TriCommunicationSA; +import org.etsi.ttcn.tri.TriComponentId; +import org.etsi.ttcn.tri.TriFunctionId; +import org.etsi.ttcn.tri.TriMessage; +import org.etsi.ttcn.tri.TriParameter; +import org.etsi.ttcn.tri.TriParameterList; +import org.etsi.ttcn.tri.TriPlatformPA; +import org.etsi.ttcn.tri.TriPortId; +import org.etsi.ttcn.tri.TriPortIdList; +import org.etsi.ttcn.tri.TriStatus; +import org.etsi.ttcn.tri.TriTestCaseId; + +import com.iskratel.ttcn.tci.codec.DIAMETERCodec.DIAMETERCodec; +import com.iskratel.ttcn.tci.codec.IOTCodec.IOTCodec; +import com.iskratel.ttcn.tci.codec.LibUpperTesterCodec.LibUpperTesterCodec; +import com.iskratel.ttcn.tci.codec.SIPCodec.SIPCodec; +import com.testingtech.ttcn.logging.RTLoggingConstants; +import com.testingtech.ttcn.logging.TciTLProvidedV321TT; +import com.testingtech.ttcn.tci.TciEncoding; +import com.testingtech.ttcn.tci.TestCaseParameterServer; +import com.testingtech.ttcn.tri.TestAdapter; +import com.testingtech.ttcn.tci.TciModuleParameterIdImpl; +//import com.testingtech.ttcn.tci.TciParameterImpl; +import com.testingtech.ttcn.tci.TciParameterListImpl; +//import com.testingtech.ttcn.tci.TciModuleParameterIdImpl; +import com.testingtech.ttcn.tri.TriStatusImpl; + + +import de.tu_berlin.cs.uebb.muttcn.runtime.RB; + + +public class VxlteAdapter extends TestAdapter implements TriCommunicationSA, TriPlatformPA, TciEncoding, TestCaseParameterServer { + + private static final long serialVersionUID = 1L; + + static Logger log = Logger.getLogger(VxlteAdapter.class); + protected TciTLProvidedV321TT logging; + + private Hashtable adapterCollection = new Hashtable(); + + private TciCDRequired typeServer; + +// private org.etsi.ttcn.tci.Type charstringType; +// private org.etsi.ttcn.tci.Type integerType; +// private org.etsi.ttcn.tci.Type floatType; +// private org.etsi.ttcn.tci.Type booleanType; + + private static TciTMProvided management; + + private String portNameForCoding = ""; + + private static String ROOTFOLDERTRACEFILE ="./tracefiles/"; + private String testcaseName; + + private String sMTCName=""; + private String sMTCportName=""; + + public VxlteAdapter() { + super(); + PropertyConfigurator.configure("log4j.properties"); + //this.logging = RB.getTciTLProvidedV321TT(); + + loginfo("VxLTE Adapter instance created."); + } + + private void loginfo(String message){ + //logging.tliRT("", System.currentTimeMillis(), "", -1, null, RTLoggingConstants.RT_LOG_INFO, message); + log.info(message); + } + + public TestAdapter setRB(RB rb) { + super.setRB(rb); + typeServer = RB.getTciCDRequired(); +// charstringType = typeServer.getCharstring(); +// integerType = typeServer.getInteger(); +// floatType = typeServer.getFloat(); +// booleanType = typeServer.getBoolean(); + management = RB.getTciTMProvided(); + + TciCDProvided codec; + codec=new IOTCodec(RB); + codecs.put("IOTCodec", codec); + + codec=new DIAMETERCodec(RB); + codecs.put("DIAMETERCodec", codec); + + codec=new LibUpperTesterCodec(); + codecs.put("LibUpperTesterCodec", codec); + + codec=new SIPCodec(RB); + ((SIPCodec)codec).setLogger(log); + codecs.put("SIPCodec", codec); + codecs.put("LibSip V3", codec); + + return this; + } + + public TriStatus triMap(TriPortId comPortId, TriPortId tsiPortId) { + + loginfo("triMap: comPortId=" + comPortId.getComponent()+"-"+ comPortId.getPortName() + "; tsiPortId=" + tsiPortId.getComponent() +"-" +tsiPortId.getPortName()); + + //CsaDef.triMap(comPortId, tsiPortId); + + if (comPortId.getComponent().getComponentName().contains("MTC")){ + sMTCName=comPortId.getComponent().getComponentName(); + sMTCportName = tsiPortId.getPortName(); + } + + String portName = comPortId.getComponent().getComponentName()+tsiPortId.getPortName(); + LocalAdapterBase baseAdapter;// = adapterCollection.get(portName); + + if (portName.contains("acPort")){ + baseAdapter = adapterCollection.get(sMTCName/*componentId.getComponentName()+portName*/+tsiPortId.getPortName()); + + if (baseAdapter != null) { + // baseAdapter.ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + baseAdapter.triMap(comPortId, tsiPortId); + }else{//new iot connection ... after check of other criteria - new test started + } + }else + if (portName.contains("sipPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + // baseAdapter.ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + baseAdapter.triMap(comPortId, tsiPortId); + }else{ + } + }else + if (portName.contains("diameterPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + // baseAdapter.ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + baseAdapter.triMap(comPortId, tsiPortId); + }else{ + } + }else + if (portName.contains("dPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + // baseAdapter.ComponentCollection.put(comPortId.getComponent().getComponentName(), tsiPortId); + baseAdapter.triMap(comPortId, tsiPortId); + }else{ + } + }else{ + baseAdapter = adapterCollection.get(comPortId.getComponent().getComponentName()+portName); + } + + + if (baseAdapter != null) { + return new TriStatusImpl(TriStatus.TRI_OK); + } + + if (portName.contains("acPort")) { + //New test started ... +// try{ +// PacketCapture pcap=new PacketCapture(); +// }catch(Exception e){ +// loginfo("\nCheck presence of PCAP library on operating system!\n"); +// return new TriStatusImpl(TriStatus.TRI_ERROR); +// } + IotConnectionOffline adapter = new IotConnectionOffline(log, Cte); + adapter.setTraceFile(ROOTFOLDERTRACEFILE+this.testcaseName+".pcapng"); + baseAdapter = adapter; + }else + if (portName.contains("eaPort")){ + EaPortConnection adapter = new EaPortConnection(/*this.log,*/ Cte); + baseAdapter = adapter; + }else { + loginfo("Port not supported (" + portName +")!\n"); + //Init port connection to avoid mapping errors + DummyConnection adapter = new DummyConnection(/*this.log,*/ Cte); + baseAdapter = adapter; + } + + adapterCollection.put(portName, baseAdapter); + return baseAdapter.triMap(comPortId, tsiPortId); + } + + public TriStatus triUnmap(TriPortId comPortId, TriPortId tsiPortId) { + + loginfo("triUnmap: comPortId=" + comPortId.getPortName() + "; tsiPortId="+ tsiPortId.getPortName()); + + //CsaDef.triUnmap(comPortId, tsiPortId); + + String portName = comPortId.getComponent()+tsiPortId.getPortName(); + LocalAdapterBase baseAdapter = adapterCollection.get(portName); + + if (portName.contains("acPort")){ + baseAdapter = adapterCollection.get(sMTCName/*componentId.getComponentName()+portName*/+tsiPortId.getPortName()); + if (baseAdapter != null) { + baseAdapter.triUnmap(comPortId, tsiPortId); + //ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + } + }else + if (portName.contains("sipPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + baseAdapter.triUnmap(comPortId, tsiPortId); + //ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + } + }else + if (portName.contains("diameterPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + baseAdapter.triUnmap(comPortId, tsiPortId); + //ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + } + }else + if (portName.contains("dPort")){ + baseAdapter = adapterCollection.get(sMTCName+sMTCportName); + if (baseAdapter != null) { + baseAdapter.triUnmap(comPortId, tsiPortId); + //ComponentCollection.remove(comPortId.getComponent().getComponentName(), tsiPortId); + } + }else{ + baseAdapter = adapterCollection.get(/*comPortId.getComponent().getComponentName()+*/portName); +// if (!adapterCollection.isEmpty()) { +// Enumeration keys = adapterCollection.keys(); +// do { +// try{ +// String key = (String) keys.nextElement(); +// loginfo("triUnmap:adapters left:key="+key +"comPId=" + portName); +// }catch(Exception e){} +// } while (keys.hasMoreElements()); +// +// } + } + + if (baseAdapter == null) { + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + + adapterCollection.remove(portName); + return baseAdapter.triUnmap(); + } + + public TriStatus triSAReset() { + + loginfo("triSAReset: started"); + + if (!adapterCollection.isEmpty()) { + + Enumeration keys = adapterCollection.keys(); + + do { + try{ + String key = (String) keys.nextElement(); + LocalAdapterBase baseAdapter = adapterCollection.get(key); + + baseAdapter.triUnmap(); + adapterCollection.remove(key); + }catch(Exception e){} + + } while (keys.hasMoreElements()); + adapterCollection.clear(); + } + + return super.triSAReset(); + } + + public TriStatus triSend(TriComponentId componentId, TriPortId tsiPortId, TriAddress triAddress, TriMessage triMessage) { + + loginfo("triSend: componentId=" + componentId.getComponentName() + "; tsiPortId="+ tsiPortId.getPortName()); + + LocalAdapterBase baseAdapter; + + String portName = tsiPortId.getPortName(); + portNameForCoding = portName; + + if (componentId.getComponentName().contains("MTC")) sMTCName=componentId.getComponentName(); + + + if (portName.contains("acPort")){ + baseAdapter = adapterCollection.get(sMTCName/*componentId.getComponentName()*/+portName); + }else{ + baseAdapter = adapterCollection.get(componentId.getComponentName()+portName); + } + + if (baseAdapter == null) { + return new TriStatusImpl(TriStatus.TRI_ERROR); + } + + return baseAdapter.triSend( componentId, tsiPortId,triAddress, triMessage); + } + + public TriStatus triExternalFunction(TriFunctionId functionId, TriParameterList parameterList, TriParameter returnValue) { + + return new TriStatusImpl(TriStatus.TRI_OK); + } + + public TciCDProvided getCodec(String s) { + TciCDProvided codec = null; + + //loginfo(">>> TciCDProvided.getCodec for " + portNameForCoding + " = " + ((s != null) ? s : "(null)")); + loginfo(">>> TciCDProvided.getCodec " + ((s != null) ? s : "(null)")); + if (s == null || s.equals("")) { + + loginfo("No codec name for usage!!! Last used port = " + portNameForCoding); + if (portNameForCoding.equals("") || portNameForCoding == null) { + s = "IOTCodec"; + } + + else if (portNameForCoding.startsWith("acPort")){ + s= "IOTCodec"; + }else if (portNameForCoding.startsWith("eaPort")){ + s= "LibUpperTesterCodec"; + }else if (portNameForCoding.startsWith("sipPort")){ + s= "SIPCodec"; + }else if (portNameForCoding.startsWith("diameterPort")){ + s= "DIAMETERCodec"; + } + codec = super.getCodec(s); + } else { + codec = super.getCodec(s); + } + +// if (codec != null) { +// return codec; +// } + + return codec; + } + + public TriStatus triExecuteTestcase(TriTestCaseId testcase, TriPortIdList tsiList){ + + //loginfo("Executing TestCase"+ testcase.getTestCaseName()); + + this.testcaseName=testcase.getTestCaseName(); + if(Files.exists(Paths.get(ROOTFOLDERTRACEFILE+this.testcaseName+".pcapng"))) + return super.triExecuteTestcase(testcase, tsiList); + else + return new TriStatusImpl("Check if correct capture file exists!("+this.testcaseName+".pcapng)"); + } + + public TciParameterList getTestCaseParameters(TciModuleId moduleId, String testCaseId) { + + //loginfo("getTestCaseParameters: moduleId=" + moduleId + "; testCaseId=" + testCaseId); + + TciParameterListImpl tciparameterlistimpl = new TciParameterListImpl(); + return tciparameterlistimpl; + } +} diff --git a/javasrc/jpcap/JpcapCaptor.java b/javasrc/jpcap/JpcapCaptor.java new file mode 100644 index 0000000000000000000000000000000000000000..a708fb3667e04b27ab6ee063d6c78bee0f59a6a0 --- /dev/null +++ b/javasrc/jpcap/JpcapCaptor.java @@ -0,0 +1,261 @@ +package jpcap; + +import jpcap.loader.JpcapLibraryLoaderRegistry; +import jpcap.packet.Packet; + +/** + * This class is used to capture packets or read packets from a captured file. + */ +public class JpcapCaptor extends JpcapInstance { + /** + * Number of received packets + * + * @see #updateStat() + */ + public int received_packets; + + /** + * Number of dropped packets + * + * @see #updateStat() + */ + public int dropped_packets; + + private native String nativeOpenLive(String device, int snaplen, + int promisc, int to_ms); + + private native String nativeOpenOffline(String filename); + + private native void nativeClose(); + + private JpcapCaptor() throws java.io.IOException { + if (reserveID() < 0) + throw new java.io.IOException("Unable to open a device: " + + MAX_NUMBER_OF_INSTANCE + " devices are already opened."); + } + + /** + * Returns the interfaces that can be used for capturing. + * + * @return List of Interface objects + */ + public static native NetworkInterface[] getDeviceList(); + + /** + * Opens the specified network interface, and returns an instance of this class. + * + * @return an instance of this class Jpcap. + * @param intrface + * The network interface to capture packets + * @param snaplen + * Max number of bytes captured at once + * @param promisc + * If true, the inferface becomes promiscuous mode + * @param to_ms + * Timeout of + * {@link #processPacket(int,PacketReceiver) processPacket()}. + * Not all platforms support a timeout; on platforms that don't, + * the timeout is ignored. + * On platforms that support a timeout, a zero value will cause Jpcap + * to wait forever to allow enough packets to arrive, with no timeout. + * @exception java.io.IOException + * Raised when the specified interface cannot be opened + */ + public static JpcapCaptor openDevice(NetworkInterface intrface, + int snaplen, boolean promisc, int to_ms) throws java.io.IOException { + JpcapCaptor jpcap = new JpcapCaptor(); + String ret = jpcap.nativeOpenLive(intrface.name, snaplen, (promisc ? 1 + : 0), to_ms); + + if (ret != null) // error + throw new java.io.IOException(ret); + + return jpcap; + } + + /** + * Opens a dump file created by tcpdump or Ethereal, and returns an instance + * of this class. + * + * @param filename + * File name of the dump file + * @exception java.io.IOException + * If the file cannot be opened + * @return an instance of this class Jpcap + */ + public static JpcapCaptor openFile(String filename) + throws java.io.IOException { + JpcapCaptor jpcap = new JpcapCaptor(); + String ret = jpcap.nativeOpenOffline(filename); + + if (ret != null) // error + throw new java.io.IOException(ret); + + return jpcap; + } + + /** Closes the opened interface of dump file. */ + public void close() { + nativeClose(); + unreserveID(); + } + + /** + * Captures a single packet. + * + * @return a captured packet.
    + * null if an error occured or timeout has elapsed.
    + * Packet.EOF is EOF was reached when reading from a offline file. + */ + public native Packet getPacket(); + + /** + * Captures a single ip packet. + * + * @return a captured packet.
    + * null if an error occured or timeout has elapsed.
    + * Packet.EOF is EOF was reached when reading from a offline file. + */ + public native Packet getIpPacket(); + + /** + * Captures the specified number of packets consecutively.
    + * + * Unlike loopPacket(), this method returns (althrough not guaranteed) + * when the timeout expires. Also, in "non-blocking" mode, this + * method returns immediately when there is no packet to capture. + * + * @param count + * Number of packets to be captured
    + * You can specify -1 to capture packets parmanently until + * timeour, EOF or an error occurs. + * @param handler + * an instnace of JpcapHandler that analyzes the captured packets + * @return Number of captured packets + */ + public native int processPacket(int count, PacketReceiver handler); + + /** + * Captures the specified number of packets consecutively. + *

    + * + * Unlike processPacket(), this method ignores the timeout. + * This method also does not support "non-blocking" mode. + * + * @param count + * Number of packets to be captured
    + * You can specify -1 to capture packets parmanently until EOF or + * an error occurs. + * @param handler + * an instnace of JpcapHandler that analyzes the captured packets + * @return Number of captured packets + */ + public native int loopPacket(int count, PacketReceiver handler); + + /** + * Same as processPacket() + */ + @Deprecated + public int dispatchPacket(int count, PacketReceiver handler){ + return processPacket(count,handler); + } + + /** + * Sets/unsets "non-blocking" mode + * + * @param nonblocking + * TRUE to set "non-blocking" mode. FALSE to set "blocking" mode + */ + public native void setNonBlockingMode(boolean nonblocking); + + /** + * Checks if the current setting is in "non-blocking" mode or not. + * + * @return TRUE if it is in "non-blocking" mode. FALSE otherwise. + */ + public native boolean isNonBlockinMode(); + + /** + * Set a flag that will force processPacket() and loopPacket() to return + * rather than looping. + * + *

    + * + * Note that processPacket() and loopPacket() will not return after this + * flag is set UNTIL a packet is received or a read timeout occurs. By + * default, there is no read timeout. See comments in + * setPacketReadTimeout(). + */ + public native void breakLoop(); + + /** + * Sets the socket read timeout (SO_RCVTIMEO) for the socket used to read + * packets from the kernel. Setting this timeout is useful if using + * processPacket() or loopPacket() in blocking mode and you expect + * breakLoop() to work. breakLoop() will only have an effect if (a) you are + * actually getting packets or (b) if the read on the socket times out + * occasionally. + *

    + * + * This is currently only supported on UNIX. + * + * @param millis + * Timeout in milliseconds; 0 for no timeout. + * @return true upon success; false upon failure or if unsupported. + */ + public native boolean setPacketReadTimeout(int millis); + + /** + * Returns the socket read timeout (SO_RCVTIMEO) for the socket used to read + * packets from the kernel. + *

    + * + * This is currently only supported on UNIX. + * + * @return Read timeout in milliseconds; 0 for no timeout; -1 if an error + * occurred or this feature is unsupported. + */ + public native int getPacketReadTimeout(); + + /** + * Sets a filter. This filter is same as tcpdump. + * + * @param condition + * a string representation of the filter + * @param optimize + * If true, the filter is optimized + * @exception java.io.IOException + * Raised if the filter condition cannot be compiled or + * installed + */ + public native void setFilter(String condition, boolean optimize) + throws java.io.IOException; + + /** + * Updates {@link #received_packets received_packets} and + * {@link #dropped_packets dropped_packets}. + */ + public native void updateStat(); + + /** + * Returns an error message + * + * @return error message + */ + public native String getErrorMessage(); + + /** + * Obtains an instance of JpcapSender that uses the same interface to send + * packets. You can use this method only if you opened an interface with + * openDevice() method. + * + * @return returns an instance of JpcapSender + */ + public JpcapSender getJpcapSenderInstance() { + return new JpcapSender(ID); + } + + static { + JpcapLibraryLoaderRegistry.getInstance().loadLibrary(); + } +} diff --git a/javasrc/jpcap/JpcapInstance.java b/javasrc/jpcap/JpcapInstance.java new file mode 100644 index 0000000000000000000000000000000000000000..e7907fd94cd016e1c5f8e337b7331aab83da38c8 --- /dev/null +++ b/javasrc/jpcap/JpcapInstance.java @@ -0,0 +1,24 @@ +package jpcap; + +abstract class JpcapInstance { + protected static final int MAX_NUMBER_OF_INSTANCE = 255; + + protected static boolean[] instanciatedFlag = new boolean[MAX_NUMBER_OF_INSTANCE]; + + protected int ID; + + protected int reserveID(){ + ID = -1; + for (int i = 0; i < MAX_NUMBER_OF_INSTANCE; i++) + if (!instanciatedFlag[i]) { + ID = i; + instanciatedFlag[i] = true; + break; + } + return ID; + } + + protected void unreserveID(){ + instanciatedFlag[ID]=false; + } +} diff --git a/javasrc/jpcap/JpcapSender.java b/javasrc/jpcap/JpcapSender.java new file mode 100644 index 0000000000000000000000000000000000000000..e7988af7ccdf427de5431a5b9e1b0875220ac512 --- /dev/null +++ b/javasrc/jpcap/JpcapSender.java @@ -0,0 +1,103 @@ +package jpcap; + +import jpcap.packet.Packet; + +/** This class is used to send a packet. */ +public class JpcapSender extends JpcapInstance { + private native String nativeOpenDevice(String device); + private native void nativeSendPacket(Packet packet); + private native void nativeCloseDevice(); + private native void nativeOpenRawSocket(); + private native void nativeSendPacketViaRawSocket(Packet packet); + private native void nativeCloseRawSocket(); + + private static final int RAW_SOCKET_ID=99999; + + private String f_device = null; + + private JpcapSender() throws java.io.IOException { + if (reserveID() < 0) + throw new java.io.IOException("Unable to open a device: " + + MAX_NUMBER_OF_INSTANCE + " devices are already opened."); + } + + JpcapSender(int ID){ + this.ID=ID; + } + + /** + * Initializes a network interface for sending a packet, and returns an + * instance of this class. + * + * @param device + * Interface for sending a packet + * @throws IOException + * Raised when initialization of the interface failed + * @return intstance of this class (JpcapSender) + */ + public static JpcapSender openDevice(NetworkInterface device) throws java.io.IOException { + JpcapSender sender = new JpcapSender(); + String ret=sender.nativeOpenDevice(device.name); + + sender.f_device = device.name; + + if(ret==null) + return sender; + else + throw new java.io.IOException(ret); + } + + /** + * Open a raw IP socket to send a packet.
    + * When sending a packet via a raw socket, the datalink header of the packet is ignored + * (= automatically generated by OS).

    + * Note: the implementation and behavior of a raw socket may vary in different OS. + * Also, you can only open one raw socket at a time. + * + * @throws IOException + * Raised when initialization of the interface failed + * @return intstance of this class (JpcapSender) + */ + @Deprecated + public static JpcapSender openRawSocket() throws java.io.IOException { + JpcapSender sender = new JpcapSender(); + sender.nativeOpenRawSocket(); + sender.ID=RAW_SOCKET_ID; + + return sender; + } + + /** Closes the interface. */ + public void close() { + if(ID==RAW_SOCKET_ID) + nativeCloseRawSocket(); + else + nativeCloseDevice(); + unreserveID(); + } + + /** + * Sends a packet. + *

    + * If this JpcapSender instance was created by openDevice(), you need to set + * the Datalink layer's header (e.g., Ethernet header) of the packet.

    + * + * If this JpcapSender instance was created by openRawSocket(), you can only + * send IP packets, but you may not need to set the Datalink layer's header + * of the IP packets you want to send.
    + * Note: the implementation and behavior of a raw socket may vary in different OS. + * For example, in Windows 2000/XP, you need to manually set the datalink/IP headers + * of a packet. + * @param packet Packet to be sent + */ + public void sendPacket(Packet packet){ + if(ID==RAW_SOCKET_ID) + nativeSendPacketViaRawSocket(packet); + else + nativeSendPacket(packet); + } + + public String getDeviceId() { + return f_device; + } +} diff --git a/javasrc/jpcap/JpcapWriter.java b/javasrc/jpcap/JpcapWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..0f76db28205daf3ec372c3ceb871a4f04648c3dc --- /dev/null +++ b/javasrc/jpcap/JpcapWriter.java @@ -0,0 +1,55 @@ +package jpcap; + +import jpcap.loader.JpcapLibraryLoaderRegistry; +import jpcap.packet.Packet; + +/** This class is used to save the captured packets into a file. */ +public class JpcapWriter extends JpcapWriterInstance +{ + private JpcapWriter(JpcapCaptor jpcapCaptor, String filename) + throws java.io.IOException { + if (reserveID() < 0) { + throw new java.io.IOException("Unable to open a writer: " + + MAX_NUMBER_OF_INSTANCE + " writers are already opened."); + } + + String ret = nativeOpenDumpFile(filename, jpcapCaptor.ID, ID); + + if (ret != null) { // error + unreserveID(); + throw new java.io.IOException(ret); + } + } + + /** Opens a file to save the captured packets. + * @param jpcap instance of JpcapCaptor that was used to capture (load) packets + * @param filename filename + * @throws IOException If the file cannot be opened + */ + public static JpcapWriter openDumpFile(JpcapCaptor jpcap,String filename) throws java.io.IOException{ + return new JpcapWriter(jpcap,filename); + } + + public void close() { + nativeClose(ID); + unreserveID(); + } + + public void writePacket(Packet packet) { + nativeWritePacket(packet, ID); + } + + private native String nativeOpenDumpFile(String filename, int captorId, int writerId); + + /** Closes the opened file. */ + private native void nativeClose(int id); + + /** Saves a packet into the file. + * @param packet Packet to be saved + */ + private native void nativeWritePacket(Packet packet, int writerId); + + static { + JpcapLibraryLoaderRegistry.getInstance().loadLibrary(); + } +} diff --git a/javasrc/jpcap/JpcapWriterInstance.java b/javasrc/jpcap/JpcapWriterInstance.java new file mode 100644 index 0000000000000000000000000000000000000000..021e0c52e4e6dea4df1287162a8f641de858e333 --- /dev/null +++ b/javasrc/jpcap/JpcapWriterInstance.java @@ -0,0 +1,24 @@ +package jpcap; + +abstract class JpcapWriterInstance { + protected static final int MAX_NUMBER_OF_INSTANCE = 255; + + protected static boolean[] instanciatedFlag = new boolean[MAX_NUMBER_OF_INSTANCE]; + + protected int ID; + + protected int reserveID(){ + ID = -1; + for (int i = 0; i < MAX_NUMBER_OF_INSTANCE; i++) + if (!instanciatedFlag[i]) { + ID = i; + instanciatedFlag[i] = true; + break; + } + return ID; + } + + protected void unreserveID(){ + instanciatedFlag[ID]=false; + } +} diff --git a/javasrc/jpcap/NetworkInterface.java b/javasrc/jpcap/NetworkInterface.java new file mode 100644 index 0000000000000000000000000000000000000000..3ff8a55c19eb5af78bf4fb677d1b6c5b8df86fb2 --- /dev/null +++ b/javasrc/jpcap/NetworkInterface.java @@ -0,0 +1,34 @@ +package jpcap; + + +/** + * This class represents a network interface. + * @author kfujii + */ +public class NetworkInterface { + /** Name of the network interface */ + public String name; + /** Description about the network interface (e.g., "3Com ..."). May be null.*/ + public String description; + /** TRUE if this is a loopback interface */ + public boolean loopback; + /** Name of the datalink of the network interface*/ + public String datalink_name; + /** Description about the datalink of the network interface. May be null. */ + public String datalink_description; + /** Ethernet MAC address of the network interface */ + public byte[] mac_address; + /** Network addresses assigned the network interface. May be null if it is a non-IP (e.g. NetBios) address. */ + public NetworkInterfaceAddress[] addresses; + + public NetworkInterface(String name,String description,boolean loopback, + String datalink_name,String datalink_description,byte[] mac,NetworkInterfaceAddress[] addresses){ + this.name=name; + this.description=description; + this.loopback=loopback; + this.datalink_name=datalink_name; + this.datalink_description=datalink_description; + this.mac_address=mac; + this.addresses=addresses; + } +} diff --git a/javasrc/jpcap/NetworkInterfaceAddress.java b/javasrc/jpcap/NetworkInterfaceAddress.java new file mode 100644 index 0000000000000000000000000000000000000000..31e58ba777ebdbb7a88ad43faf79cb7858b5ee90 --- /dev/null +++ b/javasrc/jpcap/NetworkInterfaceAddress.java @@ -0,0 +1,33 @@ +package jpcap; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * This class represents a network address assigned to a network interface. + * @author kfujii + */ +public class NetworkInterfaceAddress{ + /** Address of the network interface */ + public InetAddress address; + /** Subnet mask of the network interface */ + public InetAddress subnet; + /** Broadcast address of the network interface. May be null. */ + public InetAddress broadcast; + /** Destination address of the network interface (for P2P connection). May be null. */ + public InetAddress destination; + + public NetworkInterfaceAddress(byte[] address,byte[] subnet,byte[] broadcast,byte[] destination){ + try{ + if(address!=null) + this.address=InetAddress.getByAddress(address); + if(subnet!=null) + this.subnet=InetAddress.getByAddress(subnet); + if(broadcast!=null) + this.broadcast=InetAddress.getByAddress(broadcast); + if(destination!=null) + this.destination=InetAddress.getByAddress(destination); + }catch(UnknownHostException e){ + } + } +} \ No newline at end of file diff --git a/javasrc/jpcap/PacketReceiver.java b/javasrc/jpcap/PacketReceiver.java new file mode 100644 index 0000000000000000000000000000000000000000..c75b9446338270151bee709e9dc591a9b11876f7 --- /dev/null +++ b/javasrc/jpcap/PacketReceiver.java @@ -0,0 +1,18 @@ +package jpcap; + +import jpcap.packet.Packet; + +/** This interface is used to define a method to analyze the captured packets, + * which is used in JpcapCaptor.handlePacket() or JpcapCaptor.processPacket() + * @see JpcapCaptor#processPacket(int,PacketReceiver) + * @see JpcapCaptor#loopPacket(int,PacketReceiver) + */ +public interface PacketReceiver +{ + /** Analyzes a packet.
    + *
    + * This method is called everytime a packet is captured. + * @param p A packet to be analyzed + */ + public void receivePacket(Packet p); +} diff --git a/javasrc/jpcap/loader/DefaultJpcapLibraryLoader.java b/javasrc/jpcap/loader/DefaultJpcapLibraryLoader.java new file mode 100644 index 0000000000000000000000000000000000000000..32cff9e0919e094f095accd4a2789c6ad5ad5a00 --- /dev/null +++ b/javasrc/jpcap/loader/DefaultJpcapLibraryLoader.java @@ -0,0 +1,49 @@ +/* + * ---------------------------------------------------------------------------- + * (C) Copyright Testing Technologies, 2011. All Rights Reserved. + * + * All copies of this program, whether in whole or in part, and whether + * modified or not, must display this and all other embedded copyright + * and ownership notices in full. + * + * See the file COPYRIGHT for details of redistribution and use. + * + * You should have received a copy of the COPYRIGHT file along with + * this file; if not, write to the Testing Technologies, + * Michaelkirchstr. 17/18, 10179 Berlin, Germany. + * + * TESTING TECHNOLOGIES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE. IN NO EVENT SHALL TESTING TECHNOLOGIES BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING ANY KIND OF IMPLIED OR + * EXPRESSED WARRANTY OF NON-INFRINGEMENT OR THE IMPLIED WARRANTIES + * OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * ----------------------------------------------------------------------------- + * + * AUTHOR: Bogdan Stanca + * DATE: Aug 22, 2011 + * + * REVISION INFO: + * $Revision: 1.2 $ $Date: 2012/01/02 13:40:11 $ + * $Source: /usr/local/cvs_root/TTworkbench/plugins/com.testingtech.ttworkbench.jpcap/lib-projects/jpcap/src/java/jpcap/loader/DefaultJpcapLibraryLoader.java,v $ + * + * ----------------------------------------------------------------------------- + */ +package jpcap.loader; + +public class DefaultJpcapLibraryLoader implements JpcapLibraryLoader { + public static void load() { + System.loadLibrary("jpcap"); + } + + public void loadLibrary() { + load(); + } +} diff --git a/javasrc/jpcap/loader/JpcapLibraryLoader.java b/javasrc/jpcap/loader/JpcapLibraryLoader.java new file mode 100644 index 0000000000000000000000000000000000000000..cd9cf370134ac94f6c74d33b686be8539ed7c594 --- /dev/null +++ b/javasrc/jpcap/loader/JpcapLibraryLoader.java @@ -0,0 +1,45 @@ +/* + * ---------------------------------------------------------------------------- + * (C) Copyright Testing Technologies, 2011. All Rights Reserved. + * + * All copies of this program, whether in whole or in part, and whether + * modified or not, must display this and all other embedded copyright + * and ownership notices in full. + * + * See the file COPYRIGHT for details of redistribution and use. + * + * You should have received a copy of the COPYRIGHT file along with + * this file; if not, write to the Testing Technologies, + * Michaelkirchstr. 17/18, 10179 Berlin, Germany. + * + * TESTING TECHNOLOGIES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE. IN NO EVENT SHALL TESTING TECHNOLOGIES BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING ANY KIND OF IMPLIED OR + * EXPRESSED WARRANTY OF NON-INFRINGEMENT OR THE IMPLIED WARRANTIES + * OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * ----------------------------------------------------------------------------- + * + * AUTHOR: Bogdan Stanca + * DATE: Aug 22, 2011 + * + * REVISION INFO: + * $Revision: 1.1 $ $Date: 2011/08/22 13:46:22 $ + * $Source: /usr/local/cvs_root/TTworkbench/plugins/com.testingtech.ttworkbench.jpcap/lib-projects/jpcap/src/java/jpcap/loader/JpcapLibraryLoader.java,v $ + * + * ----------------------------------------------------------------------------- + */ +package jpcap.loader; + +public interface JpcapLibraryLoader { + + void loadLibrary(); + +} diff --git a/javasrc/jpcap/loader/JpcapLibraryLoaderRegistry.java b/javasrc/jpcap/loader/JpcapLibraryLoaderRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..6ce9156fae99fbebed0244be342ef8c0e9679aca --- /dev/null +++ b/javasrc/jpcap/loader/JpcapLibraryLoaderRegistry.java @@ -0,0 +1,72 @@ +/* + * ---------------------------------------------------------------------------- + * (C) Copyright Testing Technologies, 2011. All Rights Reserved. + * + * All copies of this program, whether in whole or in part, and whether + * modified or not, must display this and all other embedded copyright + * and ownership notices in full. + * + * See the file COPYRIGHT for details of redistribution and use. + * + * You should have received a copy of the COPYRIGHT file along with + * this file; if not, write to the Testing Technologies, + * Michaelkirchstr. 17/18, 10179 Berlin, Germany. + * + * TESTING TECHNOLOGIES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE. IN NO EVENT SHALL TESTING TECHNOLOGIES BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF + * THIS SOFTWARE. + * + * THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING ANY KIND OF IMPLIED OR + * EXPRESSED WARRANTY OF NON-INFRINGEMENT OR THE IMPLIED WARRANTIES + * OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + * + * ----------------------------------------------------------------------------- + * + * AUTHOR: Bogdan Stanca + * DATE: Aug 22, 2011 + * + * REVISION INFO: + * $Revision: 1.1 $ $Date: 2011/08/22 13:46:22 $ + * $Source: /usr/local/cvs_root/TTworkbench/plugins/com.testingtech.ttworkbench.jpcap/lib-projects/jpcap/src/java/jpcap/loader/JpcapLibraryLoaderRegistry.java,v $ + * + * ----------------------------------------------------------------------------- + */ +package jpcap.loader; + + +public class JpcapLibraryLoaderRegistry { + + private static JpcapLibraryLoaderRegistry theInstance; + + private JpcapLibraryLoader loader; + private JpcapLibraryLoader defaultLoader; + + public final void loadLibrary() { + if (loader != null) { + loader.loadLibrary(); + } else { + getDefaultLoader().loadLibrary(); + } + } + + public void register(JpcapLibraryLoader loader) { + this.loader = loader; + } + + private synchronized JpcapLibraryLoader getDefaultLoader() { + if (defaultLoader == null) + defaultLoader = new DefaultJpcapLibraryLoader(); + return defaultLoader; + } + + public static synchronized JpcapLibraryLoaderRegistry getInstance() { + if (theInstance == null) + theInstance = new JpcapLibraryLoaderRegistry(); + return theInstance; + } +} diff --git a/javasrc/jpcap/package.html b/javasrc/jpcap/package.html new file mode 100644 index 0000000000000000000000000000000000000000..66121632414bcce8fb42de83d9ab5a1b63cdecfc --- /dev/null +++ b/javasrc/jpcap/package.html @@ -0,0 +1,13 @@ + + + +jpcap package + + + +Provides classes and interfaces for capturing packets from a network interface, +sending packets to a network interface, reading packets from a file, +and writing packets to a local file. + + + diff --git a/javasrc/jpcap/packet/ARPPacket.java b/javasrc/jpcap/packet/ARPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..f2202af6df72946138ed6b477ded14dfe5dc3c98 --- /dev/null +++ b/javasrc/jpcap/packet/ARPPacket.java @@ -0,0 +1,180 @@ +package jpcap.packet; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** This class represents ARP/RARP packet. */ +public class ARPPacket extends Packet +{ + private static final long serialVersionUID = 3271911802471786372L; + + /** Hardware type */ + public short hardtype; + /** Hardware type: Ethernet */ + public static final short HARDTYPE_ETHER=1; + /** Hardware type: Token ring */ + public static final short HARDTYPE_IEEE802=6; + /** Hardware type: Frame relay */ + public static final short HARDTYPE_FRAMERELAY=15; + + /** Protocol type */ + public short prototype; + /** Protocol type: IP */ + public static final short PROTOTYPE_IP=2048; + + /** Hardware address length */ + public short hlen; + + /** Protocol address length */ + public short plen; + + /** Operation */ + public short operation; + /** ARP request */ + public static final short ARP_REQUEST=1; + /** ARP reply */ + public static final short ARP_REPLY=2; + /** Reverse ARP request */ + public static final short RARP_REQUEST=3; + /** Reverse ARP reply */ + public static final short RARP_REPLY=4; + /** Identify peer request */ + public static final short INV_REQUEST=8; + /** Identify peer response */ + public static final short INV_REPLY=9; + + + /** Sender hardware address */ + public byte[] sender_hardaddr; + /** Sender protocol address */ + public byte[] sender_protoaddr; + /** Target hardware address */ + public byte[] target_hardaddr; + /** Target protocol address */ + public byte[] target_protoaddr; + + void setValue(short hardtype,short prototype,short hlen,short plen, + short operation,byte[] sha,byte[] spa,byte[] tha,byte[] tpa){ + this.hardtype=hardtype; + this.prototype=prototype; + this.hlen=hlen;this.plen=plen; + this.operation=operation; + sender_hardaddr=sha; + sender_protoaddr=spa; + target_hardaddr=tha; + target_protoaddr=tpa; + } + + /** Returns the hardware address (MAC address) of the sender. + * @return Hardware address of the sender + */ + public Object getSenderHardwareAddress(){ + switch(hardtype){ + case HARDTYPE_ETHER: + char[] adr=new char[17]; + + for(int i=0;i<5;i++){ + adr[i*3]=hexUpperChar(sender_hardaddr[i]); + adr[i*3+1]=hexLowerChar(sender_hardaddr[i]); + adr[i*3+2]=':'; + } + adr[15]=hexUpperChar(sender_hardaddr[5]); + adr[16]=hexLowerChar(sender_hardaddr[5]); + + return new String(adr); + default: + return "Unknown Protocol"; + } + } + + /** Returns the hardware address (MAC address) of the target. + * @return Hardware address of the target + */ + public Object getTargetHardwareAddress(){ + switch(hardtype){ + case HARDTYPE_ETHER: + char[] adr=new char[17]; + + for(int i=0;i<5;i++){ + adr[i*3]=hexUpperChar(target_hardaddr[i]); + adr[i*3+1]=hexLowerChar(target_hardaddr[i]); + adr[i*3+2]=':'; + } + adr[15]=hexUpperChar(target_hardaddr[5]); + adr[16]=hexLowerChar(target_hardaddr[5]); + + return new String(adr); + default: + return "Unknown Protocol"; + } + } + + /** Returns the protocol address of the sender. + * @return Protocol address of the sender + */ + public Object getSenderProtocolAddress(){ + switch(prototype){ + case PROTOTYPE_IP: + try { + return InetAddress.getByAddress(sender_protoaddr); + } catch (UnknownHostException e) { + return "Unknown Address"; + } + default: + return "Unknown Protocol"; + } + } + + /** Returns the protocol address of the target. + * @return Protocol address of the target + */ + public Object getTargetProtocolAddress(){ + switch(prototype){ + case PROTOTYPE_IP: + try { + return InetAddress.getByAddress(target_protoaddr); + } catch (UnknownHostException e) { + return "Unknown Address"; + } + default: + return "Unknown Protocol"; + } + } + + /** Returns a string representation of this ARP/RARP packet.
    + * + *
    + * Format: ARP(hardtype:prototype) + * @return a string representation of this ARP/RARP packet + */ + public String toString(){ + StringBuffer buf=new StringBuffer(); + + switch(operation){ + case ARP_REQUEST: buf.append("ARP REQUEST ");break; + case ARP_REPLY: buf.append("ARP REPLY ");break; + case RARP_REQUEST: buf.append("RARP REQUEST ");break; + case RARP_REPLY: buf.append("RARP REPLY ");break; + case INV_REQUEST: buf.append("IDENTIFY REQUEST ");break; + case INV_REPLY: buf.append("IDENTIFY REPLY ");break; + default: buf.append("UNKNOWN ");break; + } + + return buf.toString()+getSenderHardwareAddress()+"("+getSenderProtocolAddress()+") -> "+ + getTargetHardwareAddress()+"("+getTargetProtocolAddress()+")"; + } + + private char hexUpperChar(byte b){ + b=(byte)((b>>4)&0xf); + if(b==0) return '0'; + else if(b<10) return (char)('0'+b); + else return (char)('a'+b-10); + } + + private char hexLowerChar(byte b){ + b=(byte)(b&0xf); + if(b==0) return '0'; + else if(b<10) return (char)('0'+b); + else return (char)('a'+b-10); + } +} diff --git a/javasrc/jpcap/packet/CustomDatalinkPacket.java b/javasrc/jpcap/packet/CustomDatalinkPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..06ef3f5a353b67c6b3377c729e67ccb5a4e4d81e --- /dev/null +++ b/javasrc/jpcap/packet/CustomDatalinkPacket.java @@ -0,0 +1,4 @@ +package jpcap.packet; + +public abstract class CustomDatalinkPacket extends DatalinkPacket { +} diff --git a/javasrc/jpcap/packet/DatalinkPacket.java b/javasrc/jpcap/packet/DatalinkPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..7a2be2e3db4e9bb1c27c941650137478ddfcca99 --- /dev/null +++ b/javasrc/jpcap/packet/DatalinkPacket.java @@ -0,0 +1,6 @@ +package jpcap.packet; + +/** This class represents datalink layer packet. */ +public abstract class DatalinkPacket implements java.io.Serializable +{ +} diff --git a/javasrc/jpcap/packet/EthernetPacket.java b/javasrc/jpcap/packet/EthernetPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..f2c19566d64da40d9e2be160bc63b9db90b8a722 --- /dev/null +++ b/javasrc/jpcap/packet/EthernetPacket.java @@ -0,0 +1,96 @@ +package jpcap.packet; + +/** This class represents Ethernet packet. */ +public class EthernetPacket extends DatalinkPacket +{ + private static final long serialVersionUID = 817080364073605844L; + + /** Destination MAC address (6byte) */ + public byte[] dst_mac; + + /** Source MAC address (6byte) */ + public byte[] src_mac; + + /** Frame type */ + public short frametype; + /** PUP protocol */ + public static final short ETHERTYPE_PUP = 0x0200; + /** IP protocol */ + public static final short ETHERTYPE_IP = 0x0800; + /** Addr. resolution protocol */ + public static final short ETHERTYPE_ARP = 0x0806; + /** reverse Addr. resolution protocol */ + public static final short ETHERTYPE_REVARP = (short)0x8035; + /** IEEE 802.1Q VLAN tagging */ + public static final short ETHERTYPE_VLAN = (short)0x8100; + /** IPv6 */ + public static final short ETHERTYPE_IPV6 = (short)0x86dd; + /** used to test interfaces */ + public static final short ETHERTYPE_LOOPBACK = (short)0x9000; + + void setValue(byte[] dst,byte[] src,short frame){ + this.dst_mac=dst; + this.src_mac=src; + this.frametype=frame; + } + + /** Returns the MAC address of the source. + * @return MAC address of the source + */ + public String getSourceAddress(){ + char[] src=new char[17]; + + for(int i=0;i<5;i++){ + src[i*3]=hexUpperChar(src_mac[i]); + src[i*3+1]=hexLowerChar(src_mac[i]); + src[i*3+2]=':'; + } + src[15]=hexUpperChar(src_mac[5]); + src[16]=hexLowerChar(src_mac[5]); + + return new String(src); + } + + /** Returns the MAC address of the destination. + * @return MAC address of the destination + */ + public String getDestinationAddress(){ + char[] dst=new char[17]; + + for(int i=0;i<5;i++){ + dst[i*3]=hexUpperChar(dst_mac[i]); + dst[i*3+1]=hexLowerChar(dst_mac[i]); + dst[i*3+2]=':'; + } + dst[15]=hexUpperChar(dst_mac[5]); + dst[16]=hexLowerChar(dst_mac[5]); + + return new String(dst); + } + + /** Returns a string representation of this Ethernet packet.
    + *
    + * Format: Fsrc_mac -> dst_mac (frametype) + * @return a string representation of this Ethernet packet + */ + public String toString(){ + + + return super.toString()+" "+getSourceAddress()+"->"+ + getDestinationAddress()+" ("+frametype+")"; + } + + private char hexUpperChar(byte b){ + b=(byte)((b>>4)&0xf); + if(b==0) return '0'; + else if(b<10) return (char)('0'+b); + else return (char)('a'+b-10); + } + + private char hexLowerChar(byte b){ + b=(byte)(b&0xf); + if(b==0) return '0'; + else if(b<10) return (char)('0'+b); + else return (char)('a'+b-10); + } +} diff --git a/javasrc/jpcap/packet/ICMPPacket.java b/javasrc/jpcap/packet/ICMPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..4f4002e4cf48b830eea620ad17745c754984c2de --- /dev/null +++ b/javasrc/jpcap/packet/ICMPPacket.java @@ -0,0 +1,322 @@ +package jpcap.packet; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * This class represents ICMP packet. + */ +public class ICMPPacket extends IPPacket { + private static final long serialVersionUID = 208303875185246732L; + + /** + * echo reply + */ + public static final short ICMP_ECHOREPLY = 0; + + /** + * dest unreachable + */ + public static final short ICMP_UNREACH = 3; + + /** + * dest unreachable code: bad net + */ + public static final short ICMP_UNREACH_NET = 0; + + /** + * dest unreachable code: bad host + */ + public static final short ICMP_UNREACH_HOST = 1; + + /** + * dest unreachable code: bad protocol + */ + public static final short ICMP_UNREACH_PROTOCOL = 2; + + /** + * dest unreachable code: bad port + */ + public static final short ICMP_UNREACH_PORT = 3; + + /** + * dest unreachable code: IP_DF caused drop + */ + public static final short ICMP_UNREACH_NEEDFRAG = 4; + + /** + * dest unreachable code: src route failed + */ + public static final short ICMP_UNREACH_SRCFAIL = 5; + + /** + * dest unreachable code: unknown net + */ + public static final short ICMP_UNREACH_NET_UNKNOWN = 6; + + /** + * dest unreachable code: unknown host + */ + public static final short ICMP_UNREACH_HOST_UNKNOWN = 7; + + /** + * dest unreachable code: src host isolated + */ + public static final short ICMP_UNREACH_ISOLATED = 8; + + /** + * dest unreachable code: prohibited access + */ + public static final short ICMP_UNREACH_NET_PROHIB = 9; + + /** + * dest unreachable code: ditto + */ + public static final short ICMP_UNREACH_HOST_PROHIB = 10; + + /** + * dest unreachable code: bad tos for net + */ + public static final short ICMP_UNREACH_TOSNET = 11; + + /** + * dest unreachable code: bad tos for host + */ + public static final short ICMP_UNREACH_TOSHOST = 12; + + /** + * dest unreachable code: admin prohib + */ + public static final short ICMP_UNREACH_FILTER_PROHIB = 13; + + /** + * dest unreachable code: host prec vio. + */ + public static final short ICMP_UNREACH_HOST_PRECEDENCE = 14; + + /** + * dest unreachable code: prec cutoff + */ + public static final short ICMP_UNREACH_PRECEDENCE_CUTOFF = 15; + + /** + * packet lost, slow down + */ + public static final short ICMP_SOURCEQUENCH = 4; + + /** + * redirect + */ + public static final short ICMP_REDIRECT = 5; + + /** + * redirect code: for network + */ + public static final short ICMP_REDIRECT_NET = 0; + + /** + * redirect code: for host + */ + public static final short ICMP_REDIRECT_HOST = 1; + + /** + * redirect code: for tos and net + */ + public static final short ICMP_REDIRECT_TOSNET = 2; + + /** + * redirect code: for tos and host + */ + public static final short ICMP_REDIRECT_TOSHOST = 3; + + /** + * echo request + */ + public static final short ICMP_ECHO = 8; + + /** + * router advertisement + */ + public static final short ICMP_ROUTERADVERT = 9; + + /** + * router solicitation + */ + public static final short ICMP_ROUTERSOLICIT = 10; + + /** + * time exceeded + */ + public static final short ICMP_TIMXCEED = 11; + + /** + * time exceeded code: ttl==0 in transit + */ + public static final short ICMP_TIMXCEED_INTRANS = 0; + + /** + * time exceeded code: ttl==0 in reass + */ + public static final short ICMP_TIMXCEED_REASS = 1; + + /** + * ip header bad + */ + public static final short ICMP_PARAMPROB = 12; + + /** + * ip header bad code: error at param ptr + */ + public static final short ICMP_PARAMPROB_ERRATPTR = 0; + + /** + * ip header bad code: req. opt. absent + */ + public static final short ICMP_PARAMPROB_OPTABSENT = 1; + + /** + * ip header bad code: bad length + */ + public static final short ICMP_PARAMPROB_LENGTH = 2; + + /** + * timestamp request + */ + public static final short ICMP_TSTAMP = 13; + + /** + * timestamp reply + */ + public static final short ICMP_TSTAMPREPLY = 14; + + /** + * information request + */ + public static final short ICMP_IREQ = 15; + + /** + * information reply + */ + public static final short ICMP_IREQREPLY = 16; + + /** + * address mask request + */ + public static final short ICMP_MASKREQ = 17; + + /** + * address mask reply + */ + public static final short ICMP_MASKREPLY = 18; + + /** ICMP type */ + public byte type; + + /** ICMP code */ + public byte code; + + /** Checksum */ + public short checksum; + + /** + * ID + */ + public short id; + + /** Sequence number */ + public short seq; + + /** Subnet mask */ + public int subnetmask; + + /** Originate timestamp */ + public int orig_timestamp; + + /** Receive timestamp */ + public int recv_timestamp; + + /** Transmit timestamp */ + public int trans_timestamp; + + /** + * MTU + */ + public short mtu; + + /** Returned IP packet */ + public IPPacket ippacket; + + /** Redirect address */ + public InetAddress redir_ip; + + /** The number of advertised addresses */ + public byte addr_num; + + /** Address entry size */ + public byte addr_entry_size; + + /** Address alive time */ + public short alive_time; + + /** Advertised addresses */ + public InetAddress[] router_ip; + + /** Preference */ + public int[] preference; + + void setValue(byte type, byte code, short checksum, short id, short seq) { + this.type = type; + this.code = code; + this.checksum = checksum; + this.id = id; + this.seq = seq; + } + + void setID(short id, short seq) { + this.id = id; + this.seq = seq; + } + + void setTimestampValue(int orig, int recv, int trans) { + this.orig_timestamp = orig; + this.recv_timestamp = recv; + this.trans_timestamp = trans; + } + + void setRedirectIP(byte[] ip) { + try { + redir_ip = InetAddress.getByAddress(ip); + } catch (UnknownHostException e) { + } + } + + byte[] getRedirectIP(){ + return redir_ip.getAddress(); + } + + void setRouterAdValue(byte addr_num, byte entry_size, short alive_time, + String[] addr, int[] pref) { + this.addr_num = addr_num; + this.addr_entry_size = entry_size; + this.alive_time = alive_time; + + for (int i = 0; i < addr_num; i++) { + try { + router_ip[i] = InetAddress.getByName(addr[i]); + } catch (java.net.UnknownHostException e) { + } + preference[i] = pref[i]; + } + } + + /** + * Returns a string representation of this ICMP packet.
    + *
    + * Format: Ftype(type) code(code) + * + * @return string representation of this ICMP packet + */ + public String toString() { + return super.toString() + "type(" + type + ") code(" + code + ")"; + } +} diff --git a/javasrc/jpcap/packet/IPPacket.java b/javasrc/jpcap/packet/IPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..c40713516e0622af7278b4f708deb9c192efbbec --- /dev/null +++ b/javasrc/jpcap/packet/IPPacket.java @@ -0,0 +1,290 @@ +package jpcap.packet; + +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * This class represents an IP packet. + *

    + * Both IPv4 and IPv6 are supported. + */ +public class IPPacket extends Packet { + private static final long serialVersionUID = 6427030004078082099L; + + /** IP version (v4/v6) */ + public byte version; + + /** Priority (class) (v4/v6) */ + public byte priority; + + /** IP flag bit: [D]elay (v4) */ + public boolean d_flag; + + /** IP flag bit: [T]hrough (v4) */ + public boolean t_flag; + + /** IP flag bit: [R]eliability (v4) */ + public boolean r_flag; + + // added by Damien Daspit 5/7/01 + /** Type of Service (TOS) (v4/v6) */ + public byte rsv_tos; + + // ***************************** + + /** Packet length (v4/v6) */ + public short length; + + /** Fragmentation reservation flag (v4) */ + public boolean rsv_frag; + + /** Don't fragment flag (v4) */ + public boolean dont_frag; + + /** More fragment flag (v4) */ + public boolean more_frag; + + /** Fragment offset (v4) */ + public short offset; + + /** Hop Limit, Time To Live (TTL) (v4/v6) */ + public short hop_limit; + + /** Protocol (v4/v6) */ + public short protocol; + + /** Protocol number for ICMP */ + public static final short IPPROTO_ICMP = 1; + + /** Protocol number for IGMP */ + public static final short IPPROTO_IGMP = 2; + + /** Protocol number for IP in IP */ + public static final short IPPROTO_IP = 4; + + /** Protocol number for TCP */ + public static final short IPPROTO_TCP = 6; + + /** Protocol number for UDP */ + public static final short IPPROTO_UDP = 17; + + /** Protocol number for IPv6 */ + public static final short IPPROTO_IPv6 = 41; + + /** Protocol number for IPv6 hop-by-hop option */ + public static final short IPPROTO_HOPOPT = 0; + + /** Protocol number for routing header for IPv6 */ + public static final short IPPROTO_IPv6_Route = 43; + + /** Protocol number for fragment header for IPv6 */ + public static final short IPPROTO_IPv6_Frag = 44; + + /** Protocol number for IPv6 ICMP */ + public static final short IPPROTO_IPv6_ICMP = 58; + + /** Protocol number for no next header header for IPv6 */ + public static final short IPPROTO_IPv6_NoNxt = 59; + + /** Protocol number for destination option for IPv6 */ + public static final short IPPROTO_IPv6_Opts = 60; + + /** IDENTIFICATION (v4) */ + public int ident; + + /** Flow label (v6) */ + public int flow_label; + + /** Source IP address */ + public InetAddress src_ip; + + /** Destination IP address */ + public InetAddress dst_ip; + + /** Option in IPv4 header (v4) */ + public byte[] option; + + /** Option headers in IPv6Option (v6) */ + public java.util.List options = null; + + /** + * Sets the IPv4 parameters + * + * @param d_flag + * IP flag bit: [D]elay + * @param t_flag + * IP flag bit: [T]hrough + * @param r_flag + * IP flag bit: [R]eliability + * @param rsv_tos + * Type of Service (TOS) + * @param priority + * Priority + * @param rsv_frag + * Fragmentation Reservation flag + * @param dont_frag + * Don't fragment flag + * @param more_frag + * More fragment flag + * @param offset + * Offset + * @param ident + * Identifier + * @param ttl + * Time To Live + * @param protocol + * Protocol
    + * This value is ignored when this packets inherits a higher + * layer protocol(e.g. TCPPacket) + * @param src + * Source IP address + * @param dst + * Destination IP address + */ + public void setIPv4Parameter(int priority, boolean d_flag, boolean t_flag, + boolean r_flag, int rsv_tos, boolean rsv_frag, boolean dont_frag, + boolean more_frag, int offset, int ident, int ttl, int protocol, + InetAddress src, InetAddress dst) { + this.version = 4; + this.priority = (byte) priority; + this.d_flag = d_flag; + this.t_flag = t_flag; + this.r_flag = r_flag; + // added by Damien Daspit 5/7/01 + this.rsv_tos = (byte) rsv_tos; + // ***************************** + this.rsv_frag = rsv_frag; + this.dont_frag = dont_frag; + this.more_frag = more_frag; + offset = (short) offset; + this.ident = ident; + this.hop_limit = (short) ttl; + this.protocol = (short) protocol; + if(src instanceof Inet6Address || dst instanceof Inet6Address) + throw new IllegalArgumentException("Address must be Inet4Address"); + this.src_ip = src; + this.dst_ip = dst; + } + + /** + * Sets the IPv6 parameters + * + * @param cls + * class + * @param flowlabel + * flow label + * @param nxt_hdr + * next header + * @param hop_limit + * hop limit + * @param src + * source address + * @param dst + * destination address + */ + public void setIPv6Parameter(int cls, int flowlabel, int nxt_hdr, + int hop_limit, InetAddress src, InetAddress dst) { + this.version = 6; + this.priority = (byte) cls; + this.flow_label = flowlabel; + this.protocol = (short) nxt_hdr; + this.hop_limit = (short) hop_limit; + if(src instanceof Inet4Address || dst instanceof Inet4Address) + throw new IllegalArgumentException("Address must be Inet6Address"); + this.src_ip = src; + this.dst_ip = dst; + } + + void setIPv4Value(byte ver, byte pri, boolean d, boolean t, boolean r, + byte rsv_tos, boolean rf, boolean df, boolean mf, short offset, + short len, short ident, short ttl, short proto, byte[] src, + byte[] dst) { + + this.version = ver; + this.priority = pri; + d_flag = d; + t_flag = t; + r_flag = r; + // added by Damien Daspit 5/7/01 + this.rsv_tos = rsv_tos; + // ***************************** + rsv_frag = rf; + dont_frag = df; + more_frag = mf; + this.offset = offset; + this.length = len; + this.ident = ident; + this.hop_limit = ttl; + this.protocol = proto; + try { + this.src_ip = InetAddress.getByAddress(src); + this.dst_ip = InetAddress.getByAddress(dst); + } catch (UnknownHostException e) { + } + } + + void setOption(byte[] option) { + this.option = option; + } + + void setIPv6Value(byte ver, byte v6class, int flow, short payload, + byte nxt, short hlim, byte[] src, byte[] dst) { + this.version = ver; + this.priority = v6class; + this.flow_label = flow; + this.length = payload; + this.protocol = nxt; + this.hop_limit = hlim; + try { + this.src_ip = InetAddress.getByAddress(src); + this.dst_ip = InetAddress.getByAddress(dst); + } catch (UnknownHostException e) { + } + } + + void addOptionHeader(IPv6Option header) { + if (options == null) + options = new java.util.ArrayList(); + + options.add(header); + } + + byte[] getSourceAddress() { + return src_ip.getAddress(); + } + + byte[] getDestinationAddress() { + return dst_ip.getAddress(); + } + + /** + * Returns a string represenation of this packet. + *

    + * Format(IPv4): src_ip->dst_ip protocol(protocol) priority(priority) + * [D][T][R] hop(hop_limit) [RF/][DF/][MF] offset(offset) ident(ident) + *

    + * + * Format(IPv6): src_ip->dst_ip protocol(protocol) priority(priority) + * flowlabel(flow_label) hop(hop_limit) + * + * @return a string represenation of this packet + */ + public String toString() { + if (version == 4) { + return super.toString() + " " + src_ip + "->" + dst_ip + + " protocol(" + protocol + ") priority(" + priority + ") " + + (d_flag ? "D" : "") + (t_flag ? "T" : "") + + (r_flag ? "R" : "") + " hop(" + hop_limit + ") " + + (rsv_frag ? "RF/" : "") + (dont_frag ? "DF/" : "") + + (more_frag ? "MF" : "") + " offset(" + offset + + ") len(" + length + + ") ident(" + ident + ")"+ (d_flag ? "DontF/" : ""); + } else { + return super.toString() + " " + src_ip + "->" + dst_ip + + " protocol(" + protocol + ") priority(" + priority + + ") flowlabel(" + flow_label + ") hop(" + hop_limit + ")"; + } + } +} diff --git a/javasrc/jpcap/packet/IPv6Option.java b/javasrc/jpcap/packet/IPv6Option.java new file mode 100644 index 0000000000000000000000000000000000000000..50e5103d9803378c8ca45d59e647758f7100613b --- /dev/null +++ b/javasrc/jpcap/packet/IPv6Option.java @@ -0,0 +1,84 @@ +package jpcap.packet; + +import java.net.InetAddress; + +/** This class represents IPv6 option headers. */ +public class IPv6Option implements java.io.Serializable{ + private static final long serialVersionUID = 4027393032973499183L; + + /** Hop by hop option */ + public static final byte HOP_BY_HOP_OPTION=0; + /** Routing option */ + public static final byte ROUTING_OPTION=43; + /** Fragment option */ + public static final byte FRAGMENT_OPTION=44; + /** Security payload option */ + public static final byte ESP_OPTION=50; + /** Authentication option */ + public static final byte AH_OPTION=51; + /** No next option header */ + public static final byte NONE_OPTION=59; + /** Destination option */ + public static final byte DESTINATION_OPTION=60; + + /** Type */ + public byte type; + /** Next header */ + public byte next_header; + /** Header length */ + public byte hlen; + + /** Option */ + public byte[] option; + + /** Routing type (Routing option) */ + public byte routing_type; + /** Hop number left (Routing option) */ + public byte hop_left; + /** Route addresses (Routing option) */ + public InetAddress[] addrs; + + /** Offset (Fragment option) */ + public short offset; + /** More flag (fragment option) */ + public boolean m_flag; + /** Identification (fragment option) */ + public int identification; + + /** SPI (AH option) */ + public int spi; + /** Sequence number (AH option) */ + public int sequence; + + void setValue(byte type,byte next,byte hlen){ + this.type=type; + this.next_header=next; + this.hlen=hlen; + } + + void setOptionData(byte[] option){ + this.option=option; + } + + void setRoutingOption(byte type,byte left,byte[][] addrs){ + this.routing_type=type; + this.hop_left=left; + this.addrs=new InetAddress[addrs.length]; + for(int i=0;i + * Format: sec:usec + * @return a string representation of this packet + */ + public String toString(){ + return sec+":"+usec; + } +} diff --git a/javasrc/jpcap/packet/RawIpPacket.java b/javasrc/jpcap/packet/RawIpPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..a58e92f423f9c0ab859e97cab8625be0e6ab4849 --- /dev/null +++ b/javasrc/jpcap/packet/RawIpPacket.java @@ -0,0 +1,5 @@ +package jpcap.packet; + +public class RawIpPacket extends DatalinkPacket { + private static final long serialVersionUID = 7087283097735114357L; +} diff --git a/javasrc/jpcap/packet/SCTPPacket.java b/javasrc/jpcap/packet/SCTPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..028c0564588fed19ca5ec981279dcd010903d604 --- /dev/null +++ b/javasrc/jpcap/packet/SCTPPacket.java @@ -0,0 +1,141 @@ +package jpcap.packet; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedList; +import java.util.List; + + +public class SCTPPacket extends IPPacket { + private static final long serialVersionUID = 2427280926095446351L; + + private static final int SCTP_PROTOCOL_ID = 0x0084; + + /** Source port number */ + public int src_port; + /** Destination port number */ + public int dst_port; + /** Verification tag */ + public int ver_tag; + /** Checksum */ + public int checksum; + /** Chunks */ + public Chunk[] chunks; + + public SCTPPacket(IPPacket packet) throws IOException { + /* + * Copy Packet data + */ + this.sec = packet.sec; + this.usec = packet.usec; + this.caplen = packet.caplen; + this.len = packet.len; + this.datalink = packet.datalink; + this.header = packet.header; + this.data = packet.data; + + /* + * Copy IP data + */ + this.version = packet.version; + this.priority = packet.priority; + this.d_flag = packet.d_flag; + this.t_flag = packet.t_flag; + this.r_flag = packet.r_flag; + this.rsv_tos = packet.rsv_tos; + this.length = packet.length; + this.rsv_frag = packet.rsv_frag; + this.dont_frag = packet.dont_frag; + this.more_frag = packet.more_frag; + this.offset = packet.offset; + this.hop_limit = packet.hop_limit; + this.protocol = packet.protocol; + this.ident = packet.ident; + this.flow_label = packet.flow_label; + this.src_ip = packet.src_ip; + this.dst_ip = packet.dst_ip; + this.option = packet.option; + this.options = packet.options; + + /* + * Parse SCTP data + */ + + InputStream is = new ByteArrayInputStream(packet.data); + DataInputStream dis = new DataInputStream(is); + + this.src_port = dis.readShort(); + this.dst_port = dis.readShort(); + + this.ver_tag = dis.readInt(); + + this.checksum = dis.readInt(); + + List chunks = new LinkedList(); + while (dis.available() > 0) { + Chunk chunk = readChunk(dis); + chunks.add(chunk); + } + this.chunks = chunks.toArray(new Chunk[chunks.size()]); + } + + public static boolean isSTCPPacket(Packet packet) { + return (packet instanceof IPPacket) && ((IPPacket) packet).protocol == SCTP_PROTOCOL_ID; + } + + private Chunk readChunk(DataInputStream dis) throws IOException { + Chunk chunk = new Chunk(); + chunk.type = dis.readByte(); + chunk.flags = dis.readByte(); + chunk.length = dis.readShort(); + + chunk.data = new byte[chunk.length - 4]; + dis.read(chunk.data); + + // skip padding + for (int i = 0; i < (4 - chunk.length % 4) % 4; i++) + if (dis.available() > 0) + dis.readByte(); + + if (chunk.data.length > 0 && chunk.type == 0) {// DATA + return new DataChunk(chunk); + } else { + return chunk; + } + } + + public static class Chunk { + public byte type; + public byte flags; + public short length; + + public byte[] data; + } + + public static class DataChunk extends Chunk { + public int tsn; + public short stream_id; + public short streaq_seq_nr; + public int protocol_id; + + public byte[] payload; + + public DataChunk(Chunk chunk) throws IOException { + this.type = 0; + this.flags = chunk.flags; + this.length = chunk.length; + this.data = chunk.data; + + DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data)); + this.tsn = dis.readInt(); + this.stream_id = dis.readShort(); + this.streaq_seq_nr = dis.readShort(); + this.protocol_id = dis.readInt(); + + this.payload = new byte[data.length - 12]; + dis.read(payload); + } + } +} diff --git a/javasrc/jpcap/packet/TCPPacket.java b/javasrc/jpcap/packet/TCPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..516c0d314de1dffadab68c6096962d897e25462c --- /dev/null +++ b/javasrc/jpcap/packet/TCPPacket.java @@ -0,0 +1,107 @@ +package jpcap.packet; + +/** This class represents TCP packet. */ +public class TCPPacket extends IPPacket +{ + private static final long serialVersionUID = -8856988406589484129L; + + /** Source port number */ + public int src_port; + /** Destination port number */ + public int dst_port; + /** Sequence number */ + public long sequence; + /** ACK number */ + public long ack_num; + /** URG flag */ + public boolean urg; + /** ACK flag */ + public boolean ack; + /** PSH flag */ + public boolean psh; + /** RST flag */ + public boolean rst; + /** SYN flag */ + public boolean syn; + /** FIN flag */ + public boolean fin; + + // added by Damien Daspit 5/7/01 + /** RSV1 flag */ + public boolean rsv1; + /** RSV2 flag */ + public boolean rsv2; + // ***************************** + + /** Window size */ + public int window; + /** Urgent pointer */ + public short urgent_pointer; + + /** TCP option */ + public byte[] option; + + /** Creates a TCP packet. + * @param rsv1 RSV1 flag + * @param rsv2 RSV2 flag + * @param src_port Source port number + * @param dst_port Destination port number + * @param sequence sequence number + * @param ack_num ACK number + * @param urg URG flag + * @param ack ACK flag + * @param psh PSH flag + * @param rst RST flag + * @param syn SYN flag + * @param fin FIN flag + * @param window window size + * @param urgent urgent pointer + */ + public TCPPacket(int src_port,int dst_port,long sequence,long ack_num, + boolean urg,boolean ack,boolean psh,boolean rst, + boolean syn,boolean fin,boolean rsv1,boolean rsv2, + int window,int urgent){ + this.src_port=src_port;this.dst_port=dst_port; + this.sequence=sequence; + this.ack_num=ack_num; + this.urg=urg;this.ack=ack;this.psh=psh;this.rst=rst; + this.syn=syn;this.fin=fin; + // added by Damien Daspit 5/7/01 + this.rsv1=rsv1;this.rsv2=rsv2; + // ***************************** + this.window=window; + urgent_pointer=(short)urgent; + } + + void setValue(int src,int dst,long seq,long ack_num,boolean urg,boolean ack, + boolean psh,boolean rst,boolean syn,boolean fin,boolean rsv1, boolean rsv2, + int win,short urp){ + src_port=src;dst_port=dst; + sequence=seq; + this.ack_num=ack_num; + this.urg=urg;this.ack=ack;this.psh=psh;this.rst=rst;this.syn=syn;this.fin=fin; + // added by Damien Daspit 5/7/01 + this.rsv1=rsv1;this.rsv2=rsv2; + // ***************************** + window=win; + urgent_pointer=urp; + } + + void setOption(byte[] option){ + this.option=option; + } + + /** Returns a string representation of this packet
    + * + *
    + * Format: src_port > dst_port seq(sequence) win(window) [ack ack_num] [S][F][P] + * @return a string representation of this packet + */ + public String toString(){ + return super.toString()+" TCP "+ + src_port+" > "+dst_port+" seq("+sequence+ + ") win("+window+")"+(ack?" ack "+ack_num:"")+" "+ + (syn?" S":"")+(fin?" F":"")+(psh?" P":"")+ + (rst?" R":"")+(urg?" U":""); + } +} diff --git a/javasrc/jpcap/packet/TTYPacket.java b/javasrc/jpcap/packet/TTYPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..071dc76c5e1f9e8eb66c0ca8c930e821c81d3938 --- /dev/null +++ b/javasrc/jpcap/packet/TTYPacket.java @@ -0,0 +1,51 @@ +package jpcap.packet; + +public class TTYPacket extends CustomDatalinkPacket { + private static final long serialVersionUID = -3937142561689924849L; + + public static final byte TERMINAL_TO_SERVER = 1; + public static final byte SERVER_TO_TERMINAL = 0; + + public static final byte SSH_CONNECTION = 101; + public static final byte LOCAL_CONNECTION = 102; + public static final byte TELNET_CONNECTION = 103; + + public static final byte VERSION = 1; + public static final byte PACKET_CONT_VERSION = 127; + + public byte version; + public byte connectionType; + public byte direction; + public int terminalWidth; + public int terminalHeight; + public String encoding; + public String sessionId; + public String connectionParameters; + + public TTYPacket() { + } + + public TTYPacket(byte connectionType, byte direction, + int terminalWidth, int terminalHeight, String encoding, + String sessionId, String connectionParameters) + { + // this is the constructor for v1 + setValue((byte)1, connectionType, direction, + terminalWidth, terminalHeight, encoding, + sessionId, connectionParameters); + } + + public void setValue(byte version, byte connectionType, byte direction, + int terminalWidth, int terminalHeight, String encoding, + String sessionId, String connectionParameters) + { + this.version = version; + this.connectionType = connectionType; + this.direction = direction; + this.terminalHeight = terminalHeight; + this.terminalWidth = terminalWidth; + this.encoding = encoding; + this.sessionId = sessionId; + this.connectionParameters = connectionParameters; + } +} diff --git a/javasrc/jpcap/packet/TextPacket.java b/javasrc/jpcap/packet/TextPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..b86e690564f67566b34dee15dfb6d8c76d9eeb0e --- /dev/null +++ b/javasrc/jpcap/packet/TextPacket.java @@ -0,0 +1,63 @@ +package jpcap.packet; + +import java.io.UnsupportedEncodingException; + +public class TextPacket extends Packet { + private static final long serialVersionUID = 6199417211903927904L; + + private static final String UNKNOWN_ADDRESS = "Unknown"; + + public String getText() { + if (data == null) + return null; + + try { + return new String(data, "UTF-8"); + } catch (UnsupportedEncodingException e) { + return null; + } + } + + public String getReceiver() { + if (datalink instanceof TTYPacket == false) { + return UNKNOWN_ADDRESS; + } + + TTYPacket ttyPacket = (TTYPacket) datalink; + + if (ttyPacket.direction == TTYPacket.TERMINAL_TO_SERVER) { + return ttyPacket.connectionParameters; + } + + return buildTermAddress(ttyPacket); + } + + public String getSender() { + if (datalink instanceof TTYPacket == false) { + return UNKNOWN_ADDRESS; + } + + TTYPacket ttyPacket = (TTYPacket) datalink; + + if (ttyPacket.direction == TTYPacket.TERMINAL_TO_SERVER) { + return buildTermAddress(ttyPacket); + } + + return ttyPacket.connectionParameters; + } + + private String buildTermAddress(TTYPacket ttyPacket) { + switch (ttyPacket.connectionType) { + case TTYPacket.SSH_CONNECTION: + return "sshterm"; + + case TTYPacket.LOCAL_CONNECTION: + return "localterm"; + + case TTYPacket.TELNET_CONNECTION: + return "telnetterm"; + } + + return ""; + } +} diff --git a/javasrc/jpcap/packet/UDPPacket.java b/javasrc/jpcap/packet/UDPPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..e479cb2d4a9692e93bf7d33a010d0480eee0de3d --- /dev/null +++ b/javasrc/jpcap/packet/UDPPacket.java @@ -0,0 +1,38 @@ +package jpcap.packet; + +/** This class represents UDP packet. */ +public class UDPPacket extends IPPacket +{ + private static final long serialVersionUID = -3170544240823207254L; + + /** Source port number */ + public int src_port; + /** Destination port number */ + public int dst_port; + /** packet length */ + public int length; + + /** Creates a UDP packet. + * @param src_port source port number + * @param dst_port destination port number + */ + public UDPPacket(int src_port,int dst_port){ + this.src_port=src_port; + this.dst_port=dst_port; + } + + void setValue(int src,int dst,int len){ + src_port=src;dst_port=dst; + length=len; + } + + /** Returns a string representation of this packet.
    + * + *
    + * Format: src_port > dst_port + * @return a string representation of this packet + */ + public String toString(){ + return super.toString()+" UDP "+src_port+" > "+dst_port; + } +} diff --git a/javasrc/jpcap/packet/UnknownDatalinkPacket.java b/javasrc/jpcap/packet/UnknownDatalinkPacket.java new file mode 100644 index 0000000000000000000000000000000000000000..8e906e190f0f0d0289f0dacf5e855916bf7cf445 --- /dev/null +++ b/javasrc/jpcap/packet/UnknownDatalinkPacket.java @@ -0,0 +1,36 @@ +package jpcap.packet; + +public class UnknownDatalinkPacket extends DatalinkPacket { + private static final long serialVersionUID = 1653831028738215299L; + + private int datalinkType; + private ByteOrder byteOrder; + + public enum ByteOrder { + BIG_ENDIAN, LITTLE_ENDIAN + } + + public int getDatalinkType() { + return datalinkType; + } + + public void setDatalinkType(int datalinkType) { + this.datalinkType = datalinkType; + } + + public ByteOrder getByteOrder() { + return byteOrder; + } + + public void setByteOrder(int byteOrder) { + switch (byteOrder) { + case 1: + this.byteOrder = ByteOrder.BIG_ENDIAN; + break; + + case 0: + this.byteOrder = ByteOrder.LITTLE_ENDIAN; + break; + } + } +} diff --git a/javasrc/jpcap/packet/package.html b/javasrc/jpcap/packet/package.html new file mode 100644 index 0000000000000000000000000000000000000000..dd5c3ad6b7d31d919c83fb3548699c7d6b700ea4 --- /dev/null +++ b/javasrc/jpcap/packet/package.html @@ -0,0 +1,11 @@ + + + +jpcap package + + + +Provides classes to represent various packets. + + + diff --git a/lib/log4j-1.2.14.jar b/lib/log4j-1.2.14.jar new file mode 100644 index 0000000000000000000000000000000000000000..625130719013f195869881a36dcb8d2b14d64d1e Binary files /dev/null and b/lib/log4j-1.2.14.jar differ diff --git a/log4j.properties b/log4j.properties new file mode 100644 index 0000000000000000000000000000000000000000..56ac12acd08de87ec4a30ec76503c234f25a437d --- /dev/null +++ b/log4j.properties @@ -0,0 +1,17 @@ +log4j.rootLogger=debug, stdout, R + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout + +# Pattern to output the caller's file name and line number. +log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p %t %C{1}.%M - %m%n + +log4j.appender.R=org.apache.log4j.RollingFileAppender +log4j.appender.R.File=ttcn3.log + +log4j.appender.R.MaxFileSize=1000KB +# Keep one backup file +log4j.appender.R.MaxBackupIndex=1 + +log4j.appender.R.layout=org.apache.log4j.PatternLayout +log4j.appender.R.layout.ConversionPattern=%d %-5p %t %C{1}.%M - %m%n diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 2e710d526b01abba3a28b2c7a65193fabbc6035e..601caafbdf1ade53f6a54001c0b82383b0e820da 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -25,8 +25,8 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in a MA-Request received due to S-CSCF registration notification procedure and sends SA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.2", - "TS 129 229 (V15.0.0) [5], clauses 6.1.3 and 6.1.4" + "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 @@ -52,27 +52,23 @@ Package TP_CX { Server_Name_AVP SIP_Number_Auth_Items_AVP SIP_Auth_Data_Item_AVP containing - SIP_Authentication_Scheme_AVP - ; - ; + 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 + 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 + User_Name_AVP, + SIP_Number_Auth_Items_AVP, SIP_Auth_Data_Item_AVP containing - SIP_Authentication_Scheme_AVP - ; - ; + SIP_Authentication_Scheme_AVP;; to the IMS_S_CSCF_A entity } } @@ -84,8 +80,8 @@ Package TP_CX { 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." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.3", - "TS 129 229 (V15.0.0) [5], clauses 6.1.9 and 6.1.10" + "TS 129 228 [4], clause 6.1.3", + "TS 129 229 [5], clauses 6.1.9 and 6.1.10" Config Id CF_VxLTE_INT @@ -109,8 +105,7 @@ Package TP_CX { Destination_Realm_AVP User_Name_AVP Deregistration_Reason_AVP containing - Reason_Code_AVP - ;; + Reason_Code_AVP;; to the IMS_HSS_A entity } then { @@ -121,8 +116,7 @@ Package TP_CX { Origin_Host_AVP Origin_Realm_AVP Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the IMS_S_CSCF_A entity } } @@ -134,8 +128,8 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure and sends SA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.3", - "TS 129 229 (V15.0.0) [5], clauses 6.1.7 and 6.1.8" + "TS 129 228 [4], clause 6.3", + "TS 129 229 [5], clauses 6.1.7 and 6.1.8" Config Id CF_VxLTE_INT @@ -149,20 +143,19 @@ Package TP_CX { ensure that { when { the IMS_S_CSCF_A entity sends a SAR containing - Session_ID_AVP - Vendor_Specific_Application_Id_AVP + 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 + 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 - ; + indicating value REGISTRATION + User_Data_Already_Available_AVP; to the IMS_HSS_A entity } then { @@ -175,8 +168,7 @@ Package TP_CX { Result_Code_AVP indicating value DIAMETER_SUCCESS User_Data AVP - Charging_Information_AVP - ; + Charging_Information_AVP; to the IMS_S_CSCF_A entity } } @@ -188,8 +180,8 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in an SA-Request received due to S-CSCF de-registration procedure and sends SA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.2.1, A.4.3", - "TS 129 229 (V15.0.0) [5], clauses 6.1.3 and 6.1.4" + "TS 129 228 [4], clause 6.1.2.1, A.4.3", + "TS 129 229 [5], clauses 6.1.3 and 6.1.4" Config Id CF_VxLTE_INT @@ -215,8 +207,7 @@ Package TP_CX { Server_Name_AVP Server_Assignment_Type_AVP indicating value USER_DEREGISTRATION - User_Data_Already_Available_AVP - ; + User_Data_Already_Available_AVP; to the IMS_HSS_A entity } then { @@ -227,8 +218,7 @@ Package TP_CX { Origin_Host_AVP Origin_Realm_AVP Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the IMS_S_CSCF_A entity } } @@ -240,8 +230,8 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.1 and tables 6.1.1.1 and 6.1.1.2", - "TS 129 229 (V15.0.0) [5], clauses 6.1.1 and 6.1.2" + "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 @@ -267,25 +257,20 @@ Package TP_CX { indicating value REGISTRATION, User_Name_AVP Destination_Host_AVP - Destination_Realm_AVP - UAR_Flags_AVP - indicating value IMS_Emergency_Registration_bit_not_set - ; + Destination_Realm_AVP; 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 + 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 - ; - ; + indicating value DIAMETER_FIRST_REGISTRATION;; to the IMS_I_CSCF_A entity } } @@ -297,7 +282,7 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE initial registration and sends UA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.1.1" + "TS 129 228 [4], clause 6.1.1.1" Config Id CF_VxLTE_INT @@ -312,20 +297,17 @@ Package TP_CX { when { the IMS_I_CSCF_A entity sends a UAR containing Public_Identity_AVP - User_Name_AVP - ; + User_Name_AVP; to the IMS_HSS_A entity } then { the IMS_HSS_A entity sends the UAA containing - not Result_Code_AVP + not Result_Code_AVP, Experimental_Result_AVP containing Experimental_Result_Code_AVP - indicating value DIAMETER_SUBSEQUENT_REGISTRATION - ;, - Server_Name_AVP - not Server_Capabilities_AVP - ; + indicating value DIAMETER_SUBSEQUENT_REGISTRATION;, + Server_Name_AVP, + not Server_Capabilities_AVP; to the IMS_I_CSCF_A entity } } @@ -337,7 +319,7 @@ Package TP_CX { 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." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.1.1" + "TS 129 228 [4], clause 6.1.1.1" Config Id CF_VxLTE_INT @@ -359,12 +341,11 @@ Package TP_CX { } then { the IMS_HSS_A entity sends the UAA containing - not Result_Code_AVP - Experimental_Result_AVP + not Result_Code_AVP, + Experimental_Result_AVP containing Experimental_Result_Code_AVP - indicating value DIAMETER_ERROR_USER_UNKNOWN - not Server_Name_AVP - ; + indicating value DIAMETER_ERROR_USER_UNKNOWN;, + not Server_Name_AVP; to the IMS_I_CSCF_A entity } } @@ -376,7 +357,7 @@ Package TP_CX { Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to UE de-registration and sends UA-Answer." Reference - "TS 129 228 (V15.1.0) [4], clause 6.1.1.1" + "TS 129 228 [4], clause 6.1.1.1" Config Id CF_VxLTE_INT @@ -390,21 +371,19 @@ Package TP_CX { ensure that { when { the IMS_I_CSCF_A entity sends a UAR containing - Public_Identity_AVP - User_Name_AVP + Public_Identity_AVP, + User_Name_AVP, User_Authentication_Type_AVP - indicating value DE_REGISTRATION - Visited_Network_Identifier_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 - ; + indicating value DIAMETER_SUCCESS, + Server_Name_AVP, + not Server_Capabilities_AVP; to the IMS_I_CSCF_A entity } } diff --git a/test_purposes/Diameter_Common.tplan2 b/test_purposes/Diameter_Common.tplan2 index 222fa902b7573e97d5694f2ca3445d21985d0fc2..a87b9f2f14fa883e521be384e9c2e7cdabd80eb1 100644 --- a/test_purposes/Diameter_Common.tplan2 +++ b/test_purposes/Diameter_Common.tplan2 @@ -1,4 +1,24 @@ -Package Diameter_Common { +/* 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 @@ -20,33 +40,36 @@ Package Diameter_Common { - detachment - invokes - create_session_request - // CX DIAMETER Requests/Answers - - UAA - - UAR - - MAA - - MAR - - SAA - - SAR - // RX DIAMETER Requests/Answers - - AAA - - AAR - - STA - - STR - // GX DIAMETER Requests/Answers - - RAA - - RAR - - CCA - - CCR - // S6A DIAMETER Requests/Answers - - ULA - - ULR - - CLR - - CLA + - 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 { @@ -55,20 +78,34 @@ Package Diameter_Common { Test Configuration CF_VxLTE_INT containing - Tester component EPC_PGW_A of type DiameterComp - Tester component EPC_PCRF_A of type DiameterComp - - SUT component IMS_A of type DiameterComp + 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 - Tester component EPC_PCRF_A of type DiameterComp - Tester component EPC_PCRF_B of type DiameterComp - - SUT component IMS_A of type DiameterComp - connection between EPC_PCRF_A.g and EPC_PCRF_A.g + 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 diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 933ec57a4c77f3aeb956fa08bc8967b09a6d48bf..ac6b9beb38aaa707e849d8edde4e50a6d73cd5ab 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -13,6 +13,7 @@ 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; @@ -20,13 +21,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_MESSAGE_01 - // TP_IMS_4002_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_GEN_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a SIP messages greater than 1 300 bytes" Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A (1st paragraph)" + "TS 124 229 [1], clause 4.2A (1st paragraph)" Config Id CF_VxLTE_INT @@ -45,8 +44,7 @@ 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, - ContentLength indicating value greater than 1500 bytes - ; + ContentLength indicating value greater than 1_300 bytes; to the IMS_P_CSCF_A entity } then { @@ -55,8 +53,7 @@ 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, - ContentLength indicating value greater than 1500 bytes - ; + ContentLength indicating value greater than 1_300 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, @@ -66,8 +63,7 @@ Package TP_GM { PChargingVector containing orig_ioi indicating value PX_OPERATOR_ID_A, term_ioi indicating value PX_OPERATOR_ID_B, - not PAccessNetworkInfo - ;; + not PAccessNetworkInfo;; to the UE_A entity } } @@ -78,12 +74,10 @@ Package TP_GM { TP Id TP_GM_PCSCF_REGISTER_01 - Test objective "Verify that the P-CSCF successfully processes a first registration." - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + Test objective "Verify that the P-CSCF successfully processes a first registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.2" Config Id CF_VxLTE_INT @@ -101,7 +95,7 @@ Package TP_GM { the UE_A entity isTriggeredToStart } then { - the IMS_P_CSCF_A entity receives a REGISTER containing + 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, @@ -114,10 +108,9 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "", not term_ioi, - not SecurityClient - ;; - from the UE_A entity - and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + 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, @@ -130,9 +123,8 @@ Package TP_GM { 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 + qop indicating value "auth";; + from the IMS_P_CSCF_A entity } } @@ -142,12 +134,10 @@ Package TP_GM { TP Id TP_GM_PCSCF_REGISTER_02 - Test objective "Verify that the P-CSCF successfully processes a full registration." - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) + Test objective "Verify that the P-CSCF successfully processes a full registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.3" Config Id CF_VxLTE_INT @@ -157,7 +147,7 @@ Package TP_GM { 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 and - the UE_A entity hasAchieveFirstRegistration + the UE_A entity hasAchievedFirstRegistration } Expected behaviour @@ -176,8 +166,8 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth", - not SecurityClient - ;; + not SecurityClient;; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends an 200_Ok containing @@ -194,8 +184,7 @@ Package TP_GM { term_ioi_parameter indicating value "Operator Identifier Of ImsB" Path, - ServiceRoute - ; + ServiceRoute; to the UE_A entity } } @@ -205,13 +194,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_REGISTER_03 - // TD_IMS_REG_0003 from ETSI TS 186 011-2 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes an invalid first registration." + Test objective "Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.2" Config Id CF_VxLTE_INT @@ -240,13 +227,13 @@ Package TP_GM { 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 "" - ;; + 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 - ; + CallId indicating value PX_UE_A_CALLID; + to the UE_A entity } } } // End of TP_GM_PCSCF_REGISTER_03 @@ -255,14 +242,12 @@ Package TP_GM { TP Id TP_GM_PCSCF_REGISTER_04 - Test objective "Verify that the P-CSCF successfully processes a first registration." - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + Test objective "Verify that the P-CSCF successfully processes a first registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.3" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -278,7 +263,7 @@ Package TP_GM { the UE_A entity isTriggeredToStart } then { - the IMS_P_CSCF_B entity receives a REGISTER containing + 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, @@ -291,10 +276,9 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "", not term_ioi, - not SecurityClient - ;; - from the UE_A entity - and the IMS_P_CSCF_B entity sends an 401_Unauthorized containing + not SecurityClient;; + to the IMS_P_CSCF_B 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, @@ -308,9 +292,8 @@ Package TP_GM { 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 + qop indicating value "auth";; + from the IMS_P_CSCF_B entity } } @@ -320,14 +303,12 @@ Package TP_GM { TP Id TP_GM_PCSCF_REGISTER_05 - Test objective "Verify that the P-CSCF successfully processes a full registration." - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) + Test objective "Verify that the P-CSCF successfully processes a full registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1 and 6.1.13" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -335,7 +316,7 @@ Package TP_GM { 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 hasAchieveFirstRegistration + the UE_A entity hasAchievedFirstRegistration } Expected behaviour @@ -354,11 +335,11 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth", - not SecurityClient - ;; + not SecurityClient;; + from the UE_A entity } then { - the IMS_P_CSCF_A entity sends an 200_Ok containing + the IMS_P_CSCF_B 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, @@ -373,8 +354,7 @@ Package TP_GM { term_ioi_parameter indicating value "Operator Identifier Of ImsB" Path, - ServiceRoute - ; + ServiceRoute; to the UE_A entity } } @@ -384,15 +364,13 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_REGISTER_06 - // TD_IMS_REG_0003 from ETSI TS 186 011-2 V5.1.1 (2013-10) - // TP_IMST2_GM_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes an invalid first registration." + Test objective "Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -419,27 +397,123 @@ Package TP_GM { 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 "" - ;; + Nonce indicating value "";; and the IMS_P_CSCF_B 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 - ; + CallId indicating value PX_UE_A_CALLID; } } } // End of TP_GM_PCSCF_REGISTER_06 + Test Purpose { + + TP Id TP_GM_PCSCF_REGISTER_07 + + Test objective "Verify that the P-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.1" + + 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 + } + + 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 + } + } + } // End of TP_GM_PCSCF_REGISTER_07 + + Test Purpose { + + TP Id TP_GM_PCSCF_REGISTER_08 + + Test objective "Verify that the P-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity isTriggeredToDetachUser + } + then { + the IMS_P_CSCF_B entity receives a REGISTER containing + Expire indicating value 0; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_REGISTER_08 + + // TP_GM_PCSCF_REGISTER_09 Not applicable + + Test Purpose { + + TP Id TP_GM_PCSCF_REGISTER_10 + + Test objective "Verify that the P-CSCF successfully processes a user de-registration (with SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 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 + } + } + } // End of TP_GM_PCSCF_REGISTER_10 + Test Purpose { TP Id TP_GM_PCSCF_SUBSCRIBE_01 - // TP_IMS_5044_01 from ETSI TS 186 011-2 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a SUBSCRIBE." Reference - "ETSI TS 124 229 [2], clauses 5.1.2 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.2" Config Id CF_VxLTE_INT @@ -461,17 +535,13 @@ Package TP_GM { 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 - // TODO To be continued - ; + 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 - // TODO To be continued - ; + Via indicating value PX_UE_A_VIA; to the UE_A entity } } @@ -480,20 +550,18 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_SUBSCRIBE_02 - // TP_IMS_5044_01 from ETSI TS 186 011-2 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a SUBSCRIBE." Reference - "ETSI TS 124 229 [2], clauses 5.1.2 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.1.1, 6.1.1 and 6.1.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isAttachedTo the EPC_B and the UE_A entity isRegisteredTo the IMS_B } @@ -503,38 +571,133 @@ Package TP_GM { the UE_A entity isRequestedToSend a SUBSCRIBE } then { - the IMS_P_CSCF_B entity receives an SUBSCRIBE containing + the UE_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 - // TODO To be continued - ; - from the UE_A entity - and the IMS_P_CSCF_B entity sends a 200_Ok containing + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_B entity + and the UE_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, - PVisitedNetwork - // TODO To be continued - ; - to the UE_A entity + PVisitedNetwork; + to the IMS_P_CSCF_B entity } } } // End of TP_GM_PCSCF_SUBSCRIBE_02 + Test Purpose { + + TP Id TP_GM_PCSCF_NOTIFY_01 + + Test objective "Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.2.1, 6.1.1 and 6.1.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 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 + } + } + } // End of TP_GM_PCSCF_NOTIFY_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_NOTIFY_02 + + Test objective "Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.2.1, 6.1.1 and 6.1.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a NOTIFY containing + Event indicating value "reg,de-reg" + ; + } + then { + the IMS_P_CSCF_B entity sends an NOTIFY containing + Event indicating value "reg,de-reg"; + to the UE_A entity and + the UE_A entity sends a 200_Ok + to the IMS_P_CSCF_B entity + } + } + } // End of TP_GM_PCSCF_NOTIFY_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_200OK_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) NOTIFY (IMS Administrative de-registration)." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 isRequestedToSend a NOTIFY containing + Event indicating value "reg,de-reg" + ; + } + then { + the UE_A entity sends a 200_Ok + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_GM_PCSCF_200OK_01 + Test Purpose { TP Id TP_GM_PCSCF_INVITE_01 - // TP_IMS_5046_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.2.7.2, 5.4.4.1, 5.4.4.2 and 6.1" Config Id CF_VxLTE_INT @@ -562,10 +725,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_A entity } } @@ -580,7 +740,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.2.7.3 and 6.1" Config Id CF_VxLTE_INT @@ -608,10 +768,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the UE_B entity } } @@ -620,15 +777,13 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_INVITE_03 - // TP_IMS_5046_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.2.7.2 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -654,10 +809,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_A entity } } @@ -666,15 +818,13 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_INVITE_04 - // TP_IMS_5046_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.2.7.3 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -688,7 +838,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend an INVITE + the UE_B entity isRequestedToSend an INVITE } then { the IMS_P_CSCF_A entity sends an INVITE containing @@ -700,10 +850,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the UE_B entity } } @@ -712,13 +859,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_100TRY_01 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" Config Id CF_VxLTE_INT @@ -734,7 +879,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_A entity sends a 100_Trying @@ -750,10 +895,10 @@ Package TP_GM { // TP_IMS_5070_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) // TP_IMST2_GM_INI_02 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" Config Id CF_VxLTE_INT @@ -774,9 +919,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_P_CSCF_B entity } then { @@ -785,9 +928,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_B entity } } @@ -803,7 +944,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" Config Id CF_VxLTE_INT @@ -819,7 +960,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_B entity sends a 100_Trying @@ -838,9 +979,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -859,9 +1000,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_P_CSCF_A entity } then { @@ -870,9 +1009,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_B entity } } @@ -888,7 +1025,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" Config Id CF_VxLTE_INT @@ -904,14 +1041,13 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_A entity sends a 180_Ringing containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_A entity } } @@ -921,13 +1057,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_180RINGING_02 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" Config Id CF_VxLTE_INT @@ -951,9 +1085,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; to the IMS_P_CSCF_B entity } then { @@ -965,9 +1097,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } @@ -983,9 +1113,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -999,14 +1129,13 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_B entity sends a 180_Ringing containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_A entity } } @@ -1022,9 +1151,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.3.5 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1046,9 +1175,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; to the IMS_P_CSCF_A entity } then { @@ -1060,9 +1187,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } @@ -1072,13 +1197,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_200OK_01 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1094,14 +1217,13 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_A entity sends a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_A entity } } @@ -1111,13 +1233,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_200OK_02 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_GM_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.4 and 6.1.1" Config Id CF_VxLTE_INT @@ -1141,9 +1261,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the IMS_P_CSCF_B entity } then { @@ -1155,9 +1273,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } @@ -1173,9 +1289,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1189,14 +1305,13 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity hasAchievedInitialINVITE } then { the IMS_P_CSCF_B entity sends a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_A entity } } @@ -1212,9 +1327,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.4 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1236,9 +1351,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the IMS_P_CSCF_A entity } then { @@ -1250,9 +1363,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } @@ -1262,13 +1373,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_ACK_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1284,7 +1393,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveINVITE + the UE_A entity hasAchievedINVITE } then { the IMS_P_CSCF_A entity receives an ACK containing @@ -1292,9 +1401,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -1310,7 +1417,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1326,26 +1433,16 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_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 - // TODO To be continued - ; - to the IMS_P_CSCF_B entity + the UE_B entity hasAchievedInitialINVITE } then { - the IMS_P_CSCF_B 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 - // TODO To be continued - ; - from the UE_B entity + 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 } } @@ -1360,9 +1457,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_INT + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1376,7 +1473,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveINVITE + the UE_A entity hasAchievedINVITE } then { the IMS_P_CSCF_B entity receives an ACK containing @@ -1384,9 +1481,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -1402,9 +1497,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1423,9 +1518,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } then { @@ -1434,9 +1527,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -1446,13 +1537,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_RE_INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1481,10 +1570,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_A entity } } @@ -1493,13 +1579,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_RE_INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1516,22 +1600,19 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend an ReINVITE + the UE_B entity isRequestedToSend an ReINVITE } then { the IMS_P_CSCF_B entity sends 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, + 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" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_B entity } } @@ -1546,9 +1627,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1575,10 +1656,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_B entity } } @@ -1593,9 +1671,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1622,10 +1700,7 @@ Package TP_GM { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_B entity } } @@ -1634,13 +1709,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_BYE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Originating Leg)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" Config Id CF_VxLTE_INT @@ -1665,9 +1738,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -1677,13 +1748,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_BYE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Terminating Leg)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" Config Id CF_VxLTE_INT @@ -1708,9 +1777,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -1720,13 +1787,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_BYE_03 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Network initiated)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" Config Id CF_VxLTE_INT @@ -1751,9 +1816,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -1769,9 +1832,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a BYE (Originating Leg)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1794,9 +1857,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -1812,9 +1873,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a BYE (Terminating Leg)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1837,9 +1898,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -1855,9 +1914,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a BYE (Network initiated)." Reference - "ETIS TS 124 229 [2] Clause 5.1.5 (1st paragraph), Clause 5.2.8.2, Clause 6.2" + "ETSI TS 124 229 [2] Clauses 5.1.5 (1st paragraph), 5.2.8.2 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1880,9 +1939,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -1896,7 +1953,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" Config Id CF_VxLTE_INT @@ -1912,19 +1969,24 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend a BYE - } + 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; + 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 + Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_A entity } } @@ -1938,7 +2000,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" Config Id CF_VxLTE_INT @@ -1954,7 +2016,13 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_B entity isRequestedToSend a BYE + the IMS_P_CSCF_B 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; + from the IMS_S_CSCF_B entity } then { the IMS_P_CSCF_B entity sends a 200_Ok containing @@ -1962,11 +2030,10 @@ Package TP_GM { 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 + Route indicating value PX_UE_A_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; to the UE_B entity } } @@ -1977,10 +2044,10 @@ Package TP_GM { TP Id TP_GM_PCSCF_200OK_BYE_03 - Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Network initiated)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" Config Id CF_VxLTE_INT @@ -2002,23 +2069,151 @@ Package TP_GM { the IMS_P_CSCF_A entity sends a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; - to the UE_A entity + not PPreferredIdentity; + to the IMS_S_CSCF_A entity } } } // End of TP_GM_PCSCF_200OK_03 + Test Purpose { + + TP Id TP_GM_PCSCF_200OK_BYE_04 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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; + from the IMS_S_CSCF_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; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_200OK_04 + + Test Purpose { + + TP Id TP_GM_PCSCF_200OK_BYE_05 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + 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_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 + } + 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_B entity + } + } + + } // End of TP_GM_PCSCF_200OK_05 + + Test Purpose { + + TP Id TP_GM_PCSCF_200OK_BYE_06 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Network initiated)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + 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 + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + to the IMS_S_CSCF_A entity + } + } + + } // End of TP_GM_PCSCF_200OK_06 + Test Purpose { TP Id TP_GM_PCSCF_CANCEL_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2029,7 +2224,7 @@ Package TP_GM { 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 + the UE_A entity hasAchievedInitialINVITE } Expected behaviour @@ -2038,14 +2233,12 @@ Package TP_GM { the UE_A entity isRequestedToSend a CANCEL } then { - the IMS_P_CSCF_A entity receives an CANCEL containing + 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -2055,12 +2248,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_CANCEL_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2071,7 +2263,7 @@ Package TP_GM { 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 + the UE_A entity hasAchievedInitialINVITE } Expected behaviour @@ -2080,14 +2272,12 @@ Package TP_GM { the UE_A entity isRequestedToSend a CANCEL } then { - the IMS_P_CSCF_B entity sends an CANCEL containing + 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -2102,18 +2292,18 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" - Config Id CF_VxLTE_INT + Config Id CF_VxLTE_RMI_B PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the UE_A entity hasAchieveInitialINVITE + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasAchievedInitialINVITE } Expected behaviour @@ -2127,9 +2317,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } } @@ -2144,18 +2332,18 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the UE_B entity previouslyEstablishedCallWith the UE_A + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_B entity hasAchievedInitialINVITE } Expected behaviour @@ -2169,9 +2357,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -2187,7 +2373,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2209,9 +2395,8 @@ Package TP_GM { the IMS_P_CSCF_A entity receives a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the UE_A entity + not PPreferredIdentity; + from the IMS_S_CSCF_A entity } } @@ -2226,7 +2411,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2253,9 +2438,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } @@ -2271,9 +2454,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -2287,15 +2470,14 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend a CANCEL + the IMS_P_CSCF_B entity isRequestedToSend a 200_Ok } then { - the IMS_P_CSCF_B entity receives a 200_Ok containing + the IMS_P_CSCF_B entity sends a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the UE_A entity + not PPreferredIdentity; + to the UE_A entity } } @@ -2310,9 +2492,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.4 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2338,9 +2520,7 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; to the IMS_P_CSCF_A entity } } @@ -2350,12 +2530,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_486INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2372,7 +2551,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend an 486_INVITE + the UE_B entity isRequestedToSend an 486_INVITE } then { the IMS_P_CSCF_A entity sends a 486_INVITE containing @@ -2380,9 +2559,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2392,12 +2569,11 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_486INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2408,23 +2584,21 @@ Package TP_GM { 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 isBusy + the UE_B entity isBusy } Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend a CANCEL + the UE_B entity isRequestedToSend a 486_INVITE } then { - the IMS_P_CSCF_B entity sends a 486_INVITE containing + the IMS_P_CSCF_B entity receives a 486_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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -2434,14 +2608,13 @@ Package TP_GM { Test Purpose { TP Id TP_GM_PCSCF_486INVITE_03 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -2456,17 +2629,15 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity isRequestedToSend an INVITE + the UE_B entity isRequestedToSend an 486_INVITE } then { - the IMS_P_CSCF_A entity sends a 486_INVITE containing + the IMS_P_CSCF_B 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2481,9 +2652,9 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.4 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2498,17 +2669,15 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_A entity hasAchieveInitialINVITE + the UE_A entity isRequestedToSend a 486_INVITE } then { - the IMS_P_CSCF_B entity sends a 486_INVITE containing + the IMS_P_CSCF_A entity receives a 486_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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -2522,7 +2691,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2546,9 +2715,7 @@ Package TP_GM { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2562,7 +2729,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" Config Id CF_VxLTE_INT @@ -2578,7 +2745,7 @@ Package TP_GM { Expected behaviour ensure that { when { - the UE_B entity isRequestedToSend a CANCEL + the UE_A entity isRequestedToSend a CANCEL } then { the IMS_P_CSCF_B entity receives a 487_INVITE containing @@ -2589,29 +2756,93 @@ Package TP_GM { Route indicating value PX_UE_B_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - // TODO To be continued - ; + not PPreferredIdentity; from the UE_B entity } } } // End of TP_GM_PCSCF_487INVITE_02 + Test Purpose { + + TP Id TP_GM_PCSCF_487INVITE_03 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasAchievedInitialINVITE + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend an CANCEL + } + 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 UE_A entity + } + } + + } // End of TP_GM_PCSCF_487INVITE_03 - - - - - - - - - - - - - + Test Purpose { + + TP Id TP_GM_PCSCF_487INVITE_04 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + 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, + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the UE_B entity + } + } + + } // End of TP_GM_PCSCF_487INVITE_04 } // End of Package TP_GM diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index 9a8925338bd5deb200c7d434a708cadfdf81af5a..a310853d13d210c8bed927176aa150cbe5ab6e0d 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -25,7 +25,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of attachment procedure." Reference - "TS 129 212 (V15.3.0) [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" + "TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" Config Id CF_VxLTE_INT @@ -44,50 +44,26 @@ Package TP_GX { indicating value INITIAL_REQUEST Subscription_Id_AVP containing Subscription_Id_Type_AVP - indicating value END_USER_IMSI - ;, + 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 - ; - ; - ; + 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 - 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 - ; - ; - ; + indicating value DIAMETER_SUCCESS; to the EPC_PGW_A entity } } @@ -99,7 +75,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of detachment procedure." Reference - "TS 129 212 (V15.3.0) [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" + "TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" Config Id CF_VxLTE_INT @@ -115,15 +91,13 @@ Package TP_GX { when { the EPC_PGW_A entity sends an CCR containing CC_Request_Type_AVP - indicating value TERMINATION_REQUEST - ; + 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 - ; + indicating value DIAMETER_SUCCESS; to the EPC_PGW_A entity } } @@ -135,7 +109,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for session release sends a CC-Answer in case of detachment procedure." Reference - "TS 129 212 (V15.3.0) [9], clauses 4.5.7" + "TS 129 212 [9], clause 4.5.7" Config Id CF_VxLTE_INT @@ -151,15 +125,13 @@ Package TP_GX { when { the EPC_PGW_A entity sends an CCR containing CC_Request_Type_AVP - indicating value TERMINATION_REQUEST - ; + 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 - ; + indicating value DIAMETER_SUCCESS; to the EPC_PGW_A entity } } @@ -168,10 +140,10 @@ Package TP_GX { Test Purpose { TP Id TP_GX_PCRF_CCA_04 //TP_EPC_8001_06 from TS 103 029 V5.1.1 - Test objective "Verify that IUT receives CC-Answer from home PCRF it sends CC-Answer towards home P-GW." + 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)" + "TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" Config Id CF_VxLTE_RMI @@ -202,22 +174,85 @@ Package TP_GX { Allocation_Retention_Priority_AVP containing Priority_Level_AVP Pre_emption_Capablity_AVP - Pre_emption_Vulnerability_AVP - ; - ; - ; + Pre_emption_Vulnerability_AVP;;; to the EPC_PGW_B entity } } } // End of TP_GX_PCRF_CCA_04 + Test Purpose { + TP Id TP_GX_PCRF_CCA_05 + //TP_EPC_8004_04 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives CC-Answer from home PCRF and it sends CC-Answer towards home P-GW." + + Reference + "TS 129 212 [9], clause 4.5.7" + + 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_A + } + + Expected behaviour + 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 + } + } + } // End of TP_GX_PCRF_CCA_05 + + Test Purpose { + TP Id TP_GX_PCRF_CCA_06 + + Test objective "Verify that IUT when receives CC-Request for session update sends a CC-Answer in case of bearer control mode selection." + + Reference + "TS 129 212 [9], clause 4.5.10" + + 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 + } + + Expected behaviour + ensure that { + when { + the EPC_PGW_A entity sends an CCR containing + CC_Request_Type_AVP + indicating value UPDATE_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 + } + } + } // End of TP_GX_PCRF_CCA_03 + Test Purpose { TP Id TP_GX_PGW_CCR_01 //TP_EPC_7001_03 from TS 103 029 V5.1.1 Test objective "Verify that when IUT is invoked with a create session request the CC-Request is sent towards PCRF." Reference - "TS 129 212 (V15.3.0) [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" + "TS 129 212 [9], clauses 4.5.1 (item 1) and 4a.5.1 (item 1)" Config Id CF_VxLTE_RMI @@ -239,42 +274,63 @@ Package TP_GX { indicating value INITIAL_REQUEST Subscription_Id_AVP containing Subscription_Id_Type_AVP - indicating value END_USER_IMSI - ;, + 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 - ; - ; - ; + Pre_emption_Vulnerability_AVP;;; to the EPC_PCRF_B entity } } } // End of TP_GX_PGW_CCR_01 + Test Purpose { + TP Id TP_GX_PGW_CCR_02 + //TP_EPC_8004_01 from TS 103 029 V5.1.1 + Test objective "Verify that when IUT is invoked with a delete session request the CC-Request is sent towards PCRF." + + Reference + "TS 129 212 [9], clause 4.5.7" + + 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_A + } + + Expected behaviour + 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 + } + } + } // End of TP_GX_PGW_CCR_02 + Test Purpose { TP Id TP_GX_PGW_RAA_01 - //TP_EPC_6013_01 and TP_EPC_6014_01 from TS 103 029 V5.1.1 + //TP_EPC_7001_05 and TP_EPC_7001_06 from TS 103 029 V5.1.1 Test objective "IUT successfully processes all mandatory AVPs in an RA-Request received due provision of PCC rules and sends RA-Answer." Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT @@ -290,25 +346,18 @@ Package TP_GX { 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 - ; - ; - ; - ; - ; + Charging_Rule_Name_AVP + 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 - ; + indicating value DIAMETER_SUCCESS; to the EPC_PCRF_A entity } } @@ -320,14 +369,14 @@ Package TP_GX { Test objective "IUT successfully processes an RA-Request received due to the Session Bearer procedure and sends RA-Answer with Result_Code_AVP." Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the IMS_A and + the UE_A entity isAttachedTo the EPC_A and the UE_A entity isRegisteredTo the IMS_A } @@ -340,8 +389,7 @@ Package TP_GX { then { the EPC_PGW_A entity sends the RAA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the EPC_PCRF_A entity } } @@ -353,14 +401,14 @@ Package TP_GX { Test objective "IUT successfully processes an RA-Request received due to the Session Bearer procedure and sends RA-Answer with Result_Code_AVP." Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the IMS_A and + 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 } @@ -374,8 +422,7 @@ Package TP_GX { then { the EPC_PGW_A entity sends the RAA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the EPC_PCRF_A entity } } @@ -387,14 +434,14 @@ Package TP_GX { Test objective "IUT successfully processes an RA-Request received due to removal of Session Bearer procedure and sends RA-Answer with Result_Code_AVP." Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the IMS_A and + the UE_A entity isAttachedTo the EPC_A and the UE_A entity isRegisteredTo the IMS_A } @@ -403,15 +450,13 @@ Package TP_GX { when { the EPC_PCRF_A entity sends an RAR containing Charging_Rule_Remove_AVP containing - Charging_Rule_Name_AVP - ;; + 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 - ; + indicating value DIAMETER_SUCCESS; to the EPC_PCRF_A entity } } @@ -423,14 +468,14 @@ Package TP_GX { Test objective "When IUT receives AA-Request from P-CSCF successfully sends an RA-Request due to the Session Bearer procedure" Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the IMS_A and + the UE_A entity isAttachedTo the EPC_A and the UE_A entity isRegisteredTo the IMS_A } @@ -447,11 +492,9 @@ Package TP_GX { Charging_Rule_Name_AVP Flow_Information_AVP containing Flow_Description_AVP - ;, Flow_Status_AVP Flows_AVP containing - Media_Component_Number_AVP - ;, + Media_Component_Number_AVP;, QOS_Information_AVP containing QOS_Class_Identifier_AVP indicating value @@ -461,10 +504,7 @@ Package TP_GX { Max_Requested_Bandwidth_DL_AVP Guaranteed_Bitrate_UL_AVP Guaranteed_Bitrate_DL_AVP - Allocation_Retention_Priority_AVP - ; - ; - ; + Allocation_Retention_Priority_AVP;;;; to the EPC_PGW_A entity } } @@ -476,14 +516,14 @@ Package TP_GX { Test objective "When IUT receives ST-Request from P-CSCF to remove all relevant previously created bearers then IUT sends an RA-Request." Reference - "TS 129 212 (V15.3.0) [9], clause 4.5.2" + "TS 129 212 [9], clause 4.5.2" Config Id CF_VxLTE_INT PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the IMS_A and + 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 } @@ -497,12 +537,91 @@ Package TP_GX { then { the EPC_PCRF_A entity sends the RAR containing Charging_Rule_Remove_AVP containing - Charging_Rule_Name_AVP - ;; + Charging_Rule_Name_AVP;; to the EPC_PGW_A entity } } } // End of TP_GX_PCRF_RAR_02 + + Test Purpose { + TP Id TP_GX_PCRF_RAR_03 + //TP_EPC_8002_03 from TS 103 029 V5.1.1 + Test objective "When IUT receives AA-Answer from home PCRF then IUT sends an RA-Request due to the Session Bearer procedure" + + Reference + "TS 129 212 [9], clause 4.5.2" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + 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 + } + } + } // End of TP_GX_PCRF_RAR_03 + + Test Purpose { + TP Id TP_GX_PCRF_RAR_04 + //TP_EPC_8002_06 from TS 103 029 V5.1.1 + Test objective "When IUT receives ST-Answer from home PCRF then IUT sends an RA-Request." + + Reference + "TS 129 212 [9], clause 4.5.2" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_GX_PCRF_RAR_04 } // End of Package TP_GX diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 index b5752ddc52cfd04b371219ba6e94397bbb8a6f25..66e65f5558fb6d6b2f55667765cf43572aa405c2 100644 --- a/test_purposes/Ic/TP_IC.tplan2 +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +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 @@ -14,6 +14,7 @@ file and shall not imply any sub-license right. */ +/* Gm interface at IBCF/IBCF*/ Package TP_IC { import all from Sip_Common; @@ -24,7 +25,7 @@ Package TP_IC { Test objective "IMS CN components shall support SIP messages > 1 300 bytes" Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A" + "TS 124 229 [1], clause 4.2A" Config Id CF_VxLTE_INT @@ -39,7 +40,7 @@ Package TP_IC { ensure that { when { the UE_A entity sends a MESSAGE - containing Message_Body_Size indicating value greater than 1300 bytes ; + containing Message_Body_Size indicating value greater than 1_300 bytes ; to the IMS_A entity } then { @@ -61,7 +62,7 @@ Package TP_IC { REGISTER requests received from the UE to the entry point in the home network" Reference - "TS 124 229 (V15.06.0) [1], clause 5.2.2.1 ¶16 (2nd numbered list) and 5.2.2.2" + "TS 124 229 [1], clause 5.2.2.1 �16 (2nd numbered list) and 5.2.2.2" Config Id CFG_IC_01 Initial conditions with { the IMS_A entity isNotConfiguredForTopologyHiding and @@ -82,7 +83,7 @@ Package TP_IC { "S-CSCF shall insert orig-ioi parameter, remove access-network-charging-info parameter and P-Access-Network-Info header before sending initial INVITE or a initial request over NNI" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 ¶11 (1st numbered list)" + "TS 124 229 [1], clauses 5.4.3.2 paragraph 11 (1st numbered list)and clause 5.10.3.2" Config Id CF_VxLTE_INT PICS Selection NONE @@ -96,22 +97,19 @@ Package TP_IC { Expected behaviour ensure that { when { - the UE_A entity sends an intial INVITE "addressed to UE_B" to the IMS_A entity + the UE_A entity sends an initial INVITE "addressed to UE_B" to the IMS_A entity } then { the IMS_IBCF_A entity forwards the initial INVITE containing - Route indicating value not PX_S_CSCF_A_SIP_URI, + Route not indicating value PX_S_CSCF_A_SIP_URI, PChargingVector containing - Icid_AVP, - Orig_Ioi_AVP indicating value PX_IMS_A_ICID, - not Access_Network_Charging_Info_AVP, - not Term_Ioi_AVP - ; , + Icid_value, + Orig_Ioi indicating value PX_IMS_A_ICID, + not Access_Network_Charging_Info, + not Term_Ioi;, RecordRoute containing - Header_AVP indicating value PX_S_CSCF_A_SIP_URI - ; , - not PAccessNetworkInfo - ; + Header indicating value PX_S_CSCF_A_SIP_URI;, + not PAccessNetworkInfo; to the IMS_IBCF_B entity } } @@ -128,7 +126,7 @@ Package TP_IC { "S-CSCF inserts a second P-Asserted-Identity header indicating a registered tel URI or sip URI whichever is not present in initial INVITE" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 ¶9 (item 9 1st numbered list)" + "TS 124 229 [1], clause 5.4.3.2 paragraph 9 (item 9 1st numbered list)" Config Id CF_VxLTE_INT PICS Selection NONE @@ -143,15 +141,13 @@ Package TP_IC { Expected behaviour ensure that { when { - the UE_A entity sends an intial INVITE "addressed to UE_B" to the IMS_A entity + the UE_A entity sends an initial INVITE "addressed to UE_B" to the IMS_A entity } then { the IMS_IBCF_A entity forwards the initial INVITE containing PAssertedID containing PAssertedIDValue indicating value PX_UE_A_SIP_URI, - PAssertedIDValue indicating value PX_UE_A_TEL_URI - ; - ; + PAssertedIDValue indicating value PX_UE_A_TEL_URI;; to the IMS_IBCF_B entity } } @@ -164,11 +160,11 @@ Package TP_IC { Test Purpose { - TP Id TP_IC_SCSCF_INVITE_03 // Former TP_IMS_5097_04 + TP Id TP_IC_IBCF_INVITE_03 // Former TP_IMS_5097_04 Test objective "S-CSCF uses ENUM/DNS to translate Tel URIs to SIP URIs in initial INVITE requests" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 (item 10 1st numbered list)" + "TS 124 229 [1], clause 5.4.3.2 (item 10 1st numbered list)" Config Id CF_VxLTE_INT PICS Selection NONE @@ -187,26 +183,22 @@ Package TP_IC { ; to the IMS_S_CSCF_A entity and the IMS_S_CSCF_A entity sends a NAPTR_Query containing - Query_AVP indicating value PX_UE_B_TEL_URI - ; + Query indicating value PX_UE_B_TEL_URI; to the Enum_DB entity and the Enum_DB entity sends a NAPTR_Response containing - NAPTR_ResourceRecord indicating value PX_UE_B_SIP_URI - ; + NAPTR_ResourceRecord indicating value PX_UE_B_SIP_URI; to the IMS_S_CSCF_A entity } then { the IMS_IBCF_A entity forwards the initial INVITE containing RequestLine indicating value PX_UE_B_SIP_URI, PChargingVector containing - not Access_Network_Charging_Info_AVP - ; - ; + not Access_Network_Charging_Info;; to the IMS_IBCF_B entity } } - } // End of TP_IC_SCSCF_INVITE_03 + } // End of TP_IC_IBCF_INVITE_03 @@ -218,8 +210,8 @@ Package TP_IC { Route header list exists without topology hiding and the UE is not performing the functions of an external attached network using static mode of operation" Reference - "TS 124 229 (V15.06.0) [1], clause 5.2.6.3.3 (1st numbered list)" - Config Id CF_VxLTE_RMI + "TS 124 229 [1], clause 5.2.6.3.3 (1st numbered list)" + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -233,32 +225,26 @@ Package TP_IC { Expected behaviour ensure that { when { - the UE_B entity sends an intial INVITE "addressed to UE_A" to the IMS_A entity + the UE_B entity sends an initial INVITE "addressed to UE_A" to the IMS_A entity } then { the IMS_IBCF_A entity forwards the initial INVITE containing Route containing - RouteBody indicating value not PX_P_CSCF_A_SIP_URI, - RouteBody indicating value PX_P_CSCF_Service_Route_URIs - ; , + RouteBody not indicating value PX_P_CSCF_A_SIP_URI, + RouteBody indicating value PX_P_CSCF_Service_Route_URIs; , Via containing ViaBody containing - HostPort indicating value PX_P_CSCF_Port_Number - ; , + HostPort indicating value PX_P_CSCF_Port_Number; , PX_P_CSCF_FQDN "or" - PX_P_CSCF_IP_Addr - ; , + PX_P_CSCF_IP_Addr; , RecordRoute containing RouteBody containing - NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests - ; , + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , PX_P_CSCF_FQDN_address_IMS_A "or" - PX_P_CSCF_IP_address_IMS_A - ; , + PX_P_CSCF_IP_address_IMS_A; , not PPreferredID , PAssertedID indicating value PX_UE_B_SIP_URI , - PChargingVector indicating value PX_IMS_A_ICID - ; + PChargingVector indicating value PX_IMS_A_ICID; to the IMS_IBCF_B entity } } @@ -267,6 +253,43 @@ Package TP_IC { +// "Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg)." + Test Purpose { + TP Id TP_IC_IBCF_INVITE_05 // Former TP_IMS_5046_01 + Test objective + "Verify that the IBCF successfully processes an initial INVITE (Terminating Leg)." + Reference + "TS 124 229 [1], clause 5.2.6.3.3 (1st numbered list)" + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends an initial INVITE "addressed to roaming UE_B" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the initial INVITE + from the IMS_IBCF_B entity and + the IMS_IBCF_A entity forwards the initial INVITE + to the IMS_P_CSCF_A entity + } + } + + } // End of TP TP_IC_IBCF_INVITE_05 + + + + + Test Purpose { // Former TP TP_IMS_5115_01 TP Id TP_IC_IBCF_180RESP_01 @@ -274,7 +297,7 @@ Package TP_IC { "S-CSCF include term-ioi parameter and restores orig-ioi in 180 responses from UE to initial requests in terminating network" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.3 (item 2 in 3rd numbered list)" + "TS 124 229 [1], clause 5.4.3.3 (item 2 in 3rd numbered list)" Config Id CF_VxLTE_INT @@ -283,7 +306,7 @@ Package TP_IC { Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity } Expected behaviour @@ -294,10 +317,8 @@ Package TP_IC { then { the IMS_IBCF_A entity sends the 180_Ringing response containing P_Charging_Vector_Header containing - Orig_Ioi_AVP indicating value PX_IMS_B_ICID , - Term_Ioi_AVP indicating value PX_IMS_A_ICID - ; - ; + Orig_Ioi indicating value PX_IMS_B_ICID , + Term_Ioi indicating value PX_IMS_A_ICID;; to the IMS_IBCF_B entity } @@ -311,7 +332,7 @@ Package TP_IC { Test objective "I-CSCF shall remove P-Charging-Function-Addresses header from 180 response to initial request" Reference - "TS 124 229 (V15.06.0) [1], clause 5.3.2.1 (paragraph after note 10)" + "TS 124 229 [1], clause 5.3.2.1 (paragraph after note 10)" Config Id CF_VxLTE_INT @@ -320,7 +341,7 @@ Package TP_IC { Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity } Expected behaviour @@ -330,25 +351,53 @@ Package TP_IC { } then { the IMS_IBCF_A entity sends the 180_Ringing response containing - not PChargingVector - ; + not PChargingVector; to the IMS_IBCF_B entity } } } // End of TP TP_IC_IBCF_180RESP_02 - - - + Test Purpose { + TP Id TP_IC_IBCF_183RESP_01 + Test objective + "S-CSCF inserts P-Asserted-Identity header in 183 response indicating a + registered SIP URI." + Reference + "TS 124 229 [1], clause 5.4.3.3 (item 3 in 3rd numbered list)" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity registeredPublicIdsWithTelUriAndSipUri and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a 183_SessionProgress response "addressed to UE_B" to the IMS_A entity + } + then { + the IMS_IBCF_A entity sends the 183_SessionProgress response containing + PAssertedID containing + PAssertedIDValue indicating value PX_UE_A_SIP_URI;; + to the IMS_IBCF_B entity + } + } + } // End of TP TP_IC_IBCF_183RESP_01 Test Purpose { // Former TP TP_IMS_5115_03 TP Id TP_IC_IBCF_1XXRESP_01 Test objective - "S-CSCF inserts a second P-Asserted-Identity header in 1xx response indicating a - registered tel URI or SIP URI whichever is not present" + "S-CSCF inserts P-Asserted-Identity header in 1xx response indicating a + registered SIP URI" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.3 (item 3 in 3rd numbered list)" + "TS 124 229 [1], clause 5.4.3.3 (item 3 in 3rd numbered list)" Config Id CF_VxLTE_INT @@ -358,7 +407,7 @@ Package TP_IC { the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_B and the UE_A entity registeredPublicIdsWithTelUriAndSipUri and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity } Expected behaviour @@ -369,23 +418,19 @@ Package TP_IC { then { the IMS_IBCF_A entity sends the 180_Ringing response containing PAssertedID containing - PAssertedIDValue indicating value PX_UE_A_SIP_URI , - PAssertedIDValue indicating value PX_UE_A_TEL_URI - ; - ; + PAssertedIDValue indicating value PX_UE_A_SIP_URI;; to the IMS_IBCF_B entity } } } // End of TP TP_IC_IBCF_1XXRESP_01 - Test Purpose { // Former TP TP_IMS_5055_01 TP Id TP_IC_IBCF_1XXRESP_02 Test objective "The P-CSCF receives a 180 response to an initial request for a dialog from the UE" Reference - "TS 124 229 (V15.06.0) [1], clause 5.2.6.4.4 (1st numbered list)" + "TS 124 229 [1], clause 5.2.6.4.4 (1st numbered list)" Config Id CF_VxLTE_INT @@ -394,7 +439,7 @@ Package TP_IC { Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity } Expected behaviour @@ -406,18 +451,13 @@ Package TP_IC { the IMS_IBCF_A entity sends the 180_Ringing response containing RecordRoute containing RouteBody containing - NameAddr indicating value PX_P_CSCF_A_SIP_URI - ; , + NameAddr indicating value PX_P_CSCF_A_SIP_URI; , RouteBody containing - NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests - ; , - not CompSipUri_AVP - ; , + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , + not CompSipUri; , not PPreferredID , PAssertedID containing - PAssertedIDValue indicating value PX_UE_A_SIP_URI - ; - ; + PAssertedIDValue indicating value PX_UE_A_SIP_URI;; to the IMS_IBCF_B entity } } @@ -426,6 +466,89 @@ Package TP_IC { + Test Purpose { // Former TP TP_IMS_5055_01 + TP Id TP_IC_IBCF_1XXRESP_03 + Test objective + "The P-CSCF receives a 180 response to an initial request for a dialog from the UE (Originating leg)" + Reference + "TS 124 229 [1], clause 5.2.6.4.4 (1st numbered list)" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_B entity hasReceivedInitialRequestForDialog from the UE_A entity + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 180_Ringing response "addressed to UE_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the 180_Ringing response containing + RecordRoute containing + RouteBody containing + NameAddr indicating value PX_P_CSCF_A_SIP_URI; , + RouteBody containing + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , + not CompSipUri; , + not PPreferredID , + PAssertedID containing + PAssertedIDValue indicating value PX_UE_A_SIP_URI;; + from the IMS_IBCF_A entity and + the IMS_IBCF_B entity sends the 180_Ringing + to the IMS_P_CSCF_B entity + } + } + } // End of TP TP_IC_IBCF_1XXRESP_03 + + + + Test Purpose { // Former TP TP_IMS_5055_01 + TP Id TP_IC_IBCF_1XXRESP_04 + Test objective + "The P-CSCF receives a 180 response to an initial request for a dialog from the UE (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.2.6.4.4 (1st numbered list)" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_B entity hasReceivedInitialRequestForDialog from the UE_A entity + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 180_Ringing response "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity sends the 180_Ringing response containing + RecordRoute containing + RouteBody containing + NameAddr indicating value PX_P_CSCF_A_SIP_URI; , + RouteBody containing + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , + not CompSipUri; , + not PPreferredID , + PAssertedID containing + PAssertedIDValue indicating value PX_UE_A_SIP_URI;; + to the IMS_IBCF_B entity + } + } + } // End of TP TP_IC_IBCF_1XXRESP_04 + + + + Test Purpose { // Former TP TP_IMS_5115_02 @@ -434,7 +557,7 @@ Package TP_IC { "S-CSCF include term-ioi parameter and restores orig-ioi in 2xx responses from UE to initial requests in terminating network" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.3 (item 2 in 3rd numbered list)" + "TS 124 229 [1], clause 5.4.3.3 (item 2 in 3rd numbered list)" Config Id CF_VxLTE_INT @@ -454,10 +577,8 @@ Package TP_IC { then { the IMS_IBCF_A entity sends the 200_Ok response containing PChargingVector containing - Orig_Ioi_AVP indicating value PX_IMS_B_ICID , - Term_Ioi_AVP indicating value PX_IMS_A_ICID - ; - ; + Orig_Ioi indicating value PX_IMS_B_ICID , + Term_Ioi indicating value PX_IMS_A_ICID;; to the IMS_IBCF_B entity } @@ -472,7 +593,7 @@ Package TP_IC { "S-CSCF inserts a second P-Asserted-Identity header in 1xx response indicating a registered tel URI or SIP URI whichever is not present" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.3 (item 3 in 3rd numbered list)" + "TS 124 229 [1], clause 5.4.3.3 (item 3 in 3rd numbered list)" Config Id CF_VxLTE_INT @@ -494,9 +615,7 @@ Package TP_IC { the IMS_IBCF_A entity sends the 200_Ok response containing PAssertedID containing PAssertedIDValue indicating value PX_UE_A_SIP_URI , - PAssertedIDValue indicating value PX_UE_A_TEL_URI - ; - ; + PAssertedIDValue indicating value PX_UE_A_TEL_URI;; to the IMS_IBCF_B entity } } @@ -504,6 +623,36 @@ Package TP_IC { + Test Purpose { // Former TP TP_IMS_5131_02 + TP Id TP_IC_IBCF_2XXRESP_03 + Test objective + "I-CSCF shall remove P-Charging-Function-Addresses header from 200 response to initial request" + Reference + "TS 124 229 [1], clause 5.3.2.1 (paragraph after note 10)" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a 200_Ok response "addressed to UE_B" to the IMS_A entity + } + then { + the IMS_IBCF_A entity sends the 200_Ok response containing + not PChargingFunctionAddresses; + to the IMS_IBCF_B entity + } + + } + } // End of TP TP_IC_IBCF_2XXRESP_03 @@ -514,7 +663,7 @@ Package TP_IC { "S-CSCF remove access-network-charging-info parameter from 2xx response to subsequent or target refresh requests" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.3 (9th numbered list)" + "TS 124 229 [1], clause 5.4.3.3 (9th numbered list)" Config Id CF_VxLTE_INT @@ -534,9 +683,7 @@ Package TP_IC { then { the IMS_IBCF_A entity sends the 200_Ok response containing PChargingVector containing - not AccessNetworkChargingInfo_AVP - ; - ; + not AccessNetworkChargingInfo;; to the IMS_IBCF_B entity } } @@ -548,98 +695,93 @@ Package TP_IC { Test Purpose { // Former TP TP_IMS_5055_02 TP Id TP_IC_IBCF_2XXRESP_05 Test objective - "The P-CSCF receives a 2xx response to an initial request for a dialog from the UE" + "The P-CSCF receives a 2xx response to an initial request for a dialog from the UE (Originating leg)" Reference - "TS 124 229 (V15.06.0) [1], clause 5.2.6.4.4 (1st numbered list)" + "TS 124 229 [1], clause 5.2.6.4.4 (1st numbered list)" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE Initial conditions with { - the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isRegisteredTo the IMS_B and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_B entity hasReceivedInitialRequestForDialog from the UE_A entity } Expected behaviour ensure that { when { - the UE_A entity sends a 200_Ok response "addressed to UE_B" to the IMS_A entity + the UE_B entity sends a 200_Ok response "addressed to UE_A" to the IMS_B entity } then { - the IMS_IBCF_A entity sends the 200_Ok response containing + the IMS_IBCF_B entity receives a 200_Ok response containing RecordRoute containing RouteBody containing - NameAddr indicating value PX_P_CSCF_A_SIP_URI - ; , + NameAddr indicating value PX_P_CSCF_A_SIP_URI; , RouteBody containing - NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests - ; , - not CompSipUri_AVP - ; , + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , + not CompSipUri; , not PPreferredID , PAssertedID containing - PAssertedIDValue indicating value PX_UE_B_SIP_URI - ; - ; - to the IMS_IBCF_B entity + PAssertedIDValue indicating value PX_UE_B_SIP_URI;; + from the IMS_IBCF_A entity and + the IMS_IBCF_B entity sends the 200_Ok response + to the IMS_P_CSCF_B entity } } } // End of TP TP_IC_IBCF_2XXRESP_05 - - - Test Purpose { // Former TP TP_IMS_5106_01 - TP Id TP_IC_IBCF_REINVITE_01 + Test Purpose { + TP Id TP_IC_IBCF_2XXRESP_06 Test objective - "S-CSCF shall handle subsequent INVITE prior to sending it over NNI" + "The IBCF forwards a 2xx response to a successful initial request for a dialog from the UE A (Terminating leg)" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 (6th numbered list)" + "TS 124 229 [1], clause 5.2.6.4.4 (1st numbered list)" - Config Id CF_VxLTE_INT + Config Id CF_VxLTE_RMI_A PICS Selection NONE Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasInitiatedDialogWith the UE_B + the UE_B entity isRegisteredTo the IMS_A and + the UE_B entity hasReceivedInitialRequestForDialog from the UE_A entity } Expected behaviour ensure that { when { - the UE_A entity sends a subsequent INVITE "addressed to UE_B" to the IMS_A entity + the UE_B entity sends a 200_Ok response "addressed to UE_A" to the IMS_A entity } then { - the IMS_IBCF_A entity sends the subsequent INVITE containing - RecordRoute indicating value PX_S_CSCF_A_SIP_URI , - Route indicating value not PX_S_CSCF_A_SIP_URI - PChargingVector containing - not AccessNetworkChargingInfo_AVP - ; - ; - to the IMS_IBCF_B entity + the IMS_IBCF_A entity sends the 200_Ok response containing + RecordRoute containing + RouteBody containing + NameAddr indicating value PX_P_CSCF_A_SIP_URI; , + RouteBody containing + NameAddr indicating value PX_P_CSCF_Port_Number_Subsequent_Requests; , + not CompSipUri; , + not PPreferredID , + PAssertedID containing + PAssertedIDValue indicating value PX_UE_B_SIP_URI;; + to the IMS_IBCF_A entity and + the IMS_IBCF_B entity sends the 200_Ok response + to the IMS_P_CSCF_B entity // MORE TO COME!!!! } } - } // End of TP TP_IC_IBCF_REINVITE_01 - - - + } // End of TP TP_IC_IBCF_2XXRESP_06 - - - Test Purpose { // Former TP TP_IMS_5131_02 - TP Id TP_IC_IBCF_2XXRESP_03 + Test Purpose { // Former TP TP_IMS_5106_01 + TP Id TP_IC_IBCF_REINVITE_01 Test objective - "I-CSCF shall remove P-Charging-Function-Addresses header from 200 response to initial request" + "S-CSCF shall handle subsequent INVITE prior to sending it over NNI" Reference - "TS 124 229 (V15.06.0) [1], clause 5.3.2.1 (paragraph after note 10)" + "TS 124 229 [1], clause 5.4.3.2 (6th numbered list)" Config Id CF_VxLTE_INT @@ -648,26 +790,24 @@ Package TP_IC { Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasReceivedIntialRequestForDialog from the UE_B entity + the UE_A entity hasInitiatedDialogWith the UE_B } Expected behaviour ensure that { when { - the UE_A entity sends a 200_Ok response "addressed to UE_B" to the IMS_A entity + the UE_A entity sends a subsequent INVITE "addressed to UE_B" to the IMS_A entity } then { - the IMS_IBCF_A entity sends the 200_Ok response containing - not PChargingFunctionAddresses - ; + the IMS_IBCF_A entity sends the subsequent INVITE containing + RecordRoute indicating value PX_S_CSCF_A_SIP_URI , + Route not indicating value PX_S_CSCF_A_SIP_URI + PChargingVector containing + not AccessNetworkChargingInfo;; to the IMS_IBCF_B entity } - } - } // End of TP TP_IC_IBCF_2XXRESP_03 - - - + } // End of TP TP_IC_IBCF_REINVITE_01 @@ -682,7 +822,7 @@ Package TP_IC { Test objective "S-CSCF removes its own SIP URI from the route header before sending BYE" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 (item 1 in 7th numbered list)" + "TS 124 229 [1], clause 5.4.3.2 (item 1 in 7th numbered list)" Config Id CF_VxLTE_INT PICS Selection NONE @@ -700,8 +840,7 @@ Package TP_IC { } then { the IMS_IBCF_A entity forwards the BYE containing - Route indicating value not PX_S_CSCF_A_SIP_URI - ; + Route not indicating value PX_S_CSCF_A_SIP_URI ; to the IMS_IBCF_B entity } } @@ -709,12 +848,88 @@ Package TP_IC { } // End of TP TP_IC_IBCF_BYE_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_BYE_02 + Test objective + "IBCF successfully processes a BYE message" + Reference + "TS 124 229 [1], clause 5.4.3.2 (item 1 in 7th numbered list)" + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasInitiatedDialogWith the UE_B + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_B entity receives a BYE "addressed to UE_A" + from the IMS_A entity + } + then { + the IMS_IBCF_B entity forwards the BYE + to the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity sends the 200_OK + to the IMS_A entity + } + } + + } // End of TP TP_IC_IBCF_BYE_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_BYE_03 + Test objective + "IBCF successfully processes a BYE message" + Reference + "TS 124 229 [1], clause 5.4.3.2 (item 1 in 7th numbered list)" + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasInitiatedDialogWith the UE_B + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_B entity receives a BYE "addressed to UE_B" + from the IMS_P_CSCF_B entity + } + then { + the IMS_IBCF_B entity forwards the BYE + to the IMS_A entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity sends the 200_OK + to the IMS_P_CSCF_B entity + } + } + + } // End of TP TP_IC_IBCF_BYE_03 + + + + Test Purpose { TP Id TP_IC_IBCF_ACK_01 // Former TP_IMS_5107_02 Test objective "S-CSCF removes its own SIP URI from the route header before sending ACK" Reference - "TS 124 229 (V15.06.0) [1], clause 5.4.3.2 (item 1 in 7th numbered list)" + "TS 124 229 [1], clause 5.4.3.2 (item 1 in 7th numbered list)" Config Id CF_VxLTE_INT PICS Selection NONE @@ -732,8 +947,7 @@ Package TP_IC { } then { the IMS_IBCF_A entity forwards the ACK containing - Route indicating value not PX_S_CSCF_A_SIP_URI - ; + Route not indicating value PX_S_CSCF_A_SIP_URI; to the IMS_IBCF_B entity } } @@ -744,26 +958,28 @@ Package TP_IC { Test Purpose { TP Id TP_IC_IBCF_100TRY_01 // Former TP_IMS_5070_01 Test objective - "The P-CSCF shall respond with a 100 (Trying) provisional response on initial INVITE in - terminating network" + "The IBCF shall respond with a 100 (Trying) provisional response on initial INVITE + (terminating leg)" Reference - "TS 124 229 (V15.06.0) [1], clause 5.2.7.3" - Config Id CF_VxLTE_RMI + "TS 124 229 [1], clause 5.10.3.2" + Config Id CF_VxLTE_RMI_A PICS Selection NONE Initial conditions with { the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_A and the UE_B entity isAttachedTo the EPC_A } Expected behaviour ensure that { when { - the UE_B entity sends an intial INVITE "addressed to UE_A" to the IMS_A entity + the UE_A entity sends an initial INVITE "addressed to UE_B" to the IMS_A entity } then { + the IMS_IBCF_A entity receives the INVITE + from the IMS_IBCF_B entity and the IMS_IBCF_A entity sends a 100_Trying response to the IMS_IBCF_B entity } @@ -772,8 +988,903 @@ Package TP_IC { } // End of TP TP_IC_IBCF_100TRY_01 + Test Purpose { + TP Id TP_IC_IBCF_100TRY_02 + Test objective + "The IBCF shall respond with a 100 (Trying) provisional response on initial INVITE + (originating leg)" + Reference + "TS 124 229 [1], clause 5.10.3.2" + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity isAttachedTo the EPC_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends an initial INVITE "addressed to UE_B" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends the INVITE + to the IMS_IBCF_A entity and + the IMS_IBCF_B entity receives a 100_Trying response + from the IMS_IBCF_A entity + } + } + + } // End of TP TP_IC_IBCF_100TRY_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_01 // Former TP_IMS_5107_03 + Test objective + "S-CSCF removes its own SIP URI from the route header before sending CANCEL (Originating leg)" + Reference + "TS 124 229 [1], clause 5.4.3.2" + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceived180OnInitialRequest from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a CANCEL "addressed to UE_B" to the IMS_A entity + } + then { + the IMS_IBCF_A entity sends a CANCEL containing + Route not indicating value PX_S_CSCF_A_SIP_URI; + to the IMS_IBCF_B entity and + the IMS_IBCF_B entity forwards the CANCEL + to the IMS_P_CSCF_B entity + } + } + + } // End of TP TP_IC_IBCF_CANCEL_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_02 // Former TP_IMS_5107_03 + Test objective + "S-CSCF removes its own SIP URI from the route header before sending CANCEL (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.4.3.2" + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + 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 to the UE_B entity + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_B entity receives the CANCEL containing + Route not indicating value PX_S_CSCF_A_SIP_URI; + from the IMS_A entity + } + then { + the IMS_IBCF_B entity forwards the CANCEL + to the IMS_S_CSCF_B entity + } + } + + } // End of TP TP_IC_IBCF_CANCEL_02 + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_03 // Former TP_IMS_5107_03 + Test objective + "S-CSCF removes its own SIP URI from the route header before sending CANCEL (Originating leg)" + Reference + "TS 124 229 [1], clause 5.4.3.2" + Config Id CF_VxLTE_RMI // CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceived180OnInitialRequest from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a CANCEL "addressed to UE_B" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends a CANCEL containing + Route not indicating value PX_S_CSCF_B_SIP_URI; + to the IMS_IBCF_A entity + } + } + + } // End of TP TP_IC_IBCF_CANCEL_03 + + +/* CURRENTLY NOT REQUIRED FROM THE TD DERIVED TPs IN PART OF THE STANDARD (SEE CLAUSE 6.3.4.2 OF PART 2) + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_04 // Former TP_IMS_5107_03 + Test objective + "S-CSCF removes its own SIP URI from the route header before sending CANCEL (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.4.3.2" + Config Id CF_VxLTE_RMI // CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_A entity isRequestedToSend a CANCEL to the UE_B entity + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_A entity receives the CANCEL containing + Route indicating value not PX_S_CSCF_B_SIP_URI + ; + from the IMS_B entity + } + then { + the IMS_IBCF_A entity forwards the CANCEL + to the IMS_S_CSCF_A entity + } + } + + } // End of TP TP_IC_IBCF_CANCEL_04 + +*/ + + + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_OK_01 + Test objective + "The P-CSCF receives a 200 OK response to a CANCEL request from the UE receiving the CANCEL request (Originating leg)" + Reference + "TS 124 229 [1], clause 5.2.8.1.1 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 200_Ok response "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 200_Ok response + and + the IMS_IBCF_A entity forwards the 200_OK + to the IMS_P_CSCF_A entity + } + } + } // End of TP_IC_IBCF_CANCEL_OK_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_OK_02 + Test objective + "The P-CSCF receives a 200 OK response to a CANCEL request from the UE receiving the CANCEL request (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.2.8.1.1 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 200_Ok response "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_B entity sends the 200_Ok + to the IMS_A entity + } + } + } // End of TP_IC_IBCF_CANCEL_OK_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_CANCEL_OK_03 + Test objective + "The P-CSCF receives a 200 OK response to a CANCEL request from the UE receiving the CANCEL request (Originating leg)" + Reference + "TS 124 229 [1], clause 5.2.8.1.1 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_RMI // CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 200_Ok response "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 200_Ok response + and + the IMS_IBCF_A entity forwards the 200_OK + to the IMS_P_CSCF_A entity + } + } + } // End of TP_IC_IBCF_CANCEL_OK_01 + + + + + Test Purpose { + TP Id TP_IC_IBCF_487INVITE_01 + Test objective + "Verify that the IBCF successfully processes a 487 INVITE (Request Terminated). (Originating leg)" + Reference + "TS 124 229 [1], clause 5.3.2.2 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL and + the UE_A entity hasReceived200OkCancel from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 487_INVITE request "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 487_INVITE request + from the IMS_B entity and + the IMS_IBCF_A entity forwards the 487_INVITE request + to the IMS_S_CSCF_A entity + } + } + } // End of TP_IC_IBCF_487INVITE_01 + + + + + Test Purpose { + TP Id TP_IC_IBCF_487INVITE_02 + Test objective + "Verify that the IBCF successfully processes a 487 INVITE (Request Terminated). (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.3.2.2 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL and + the UE_A entity hasReceived200OkCancel from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 487_INVITE request "addressed to UE_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends the 487_INVITE request + to the IMS_IBCF_A entity + } + } + } // End of TP_IC_IBCF_487INVITE_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_487INVITE_ACK_01 + Test objective + "Verify that the IBCF successfully processes an ACK response for a Request terminated. (Originating leg)" + Reference + "TS 124 229 [1], clause 5.3.2.2 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL and + the UE_A entity hasReceived200OkCancel from the UE_B entity and + the UE_A entity hasReceivedTerminatedRequest from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a ACK response "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the ACK response + from the IMS_S_CSCF_A entity and + the IMS_IBCF_A entity sends the ACK response + to the IMS_IBCF_B entity + } + } + } // End of TP_IC_IBCF_487INVITE_ACK_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_487INVITE_ACK_02 + Test objective + "Verify that the IBCF successfully processes an ACK response for a Request terminated. (Terminating leg)" + Reference + "TS 124 229 [1], clause 5.3.2.2 and RFC 3261 [18], clause 9.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasReceivedInitialRequestForDialog from the UE_B entity and + the UE_A entity isRequestedToSend a CANCEL and + the UE_A entity hasReceived200OkCancel from the UE_B entity and + the UE_A entity hasReceivedTerminatedRequest from the UE_B entity + } + + Expected behaviour + ensure that { + when { + the IMS_A entity sends a ACK response "addressed to UE_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the ACK response + from the IMS_A entity and + the IMS_IBCF_B entity forwards the ACK response + to the IMS_S_CSCF_B entity + } + } + } // End of TP_IC_IBCF_487INVITE_ACK_02 + + + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_01 + Test objective + "Verify that the IBCF successfully processes a 486 INVITE (BUSY) originating leg. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_B isAttachedTo the EPC_B and + UE_A isRegisteredTo the IMS_A and + UE_B isRegisteredTo the IMS_B and + UE_B isBusy + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 486_INVITE "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 486_INVITE + from the IMS_B entity and + the IMS_IBCF_A entity forwards the 486_INVITE + to the IMS_P_CSCF_A entity + } + } + } // End of TP_IC_IBCF_486INVITE_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_02 + Test objective + "Verify that the IBCF successfully processes a 486 INVITE (BUSY) Terminating leg. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_B isAttachedTo the EPC_B and + UE_A isRegisteredTo the IMS_A and + UE_B isRegisteredTo the IMS_B and + UE_B isBusy + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 486_INVITE "addressed to UE_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the 486_INVITE + from the IMS_S_CSCF_B entity and + the IMS_IBCF_B entity forwards the 486_INVITE + to the IMS_A entity + } + } + } // End of TP_IC_IBCF_486INVITE_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_03 + Test objective + "Verify that the IBCF successfully processes a 486 INVITE (BUSY) originating leg, roaming case. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_B and + UE_B isAttachedTo the EPC_B and + UE_A isRegisteredTo the IMS_B and + UE_B isRegisteredTo the IMS_B and + UE_B isBusy + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 486_INVITE "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_B entity receives the 486_INVITE + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 486_INVITE + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_486INVITE_03 + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_04 + Test objective + "Verify that the IBCF successfully processes a 486 INVITE (BUSY) terminating leg, roaming case. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_B isAttachedTo the EPC_A and + UE_A isRegisteredTo the IMS_A and + UE_B isRegisteredTo the IMS_A and + UE_B isBusy + } + + Expected behaviour + ensure that { + when { + the UE_B entity sends a 486_INVITE "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 486_INVITE + from the IMS_P_CSCF_A entity and + the IMS_IBCF_A entity sends the 486_INVITE + to the IMS_IBCF_B entity + } + } + } // End of TP_IC_IBCF_486INVITE_04 + + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_ACK_01 + Test objective + "Verify that the IBCF successfully processes an ACK in response to a BUSY reply during session set-up (Originating leg). " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_B isAttachedTo the EPC_B and + UE_A isRegisteredTo the IMS_A and + UE_B isRegisteredTo the IMS_B and + UE_B isBusy and + UE_B hasResponded486INVITE + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends an ACK "addressed to UE_B" to the IMS_B entity + } + then { + the IMS_IBCF_A entity receives the ACK + from the IMS_P_CSCF_A entity and + the IMS_IBCF_A entity sends the ACK + to the IMS_IBCF_B entity + } + } + } // End of TP_IC_IBCF_486INVITE_ACK_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_486INVITE_ACK_02 + Test objective + "Verify that the IBCF successfully processes an ACK in response to a BUSY reply during session set-up (Terminating leg). " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_B isAttachedTo the EPC_B and + UE_A isRegisteredTo the IMS_A and + UE_B isRegisteredTo the IMS_B and + UE_B isBusy and + UE_B hasResponded486INVITE + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends an ACK "addressed to UE_B" to the IMS_A entity + } + then { + the IMS_IBCF_B entity receives the ACK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the ACK + to the IMS_S_CSCF_B entity + } + } + } // End of TP_IC_IBCF_486INVITE_ACK_02 + + + + Test Purpose { + TP Id TP_IC_IBCF_REGISTER_01 // Former TP TP_IMS_5137_04 + Test objective + "The IBCF shall perform encryption for topology hiding before an initial REGISTER request is sent " + Reference + "TS 124 229 [1], clauses 5.10.2.1, 5.10.3.1, 5.10.4.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + IMS_A isConfiguredForTopologyHiding and + 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 + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a REGISTER "addressed to home network IMS_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends the REGISTER containing + Via containing + ViaBody containing + HostPort indicating value PX_IBCF_B_SIP_URI;; , + Route indicating value PX_IBCF_B_SIP_URI, + Path containing + PathValue indicating value PX_IBCF_B_SIP_URI;; + to the IMS_IBCF_A entity and + the IMS_IBCF_B entity receives the 401_Unauthorized + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 401_Unauthorized + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_REGISTER_01 + + + + Test Purpose { + TP Id TP_IC_IBCF_REGISTER_02 // + Test objective + "The IBCF shall perform encryption for topology hiding before a second REGISTER request is sent " + Reference + "TS 124 229 [1], clauses 5.10.2.1, 5.10.3.1, 5.10.4.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + IMS_A isConfiguredForTopologyHiding and + 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 UE_A entity sends a second REGISTER "addressed to home network IMS_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends the REGISTER containing + Via containing + ViaBody containing + HostPort indicating value PX_IBCF_B_SIP_URI;; , + Route indicating value PX_IBCF_B_SIP_URI, + Path containing + PathValue indicating value PX_IBCF_B_SIP_URI;; + to the IMS_IBCF_A entity and + the IMS_IBCF_B entity receives the 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_REGISTER_02 + + + + + Test Purpose { + TP Id TP_IC_IBCF_REGISTER_03 // + Test objective + "Verify that the IBCF successfully processes a user de-registration." + Reference + "TS 124 229 [1], clauses 5.10.2.1, 5.10.3.1, 5.10.4.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a REGISTER "addressed to home network IMS_A" containing + Expire indicating value 0; + to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the REGISTER + from the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity forwards the REGISTER + to the IMS_A entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_REGISTER_03 + + + + Test Purpose { + TP Id TP_IC_IBCF_REGISTER_04 // + Test objective + "Verify that the IBCF successfully processes an IMS de-registration due to expiration of registration timer." + Reference + "TS 124 229 [1], clauses 5.10.2.1, 5.10.3.1, 5.10.4.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity sends a REGISTER "addressed to home network IMS_A" containing + Expire indicating value 0; + to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the REGISTER + from the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity forwards the REGISTER + to the IMS_A entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_REGISTER_04 + + + + + Test Purpose { + TP Id TP_IC_IBCF_REGISTER_05 // + Test objective + "Verify that the IBCF successfully processes an IMS de-registration due user initiated network detachment." + Reference + "TS 124 229 [1], clauses 5.10.2.1, 5.10.3.1, 5.10.4.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity sends a REGISTER "addressed to home network IMS_A" containing + Expire indicating value 0; + to the IMS_B entity + } + then { + the IMS_IBCF_B entity receives the REGISTER + from the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity forwards the REGISTER + to the IMS_A entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_REGISTER_05 + + + + + + + Test Purpose { + TP Id TP_IC_IBCF_SUBSCRIBE_01 // + Test objective + "Verify that the IBCF successfully processes a SUBSCRIBE." + Reference + "TS 124 229 [1], clause 5.10.3.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends a SUBSCRIBE "addressed to home network IMS_A" to the IMS_B entity + } + then { + the IMS_IBCF_B entity sends the SUBSCRIBE containing + Route indicating value PX_IBCF_B_SIP_URI; + to the IMS_IBCF_A entity and + the IMS_IBCF_B entity receives the 200_OK + from the IMS_A entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_P_CSCF_B entity + } + } + } // End of TP_IC_IBCF_SUBSCRIBE_01 + + + + + Test Purpose { + TP Id TP_IC_IBCF_NOTIFY_01 + Test objective "Verify that the IBCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + Reference + "TS 124 229 [1], Clause 5.10.3.2" + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_B entity receives a NOTIFY containing + Event indicating value "reg,de-reg"; + from the IMS_A entity + } + then { + the IMS_IBCF_B entity sends the NOTIFY + to the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity receives a 200_OK + from the IMS_P_CSCF_B entity and + the IMS_IBCF_B entity forwards the 200_OK + to the IMS_A entity + + } + } + } // End of TP_IC_IBCF_NOTIFY_01 } // 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 0000000000000000000000000000000000000000..3ab972a89c4d494e3b232772733b6fa42281aef1 --- /dev/null +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -0,0 +1,69 @@ +/* +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; + + Test Purpose { + + TP Id TP_ISC_SCSCF_REGISTER_01 + // TP_IMST2_ISC_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes registration towards AS + when IMS supports 3rd-party registration." + + Reference + "ETSI TS 124 229 [2], Clause 5.4.1.7" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 a REGISTER + from the IMS_I_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a REGISTER containing + From indicating value PX_SCSCF_SIP_URI, + To indicating value PX_AS_A_SIP_URI, + Request_Uri indicating value PX_AS_A_SIP_URI, + Contact indicating value PX_SCSCF_SIP_URI, + PChargingVector, + PChargingFunctionAddresses, + PAccessNetworkInfo + PVisitedNetworkId; + to the IMS_AS_A entity + and the IMS_AS_A entity sends an 200_Ok containing + From indicating value PX_AS_A_SIP_URI, + To indicating value PX_SCSCF_SIP_URI, + CallId, + Via; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_ISC_SCSCF_REGISTER_01 + +} // End of Package TP_ISC + diff --git a/test_purposes/Mw/TP_MW_IB.tplan2 b/test_purposes/Mw/TP_MW_IB.tplan2 deleted file mode 100644 index 478cba5586a08cbd5d46a0649204cf2bdd6fe495..0000000000000000000000000000000000000000 --- a/test_purposes/Mw/TP_MW_IB.tplan2 +++ /dev/null @@ -1,1791 +0,0 @@ -/* -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/IBCF */ -Package TP_MW_IB { - - import all from Sip_Common; - - Test Purpose { - - TP Id TP_MW_ICSCF_MESSAGE_01 - // TP_IMS_4002_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_GEN_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a SIP messages greater than 1 500 bytes" - - Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A" - - 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 - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A entity sends a MESSAGE - containing ContentLength indicating value greater than 1500 bytes - ; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_CSCF_A entity forwards the MESSAGE - to the IMS_IBCF_A entity - } - } - } // End of TP_MW_ICSCF_MESSAGE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_01 - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_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 - ; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_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_HDR indicating value "path", - Supported indicating value "path" - ;; - to the IMS_IBCF_A entity - and 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_REGISTER_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_02 - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a full registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B and - the IMS_S_CSCF_A entity hasAchieveFirstREGISTER - } - - Expected behaviour - ensure that { - when { - the IMS_S_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" - ;; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_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 - ;; - to the IMS_IBCF_A entity - and 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_REGISTER_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_03 - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a invalid first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_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 - } - then { - the IMS_I_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 - ;; - to the IMS_IBCF_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 - ; - to the IMS_S_CSCF_A entity - } - } - } // End of TP_MW_ICSCF_REGISTER_03 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_04 - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_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, - PVisitedNetworkID - ; - to the IMS_I_CSCF_B entity - } - then { - the IMS_I_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, - 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_HDR indicating value "path", - Supported indicating value "path" - ;; - to the IMS_IBCF_B entity - and the IMS_I_CSCF_B 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, - PVisitedNetworkID, - 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_B entity - } - } - } // End of TP_MW_ICSCF_REGISTER_04 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_05 - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a full registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B and - the IMS_S_CSCF_A entity hasAchieveFirstREGISTER - } - - Expected behaviour - ensure that { - when { - the IMS_S_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 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", - PVisitedNetworkID - ;; - to the IMS_I_CSCF_B entity - } - then { - the IMS_I_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 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", - PVisitedNetworkID, - PChargingVector - ;; - to the IMS_IBCF_B entity - and the IMS_I_CSCF_B 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, - PVisitedNetworkID, - 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_B entity - } - } - } // End of TP_MW_ICSCF_REGISTER_05 - - Test Purpose { - - TP Id TP_MW_ICSCF_REGISTER_06 - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a invalid first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_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 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 "", - PVisitedNetworkID - ;; - to the IMS_I_CSCF_B entity - } - then { - the IMS_I_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 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", - PVisitedNetworkID, - PChargingVector - ;; - to the IMS_IBCF_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, - PVisitedNetworkID - ; - to the IMS_S_CSCF_B entity - } - } - } // End of TP_MW_ICSCF_REGISTER_06 - - Test Purpose { - - TP Id TP_MW_ICSCF_SUBSCRIBE_01 - // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.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 isRegisteredTo the IMS_A - } - - Expected behaviour - ensure that { - when { - the IMS_S_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 - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_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 - // TODO To be continued - ; - to the IMS_IBCF_A entity - and the IMS_I_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 - // TODO To be continued - ; - to the IMS_S_CSCF_A entity - } - } - } // End of TP_MW_ICSCF_SUBSCRIBE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_SUBSCRIBE_02 - // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_B 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 - // TODO To be continued - ; - to the IMS_I_CSCF_B entity - } - then { - the IMS_I_CSCF_B 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 - // TODO To be continued - ; - to the IMS_IBCF_B entity - and the IMS_I_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 - // TODO To be continued - ; - to the IMS_S_CSCF_B entity - } - } - } // End of TP_MW_ICSCF_SUBSCRIBE_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_INVITE_01 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes an initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 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" - // TODO To be continued - ; - ;; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_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, - ContentType indicating value "application/sdp", - ContentLength, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_INVITE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_INVITE_02 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes an initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_B 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" - // TODO To be continued - ; - ;; - from the IMS_I_CSCF_B entity - } - then { - the IMS_I_CSCF_B 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, - ContentType indicating value "application/sdp", - ContentLength, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the UE_B entity - } - } - - } // End of TP_MW_ICSCF_INVITE_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_100TRY_01 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_A entity receives a 100_Trying - from the IMS_IBCF_A entity - } - then { - the IMS_I_CSCF_A entity sends a 100_Trying - to the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_100TRY_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_100TRY_02 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_B entity receives a 100_Trying - from the UE_B entity - } - then { - the IMS_I_CSCF_B entity sends a 100_Trying - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_ICSCF_100TRY_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_180RINGING_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_A entity receives a 180_Ringing - from the IMS_IBCF_A entity - } - then { - the IMS_I_CSCF_A entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_180RINGING_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_180RINGING_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_B entity receives a 180_Ringing - from the UE_B entity - } - then { - the IMS_I_CSCF_B entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_ICSCF_180RINGING_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_01 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_A entity receives a 200_Ok containing - not PChargingVector, - not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_I_CSCF_A entity sends a 200_Ok containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_200OK_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_02 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_A entity receives a 200_Ok containing - not PChargingVector, - not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the IMS_IBCF_A entity - } - then { - the IMS_I_CSCF_A entity sends a 200_Ok containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_200OK_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_ACK_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 - // TODO To be continued - ; - from the IMS_I_CSCF_A entity - } - then { - the IMS_I_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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_ACK_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_ACK_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - then { - the IMS_I_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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_ACK_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_RE_INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes an initial RE-INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_S_CSCF_A entity previouslyEstablishedCallWith the UE_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A 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" - // TODO To be continued - ; - ;; - to the IMS_I_CSCF_A entity - } - then { - the IMS_I_CSCF_A 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" - // TODO To be continued - ; - ;; - from the IMS_IBCF_A entity - } - } - } // End of TP_MW_ICSCF_RE_INVITE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_RE_INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes an initial RE-INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_S_CSCF_A - } - - Expected behaviour - ensure that { - when { - the IMS_I_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" - // TODO To be continued - ; - ;; - to the IMS_I_CSCF_B entity - } - then { - the IMS_I_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" - // TODO To be continued - ; - ;; - from the UE_B entity - } - } - } // End of TP_MW_ICSCF_RE_INVITE_02 - - Test Purpose { - - TP Id TP_MW_ICSCF_BYE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_S_CSCF_A entity previouslyEstablishedCallWith the UE_B - } - - Expected behaviour - ensure that { - when { - the IMS_I_CSCF_A entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_I_CSCF_A entity sends an 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 - // TODO To be continued - ; - to the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_BYE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_BYE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_S_CSCF_A - } - - Expected behaviour - ensure that { - when { - the IMS_I_CSCF_B entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_B entity - } - then { - the IMS_I_CSCF_B entity sends an 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 - // TODO To be continued - ; - to the IMS_IBCF_B entity - } - } - - } // End of TP_MW_ICSCF_BYE_02 - - // TP_MW_ICSCF_BYE_03 Not applicable, re-use TP_MW_ICSCF_BYE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_BYE_04 - - Test objective "Verify that the I-CSCF successfully processes a BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_B and - the UE_B entity isAttachedTo the EPC_B and - the UE_A entity isRegisteredTo the IMS_B 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_I_CSCF_B entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_B entity - } - then { - the IMS_I_CSCF_B entity sends an 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 - // TODO To be continued - ; - from the IMS_IBCF_B entity - } - } - - } // End of TP_MW_ICSCF_BYE_04 - - Test Purpose { - - TP Id TP_MW_ICSCF_BYE_05 - - Test objective "Verify that the I-CSCF successfully processes a BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the UE_B entity previouslyEstablishedCallWith the UE_A - } - - Expected behaviour - ensure that { - when { - the IMS_I_CSCF_A entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_I_CSCF_A entity sends an 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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_BYE_05 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_BYE_01 - - Test objective "Verify that the I-CSCF successfully processes a 200 (OK) BYE (Originating Leg/Originating Network)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - then { - the IMS_S_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 - // TODO To be continued - ; - to the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_200OK_BYE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_BYE_02 - - Test objective "Verify that the I-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_B 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 - // TODO To be continued - ; - from the IMS_IBCF_B entity - } - then { - the IMS_I_CSCF_B 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 - // TODO To be continued - ; - to the IMS_S_CSCF_B entity - } - } - - } // End of TP_MW_ICSCF_200OK_BYE_02 - - // TP_MW_ICSCF_200OK_BYE_03 not applicable, re-use TP_MW_ICSCF_200OK_BYE_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_BYE_04 - - Test objective "Verify that the I-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_B and - the UE_B entity isAttachedTo the EPC_B and - the UE_A entity isRegisteredTo the IMS_B 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_I_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 - // TODO To be continued - ; - from the IMS_IBCF_B entity - } - then { - the IMS_I_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_A_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_ICSCF_200OK_BYE_04 - - Test Purpose { - - TP Id TP_MW_ICSCF_200OK_BYE_05 - - Test objective "Verify that the I-CSCF successfully processes a 200 (OK) BYE (Terminating Leg/Originating Network)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the UE_A entity previouslyEstablishedCallWith the UE_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 - // TODO To be continued - ; - from the IMS_I_CSCF_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 - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_200OK_BYE_05 - - // TP_MW_ICSCF_200OK_BYE_06 Not applicable, re-use TP_MW_ICSCF_200OK_BYE_05 - - Test Purpose { - - TP Id TP_MW_ICSCF_CANCEL_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a CANCEL (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_S_CSCF_A entity hasAchieveInitialINVITE and - the UE_A entity isRequestedToSend a CANCEL - } - - Expected behaviour - ensure that { - when { - the IMS_I_CSCF_A entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_I_CSCF_A entity sends an 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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_CANCEL_01 - - Test Purpose { - - TP Id TP_MW_ICSCF_CANCEL_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the I-CSCF successfully processes a CANCEL (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 hasAchieveInitialINVITE and - the UE_B entity isRequestedToSend a CANCEL - } - - Expected behaviour - ensure that { - when { - the IMS_I_CSCF_B entity receives an 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 - // TODO To be continued - ; - from the IMS_S_CSCF_B entity - } - then { - the IMS_I_CSCF_B entity sends an 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 - // TODO To be continued - ; - to the IMS_IBCF_B entity - } - } - - } // End of TP_MW_ICSCF_CANCEL_02 - - Test Purpose { - - TP Id TP_ME_PCSCF_486INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - - Test objective "Verify that the I-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 isBusy - } - - Expected behaviour - ensure that { - when { - the IMS_I_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 - // TODO To be continued - ; - from the IMS_IBCF_A entity - } - then { - the IMS_I_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 - // TODO To be continued - ; - to the IMS_S_CSCF_A entity - } - } - - } // End of TP_MW_ICSCF_486INVITE_01 - - Test Purpose { - - TP Id TP_ME_PCSCF_486INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - - Test objective "Verify that the I-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 isBusy - } - - Expected behaviour - ensure that { - when { - the IMS_I_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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_I_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 - // TODO To be continued - ; - to the IMS_IBCF_A entity - } - } - - } // End of TP_MW_ICSCF_486INVITE_02 - -} // End of Package TP_MW_IB - diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..052f3936d12dd7e80dc195624c70f5d958db45ee --- /dev/null +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -0,0 +1,532 @@ +/* +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; + + Test Purpose { + + TP Id TP_MW_ICSCF_MESSAGE_01 + + Test objective "Verify that the I-CSCF successfully processes a SIP messages greater than 1 300 bytes" + + Reference + "TS 124 229 [1], clause 4.2A" + + 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 + } + + Expected behaviour + ensure that { + when { + the IMS_I_CSCF_A entity receives a MESSAGE + containing ContentLength indicating value greater than 1_300 bytes; + from the IMS_P_CSCF_A entity + } + then { + the IMS_I_CSCF_A entity forwards the MESSAGE + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_MESSAGE_01 + + Test Purpose { + + TP Id TP_MW_ICSCF_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 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 + } + } + } // End of TP_MW_ICSCF_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_ICSCF_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 isAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_A and + the UE_B entity isNotRegisteredTo the IMS_B 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";; + 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_REGISTER_02 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_03 + + Test objective "Verify that the I-CSCF successfully processes an invalid first registration (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 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 "";; + 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 or + the IMS_I_CSCF_A entity sends an 480_Temporary_Unavailable 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_REGISTER_03 + + // TP_MW_ICSCF_REGISTER_03 not applicable + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_04 + + 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_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_B 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, + PVisitedNetworkID; + from the IMS_IBCF_A entity + } + then { + the IMS_I_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_HDR indicating value "path", + Supported indicating value "path";; + to the IMS_S_CSCF_A entity + and 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, + PVisitedNetworkID, + 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_IBCF_A entity + } + } + } // End of TP_MW_ICSCF_REGISTER_04 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_05 + + 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_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_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";; + from the IMS_IBCF_A entity + } + then { + the IMS_I_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 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;; + to the IMS_S_CSCF_A entity + and 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_IBCF_A entity + } + } + } // End of TP_MW_ICSCF_REGISTER_05 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_06 + + Test objective "Verify that the I-CSCF successfully processes an invalid first registration (Unsuccessful)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.1, 5.2.2 and 6.3" + + 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 + } + + 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 "";; + to the IMS_IBCF_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_IBCF_A entity + } + } + } // End of TP_MW_ICSCF_REGISTER_06 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_07 + + Test objective "Verify that the I-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.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 + } + + 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 + Expire indicating value 0; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_REGISTER_07 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_08 + + Test objective "Verify that the I-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.5 and 6.3" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives a REGISTER containing + Expire indicating value 0; + from the IMS_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity forwards a REGISTER containing + Expire indicating value 0; + to the IMS_I_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_REGISTER_08 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_09 + + Test objective "Verify that the P-CSCF successfully processes a network de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity isTriggeredToDetachUser + } + then { + the IMS_I_CSCF_B entity sends a REGISTER containing + Expire indicating value 0; + to the IMS_S_CSCF_B entity + } + } + } // End of TP_MW_ICSCF_REGISTER_09 + + Test Purpose { + + TP Id TP_MW_ICSCF_REGISTER_10 + // ??? from ETSI TS 186 011-2 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the I-CSCF successfully processes a user de-registration (with SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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_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 + Expire indicating value 0; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_ICSCF_REGISTER_10 + +} // 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 5785900759702ed4f19eb2d7ce7293baf9c7e02d..b1f6245fd742687722ff97fee50185cd454845f0 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -13,7 +13,7 @@ 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/S-CSCF */ +/* 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; @@ -21,13 +21,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_MESSAGE_01 - // TP_IMS_4002_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_GEN_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes a SIP messages greater than 1 500 bytes" + Test objective "Verify that the P-CSCF successfully processes a SIP messages greater than 1 300 bytes" Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A" + "TS 124 229 [1], clause 4.2A" Config Id CF_VxLTE_INT @@ -41,14 +39,13 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends a MESSAGE containing + the IMS_P_CSCF_A entity receives 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 1500 bytes - ; - to the IMS_P_CSCF_A entity + ContentLength indicating value greater than 1_300 bytes; + from the UE_A entity } then { the IMS_P_CSCF_A entity forwards the MESSAGE containing @@ -60,75 +57,20 @@ Package TP_MW_PS { icid_value, orig_value, not PAccessNetworkInfo, - ContentLength indicating value greater than 1500 bytes - ;; + ContentLength indicating value greater than 1_300 bytes;; to the IMS_S_CSCF_A entity } } } // End of TP_MW_PCSCF_MESSAGE_01 - Test Purpose { - - TP Id TP_MW_PCSCF_MESSAGE_02 - // TP_IMS_4002_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_GEN_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the P-CSCF successfully processes a SIP messages greater than 1 500 bytes" - - Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A" - - 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 - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity receives 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 - ;; - from the IMS_S_CSCF_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, - 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 - } - } - - } // End of TP_MW_PCSCF_MESSAGE_02 - Test Purpose { TP Id TP_MW_PCSCF_REGISTER_01 - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a first registration." + Test objective "Verify that the P-CSCF successfully processes a first registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" Config Id CF_VxLTE_INT @@ -143,13 +85,12 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - 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 - ; - to the IMS_P_CSCF_A entity + Via indicating value PX_UE_A_VIA; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a REGISTER containing @@ -161,10 +102,9 @@ Package TP_MW_PS { 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_S_CSCF_A entity + Require 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, @@ -178,8 +118,7 @@ Package TP_MW_PS { Realm indicating value PX_UE_A_REALM, Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", - qop indicating value "auth" - ;; + qop indicating value "auth";; to the UE_A entity } } @@ -188,13 +127,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_REGISTER_02 - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a full registration." + Test objective "Verify that the P-CSCF successfully processes a full registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" Config Id CF_VxLTE_INT @@ -204,13 +141,13 @@ Package TP_MW_PS { 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 and - the UE_A entity hasAchieveFirstREGISTER + the UE_A entity hasAchievedFirstREGISTER } Expected behaviour ensure that { when { - 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, @@ -222,9 +159,8 @@ Package TP_MW_PS { 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_P_CSCF_A entity + qop indicating value "auth";; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a REGISTER containing @@ -240,9 +176,8 @@ Package TP_MW_PS { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth", - PChargingVector - ;; - to the IMS_S_CSCF_A entity + PChargingVector;; + 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, @@ -257,8 +192,7 @@ Package TP_MW_PS { term_ioi_parameter indicating value "Operator Identifier Of ImsB" Path, - ServiceRoute - ; + ServiceRoute; to the UE_A entity } } @@ -267,12 +201,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_REGISTER_03 - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a invalid first registration." + Test objective "Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" Config Id CF_VxLTE_INT @@ -287,7 +220,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - 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, @@ -298,9 +231,8 @@ Package TP_MW_PS { 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_P_CSCF_A entity + Nonce indicating value "";; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a REGISTER containing @@ -316,15 +248,13 @@ Package TP_MW_PS { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth", - PChargingVector - ;; - to the IMS_S_CSCF_A entity - and the IMS_P_CSCF_A entity sends an 404_NotFound containing + PChargingVector;; + 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 - ; - to the UE_A entity + CallId indicating value PX_UE_A_CALLID; + to the IMS_P_CSCF_A entity } } } // End of TP_MW_PCSCF_REGISTER_03 @@ -335,12 +265,12 @@ Package TP_MW_PS { // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a first registration." + Test objective "Verify that the P-CSCF successfully processes a first registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -353,13 +283,12 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends 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, - Via indicating value PX_UE_A_VIA - ; - to the IMS_P_CSCF_B entity + Via indicating value PX_UE_A_VIA; + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a REGISTER containing @@ -371,10 +300,9 @@ Package TP_MW_PS { 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_S_CSCF_B entity + Require indicating value "path", + Supported indicating value "path";; + to the IMS_S_CSCF_B entity and the IMS_P_CSCF_B entity sends an 401_Unauthorized containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, @@ -388,8 +316,7 @@ Package TP_MW_PS { Realm indicating value PX_UE_A_REALM, Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", - qop indicating value "auth" - ;; + qop indicating value "auth";; to the UE_A entity } } @@ -401,12 +328,12 @@ Package TP_MW_PS { // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a full registration." + Test objective "Verify that the P-CSCF successfully processes a full registration (Successful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -414,13 +341,13 @@ Package TP_MW_PS { 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 hasAchieveFirstREGISTER + the UE_A entity hasAchievedFirstREGISTER } Expected behaviour ensure that { when { - the UE_A entity sends 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, @@ -432,9 +359,8 @@ Package TP_MW_PS { 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_P_CSCF_B entity + qop indicating value "auth";; + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a REGISTER containing @@ -451,9 +377,8 @@ Package TP_MW_PS { Nonce indicating value "not empty", qop indicating value "auth", PChargingVector, - PVisitedNetwork - ;; - to the IMS_S_CSCF_B entity + PVisitedNetwork;; + to the IMS_I_CSCF_B entity and the IMS_P_CSCF_B entity sends an 200_Ok containing From indicating value PX_UE_A_SIP_URI, To indicating value PX_UE_A_SIP_URI, @@ -469,8 +394,7 @@ Package TP_MW_PS { indicating value "Operator Identifier Of ImsB" Path, ServiceRoute, - PVisitedNetwork - ; + PVisitedNetwork; to the UE_A entity } } @@ -481,12 +405,12 @@ Package TP_MW_PS { TP Id TP_MW_PCSCF_REGISTER_06 // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a invalid first registration." + Test objective "Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful)." Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -499,7 +423,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends a REGISTER containing + 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, @@ -510,9 +434,8 @@ Package TP_MW_PS { 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_P_CSCF_B entity + Nonce indicating value "";; + to the UE_A entity } then { the IMS_P_CSCF_B entity sends a REGISTER containing @@ -529,14 +452,12 @@ Package TP_MW_PS { Nonce indicating value "not empty", qop indicating value "auth", PChargingVector, - PVisitedNetwork - ;; + PVisitedNetwork;; to the IMS_S_CSCF_B entity and the IMS_P_CSCF_B 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 - ; + CallId indicating value PX_UE_A_CALLID; to the UE_A entity } } @@ -545,13 +466,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_REGISTER_07 - // ??? from ETSI TS 186 011-2 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes a network de-registration." + Test objective "Verify that the P-CSCF successfully processes a user de-registration (no SIP session active)." Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.2" Config Id CF_VxLTE_INT @@ -565,27 +484,232 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity isTriggeredToDetachUser + 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_S_CSCF_A entity + Expire indicating value 0; + to the IMS_I_CSCF_A entity } } } // End of TP_MW_PCSCF_REGISTER_07 + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_08 + + Test objective "Verify that the P-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a REGISTER containing + Expire indicating value 0; + from the UE_A entity + } + then { + the IMS_P_CSCF_B entity sends a REGISTER containing + Expire indicating value 0; + to the IMS_S_CSCF_B entity + } + } + } // End of TP_MW_PCSCF_REGISTER_08 + + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_09 + + Test objective "Verify that the P-CSCF successfully processes a network de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5 and 6.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 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 + } + } + } // End of TP_MW_PCSCF_REGISTER_09 + + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_10 + + Test objective "Verify that the P-CSCF successfully processes a user de-registration (with SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 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 and + the IMS_P_CSCF_A entity sends a BYE + to the UE_A entity + } + } + } // End of TP_MW_PCSCF_REGISTER_10 + + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_11 + + Test objective "Verify that the P-CSCF successfully processes a user network detachment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.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 isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToDetachfromNetwork + } + then { + the IMS_P_CSCF_A entity sends a BYE + to the IMS_S_CSCF_A entity and + the IMS_P_CSCF_A entity receives a 200_Ok + from the IMS_S_CSCF_A entity and + the IMS_P_CSCF_A entity sends a REGISTER containing + Expire indicating value 0; + to the IMS_I_CSCF_A entity and + the IMS_P_CSCF_A entity receives a 200_Ok + from the IMS_I_CSCF_A entity + } + } + } // End of TP_MW_PCSCF_REGISTER_11 + + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_12 + + Test objective "Verify that the P-CSCF successfully processes a network de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity isTriggeredToDetachUser + } + then { + the IMS_P_CSCF_B entity sends a REGISTER containing + From indicating value PX_IMS_P_CSCF_B_SIP_URI, + To indicating value PX_I_CSCF_A_SIP_URI, + Event indicating value "reg,de-reg", + Expire indicating value 0; + to the IMS_S_CSCF_B entity + } + } + } // End of TP_MW_PCSCF_REGISTER_12 + + Test Purpose { + + TP Id TP_MW_PCSCF_REGISTER_13 + + Test objective "Verify that the P-CSCF successfully processes a user network detachment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.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 isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToDetachfromNetwork + } + then { + the IMS_P_CSCF_B entity sends a REGISTER containing + Expire indicating value 0; + to the IMS_S_CSCF_B entity and + the IMS_P_CSCF_B entity receives a 200_Ok + from the IMS_S_CSCF_B entity + } + } + } // End of TP_MW_PCSCF_REGISTER_13 + Test Purpose { TP Id TP_MW_PCSCF_SUBSCRIBE_01 - // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." + Test objective "Verify that the P-CSCF successfully processes a SUBSCRIBE." Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.3B and 6.2" Config Id CF_VxLTE_INT @@ -599,17 +723,15 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends an SUBSCRIBE containing + 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, Event, - Expires - // TODO To be continued - ; - to the IMS_P_CSCF_A entity + Expires; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends an SUBSCRIBE containing @@ -619,18 +741,14 @@ Package TP_MW_PS { Via indicating value PX_UE_A_VIA, Route indicating value PX_UE_A_SERVICE_ROUTE, Event, - Expires - // TODO To be continued - ; + Expires; to the IMS_S_CSCF_A entity - and the IMS_P_CSCF_A entity sends a 200_Ok containing + 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 - // TODO To be continued - ; - to the UE_A entity + Via indicating value PX_UE_A_VIA; + from the IMS_S_CSCF_A entity } } } // End of TP_MW_PCSCF_SUBSCRIBE_01 @@ -641,12 +759,12 @@ Package TP_MW_PS { // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." + Test objective "Verify that the P-CSCF successfully processes a SUBSCRIBE." Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.3B and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -658,17 +776,15 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends an SUBSCRIBE containing + the IMS_P_CSCF_B 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, Event, - Expires - // TODO To be continued - ; - to the IMS_P_CSCF_B entity + Expires; + from the UE_A entity } then { the IMS_P_CSCF_B entity sends an SUBSCRIBE containing @@ -678,31 +794,168 @@ Package TP_MW_PS { Via indicating value PX_UE_A_VIA, Route indicating value PX_UE_A_SERVICE_ROUTE, Event, - Expires - // TODO To be continued - ; + Expires; to the IMS_S_CSCF_B entity - and the IMS_P_CSCF_B entity sends a 200_Ok containing + and the IMS_P_CSCF_B 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 - // TODO To be continued - ; - to the UE_A entity + Via indicating value PX_UE_A_VIA; + to the IMS_S_CSCF_B entity } } } // End of TP_MW_PCSCF_SUBSCRIBE_02 + Test Purpose { + + TP Id TP_MW_PCSCF_NOTIFY_01 + + Test objective "Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2 and 6.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 isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a NOTIFY containing + From indicating value PX_S_CSCF_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + 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 + } + } + } // End of TP_MW_PCSCF_NOTIFY_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_NOTIFY_02 + + Test objective "Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2 and 6.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 isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a NOTIFY containing + From indicating value PX_S_CSCF_A_SIP_URI, + To indicating value PX_P_CSCF_A_SIP_URI, + Event indicating value "reg,de-reg"; + from the IMS_S_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_PCSCF_NOTIFY_02 + + Test Purpose { + + TP Id TP_MW_PCSCF_NOTIFY_03 + + Test objective "Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_B entity receives a NOTIFY containing + From indicating value PX_S_CSCF_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + Event indicating value "reg,de-reg"; + from the IMS_S_CSCF_B entity + } + then { + the IMS_P_CSCF_A entity sends an NOTIFY containing + Event indicating value "reg,de-reg"; + to the UE_A entity and + the IMS_P_CSCF_A entity receives a 200_Ok + from the UE_A entity + } + } + } // End of TP_MW_PCSCF_NOTIFY_03 + + Test Purpose { + + TP Id TP_MW_PCSCF_200OK_NOTIFY_01 + // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) NOTIFY (IMS Administrative de-registration)." + + Reference + "ETSI TS 124 229 [1], Clause 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok + to the IMS_S_CSCF_A entity + } + } + + } // End of TP_MW_PCSCF_200OK_NOTIFY_01 + Test Purpose { TP Id TP_MW_PCSCF_INVITE_01 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes an initial INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.7.2 and 6.2" Config Id CF_VxLTE_INT @@ -718,7 +971,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends an INVITE containing + 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, @@ -727,11 +980,8 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_P_CSCF_A entity + Version indicating value "0";;; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends an INVITE containing @@ -745,10 +995,7 @@ Package TP_MW_PS { ContentLength, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the IMS_S_CSCF_A entity } } @@ -758,12 +1005,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_INVITE_02 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.7.3 and 6.2" Config Id CF_VxLTE_INT @@ -780,36 +1026,30 @@ Package TP_MW_PS { ensure that { when { the IMS_P_CSCF_B 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, + 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" - // TODO To be continued - ; - ;; + 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_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 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, ContentType indicating value "application/sdp", ContentLength, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the UE_B entity } } @@ -819,14 +1059,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_INVITE_03 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the SUT successfully processes an initial INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.7.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -840,7 +1079,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends an INVITE containing + the IMS_P_CSCF_B 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, @@ -849,11 +1088,8 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_P_CSCF_B entity + Version indicating value "0";;; + from the UE_A entity } then { the IMS_P_CSCF_B entity sends an INVITE containing @@ -867,10 +1103,7 @@ Package TP_MW_PS { ContentLength, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the IMS_S_CSCF_B entity } } @@ -880,20 +1113,19 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_INVITE_04 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.7.3 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE Initial conditions with { the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_A and the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_A } @@ -910,10 +1142,7 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the IMS_S_CSCF_A entity } then { @@ -928,10 +1157,7 @@ Package TP_MW_PS { ContentLength, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the UE_B entity } } @@ -941,13 +1167,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_100TRY_01 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.1 and 6.2" Config Id CF_VxLTE_INT @@ -977,13 +1201,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_100TRY_02 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.2 and 6.2" Config Id CF_VxLTE_INT @@ -1013,15 +1235,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_100TRY_03 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1055,9 +1275,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1085,13 +1305,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_180RINGING_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.1 and 6.2" Config Id CF_VxLTE_INT @@ -1111,11 +1329,7 @@ Package TP_MW_PS { from the IMS_S_CSCF_A entity } then { - the IMS_P_CSCF_A entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; + the IMS_P_CSCF_A entity sends a 180_Ringing to the UE_A entity } } @@ -1125,13 +1339,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_180RINGING_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.2 and 6.2" Config Id CF_VxLTE_INT @@ -1151,11 +1363,7 @@ Package TP_MW_PS { from the UE_B entity } then { - the IMS_P_CSCF_B entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; + the IMS_P_CSCF_B entity sends a 180_Ringing to the IMS_S_CSCF_B entity } } @@ -1171,9 +1379,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.1 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1191,11 +1399,7 @@ Package TP_MW_PS { from the IMS_S_CSCF_B entity } then { - the IMS_P_CSCF_B entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; + the IMS_P_CSCF_B entity sends a 180_Ringing to the UE_A entity } } @@ -1211,9 +1415,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.2.9.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1231,11 +1435,7 @@ Package TP_MW_PS { from the UE_B entity } then { - the IMS_P_CSCF_A entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; + the IMS_P_CSCF_A entity sends a 180_Ringing to the IMS_S_CSCF_A entity } } @@ -1245,13 +1445,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_200OK_01 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -1272,15 +1470,14 @@ Package TP_MW_PS { not PChargingFunctionAddresses, not PPreferredIdentity ; - from the UE_A entity + from the IMS_S_CSCF_A entity } then { the IMS_P_CSCF_A entity sends a 200_Ok containing PChargingVector, PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_S_CSCF_A entity + PPreferredIdentity; + to the UE_A entity } } @@ -1289,13 +1486,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_200OK_02 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -1311,20 +1506,18 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives a 200_Ok containing - 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 + the IMS_P_CSCF_B entity receives a 200_Ok containing PChargingVector, PChargingFunctionAddresses, - PPreferredIdentity - ; - to the UE_A entity + PPreferredIdentity; + from the UE_B entity + } + then { + the IMS_P_CSCF_B entity sends a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + to the IMS_S_CSCF_B entity } } @@ -1339,9 +1532,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1358,16 +1551,14 @@ Package TP_MW_PS { the IMS_P_CSCF_B entity receives a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; from the IMS_S_CSCF_B entity } then { the IMS_P_CSCF_B entity sends a 200_Ok containing PChargingVector, PChargingFunctionAddresses, - PPreferredIdentity - ; + PPreferredIdentity; to the UE_A entity } } @@ -1383,9 +1574,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1402,16 +1593,14 @@ Package TP_MW_PS { the IMS_P_CSCF_A entity receives a 200_Ok containing not PChargingVector, not PChargingFunctionAddresses, - not PPreferredIdentity - ; + not PPreferredIdentity; from the UE_B entity } then { the IMS_P_CSCF_A entity sends a 200_Ok containing PChargingVector, PChargingFunctionAddresses, - PPreferredIdentity - ; + PPreferredIdentity; to the IMS_S_CSCF_A entity } } @@ -1421,13 +1610,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_ACK_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -1443,15 +1630,13 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity receives an ACK containing + 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 - // TODO To be continued - ; - from the IMS_P_CSCF_A entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends an ACK containing @@ -1459,9 +1644,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } } @@ -1471,13 +1654,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_ACK_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -1493,26 +1674,22 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an ACK containing + the IMS_P_CSCF_B 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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_S_CSCF_B entity } then { - the IMS_P_CSCF_A entity sends an ACK containing + 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 - // TODO To be continued - ; - from the UE_A entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_B entity } } @@ -1521,15 +1698,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_ACK_03 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1548,9 +1723,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_P_CSCF_B entity } then { @@ -1559,9 +1732,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_B entity } } @@ -1571,15 +1742,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_ACK_04 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1598,9 +1767,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -1609,9 +1776,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -1621,13 +1786,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_RE_INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1644,7 +1807,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity receives an ReINVITE containing + 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, @@ -1653,14 +1816,11 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_P_CSCF_A entity + Version indicating value "0";;; + from the UE_A entity } then { - the IMS_P_CSCF_A entity receives an ReINVITE containing + 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, @@ -1669,11 +1829,8 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the IMS_S_CSCF_A entity + Version indicating value "0";;; + to the IMS_S_CSCF_A entity } } } // End of TP_MW_PCSCF_RE_INVITE_01 @@ -1681,13 +1838,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_RE_INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" Config Id CF_VxLTE_INT @@ -1713,14 +1868,11 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_S_CSCF_B entity + Version indicating value "0";;; + from the IMS_S_CSCF_B entity } then { - the IMS_P_CSCF_B entity receives an ReINVITE containing + the IMS_P_CSCF_B entity sends 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, @@ -1729,11 +1881,8 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the UE_B entity + Version indicating value "0";;; + to the UE_B entity } } } // End of TP_MW_PCSCF_RE_INVITE_02 @@ -1741,15 +1890,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_RE_INVITE_03 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -1764,7 +1911,7 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity sends an ReINVITE containing + the IMS_P_CSCF_B 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, @@ -1773,14 +1920,11 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_P_CSCF_B entity + Version indicating value "0";;; + from the UE_A entity } then { - the IMS_P_CSCF_B entity sends an ReINVITE containing + the IMS_P_CSCF_B 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, @@ -1789,11 +1933,8 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the IMS_S_CSCF_B entity + Version indicating value "0";;; + to the IMS_S_CSCF_B entity } } } // End of TP_MW_PCSCF_RE_INVITE_03 @@ -1807,9 +1948,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -1833,10 +1974,7 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; to the IMS_S_CSCF_A entity } then { @@ -1849,10 +1987,7 @@ Package TP_MW_PS { PAccessNetworkInfo, MessageBody containing SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; + Version indicating value "0";;; from the UE_B entity } } @@ -1861,13 +1996,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_BYE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Originating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" Config Id CF_VxLTE_INT @@ -1884,15 +2017,13 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the UE_A entity receives an BYE containing + the IMS_P_CSCF_A entity receives an 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 - // TODO To be continued - ; - from the IMS_P_CSCF_A entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity } then { the IMS_P_CSCF_A entity sends an BYE containing @@ -1900,9 +2031,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } } @@ -1912,13 +2041,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_BYE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" Config Id CF_VxLTE_INT @@ -1936,25 +2063,21 @@ Package TP_MW_PS { ensure that { when { the IMS_P_CSCF_B entity receives an 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 - // TODO To be continued - ; + 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 } then { the IMS_P_CSCF_B entity sends an 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 - // TODO To be continued - ; - to the UE_B entity + 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 } } @@ -1963,13 +2086,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_BYE_03 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Originating Network)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" Config Id CF_VxLTE_INT @@ -1994,9 +2115,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_A entity } } @@ -2006,15 +2125,13 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_BYE_04 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a BYE (Originating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -2034,9 +2151,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } then { @@ -2045,9 +2160,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the IMS_S_CSCF_B entity } } @@ -2063,9 +2176,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2085,9 +2198,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_B entity } then { @@ -2096,9 +2207,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } } @@ -2114,9 +2223,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a BYE (Network initiated)." Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2132,18 +2241,53 @@ Package TP_MW_PS { ensure that { when { the IMS_P_CSCF_A entity receives an BYE - // TODO To be continued from the IMS_S_CSCF_A entity } then { the IMS_P_CSCF_A entity sends an BYE - // TODO To be continued from the UE_B entity } } } // End of TP_MW_PCSCF_BYE_06 + Test Purpose { + + TP Id TP_MW_PCSCF_BYE_07 + // ??? from ETSI TS 186 011-2 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a user network detachment (with Previously Established IMS Registration & IMS Sessions)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.1 and 6.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 isRequestedToDetachfromNetwork + } + then { + the IMS_P_CSCF_B entity sends a BYE + to the IMS_S_CSCF_B entity and + the IMS_P_CSCF_B entity receives a 200_Ok + from the IMS_S_CSCF_B entity + } + } + } // End of TP_MW_PCSCF_BYE_07 + Test Purpose { TP Id TP_MW_PCSCF_200OK_BYE_01 @@ -2151,7 +2295,7 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -2172,9 +2316,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -2183,9 +2325,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2199,7 +2339,7 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -2220,9 +2360,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_B entity } then { @@ -2231,9 +2369,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -2247,7 +2383,7 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Network)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -2267,7 +2403,6 @@ Package TP_MW_PS { } then { the IMS_P_CSCF_B entity sends a 200_Ok - // TODO to the IMS_S_CSCF_B entity } } @@ -2281,9 +2416,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -2302,9 +2437,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the IMS_S_CSCF_B entity } then { @@ -2313,9 +2446,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2329,9 +2460,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2350,9 +2481,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -2361,9 +2490,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the UE_B entity } } @@ -2377,9 +2504,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2398,9 +2525,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } then { @@ -2409,9 +2534,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } } @@ -2421,13 +2544,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_CANCEL_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" Config Id CF_VxLTE_INT @@ -2438,7 +2559,7 @@ Package TP_MW_PS { 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 hasAchievedInitialINVITE and the UE_A entity isRequestedToSend a CANCEL } @@ -2450,9 +2571,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_A entity } then { @@ -2461,9 +2580,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } } @@ -2473,13 +2590,11 @@ Package TP_MW_PS { Test Purpose { TP Id TP_MW_PCSCF_CANCEL_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) Test objective "Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" Config Id CF_VxLTE_INT @@ -2490,33 +2605,29 @@ Package TP_MW_PS { 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 hasAchieveInitialINVITE and - the UE_B entity isRequestedToSend a CANCEL + the UE_B entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL } Expected behaviour ensure that { when { - the IMS_P_CSCF_B entity receives an CANCEL containing + 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 - // TODO To be continued - ; - from the UE_B entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_S_CSCF_B entity } then { - the IMS_P_CSCF_B entity sends an CANCEL containing + 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 - // TODO To be continued - ; - to the IMS_S_CSCF_B entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the UE_B entity } } @@ -2531,9 +2642,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a CANCEL (Originating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE @@ -2542,22 +2653,20 @@ Package TP_MW_PS { the UE_B entity isAttachedTo the EPC_B and the UE_A entity isRegisteredTo the IMS_B and the UE_B entity isRegisteredTo the IMS_B and - the UE_A entity hasAchieveInitialINVITE and + the UE_A entity hasAchievedInitialINVITE and the UE_A entity isRequestedToSend a CANCEL } Expected behaviour ensure that { when { - the UE_A entity sends an CANCEL containing + the IMS_P_CSCF_B entity receives an 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 - // TODO To be continued - ; - to the IMS_P_CSCF_B entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity } then { the IMS_P_CSCF_B entity sends an CANCEL containing @@ -2565,10 +2674,8 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; - from the IMS_S_CSCF_B entity + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_S_CSCF_B entity } } @@ -2583,9 +2690,9 @@ Package TP_MW_PS { Test objective "Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg)." Reference - "ETSI TS 124 229 [2], Clause 5.1.3 and Clause 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2594,8 +2701,8 @@ Package TP_MW_PS { the UE_B entity isAttachedTo the EPC_A and the UE_A entity isRegisteredTo the IMS_A and the UE_B entity isRegisteredTo the IMS_A and - the UE_B entity hasAchieveInitialINVITE and - the UE_B entity isRequestedToSend a CANCEL + the UE_B entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL } Expected behaviour @@ -2606,9 +2713,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -2617,9 +2722,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_A_SERVICE_ROUTE; from the UE_B entity } } @@ -2628,13 +2731,12 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_486INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + TP Id TP_MW_PCSCF_486INVITE_01 Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" Config Id CF_VxLTE_INT @@ -2656,9 +2758,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -2667,9 +2767,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2678,13 +2776,12 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_486INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + TP Id TP_MW_PCSCF_486INVITE_02 - Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" Config Id CF_VxLTE_INT @@ -2695,7 +2792,7 @@ Package TP_MW_PS { 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 isBusy + the UE_B entity isBusy } Expected behaviour @@ -2706,9 +2803,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_B entity } then { @@ -2717,9 +2812,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_S_CSCF_B entity } } @@ -2728,22 +2821,22 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_486INVITE_03 + TP Id TP_MW_PCSCF_486INVITE_03 // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_B PICS Selection NONE Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isAttachedTo the EPC_B and the UE_B entity isAttachedTo the EPC_B and - the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isRegisteredTo the IMS_B and the UE_B entity isRegisteredTo the IMS_B and the UE_B entity isBusy } @@ -2751,25 +2844,21 @@ Package TP_MW_PS { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives a 486_INVITE containing + the IMS_P_CSCF_B 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 - // TODO To be continued - ; - from the IMS_S_CSCF_A entity + Route indicating value PX_UE_B_SERVICE_ROUTE; + from the IMS_S_CSCF_B entity } then { - the IMS_P_CSCF_A entity sends a 486_INVITE containing + the IMS_P_CSCF_B 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2778,15 +2867,15 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_486INVITE_04 + TP Id TP_MW_PCSCF_486INVITE_04 // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" - Config Id CF_VxLTE_RMI + Config Id CF_VxLTE_RMI_A PICS Selection NONE @@ -2806,9 +2895,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_A entity } then { @@ -2817,9 +2904,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_S_CSCF_A entity } } @@ -2828,13 +2913,12 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_487INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + TP Id TP_MW_PCSCF_487INVITE_01 - Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (busy) to reject call (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -2845,7 +2929,7 @@ Package TP_MW_PS { 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 isBusy + the UE_A entity isRequestedToSend a CANCEL } Expected behaviour @@ -2856,9 +2940,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the IMS_S_CSCF_A entity } then { @@ -2867,9 +2949,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the UE_A entity } } @@ -2878,13 +2958,12 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_ME_PCSCF_487INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + TP Id TP_MW_PCSCF_487INVITE_02 - Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (busy) to reject call (Originating Leg)." + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg)." Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" Config Id CF_VxLTE_INT @@ -2895,7 +2974,7 @@ Package TP_MW_PS { 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 isBusy + the UE_A entity isRequestedToSend a CANCEL } Expected behaviour @@ -2906,9 +2985,7 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; from the UE_B entity } then { @@ -2917,14 +2994,104 @@ Package TP_MW_PS { 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 - // TODO To be continued - ; + Route indicating value PX_UE_B_SERVICE_ROUTE; to the IMS_S_CSCF_B entity } } } // End of TP_MW_PCSCF_487INVITE_02 + Test Purpose { + + TP Id TP_MW_PCSCF_487INVITE_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 IMS_S_CSCF_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 UE_A entity + } + } + + } // End of TP_MW_PCSCF_487INVITE_03 + + Test Purpose { + + TP Id TP_MW_PCSCF_487INVITE_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 UE_B 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 IMS_S_CSCF_A entity + } + } + + } // End of TP_MW_PCSCF_487INVITE_04 + } // 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 0000000000000000000000000000000000000000..a8cb580aacdf7cd4f95bb039239a2df915fdc455 --- /dev/null +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -0,0 +1,2798 @@ +/* +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; + + Test Purpose { + + TP Id TP_MW_SCSCF_MESSAGE_01 + + Test objective "Verify that the S-CSCF successfully processes a SIP messages greater than 1 300 bytes" + + Reference + "TS 124 229 [1], clause 4.2A" + + 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 + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives a MESSAGE containing + ContentLength indicating value greater than 1_300 bytes; + from the IMS_I_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity forwards the MESSAGE containing + ContentLength indicating value greater than 1_300 bytes; + to the IMS_IBCF_A entity + } + } + } // End of TP_MW_SCSCF_MESSAGE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_01 + + Test objective "Verify that the S-CSCF successfully processes a first registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.3.1.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 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 + } + } + } // End of TP_MW_SCSCF_REGISTER_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_02 + + Test objective "Verify that the S-CSCF successfully processes a full registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.3.1.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 isNotRegisteredTo the IMS_A and + the UE_B entity isNotRegisteredTo the IMS_B and + the UE_A entity hasAchievedFirstREGISTER + } + + 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_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";; + 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 + } + } + } // End of TP_MW_SCSCF_REGISTER_02 + + // TP_MW_SCSCF_REGISTER_03 not applicable + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_04 + + Test objective "Verify that the S-CSCF successfully processes a first registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.3.1.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isNotRegisteredTo the IMS_B and + the UE_B entity isNotRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_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, + PVisitedNetworkID; + from the IMS_I_CSCF_B entity + } + then { + the IMS_S_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, + 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";; + to the IMS_IBCF_B entity + and the IMS_S_CSCF_B 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, + PVisitedNetworkID, + 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_B entity + } + } + } // End of TP_MW_SCSCF_REGISTER_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_05 + + Test objective "Verify that the S-CSCF successfully processes a full registration (Successful)." + + Reference + "ETSI TS 124 229 [1], Clause 5.3.1.2" + + 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_S_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 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", + PVisitedNetworkID;; + from the IMS_I_CSCF_B entity + } + then { + the IMS_S_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 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", + PVisitedNetworkID, + PChargingVector;; + to the IMS_IBCF_B entity + and the IMS_S_CSCF_B 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, + PVisitedNetworkID, + 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_B entity + } + } + } // End of TP_MW_SCSCF_REGISTER_05 + + // TP_MW_SCSCF_REGISTER_06 not applicable + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_07 + + Test objective "Verify that the S-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.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 + } + + 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 200_OK + to the IMS_I_CSCF_A entity + } + } + } // End of TP_MW_SCSCF_REGISTER_07 + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_08 + + Test objective "Verify that the S-CSCF successfully processes a user de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.1.5 and 6.3" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_IBCF_A entity receives a REGISTER containing + Expire indicating value 0 + ; + from the IMS_IBCF_B entity + } + then { + the IMS_IBCF_A entity forwards a REGISTER containing + Expire indicating value 0; + to the IMS_I_CSCF_A entity + and the IMS_I_CSCF_A entity forwards a REGISTER containing + Expire indicating value 0; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_MW_SCSCF_REGISTER_08 + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_10 + + Test objective "Verify that the S-CSCF successfully processes a user de-registration (with SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 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 + } + } + } // End of TP_MW_SCSCF_REGISTER_10 + + // TP_MW_SCSCF_REGISTER_11 not applicable + + Test Purpose { + + TP Id TP_MW_SCSCF_REGISTER_12 + // ??? from ETSI TS 186 011-2 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a network de-registration (no SIP session active)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives a REGISTER containing + From indicating value PX_IMS_P_CSCF_B_SIP_URI, + To indicating value PX_I_CSCF_A_SIP_URI, + Event indicating value "reg,de-reg", + Expire indicating value 0; + from the IMS_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity forwards a REGISTER + to the IMS_IBCF_B entity + } + } + } // End of TP_MW_SCSCF_REGISTER_12 + + Test Purpose { + + TP Id TP_MW_SCSCF_SUBSCRIBE_01 + + Test objective "Verify that the S-CSCF successfully processes a SUBSCRIBE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.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 + } + + 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, + Event, + Expires; + from the IMS_P_CSCF_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; + to the IMS_P_CSCF_A entity + } + } + } // End of TP_MW_SCSCF_SUBSCRIBE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_SUBSCRIBE_02 + + Test objective "Verify that the S-CSCF successfully processes a SUBSCRIBE." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.2 and 6.3" + + 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 isRegisteredTo the IMS_B + } + + 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, + Event, + Expires; + to the IMS_IBCF_A entity + } + then { + the IMS_S_CSCF_B 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 IMS_IBCF_A entity + } + } + } // End of TP_MW_SCSCF_SUBSCRIBE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_NOTIFY_01 + + Test objective "Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2, 6.1.1 and 6.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 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 + } + } + } // End of TP_MW_SCSCF_NOTIFY_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_NOTIFY_02 + + Test objective "Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2, 6.1.1 and 6.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 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 "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 + } + } + } // End of TP_MW_SCSCF_NOTIFY_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_NOTIFY_03 + + Test objective "Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives a NOTIFY containing + From indicating value PX_S_CSCF_A_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + Event indicating value "reg,de-reg"; + from the IMS_IBCF_B entity + } + then { + the IMS_S_CSCF_B entity sends an NOTIFY containing + Event indicating value "reg,de-reg"; + to the IMS_P_CSCF_B entity and + the IMS_S_CSCF_B entity receives a 200_Ok + from the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_SCSCF_NOTIFY_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_NOTIFY_04 + + Test objective "Verify that the S-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.5.2 and 6.2" + + 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 isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives a NOTIFY containing + From indicating value PX_A_CSCF_A_SIP_URI, + To indicating value PX_P_CSCF_B_SIP_URI, + Event indicating value "reg,de-reg"; + from the IMS_IBCF_B entity + } + then { + the IMS_S_CSCF_B entity sends an NOTIFY containing + Event indicating value "reg,de-reg"; + to the IMS_P_CSCF_B entity and + the IMS_S_CSCF_B entity receives a 200_Ok + from the IMS_P_CSCF_B entity + } + } + } // End of TP_MW_SCSCF_NOTIFY_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_INVITE_01 + + Test objective "Verify that the S-CSCF successfully processes an initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.1 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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, + ContentType indicating value "application/sdp", + ContentLength, + MessageBody containing + SDP containing + Version indicating value "0";;; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_INVITE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_INVITE_02 + + Test objective "Verify that the S-CSCF successfully processes an initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.1 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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_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_IBCF_B entity + } + then { + the IMS_S_CSCF_B 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, + ContentType indicating value "application/sdp", + ContentLength, + MessageBody containing + SDP containing + Version indicating value "0";;; + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_INVITE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_INVITE_03 + // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes an initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.1 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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_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_B entity + } + then { + the IMS_S_CSCF_B 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, + ContentType indicating value "application/sdp", + ContentLength, + MessageBody containing + SDP containing + Version indicating value "0";;; + to the IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_INVITE_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_INVITE_04 + // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes an initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.3.2.1 and 5.3.2.1A" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + 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_IBCF_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, + ContentType indicating value "application/sdp", + ContentLength, + MessageBody containing + SDP containing + Version indicating value "0";;; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_INVITE_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_100TRY_01 + + Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 sends a 100_Trying + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_100TRY_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_100TRY_02 + // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + } + } + + } // End of TP_MW_SCSCF_100TRY_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_100TRY_03 + // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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_IBCF_B entity + } + then { + the IMS_S_CSCF_B entity sends a 100_Trying + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_100TRY_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_100TRY_04 + // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives a 100_Trying + from the IMS_P_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a 100_Trying + to the IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_100TRY_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_180RINGING_01 + + Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + from the IMS_IBCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a 180_Ringing containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_180RINGING_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_180RINGING_02 + + Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + from the IMS_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity sends a 180_Ringing containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_180RINGING_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_180RINGING_03 + + Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives a 180_Ringing + from the IMS_IBCF_B entity + } + then { + the IMS_S_CSCF_B entity sends a 180_Ringing + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_180RINGING_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_180RINGING_04 + + Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.4.4.2.2 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives a 180_Ringing + from the IMS_P_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a 180_Ringing + to the IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_180RINGING_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_01 + + Test objective "Verify that the S-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity + ; + from the IMS_IBCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a 200_Ok containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_200OK_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_02 + + Test objective "Verify that the S-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity + ; + from the IMS_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity sends a 200_Ok containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_200OK_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the IMS_IBCF_B entity + } + then { + the IMS_S_CSCF_B entity sends a 200_Ok containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_200OK_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the IMS_P_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity sends a 200_Ok containing + PChargingVector, + PChargingFunctionAddresses, + PPreferredIdentity; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_200OK_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_ACK_01 + + Test objective "Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 IMS_S_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 + } + } + + } // End of TP_MW_SCSCF_ACK_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_ACK_02 + + Test objective "Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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_IBCF_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_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_ACK_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_ACK_03 + // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B 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_B entity + } + then { + the IMS_S_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; + from the IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_ACK_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_ACK_04 + // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + 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_IBCF_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_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_ACK_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_RE_INVITE_01 + + Test objective "Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 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";;; + to the IMS_S_CSCF_A entity + } + then { + the IMS_S_CSCF_A 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_IBCF_A entity + } + } + } // End of TP_MW_SCSCF_RE_INVITE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_RE_INVITE_02 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_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";;; + to the IMS_IBCF_B entity + } + then { + the IMS_S_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_P_CSCF_B entity + } + } + } // End of TP_MW_SCSCF_RE_INVITE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_RE_INVITE_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 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_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity sends 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_IBCF_B entity + } + } + } // End of TP_MW_SCSCF_RE_INVITE_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_RE_INVITE_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.1.3 and 6.1.1" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_B entity previouslyEstablishedCallWith the UE_A + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A 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";;; + to the IMS_IBCF_A entity + } + then { + the IMS_S_CSCF_A 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_P_CSCF_A entity + } + } + } // End of TP_MW_SCSCF_RE_INVITE_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_01 + + Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 an 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 an 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; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_BYE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_02 + + Test objective "Verify that the S-CSCF successfully processes a BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 an 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_B entity + } + then { + the IMS_S_CSCF_B entity sends an 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; + to the IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_BYE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_03 + + Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Network)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.1 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isNoLongerAvailable + } + then { + the IMS_S_CSCF_A entity sends an 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 an 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 + } + } + + } // End of TP_MW_SCSCF_BYE_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_04 + + Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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 an 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_B entity + } + then { + the IMS_S_CSCF_B entity sends an 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; + to the IMS_I_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_BYE_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_05 + + Test objective "Verify that the S-CSCF successfully processes a BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.2 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedCallWith the UE_B + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives an 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_A entity + } + then { + the IMS_S_CSCF_A entity sends an 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; + to the IMS_I_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_BYE_05 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_06 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Network)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.1 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A + } + + Expected behaviour + ensure that { + when { + the UE_B entity isNoLongerAvailable + } + then { + the IMS_S_CSCF_A entity sends an 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; + to the IMS_P_CSCF_A entity + and the IMS_S_CSCF_A entity sends an 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; + to the IMS_I_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_BYE_06 + + Test Purpose { + + TP Id TP_MW_SCSCF_BYE_07 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a BYE (IMS De-registration with Active SIP Sessions)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5, 5.4.5.1 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A + } + + Expected behaviour + ensure that { + when { + the UE_B entity isNoLongerAvailable + } + 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; + to the IMS_P_CSCF_A entity + and 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; + to the IMS_I_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_BYE_07 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_BYE_01 + + Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Originating Leg/Originating Network)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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_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 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; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_200OK_BYE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_BYE_02 + + Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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_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 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; + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_200OK_BYE_02 + + // TP_MW_SCSCF_200OK_BYE_03 not applicable, re-use TP_MW_SCSCF_200OK_BYE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_BYE_04 + + Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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; + from the IMS_IBCF_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_A_VIA, + Route indicating value PX_UE_B_SERVICE_ROUTE; + to the IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_200OK_BYE_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_200OK_BYE_05 + + Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Terminating Leg/Originating Network)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A + } + + 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; + 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; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_200OK_BYE_05 + + // TP_MW_SCSCF_200OK_BYE_06 Not applicable, re-use TP_MW_SCSCF_200OK_BYE_05 + + Test Purpose { + + TP Id TP_MW_SCSCF_CANCEL_01 + + Test objective "Verify that the S-CSCF successfully processes a CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 IMS_P_CSCF_A entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives an 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_P_CSCF_A entity + } + then { + the IMS_S_CSCF_A entity sends an 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_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_CANCEL_02 + + Test objective "Verify that the S-CSCF successfully processes a CANCEL (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 IMS_P_CSCF_B entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives an 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 an 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 + } + } + + } // End of TP_MW_SCSCF_CANCEL_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_CANCEL_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_A entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B entity receives an 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_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B entity sends an 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_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_CANCEL_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_CANCEL_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) + + Test objective "Verify that the S-CSCF successfully processes a CANCEL (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_B entity hasAchievedInitialINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_A entity receives an 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_A entity + } + then { + the IMS_S_CSCF_A entity sends an 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_A entity + } + } + + } // End of TP_MW_SCSCF_CANCEL_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_486INVITE_01 + + Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 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 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 IMS_P_CSCF_A entity + } + } + + } // End of TP_MW_SCSCF_486INVITE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_486INVITE_02 + + Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 isBusy + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B 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_P_CSCF_B entity + } + then { + the IMS_S_CSCF_B 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 IMS_IBCF_B entity + } + } + + } // End of TP_MW_SCSCF_486INVITE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_486INVITE_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B and + the UE_B entity isRegisteredTo the IMS_B and + the UE_B entity isBusy + } + + Expected behaviour + ensure that { + when { + the IMS_S_CSCF_B 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_B entity + } + then { + the IMS_S_CSCF_B 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 IMS_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_486INVITE_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_486INVITE_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_A + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_B entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_B entity isRegisteredTo the IMS_A and + the UE_A 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_P_CSCF_A entity + } + then { + the IMS_S_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 IMS_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_486INVITE_04 + + Test Purpose { + + TP Id TP_MW_SCSCF_487INVITE_01 + + Test objective "Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + } + } + + } // End of TP_MW_SCSCF_487INVITE_01 + + Test Purpose { + + TP Id TP_MW_SCSCF_487INVITE_02 + + Test objective "Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + 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 + } + } + + } // End of TP_MW_SCSCF_487INVITE_02 + + Test Purpose { + + TP Id TP_MW_SCSCF_487INVITE_03 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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_IBCF_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_P_CSCF_B entity + } + } + + } // End of TP_MW_SCSCF_487INVITE_03 + + Test Purpose { + + TP Id TP_MW_SCSCF_487INVITE_04 + // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) + + Test objective "Verify that the S-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.3" + + Config Id CF_VxLTE_RMI_B + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_B entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_B 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_P_CSCF_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_IBCF_A entity + } + } + + } // End of TP_MW_SCSCF_487INVITE_04 + +} // End of Package TP_MW_SI + diff --git a/test_purposes/Mw/TP_MW_SS.tplan2 b/test_purposes/Mw/TP_MW_SS.tplan2 deleted file mode 100644 index e8c28f8ada89e708b2d05a25bad93dfb90582098..0000000000000000000000000000000000000000 --- a/test_purposes/Mw/TP_MW_SS.tplan2 +++ /dev/null @@ -1,1920 +0,0 @@ -/* -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/S-CSCF */ -Package TP_MW_SI { - - import all from Sip_Common; - - Test Purpose { - - TP Id TP_MW_SCSCF_MESSAGE_01 - // TP_IMS_4002_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_GEN_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a SIP messages greater than 1 500 bytes" - - Reference - "TS 124 229 (V15.6.0) [1], clause 4.2A" - - 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 - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends a MESSAGE - containing ContentLength indicating value greater than 1500 bytes - ; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity forwards the MESSAGE - to the IMS_I_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_MESSAGE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_01 - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA - ; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_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_HDR indicating value "path", - Supported indicating value "path" - ;; - to the IMS_I_CSCF_A entity - and the IMS_S_CSCF_A entity sends an 401_Unauthorized containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Path, - Warning, - PAccessNetworkInfo, - WwwAuthenticate containing - Digest, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth" - ;; - to the IMS_P_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_REGISTER_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_02 - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a full registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B and - the IMS_P_CSCF_A entity hasAchieveFirstREGISTER - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth" - ;; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth", - PChargingVector - ;; - to the IMS_I_CSCF_A entity - and the IMS_S_CSCF_A entity sends an 200_Ok containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - AuthenticationInfo, - PAccessNetworkInfo, - PAssociatedURI indicating value PX_UA_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_P_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_REGISTER_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_03 - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a invalid first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.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 isNotRegisteredTo the IMS_A and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Schema indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_INVALID_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "" - ;; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_INVALID_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth", - PChargingVector - ;; - to the IMS_I_CSCF_A entity - and the IMS_S_CSCF_A entity sends an 404_NotFound containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID - ; - to the IMS_P_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_REGISTER_03 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_04 - // TP_IMS_5005_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - PVisitedNetworkID - ; - to the IMS_S_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_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_HDR indicating value "path", - Supported indicating value "path" - ;; - to the IMS_I_CSCF_B entity - and the IMS_S_CSCF_B entity sends an 401_Unauthorized containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Path, - Warning, - PAccessNetworkInfo, - PVisitedNetworkID, - WwwAuthenticate containing - Digest, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth" - ;; - to the IMS_P_CSCF_B entity - } - } - } // End of TP_MW_SCSCF_REGISTER_04 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_05 - // TP_IMS_5092_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_08 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a full registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B and - the IMS_P_CSCF_A entity hasAchieveFirstREGISTER - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth" - ;; - to the IMS_S_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth", - PChargingVector - ;; - to the IMS_I_CSCF_B entity - and the IMS_S_CSCF_B entity sends an 200_Ok containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - AuthenticationInfo, - PAccessNetworkInfo, - PAssociatedURI indicating value PX_UA_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_P_CSCF_B entity - } - } - } // End of TP_MW_SCSCF_REGISTER_05 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_06 - // TP_IMST2_MW_REG_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a invalid first registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.1, 5.2.2 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isNotRegisteredTo the IMS_B and - the UE_B entity isNotRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Schema indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_INVALID_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "" - ;; - to the IMS_S_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends a REGISTER containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Authorization containing - Authentication_Scheme indicating value PX_TO_BE_DEFINED, - Authentication_URI indicating value PX_TO_BE_DEFINED, - Username indicating value PX_UA_A_INVALID_USERNAME, - Realm indicating value PX_UA_A_REALM, - Algorithm indicating value PX_UA_A_AUTH_ALG, - Nonce indicating value "not empty", - qop indicating value "auth", - PChargingVector - ;; - to the IMS_I_CSCF_B entity - and the IMS_S_CSCF_B entity sends an 404_NotFound containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_A_CALLID - ; - to the IMS_P_CSCF_B entity - } - } - } // End of TP_MW_SCSCF_REGISTER_06 - - Test Purpose { - - TP Id TP_MW_SCSCF_REGISTER_07 - // ??? from ETSI TS 186 011-2 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a network de-registration." - - Reference - "ETSI TS 124 229 [2], clauses 5.1.1 and 6.1.1" - - 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 - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends a REGISTER containing - Expire indicating value 0 - ; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity forwards a REGISTER containing - Expire indicating value 0 - ; - to the IMS_I_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_REGISTER_07 - - Test Purpose { - - TP Id TP_MW_SCSCF_SUBSCRIBE_01 - // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.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 isRegisteredTo the IMS_A - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity sends an SUBSCRIBE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - Event, - Expires - // TODO To be continued - ; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an SUBSCRIBE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - Event, - Expires - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - and the IMS_S_CSCF_A entity sends a 200_Ok containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_SUBSCRIBE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_SUBSCRIBE_02 - // TP_IMS_5044_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_REG_14 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes a SUBSCRIBE." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.3 and 6.2" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_B entity sends an SUBSCRIBE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - Event, - Expires - // TODO To be continued - ; - to the IMS_S_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends an SUBSCRIBE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - Event, - Expires - // TODO To be continued - ; - to the IMS_I_CSCF_B entity - and the IMS_S_CSCF_B entity sends a 200_Ok containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA - // TODO To be continued - ; - to the IMS_P_CSCF_B entity - } - } - } // End of TP_MW_SCSCF_SUBSCRIBE_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_INVITE_01 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the SUT successfully processes an initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 sends an INVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an INVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - ContentType indicating value "application/sdp", - ContentLength, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_INVITE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_INVITE_02 - // TP_IMST2_MW_INI_05 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes an initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the IMS_I_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends an INVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - ContentType indicating value "application/sdp", - ContentLength, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_P_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_INVITE_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_100TRY_01 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 100_Trying - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_100TRY_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_100TRY_02 - // TP_IMS_5070_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_01 from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_I_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_100TRY_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_180RINGING_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 - from the IMS_I_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_180RINGING_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_180RINGING_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_03A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 - from the IMS_P_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends a 180_Ringing containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_180RINGING_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_01 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 - not PChargingVector, - not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the IMS_P_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 200_Ok containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_200OK_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_02 - // TP_IMS_5055_02 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // TP_IMST2_MW_INI_04A from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 - not PChargingVector, - not PChargingFunctionAddresses, - not PPreferredIdentity - ; - from the IMS_I_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 200_Ok containing - PChargingVector, - PChargingFunctionAddresses, - PPreferredIdentity - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_200OK_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_ACK_01 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an ACK containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_ACK_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_ACK_02 - // TP_IMS_5055_01 from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_I_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an ACK containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_ACK_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_RE_INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_P_CSCF_A entity previouslyEstablishedCallWith the IMS_P_CSCF_B - } - - Expected behaviour - ensure that { - when { - the IMS_P_CSCF_A entity receives an ReINVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity receives an ReINVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the IMS_I_CSCF_A entity - } - } - } // End of TP_MW_SCSCF_RE_INVITE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_RE_INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes an initial RE-INVITE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.1.3 and 6.1.1" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_B entity receives an ReINVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - to the IMS_I_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity receives an ReINVITE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE, - PAccessNetworkInfo, - MessageBody containing - SDP containing - Version indicating value "0" - // TODO To be continued - ; - ;; - from the IMS_P_CSCF_B entity - } - } - } // End of TP_MW_SCSCF_RE_INVITE_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_S_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_BYE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_I_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_P_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_BYE_02 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_03 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Network)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.1, Clause 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A - } - - Expected behaviour - ensure that { - when { - the UE_A entity isNoLongerAvailable - } - then { - the IMS_S_CSCF_A entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - and the IMS_S_CSCF_A entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_BYE_03 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_04 - - Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_B and - the UE_B entity isAttachedTo the EPC_B and - the UE_A entity isRegisteredTo the IMS_B 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 an 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 - // TODO To be continued - ; - from the IMS_P_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends an 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 - // TODO To be continued - ; - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_BYE_04 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_05 - - Test objective "Verify that the S-CSCF successfully processes a BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.2, Clause 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the UE_A entity previouslyEstablishedCallWith the UE_B - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A entity receives an 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 - // TODO To be continued - ; - from the IMS_P_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an 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 - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_BYE_05 - - Test Purpose { - - TP Id TP_MW_SCSCF_BYE_06 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a BYE (Originating Network)." - - Reference - "ETSI TS 124 229 [2], ETIS TS 124 229 [2] Clause 5.1.5, Clause 5.4.5.1, Clause 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A and - the IMS_P_CSCF_B entity previouslyEstablishedCallWith the IMS_P_CSCF_A - } - - Expected behaviour - ensure that { - when { - the UE_B entity isNoLongerAvailable - } - then { - the IMS_S_CSCF_A entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - and the IMS_S_CSCF_A entity sends an BYE containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_BYE_06 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_BYE_01 - - Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Originating Leg/Originating Network)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_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 - // TODO To be continued - ; - from the IMS_I_CSCF_A entity - } - then { - the IMS_S_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 - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_200OK_BYE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_BYE_02 - - Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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_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 - // TODO To be continued - ; - from the IMS_I_CSCF_B entity - } - then { - the IMS_S_CSCF_B 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 - // TODO To be continued - ; - to the IMS_P_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_200OK_BYE_02 - - // TP_MW_SCSCF_200OK_BYE_03 not applicable, re-use TP_MW_SCSCF_200OK_BYE_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_BYE_04 - - Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_B and - the UE_B entity isAttachedTo the EPC_B and - the UE_A entity isRegisteredTo the IMS_B 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 - // TODO To be continued - ; - from the IMS_I_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_A_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_P_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_200OK_BYE_04 - - Test Purpose { - - TP Id TP_MW_SCSCF_200OK_BYE_05 - - Test objective "Verify that the S-CSCF successfully processes a 200 (OK) BYE (Terminating Leg/Originating Network)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.3" - - Config Id CF_VxLTE_RMI - - PICS Selection NONE - - Initial conditions with { - the UE_A entity isAttachedTo the EPC_A and - the UE_B entity isAttachedTo the EPC_A and - the UE_A entity isRegisteredTo the IMS_A and - the UE_B entity isRegisteredTo the IMS_A - } - - 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 - // TODO To be continued - ; - from the IMS_I_CSCF_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 - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_200OK_BYE_05 - - // TP_MW_SCSCF_200OK_BYE_06 Not applicable, re-use TP_MW_SCSCF_200OK_BYE_05 - - Test Purpose { - - TP Id TP_MW_SCSCF_CANCEL_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a CANCEL (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_P_CSCF_A entity hasAchieveInitialINVITE and - the UE_A entity isRequestedToSend a CANCEL - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A entity receives an CANCEL containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_P_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends an CANCEL containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_CANCEL_01 - - Test Purpose { - - TP Id TP_MW_SCSCF_CANCEL_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - // ??? from ETSI TS 102 790-2 V3.1.1 (2014-07) - - Test objective "Verify that the S-CSCF successfully processes a CANCEL (Terminating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 IMS_P_CSCF_B entity hasAchieveInitialINVITE and - the UE_B entity isRequestedToSend a CANCEL - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_B entity receives an CANCEL containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_P_CSCF_B entity - } - then { - the IMS_S_CSCF_B entity sends an CANCEL containing - From indicating value PX_UA_A_SIP_URI, - To indicating value PX_UA_B_SIP_URI, - CallId indicating value PX_UA_A_CALLID, - Via indicating value PX_UA_A_VIA, - Route indicating value PX_UA_A_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_B entity - } - } - - } // End of TP_MW_SCSCF_CANCEL_02 - - Test Purpose { - - TP Id TP_ME_PCSCF_486INVITE_01 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - - Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 isBusy - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A entity receives a 486_INVITE containing - From indicating value PX_UA_B_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_B_CALLID, - Via indicating value PX_UA_B_VIA, - Route indicating value PX_UA_B_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_I_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 486_INVITE containing - From indicating value PX_UA_B_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_B_CALLID, - Via indicating value PX_UA_B_VIA, - Route indicating value PX_UA_B_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_P_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_486INVITE_01 - - Test Purpose { - - TP Id TP_ME_PCSCF_486INVITE_02 - // ??? from ETSI TS 186 011-1 V5.1.1 (2013-10) - - Test objective "Verify that the S-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg)." - - Reference - "ETSI TS 124 229 [2], clauses 5.2.7 and 6.2" - - Config Id CF_VxLTE_INT - - PICS Selection NONE - - 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 isBusy - } - - Expected behaviour - ensure that { - when { - the IMS_S_CSCF_A entity receives a 486_INVITE containing - From indicating value PX_UA_B_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_B_CALLID, - Via indicating value PX_UA_B_VIA, - Route indicating value PX_UA_B_SERVICE_ROUTE - // TODO To be continued - ; - from the IMS_P_CSCF_A entity - } - then { - the IMS_S_CSCF_A entity sends a 486_INVITE containing - From indicating value PX_UA_B_SIP_URI, - To indicating value PX_UA_A_SIP_URI, - CallId indicating value PX_UA_B_CALLID, - Via indicating value PX_UA_B_VIA, - Route indicating value PX_UA_B_SERVICE_ROUTE - // TODO To be continued - ; - to the IMS_I_CSCF_A entity - } - } - - } // End of TP_MW_SCSCF_486INVITE_02 - -} // End of Package TP_MW_SI - diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..7a5122eef25ea4c1aadef9638ce613d49dd36484 --- /dev/null +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -0,0 +1,260 @@ +/* +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; + + Test Purpose { + TP Id TP_RTP_UE_01 + // TP_EPC_6003_01 from TS 103 029 V5.1.1 + Test objective "Verify that media between UE_A and UE_B is not delivered in any direction before call establishment." + + Reference + "TS 124 229 [1], clause 6" + + 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_B entity isAttachedTo the EPC_B and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity not receive media from the UE_A entity and + the UE_A entity not receive media from the UE_B entity + } + + } + } // End of TP_RTP_UE_01 + + Test Purpose { + TP Id TP_RTP_UE_02 + // TP_EPC_6032_01 from TS 103 029 V5.1.1 + Test objective "Verify that early media is delivered from UE_B to UE_A. " + + Reference + "TS 124 229 [1], clause 6" + + 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_B entity isAttachedTo the EPC_B and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity not receive media from the UE_A entity and + the UE_A entity receives media from the UE_B entity + } + + } + } // End of TP_RTP_UE_02 + + Test Purpose { + TP Id TP_RTP_UE_03 + // TP_EPC_6030_01 from TS 103 029 V5.1.1 + Test objective "Verify that media between UE_A and UE_B is successfully routed." + + Reference + "TS 124 229 [1], clause 6" + + 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_B entity isAttachedTo the EPC_B and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity receives media from the UE_A entity and + the UE_A entity receives media from the UE_B entity + } + + } + } // End of TP_RTP_UE_03 + + Test Purpose { + TP Id TP_RTP_UE_04 + // TP_EPC_6003_01 from TS 103 029 V5.1.1 + Test objective "Verify that media between UE_A and UE_B is not delivered in any direction before call establishment." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VxLTE_RMI + + 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_B entity isAttachedTo the EPC_A and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity not receive media from the UE_A entity and + the UE_A entity not receive media from the UE_B entity + } + + } + } // End of TP_RTP_UE_04 + + Test Purpose { + TP Id TP_RTP_UE_05 + // TP_EPC_6032_01 from TS 103 029 V5.1.1 + Test objective "Verify that early media is delivered from UE_B to UE_A. " + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VxLTE_RMI + + 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_B entity isAttachedTo the EPC_A and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity not receive media from the UE_A entity and + the UE_A entity receives media from the UE_B entity + } + + } + } // End of TP_RTP_UE_05 + + Test Purpose { + TP Id TP_RTP_UE_06 + // TP_EPC_6030_01 from TS 103 029 V5.1.1 + Test objective "Verify that media between UE_A and UE_B is successfully routed." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VxLTE_RMI + + 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_B entity isAttachedTo the EPC_A and + the UE_B entity isRegisteredTo the IMS_B + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the UE_B entity and + the UE_B entity sends packets to the UE_A entity + } + then { + the UE_B entity receives media from the UE_A entity and + the UE_A entity receives media from the UE_B entity + } + + } + } // End of TP_RTP_UE_06 + + + Test Purpose { + TP Id TP_SIG_UE_01 + // TP_EPC_6001_01 from TS 103 029 V5.1.1 + Test objective "Verify that IMS registration is possible over default bearer." + + Reference + "TS 129 328 [12], clause 6.1.1.1" + + 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 + } + + Expected behaviour + ensure that { + when { + the UE_A entity completes initial_network_attachment + to the EPC_PGW_A entity + } + then { + the UE_A entity sends the data containing + "IPv4_address of UE_A or + IPv6_address of UE_A or + (IPv4_address and IPv6_address) of UE_A" + DNS_information + P_CSCF_information + "indicating value P-CSCF-IP_address or + indicating value P-CSCF-FQDN_address"; + to the EPC_PGW_A entity + } + } + } // End of TP_SIG_UE_01 + + +} // End of Package TP_RTP diff --git a/test_purposes/Rtp_Common.tplan2 b/test_purposes/Rtp_Common.tplan2 new file mode 100644 index 0000000000000000000000000000000000000000..7da1861d962dcfc8c15d262bca411195edd9c381 --- /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 index ce4c141856b044b2614bb822c2630c63d2118765..55d5cc99f835c46d5f0000a145cda136158aa250 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -25,7 +25,7 @@ Package TP_RX { Test objective "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow sends AA-Answer." Reference - "TS 129 214 (V15.6.0) [8], clause A.8, 4.4.5a and Annex B" + "TS 129 214 [8], clauses A.8, 4.4.5a and Annex B" Config Id CF_VxLTE_INT @@ -45,36 +45,21 @@ Package TP_RX { 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 - indicating value - "permit_in_ip from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) or - permit_in_udp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) or - permit_in_tcp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number)", - Flow_Description_AVP - indicating value - "permit_out_ip from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address or - permit_out_udp from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address or - permit_out_tcp from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address", - Flow_Usage_AVP - indicating value AF_SIGNALING, - Flow_Status_AVP - indicating value ENABLED, - AF_Signalling_Protocol_AVP - indicating value SIP - ; - ; - ;, - IP_CAN_AVP - indicating value "Current_IP_CAN_Type of UE_A", - RAT_Type_AVP - indicating value "Current_RAT_Type of UE_A" - ; + 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_SIGNALLING, +// 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 } } @@ -86,7 +71,7 @@ Package TP_RX { Test objective "Verify that IUT sends AA-Answer after RAA is received from PGW." Reference - "TS 129 214 (V15.6.0) [8], clause A.8" + "TS 129 214 [8], clause A.8" Config Id CF_VxLTE_INT @@ -106,16 +91,41 @@ Package TP_RX { then { the EPC_PCRF_A entity sends the AAA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS "(2001)" - Acceptable_Service_Info_AVP containing - "one or more" Media_Component_Description_AVP - indicating value "derived from AA-Request" - ; - ; + indicating value DIAMETER_SUCCESS "(2001)"; to the IMS_P_CSCF_A entity } } } // End of TP_RX_PCRF_AAA_02 + + Test Purpose { + TP Id TP_RX_PCRF_AAA_03 + //TP_EPC_8001_09 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives AA-Answer from home PCRF and it sends AA-Answer towards visited P-CSCF." + + Reference + "TS 129 214 [8], clauses 4.4.5a, A.8 and annex B" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_RX_PCRF_AAA_03 Test Purpose { TP Id TP_RX_PCSCF_AAR_01 @@ -123,7 +133,7 @@ Package TP_RX { Test objective "Verify that IUT after 2XX_Response on REGISTER sends an AA-Request due to provisioning of AF Signalling flow." Reference - "TS 129 214 (V15.6.0) [8], clause A.8, 4.4.5a and Annex B" + "TS 129 214 [8], clauses A.8, 4.4.5a and Annex B" Config Id CF_VxLTE_INT @@ -137,7 +147,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_S_CSCF_A entity sends an 200_Response_REGISTER + the IMS_S_CSCF_A entity sends a 200_Response_REGISTER to the IMS_P_CSCF_A entity } then { @@ -152,25 +162,13 @@ Package TP_RX { Media_Component_Number_AVP indicating value 0, Media_Sub_Component_AVP containing - Flow_Description_AVP - indicating value - "permit_in_ip from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) or - permit_in_udp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) or - permit_in_tcp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number))", Flow_Description_AVP - indicating value - "permit_out_ip from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address or - permit_out_udp from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address or - permit_out_tcp from (P-CSCF-IP_address P-CSCF_port_number) to UE_A-IP_address)", Flow_Usage_AVP - indicating value AF_SIGNALING, + indicating value AF_SIGNALLING, Flow_Status_AVP indicating value ENABLED, AF_Signalling_Protocol_AVP - indicating value SIP - ; - ; - ; + indicating value SIP;;; to the EPC_PCRF_A entity } } @@ -182,7 +180,7 @@ Package TP_RX { Test objective "IUT does not send AA-Request if 4XX_Response REGISTER is received." Reference - "TS 129 214 (V15.6.0) [8], clause A.8" + "TS 129 214 [8], clause A.8" Config Id CF_VxLTE_INT @@ -212,7 +210,7 @@ Package TP_RX { Test objective "Verify that IUT send AA-Request in case of session establishment for originating side after INVITE is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -235,19 +233,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP - ; - ; + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value INITIAL_REQUEST '(0)', + Service_Info_Status_AVP + indicating value PRELIMINARY_SERVICE_INFORMATION '(1)' + ; to the EPC_PCRF_A entity } } @@ -256,11 +247,11 @@ Package TP_RX { Test Purpose { TP Id TP_RX_PCSCF_AAR_04 //TP_EPC_7002_06 from TS 103 029 V5.1.1 - Test objective "Verify that IUT send AA-Request in case of session establishment for originating side after 180 Ringing with SDP is received." + Test objective "Verify that IUT send AA-Request in case of session establishment for originating side after 183 response with SDP is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" - + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" + Config Id CF_VxLTE_INT PICS Selection NONE @@ -273,7 +264,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 180_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a 183_Response_INVITE_with_SDP_offer from the IMS_S_CSCF_A entity } then { @@ -282,21 +273,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value FINAL_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -304,11 +286,11 @@ Package TP_RX { Test Purpose { TP Id TP_RX_PCSCF_AAR_05 - //TP_EPC_7002_08 from TS 103 029 V5.1.1 - Test objective "Verify that IUT send AA-Request in case of session establishment for originating side after 200 OK with SDP is received." + //TP_EPC_7002_08 from TS 103 029 V5.1.1 - updated due to validation + Test objective "Verify that IUT send AA-Request in case of session modification for originating side after reINVITE with SDP is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -322,7 +304,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 200_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a reINVITE_with_SDP_offer from the IMS_S_CSCF_A entity } then { @@ -331,21 +313,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value PRELIMINARY_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -357,7 +330,7 @@ Package TP_RX { Test objective "Verify that IUT send AA-Request in case of session establishment for terminating side after INVITE is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -380,19 +353,12 @@ Package TP_RX { 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_UL_AVP - RS_Bandwidth_AVP - Codec_Data_AVP - "one or more" Media_Subcomponent_Description_AVP - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value INITIAL_REQUEST '(0)', + Service_Info_Status_AVP + indicating value PRELIMINARY_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -401,10 +367,10 @@ Package TP_RX { Test Purpose { TP Id TP_RX_PCSCF_AAR_07 //TP_EPC_7002_12 from TS 103 029 V5.1.1 - Test objective "Verify that IUT send AA-Request in case of session establishment for terminating side after 180 Ringing with SDP is received." + Test objective "Verify that IUT send AA-Request in case of session establishment for terminating side after 183 response with SDP is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -418,7 +384,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 180_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a 183_Response_INVITE_with_SDP_offer from the UE_B entity } then { @@ -427,21 +393,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value FINAL_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -449,11 +406,11 @@ Package TP_RX { Test Purpose { TP Id TP_RX_PCSCF_AAR_08 - //TP_EPC_7002_14 from TS 103 029 V5.1.1 - Test objective "Verify that IUT send AA-Request in case of session establishment for terminating side after 200 OK with SDP is received." + //TP_EPC_7002_14 from TS 103 029 V5.1.1 - update due to validation + Test objective "Verify that IUT send AA-Request in case of session modification for terminating side after reINVITE with SDP is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.1, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.1, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -467,7 +424,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 200_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a reINVITE_with_SDP_offer from the UE_B entity } then { @@ -476,21 +433,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value PRELIMINARY_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -502,7 +450,7 @@ Package TP_RX { Test objective "Verify that IUT send AA-Request in case of session modification for originating side after 200 OK on re-INVITE is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.2, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.2, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -516,7 +464,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 200_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer from the IMS_S_CSCF_A entity } then { @@ -525,21 +473,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value FINAL_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -551,7 +490,7 @@ Package TP_RX { Test objective "Verify that IUT send AA-Request in case of session modification for terminating side after 200 OK on re-INVITE is received." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.2, A.1, A.2, B" + "TS 129 214 [8], clauses 4.4.2, A.1, A.2 and annex B" Config Id CF_VxLTE_INT @@ -565,7 +504,7 @@ Package TP_RX { Expected behaviour ensure that { when { - the IMS_P_CSCF_A entity receives an 200_Response_INVITE_with_SDP_offer + the IMS_P_CSCF_A entity receives a 200_Response_INVITE_with_SDP_offer from the UE_B entity } then { @@ -574,21 +513,12 @@ Package TP_RX { 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 - Flow_Number_AVP - Flow_Description_AVP + "one or more" Media_Component_Description_AVP + Rx_Request_Type_AVP + indicating value UPDATE_REQUEST '(1)', + Service_Info_Status_AVP + indicating value FINAL_SERVICE_INFORMATION '(1)' ; - ; to the EPC_PCRF_A entity } } @@ -600,7 +530,7 @@ Package TP_RX { Test objective "Verify that IUT sends AA-Answer after RAA is received from PGW." Reference - "TS 129 214 (V15.6.0) [8], clause 4.4.6.1" + "TS 129 214 [8], clause 4.4.6.1" Config Id CF_VxLTE_INT @@ -616,19 +546,84 @@ Package TP_RX { when { the IMS_P_CSCF_A entity sends a ASR containing Abort_Cause_AVP - indicating value BEARER_RELEASED '(0)' - ; + 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)" - ; + indicating value DIAMETER_SUCCESS "(2001)"; to the IMS_P_CSCF_A entity } } } // End of TP_RX_PCRF_ASA_01 + + Test Purpose { + TP Id TP_RX_PCSCF_ASR_01 + //TP_EPC_8004_06 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives AS-Request from home PCRF and it sends AS-Request towards visited P-CSCF." + + Reference + "TS 129 214 [8], clause 4.4.6.1" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_RX_PCSCF_ASR_01 + + Test Purpose { + TP Id TP_RX_PCSCF_RAA_01 + + Test objective "Verify that IUT sends RA-Answer after RAR is received from PCRF." + + Reference + "TS 129 214 [8], clause 4.4.6.2 5.3.13" + + 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 + } + + Expected behaviour + ensure that { + when { + the EPC_PCRF_A entity sends a RAR containing + Specific_Action_AVP + indicating value INDICATION_OF_SUCCESSFUL_RESOURCES_ALLOCATION '(8)'; + to the IMS_P_CSCF_A entity + } + then { + the IMS_P_CSCF_A entity sends the RAA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS "(2001)"; + to the EPC_PCRF_A entity + } + } + } // End of TP_RX_PCSCF_RAA_01 Test Purpose { TP Id TP_RX_PCRF_STA_01 @@ -636,7 +631,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of RA-Request sends ST-Answer." Reference - "TS 129 214 (V15.6.0) [8], clause 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -657,8 +652,7 @@ Package TP_RX { then { the EPC_PCRF_A entity sends the STA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the IMS_P_CSCF_A entity } } @@ -670,7 +664,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of ST-Request sends ST-Answer." Reference - "TS 129 214 (V15.6.0) [8], clause 4.4.4, 4.4.5, A.8" + "TS 129 214 [8], clauses 4.4.4, 4.4.5 and A.8" Config Id CF_VxLTE_INT @@ -690,8 +684,7 @@ Package TP_RX { then { the EPC_PCRF_A entity sends the STA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the IMS_P_CSCF_A entity } } @@ -703,7 +696,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of BYE sends an ST-Request at originating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -735,7 +728,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of BYE sends an ST-Request at terminating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -767,7 +760,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of CANCEL sends an ST-Request at originating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -798,7 +791,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of CANCEL sends an ST-Request at terminating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -829,7 +822,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of 486 response sends an ST-Request at originating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -860,7 +853,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of 486 response sends an ST-Request at terminating leg." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4" + "TS 129 214 [8], clause 4.4.4" Config Id CF_VxLTE_INT @@ -891,7 +884,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of 200 response REGISTER sends an ST-Request." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4, 4.4.5a, A.8" + "TS 129 214 [8], clauses 4.4.4, 4.4.5a and A.8" Config Id CF_VxLTE_INT @@ -922,7 +915,7 @@ Package TP_RX { Test objective "Verify that IUT after reception of NOTIFY during administrative de-registration sends an ST-Request." Reference - "TS 129 214 (V15.6.0) [8], clauses 4.4.4, 4.4.5a, A.8" + "TS 129 214 [8], clauses 4.4.4, 4.4.5a and A.8" Config Id CF_VxLTE_INT diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index 02c21561df3427b88d1026a6c1d3d73f76c26b4e..c987a484766e9415bc07dd93ab04d833851e5dfc 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -47,8 +47,7 @@ Package TP_S6A { User_Name_AVP indicating value IMSI Visited_PLMN_Id_AVP - Requested_EUTRAN_Authentication_Info_AVP - ; + Requested_EUTRAN_Authentication_Info_AVP; to the IMS_HSS_A entity } } @@ -81,8 +80,7 @@ Package TP_S6A { the IMS_HSS_A entity sends the AIA containing Result_Code_AVP indicating value DIAMETER_SUCCESS - Authentication_Info_AVP - ; + Authentication_Info_AVP; to the EPC_MME_B entity } } @@ -116,8 +114,7 @@ Package TP_S6A { indicating value IMSI, Cancellation_Type_AVP indicating value Subscription_Withdrawal '(2)' - CLR_Flags_AVP - ; + CLR_Flags_AVP; to the EPC_MME_A entity } } @@ -149,8 +146,7 @@ Package TP_S6A { then { the EPC_MME_A entity sends the CLA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the IMS_HSS_A entity } } @@ -182,8 +178,7 @@ Package TP_S6A { the EPC_MME_A entity sends the PUR containing User_Name_AVP indicating value IMSI, - PUR_Flags_AVP - ; + PUR_Flags_AVP; to the IMS_HSS_A entity } } @@ -215,8 +210,7 @@ Package TP_S6A { then { the IMS_HSS_A entity sends the PUA containing Result_Code_AVP - indicating value DIAMETER_SUCCESS - ; + indicating value DIAMETER_SUCCESS; to the EPC_MME_A entity } } @@ -251,8 +245,7 @@ Package TP_S6A { indicating value IMSI ULR_Flags_AVP Visited_PLMN_Id_AVP - RAT_Type_AVP - ; + RAT_Type_AVP; to the IMS_HSS_A entity } } @@ -287,8 +280,7 @@ Package TP_S6A { indicating value IMSI ULR_Flags_AVP Visited_PLMN_Id_AVP - RAT_Type_AVP - ; + RAT_Type_AVP; to the IMS_HSS_A entity } } @@ -321,8 +313,7 @@ Package TP_S6A { the IMS_HSS_A entity sends the ULA containing Result_Code_AVP indicating value DIAMETER_SUCCESS - ULA_Flags_AVP - ; + ULA_Flags_AVP; to the EPC_MME_A entity } } @@ -355,8 +346,7 @@ Package TP_S6A { the IMS_HSS_A entity sends the ULA containing Result_Code_AVP indicating value DIAMETER_SUCCESS - ULA_Flags_AVP - ; + ULA_Flags_AVP; to the EPC_MME_B entity } } diff --git a/test_purposes/S9/TP_S9.tplan2 b/test_purposes/S9/TP_S9.tplan2 index 2284581a30943bb8b31888487d705f0762fc561b..cb0861e610f0348fec61700f2ddd3fd9dcdfa6a2 100644 --- a/test_purposes/S9/TP_S9.tplan2 +++ b/test_purposes/S9/TP_S9.tplan2 @@ -18,6 +18,164 @@ Package TP_S9 { import all from Sip_Common; import all from Diameter_Common; + + Test Purpose { + TP Id TP_S9_PCRF_AAR_01 + //TP_EPC_8001_07 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives AA-Request from visited P-CSCF and it sends AA-Request towards home PCRF." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_AAR_01 + + Test Purpose { + TP Id TP_S9_PCRF_AAA_01 + //TP_EPC_8001_08 from TS 103 029 V5.1.1 + Test objective "Verify when IUT receives AA-Request from visited PCRF then it sends a AA-Answer." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + 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; + to the EPC_PCRF_B entity + } + } + } // End of TP_S9_PCRF_AAA_01 + + Test Purpose { + TP Id TP_S9_PCRF_AAA_02 + //TP_EPC_8002_02 from TS 103 029 V5.1.1 + Test objective "Verify when IUT receives AA-Request from visited PCRF then it sends a AA-Answer." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + 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;; + to the EPC_PCRF_B entity + } + } + } // End of TP_S9_PCRF_AAA_02 + + Test Purpose { + TP Id TP_S9_PCRF_ASR_01 + //TP_EPC_8004_05 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives AS-Request from home PCRF and it sends AS-Request towards visited PCRF." + + Reference + "TS 129 215 [11], clause 4.5.3.3" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_ASR_01 + + Test Purpose { + TP Id TP_S9_PCRF_ASA_01 + //TP_EPC_8004_07 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives AS-Answer from visited P-CSCF and it sends AS-Answer towards home PCRF." + + Reference + "TS 129 215 [11], clause 4.5.3.3" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_ASA_01 Test Purpose { TP Id TP_S9_PCRF_CCR_01 @@ -25,7 +183,7 @@ Package TP_S9 { Test objective "Verify that IUT receives CC-Request from P-GW and it sends CC-Request towards home PCRF." Reference - "TS 129 215 (V15.3.0) [11], clauses 4.5.1.1 and 4.5.3.1" + "TS 129 215 [11], clauses 4.5.1.1 and 4.5.3.1" Config Id CF_VxLTE_RMI @@ -48,47 +206,72 @@ Package TP_S9 { indicating value INITIAL_REQUEST Subscription_Id_AVP containing Subscription_Id_Type_AVP - indicating value END_USER_IMSI - ;, + 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 - ; - ;, + Pre_emption_Vulnerability_AVP;;, Subsession_Enforcement_Info_AVP containing Subsession_Id_AVP Subsession_Operation_AVP - indicating value ESTABLISHMENT - ; - ; + indicating value ESTABLISHMENT;; to the EPC_PCRF_A entity } } } // End of TP_S9_PCRF_CCR_01 + Test Purpose { + TP Id TP_S9_PCRF_CCR_02 + //TP_EPC_8004_02 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives CC-Request from P-GW and it sends CC-Request towards home PCRF." + + Reference + "TS 129 215 [11], clauses 4.5.1.2 and 4.5.3.3" + + 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_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_CCR_02 + Test Purpose { TP Id TP_S9_PCRF_CCA_01 //TP_EPC_8001_05 from TS 103 029 V5.1.1 - Test objective "Verify when IUT receives CC-Request from visited PCRF and it sends a CC-Answer." + Test objective "Verify when IUT receives CC-Request from visited PCRF then it sends a CC-Answer." Reference - "TS 129 215 (V15.3.0) [11], clauses 4.5.1.1 and 4.5.3.1" + "TS 129 215 [11], clauses 4.5.1.1 and 4.5.3.1" Config Id CF_VxLTE_RMI @@ -121,15 +304,139 @@ Package TP_S9 { Allocation_Retention_Priority_AVP containing Priority_Level_AVP Pre_emption_Capablity_AVP - Pre_emption_Vulnerability_AVP - ; - ; - ; - ; + Pre_emption_Vulnerability_AVP;;;; to the EPC_PCRF_B entity } } } // End of TP_S9_PCRF_CCA_01 + + Test Purpose { + TP Id TP_S9_PCRF_CCA_02 + //TP_EPC_8004_03 from TS 103 029 V5.1.1 + Test objective "Verify when IUT receives CC-Request from visited PCRF then it sends a CC-Answer." + + Reference + "TS 129 215 [11], clauses 4.5.1.2 and 4.5.3.3" + + 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_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_CCA_02 + + Test Purpose { + TP Id TP_S9_PCRF_STR_01 + //TP_EPC_8002_04 and 8004_08 from TS 103 029 V5.1.1 + Test objective "Verify that IUT receives ST-Request from visited P-CSCF and it sends ST-Request towards home PCRF." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_STR_01 + + Test Purpose { + TP Id TP_S9_PCRF_STA_01 + //TP_EPC_8002_05 from TS 103 029 V5.1.1 + Test objective "Verify when IUT receives ST-Request from visited PCRF then it sends a ST-Answer." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isNotAttachedTo the EPC_B and + the UE_A entity isNotRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_STA_01 + + Test Purpose { + TP Id TP_S9_PCRF_STA_02 + //TP_EPC_8002_09 from TS 103 029 V5.1.1 + Test objective "Verify when IUT receives ST-Request from visited PCRF then it sends a ST-Answer." + + Reference + "TS 129 215 [11], clause 4.5.3.6" + + Config Id CF_VxLTE_RMI + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + 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 + } + } + } // End of TP_S9_PCRF_STA_02 } // 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 0000000000000000000000000000000000000000..a6b35bc8c51a9dc0c041b8c2c7f6b581d302209f --- /dev/null +++ b/test_purposes/Sh/TP_Sh.tplan2 @@ -0,0 +1,72 @@ +/* +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; + + + + Test Purpose { + TP Id TP_SH_HSS_UDA_01 + //TP_SH_HSS_UD_01 from TS 103 571-2 V1.1.1 + Test objective "IUT successfully processes all mandatory AVPs in a UD-Request and sends UD-Answer." + + Reference + "TS 129 328 [12], clause 6.1.1.1" + + 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 + } + + Expected behaviour + 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 + } + } + } // End of TP_SH_AS_UDA_01 + +} // End of Package TP_Sh + diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 6e9fffeeb252933acf93ab8cc3f7ad122a5d9e09..292a71aea4528858c6e0851012f09430ef56285c 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -1,8 +1,8 @@ /* ETSI Software License -* As long as the hereunder conditions are respected, non-exclusive permission is hereby granted, +* 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 merchantability, fitness for a particular purpose and warranties for non-infringement +* 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 @@ -45,6 +45,7 @@ Package Sip_Common { - 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 @@ -59,45 +60,36 @@ Package Sip_Common { // Initial conditions - isTriggeredToStart - isNotRegisteredTo - - hasAchieveFirstRegistration + - hasAchievedFirstRegistration - isRegisteredTo - isNotAttachedTo - isAttachedTo - isNotConfiguredForTopologyHiding + - isConfiguredForTopologyHiding - isExistingIn - establishedSecurityRelation - registeredIdentityTelURI - registeredIdentitySipURI - hasInitiatedDialogWith - isConfiguredWithENUMentryForTelURI_E164NumberOf - - hasReceivedIntialRequestForDialog + - hasReceivedInitialRequestForDialog - hasReceived200OkOnInitialRequestForDialogWith - hasReceived180OnInitialRequest + - hasReceived200OkCancel + - hasReceivedTerminatedRequest - registeredPublicIdsWithTelUriAndSipUri - hasReceivedSubsequentOrTargetRefreshRequestInDialog - previouslyEstablishedCallWith - isRequestedToSend + - isRequestedToDeregisterUser - isBusy - isNoLongerAvailable - isTriggeredToDetachUser - // SIP Requests - - hasAchieveFirstREGISTER - - REGISTER - - SUBSCRIBE - - hasAchieveInitialINVITE - - hasAchieveINVITE - - INVITE - - 486_INVITE - - ACK - // SIP Responses - - 401_Unauthorized - - 100_Trying - - 180_Ringing - - 200_Ok - - 2xx_Any - - 404_NotFound - - 403_Forbidden - - 4xx_Any + - isRequestedToDetachfromNetwork + - hasAchievedFirstREGISTER + - hasResponded486INVITE + - hasAchievedInitialINVITE + - hasAchievedINVITE ; } // End of Domain section @@ -111,28 +103,46 @@ Package Sip_Common { // 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_A_VIA, +// PX_UE_A_AUTH_ALG, +// PX_OPERATOR_ID_A, // PX_UE_B_SIP_URI, -// PX_UE_B_TEL_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_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_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 DiameterMessage; 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 { @@ -144,145 +154,93 @@ Package Sip_Common { Component Type EnumDBComponent with gate gEnum of type enumGT; Test Configuration CF_VxLTE_INT - ; - - Test Configuration CF_VxLTE_RMI - ; - - Test Configuration CFG_IC_01 - containing - Tester component UE_A of type SipComponent - Tester component NW_UE_B of type SipComponent - - SUT component IMS_A of type SipComponent - connection between UE_A.g and IMS_A.g - connection between IMS_A.g and NW_UE_B.g - ; - - Test Configuration CFG_IC_02 - containing - Tester component UE_A of type SipComponent - Tester component UE_B of type SipComponent - Tester component NW_UE_B of type SipEnumComponent - Tester component Enum_DB of type EnumDBComponent - - SUT component IMS_A of type SipEnumComponent - connection between UE_A.g and IMS_A.gSip - connection between IMS_A.gEnum and Enum_DB.gEnum - connection between NW_UE_B.gEnum and Enum_DB.gEnum - connection between IMS_A.gSip and NW_UE_B.gSip - connection between NW_UE_B.gSip and UE_B.g - ; - - Test Configuration CFG_IC_03 containing - Tester component UE_A of type SipComponent - Tester component UE_B of type SipComponent - Tester component IMS_B of type SipComponent - - SUT component IMS_A of type SipComponent - connection between UE_A.g and IMS_A.g - connection between UE_B.g and IMS_A.g - connection between IMS_A.g and IMS_B.g + 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 CFG_CX_HSS_01 + Test Configuration CF_VxLTE_RMI containing - Tester component IMS_S_CSCF_A of type DiameterComponent - Tester component IMS_I_CSCF_A of type DiameterComponent - - SUT component IMS_HSS_A of type DiameterComponent - connection between IMS_S_CSCF_A.g and IMS_HSS_A.g - connection between IMS_I_CSCF_A.g and IMS_HSS_A.g + 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 CFG_GX_PGW_01 + Test Configuration CF_VxLTE_RMI_A containing - Tester component EPC_PCRF_A of type DiameterComponent - - SUT component EPC_PGW_A of type DiameterComponent - connection between EPC_PCRF_A.g and EPC_PGW_A.g + 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 CFG_GX_PCRF_01 + Test Configuration CF_VxLTE_RMI_B containing - Tester component EPC_PGW_A of type DiameterComponent - Tester component IMS_P_CSCF_A of type DiameterComponent - - SUT component EPC_PCRF_A of type DiameterComponent - connection between EPC_PCRF_A.g and EPC_PGW_A.g - connection between EPC_PCRF_A.g and IMS_P_CSCF_A.g - ; - - Test Configuration CFG_RX_PCRF_01 - containing - Tester component IMS_P_CSCF_A of type DiameterComponent - - SUT component EPC_PCRF_A of type DiameterComponent - connection between IMS_P_CSCF_A.g and EPC_PCRF_A.g - ; - - Test Configuration CFG_RX_PCRF_02 - containing - Tester component IMS_P_CSCF_A of type DiameterComponent - - SUT component EPC_PCRF_A of type DiameterComponent - SUT component EPC_PGW_A of type DiameterComponent - connection between IMS_P_CSCF_A.g and EPC_PCRF_A.g - connection between EPC_PGW_A.g and EPC_PCRF_A.g - ; - - Test Configuration CFG_RX_PCSCF_01 - containing - Tester component IMS_S_CSCF_A of type SipComponent - Tester component EPC_PCRF_A of type DiameterComponent - - SUT component IMS_P_CSCF_A of type SIPComponent - SUT component IMS_P_CSCF_A of type DiameterComponent - connection between IMS_S_CSCF_A.g and IMS_P_CSCF_A.g - connection between IMS_P_CSCF_A.g and EPC_PCRF_A_A.g - ; - - Test Configuration CFG_S6A_MME_01 - containing - Tester component UE_A of type S1APComponent - Tester component IMS_HSS_A of type DiameterComponent - - SUT component EPC_MME_A of type S1APComponent - SUT component EPC_MME_A of type DiameterComponent - connection between UE_A.g and EPC_MME_A.g - connection between EPC_MME_A.g and IMS_HSS_A.g - ; - - Test Configuration CFG_S6A_HSS_01 - containing - Tester component IMS_HSS_A of type DiameterComponent - - SUT component EPC_PGW_A of type DiameterComponent - connection between EPC_MME_A.g and IMS_HSS_A.g + 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 CFG_xxx_02 + Test Configuration CF_VxLTE_RMI_S8HR containing - Tester component UE_A of type SipComponent - Tester component IMS_PCRF_A of type SipComponent - - SUT component IUT of type SipComponent - connection between UE_A.g and IMS_PCRF_A.g - connection between IMS_PCRF_A.g and IMS_xxx_A.g + 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 MSG (optional TCP of type CONTENT); - Type CONTENT; - CONTENT tcp; + //Type CONTENT; + //CONTENT tcp; - MSG MESSAGE; + //MSG MESSAGE; - Type MSG_SIZE; + //Type MSG_SIZE; - Message_Body_Size MSG_SIZE; + //Message_Body_Size MSG_SIZE; } // End of Package Sip_Common diff --git a/tracefiles/TC_VxLTE_INT_REG_01.pcapng b/tracefiles/TC_VxLTE_INT_REG_01.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..565e901c86bcb15bfbf78defc97b5be2f3d9918c Binary files /dev/null and b/tracefiles/TC_VxLTE_INT_REG_01.pcapng differ diff --git a/ttcn/AtsImsIot/AtsImsIot_Behavior.ttcn b/ttcn/AtsImsIot/AtsImsIot_Behavior.ttcn deleted file mode 100644 index df20f5db0295472a7c994e1a1f7f6c0d5a12c4ec..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_Behavior.ttcn +++ /dev/null @@ -1,5932 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides common functions which describes behavior for each TP reference. - */ -module AtsImsIot_Behavior { - - 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 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 - }; - // LibDiameter - import from LibDiameter_Templates all; - import from DiameterRx_Templates all; - -group checks { - -group checksTC_IMS_MESS_0001{ - - /** - * @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 }
    } - */ - function f_mtc_check_TP_IMS_4002_01_gm(ImsInterfaceMonitor p_monitorCompRef) - runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_4002_01(?))},//? CallId can be checked - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0,omit}, - "TP_IMS_4002_01_gm", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_TP_IMS_4002_01_ic(ImsInterfaceMonitor p_monitorCompRef) - runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_4002_01(?))},//? CallId can be checked - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_4002_01_ic", - false, - false - ) - ); - p_monitorCompRef.done; - } -} // group - - group checksTC_IMS_REG_0001_AKA { - /** - * @desc Starts monitor component behavior for TP_IMS_5011_01 - * the on Gm-interface - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_01_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_01_gm)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5011_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_01 - * on the Mw-interface - * @param p_monitorCompRef Reference to monitor component - */ - - function f_mtc_check_TP_IMS_5011_01_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_01p_ic(v_EUT_A_Addr))}, - { - mw_SipRequest(mdw_TP_IMS_5011_01f_ic), - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_IMS_5011_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_01 (gm) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_01_gm_when ( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5089_01_gm_when", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_02 (gm) - * the on Gm-interface - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_02_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_02_gm)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5011_02_gm", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_02 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_02_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_02p_ic(v_EUT_A_Addr))}, - {mw_SipRequest(mdw_TP_IMS_5011_02f_ic), - mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5011_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_01 (when) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_01_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5089_01_ic_when)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5089_01 (when)", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_01 (then) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_01_ic_then( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5089_01_ic)}, - {mw_SipResponse (mw_401Unauthorized_Base)}, - {0, omit}, - "TP_IMS_5089_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5092_01 (gm) - * the on Gm-interface - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5092_01_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_02_gm)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5092_01_gm", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5092_01 (when) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5092_01_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5092_01_ic_when)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5092_01 (when)", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5092_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5092_01_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); - var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5092_01_ic(v_EUT_A_Addr, v_eutBUri))}, - {mw_SipResponse (mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5092_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5044_01 (when) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5044_01_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator return Response { - var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - var SipMessage v_sip := {response := valueof(m_Response_Dummy)}; - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5044_01 (when)", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - return v_sip.response; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5044_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5044_01_ic( - ImsInterfaceMonitor p_monitorCompRef, Response p_200OK, boolean p_checkMessage - ) runs on ImsTestCoordinator { - 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_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5044_01_ic(?, v_eutAUri, v_UEB_PublicId))}, - {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, - {0, omit}, - "TP_IMS_5044_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - // Check that the expires header is set to "a value greater than the one - // in the Expires_header of the 200_response" - - if(ispresent(p_200OK.msgHeader.expires)) { - v_Epires200OK := p_200OK.msgHeader.expires.deltaSec; - v_EpiresSubscribe := v_sip.request.msgHeader.expires.deltaSec; - if (str2int(v_EpiresSubscribe) > str2int(v_Epires200OK)) { - f_setIotVerdictFAIL("TP_IMS_5044_01 - Expires_header of subscribe is NOT greater than the Expires_header of 200_response."); - } - } - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5096_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5096_01_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator return Request { - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5096_01_ic_when)}, - {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, - {0, omit}, - "TP_IMS_5096_01 (when)", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - return v_sip.request; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5096_01 - */ - function f_mtc_check_TP_IMS_5096_01_ic( - ImsInterfaceMonitor p_monitorCompRef, Request p_Subscribe, boolean p_checkMessage - ) runs on ImsTestCoordinator - { - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - var charstring v_Epires200OK; - var charstring v_EpiresSubscribe; - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base), mw_SipResponse(mw_202Accepted_Base)}, - {}, - {0, omit}, - "TP_IMS_5096_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if(ispresent(v_sip.response.msgHeader.expires)) { - // Check that the message contains "Expires_header indicating the same or - // lower expiry time than specified in the initial SUBSCRIBE" - v_Epires200OK := v_sip.response.msgHeader.expires.deltaSec; - v_EpiresSubscribe := p_Subscribe.msgHeader.expires.deltaSec; - if (str2int(v_Epires200OK) <= str2int(v_EpiresSubscribe)) { - f_setIotVerdictFAIL("TP_IMS_5096_01 - - Expires_header Expires_header of 200_response is NOT the same or lower than the Expires_header of subscribe."); - } - } - } - - } // group - - group checksTC_IMS_REG_0001_MD5 { - /** - * @desc Starts monitor component behavior for TP_IMS_5011_03 - * the on Gm-interface - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_03_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5011_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_03 - * on the Mw-interface - * @param p_monitorCompRef Reference to monitor component - */ - - function f_mtc_check_TP_IMS_5011_03_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_03p_ic(v_EUT_A_Addr))}, - { - mw_SipRequest(mdw_TP_IMS_5011_01f_ic),//mdw_TP_IMS_5011_03f_ic == mdw_TP_IMS_5011_01f_ic - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_IMS_5011_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_02 (gm) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_02_gm_when ( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5089_02_gm_when", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_04 (gm) - * the on Gm-interface - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_04_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5011_04_gm", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5011_04 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5011_04_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTPcscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5011_04p_ic(v_EUT_A_Addr))}, - {mw_SipRequest(mdw_TP_IMS_5011_02f_ic),//mdw_TP_IMS_5011_04f_ic == mdw_TP_IMS_5011_02f_ic - mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5011_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_02 (when) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_02_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5089_02_ic_when)}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_IMS_5089_02 (when)", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5089_02 (then) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5089_02_ic_then( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5089_02_ic)}, - {mw_SipResponse (mw_401Unauthorized_Base)}, - {0, omit}, - "TP_IMS_5089_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - } // group - -group checksTC_IMS_REG_0002{ - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5203_01_gm( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - // Check that the UE sends any register - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5203_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5203_01_ic( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator return Request { - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - - //Get first Register - //var charstring v_EUT_A_Addr := f_GetEUTAddress(PX_EUT_A); - var Request v_RegisterStep4, v_RegisterStep2; - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5203_01 first register", - true, - false - ) - ); - p_monitorCompRef.done; - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - v_RegisterStep2 := v_sip.request; - - //Get second Register - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5203_01 second register", - true, - false - ) - ); - p_monitorCompRef.done; - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - - // TODO: Currently we don't check anything, just that IMS-A sent 2 consecutive Registers - v_RegisterStep4 := v_sip.request; - return v_RegisterStep4; - } - -} // group - - group checksTC_IMS_REG_0003{ - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5129_01_gm( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - // Check that the UE sends any register - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5129_01 (gm)", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5129_01_ic_when( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - // Check that the IMS_A forwards register from UE_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5129_01 (mw-when)", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5129_01_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - p_monitorCompRef.start( - // Check that IMS_B responds with 403 forbidden - f_imsIot_receive( - {mw_SipResponse(mw_403Forbidden_Base)}, - {}, - {0, omit}, - "TP_IMS_5129_01 (mw)", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // group - - group checksTC_IMS_REG_0005{ - /** - * @desc Starts monitor component behavior for TP_IMS_5093_01 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5093_01_UE_ic( - ImsInterfaceMonitor p_monitorCompRef, ImsUserInfo v_anyValidUser, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_request_uri := mw_SipUrl_Number(v_anyValidUser.publicId); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5093_01_UE_ic(?, v_request_uri))}, - {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, - {0, omit}, - "TP_IMS_5093_01_ic", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5093_01 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5093_01_IMS_ic( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_request_uri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5093_01_IMS_ic(?, v_request_uri))}, - {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, - {0, omit}, - "TP_IMS_5093_01_ic", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // end group - - group checksTC_IMS_REG_0006{ - - /** - * @desc Starts monitor component behavior for TP_IMS_5094_01 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5094_01_UE( - ImsInterfaceMonitor p_monitorCompRef, ImsUserInfo v_anyValidUser, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_request_uri := mw_SipUrl_Number(v_anyValidUser.publicId); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5094_01_UE(?, v_request_uri))}, - {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, - {0, omit}, - "TP_IMS_5094_01_ic", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5094_01 (mw) - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5094_01_IMS( - ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_request_uri := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5094_01_IMS_ic(?, v_request_uri))}, - {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, - {0, omit}, - "TP_IMS_5094_01_ic", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - } // end group - -group checksTC_IMS_CALL_0001 { - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5097_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_01_ic((mw_SipUrl_Host(v_EUT_A_Addr), - mw_SipUrl_Host(f_GetEUTScscfIpAddress(PX_EUT_A))) ))}, - {}, - {0, omit}, - "TP_IMS_5097_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5097_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_02_ic(mw_SIP_URI_Base, mw_TEL_URI_Base))}, - {mw_SipRequest(mw_INVITE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_04 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_04_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var ImsUserInfo v_userTelInfoB := f_getTelUserId(PX_EUT_B); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_04_gm(mw_TEL_URI_Base))},//TODO check TEL_URI of UE_B - {mw_SipRequest(mw_INVITE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_04 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_04_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_04_ic(v_eutBUri))}, - {mw_SipRequest(mw_INVITE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - /** - * @desc Starts monitor component behavior for TP_IMS_ENUM_01 - * @param p_gm Reference to Gm monitor component - * @param p_naptr Reference to NAPTR monitor component - */ - function f_mtc_check_TP_IMS_ENUM_01 ( ImsInterfaceMonitor p_gm, ImsInterfaceMonitor p_naptr) - runs on ImsTestCoordinator { - var EnumQuery v_enumQuery; - var EnumResponse v_enumResponse; - f_mtc_check_TP_IMS_ENUM_01_gm ( p_gm, false ); // SIP INVITE - v_enumQuery := f_mtc_check_TP_IMS_ENUM_01_enumQuery ( p_naptr ); // ENUM query - //TODO check ENUM query message as described in the spec. - v_enumResponse := f_mtc_check_TP_IMS_ENUM_01_enumResponse ( p_naptr ); // ENUM response - //TODO check ENUM response message as described in the spec. - } - function f_mtc_check_TP_IMS_ENUM_01_gm ( ImsInterfaceMonitor p_monitorCompRef, boolean p_checkMessage ) - runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_imsIot_receive ( - { mw_SipRequest ( mdw_TP_IMS_5097_04_gm ( mw_TEL_URI_Base )) }, - { }, { 0, omit }, "TP_IMS_ENUM_01", false, p_checkMessage - ) - ); - p_monitorCompRef.done; - } - function f_mtc_check_TP_IMS_ENUM_01_enumQuery ( ImsInterfaceMonitor p_monitorCompRef ) - runs on ImsTestCoordinator return EnumQuery { - var NAPTRmessage v_naptr; - var SipMessage v_sip; - p_monitorCompRef.start ( - f_getNaptrMsg ( p_monitorCompRef, { query := ? }) - ); - p_monitorCompRef.done; - f_getSipMsgFromMonitor ( p_monitorCompRef, v_sip ); - v_naptr := v_sip.naptrmessage; - return v_naptr.enumMessage.query; - } - function f_mtc_check_TP_IMS_ENUM_01_enumResponse ( ImsInterfaceMonitor p_monitorCompRef ) - runs on ImsTestCoordinator return EnumResponse { - var NAPTRmessage v_naptr; - var SipMessage v_sip; - p_monitorCompRef.start ( - f_getNaptrMsg ( p_monitorCompRef, { response := ? } ) - ); - p_monitorCompRef.done; - f_getSipMsgFromMonitor ( p_monitorCompRef, v_sip ); - v_naptr := v_sip.naptrmessage; - return v_naptr.enumMessage.response; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_ACK_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5107_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5107_02_ic(?, mw_SipUrl_Host(v_EUT_A_Addr)))}, - {}, - {0, omit}, - "TP_IMS_5107_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5107_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr)))}, - {}, - {0, omit}, - "TP_IMS_5107_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_180Ringing_Base)}, - {}, - {0, omit}, - "TP_IMS_5115_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5115_01_ic)}, - {mw_SipResponse(mw_180Ringing_Base)}, - {0, omit}, - "TP_IMS_5115_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5115_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5115_02_ic)}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5115_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_03_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_180Ringing_Base)}, - {}, - {0, omit}, - "TP_IMS_5115_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5115_03_ic(mw_SIP_URI_Base, mw_TEL_URI_Base))}, - {mw_SipResponse(mw_180Ringing_Base)}, - {0, omit}, - "TP_IMS_5115_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_04_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5115_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_04_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5115_04_ic(mw_SIP_URI_Base, mw_TEL_URI_Base))}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5115_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5131_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_180Ringing_Base)}, - {}, - {0, omit}, - "TP_IMS_5131_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5131_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5131_01_ic)}, - {mw_SipResponse(mw_180Ringing_Base)}, - {0, omit}, - "TP_IMS_5131_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5131_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5131_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5131_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5131_02_ic)}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5131_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0001F { - -/*functions already used in test TC_IMS_CALL_0001 - * f_mtc_check_TP_IMS_5097_01_gm - * f_mtc_check_TP_IMS_5097_01_ic - * f_mtc_check_TP_IMS_5107_01_gm - * f_mtc_check_TP_IMS_5107_01_ic - * f_mtc_check_TP_IMS_5107_02_gm - * f_mtc_check_TP_IMS_5107_02_ic - * f_mtc_check_TP_IMS_5115_01_gm - * f_mtc_check_TP_IMS_5115_01_ic - * f_mtc_check_TP_IMS_5115_02_gm - * f_mtc_check_TP_IMS_5115_02_ic - * f_mtc_check_TP_IMS_5131_01_gm - * f_mtc_check_TP_IMS_5131_01_ic - * f_mtc_check_TP_IMS_5131_02_gm - * f_mtc_check_TP_IMS_5131_02_ic - * -*/ -} // group - -group checksTC_IMS_CALL_0002 { - -/*functions already used in test TC_IMS_CALL_0001 - * f_mtc_check_TP_IMS_5097_01_gm - * f_mtc_check_TP_IMS_5097_01_ic - * f_mtc_check_TP_IMS_5097_02_gm - * f_mtc_check_TP_IMS_5097_02_ic - * f_mtc_check_TP_IMS_5107_01_gm - * f_mtc_check_TP_IMS_5107_01_ic - * f_mtc_check_TP_IMS_5107_02_gm - * f_mtc_check_TP_IMS_5107_02_ic - * f_mtc_check_TP_IMS_5115_01_gm - * f_mtc_check_TP_IMS_5115_01_ic - * f_mtc_check_TP_IMS_5115_02_gm - * f_mtc_check_TP_IMS_5115_02_ic - * f_mtc_check_TP_IMS_5115_03_gm - * f_mtc_check_TP_IMS_5115_03_ic - * f_mtc_check_TP_IMS_5115_04_gm - * f_mtc_check_TP_IMS_5115_04_ic - * f_mtc_check_TP_IMS_5131_01_gm - * f_mtc_check_TP_IMS_5131_01_ic - * f_mtc_check_TP_IMS_5131_02_gm - * f_mtc_check_TP_IMS_5131_02_ic - * -*/ -} // group - -group checksTC_IMS_CALL_0003 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_05_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_05", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_05_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_05", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_404NotFound_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_05", - false, - false - ) - ); - p_monitorCompRef.done; - - } //function - -} // group - -group checksTC_IMS_CALL_0004 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5132_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5132_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5132_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5132_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_404Or604NotFound_Base)}, - {}, - {0, omit}, - "TP_IMS_5132_01", - false, - false - ) - ); - p_monitorCompRef.done; - - } //function - -} // group - -group checksTC_IMS_CALL_0005 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5133_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5133_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5133_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5133_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_4XX_Base)}, - {}, - {0, omit}, - "TP_IMS_5133_01", - false, - false - ) - ); - p_monitorCompRef.done; - - } //function - -} // group - -group checksTC_IMS_CALL_0006 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5109_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5109_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5109_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5109_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_408Or5XX_Base)}, - {}, - {0, omit}, - "TP_IMS_5109_01", - false, - false - ) - ); - p_monitorCompRef.done; - - } //function - -} // group - -group checksTC_IMS_CALL_0007 { - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5055_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_180Ringing_Base)}, - {}, - {0, omit}, - "TP_IMS_5055_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5055_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_pcscfEutAUrl := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); - var ImsUserInfo v_user := f_getAnyValidUser(PX_EUT_A); - var template SipUrl v_UserEutAUrl := mw_SipUrl_Host(v_user.domain); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5055_01_ic(v_pcscfEutAUrl, v_UserEutAUrl))}, - {mw_SipResponse(mw_180Ringing_Base)}, - {0, omit}, - "TP_IMS_5055_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5055_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5055_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5055_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_pcscfEutAUrl := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); - var ImsUserInfo v_user := f_getAnyValidUser(PX_EUT_A); - var template SipUrl v_UserEutAUrl := mw_SipUrl_Host(v_user.domain); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5055_02_ic(v_pcscfEutAUrl, v_UserEutAUrl))}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5055_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5067_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5067_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5067_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5067_01_ic)}, - {mw_SipRequest(mw_INVITE_Request_Base)}, - {0, omit}, - "TP_IMS_5067_01", - true, //NOTE: later check in 5108_01 of same icid value - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5070_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5070_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5070_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_100Trying_Base)}, - {}, - v_skip, - "TP_IMS_5070_01", - false, - false - ) - ); - p_monitorCompRef.done; - - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5108_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_IMS_B := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - var SemicolonParam_List p_paramList; - var GenericParam p_param; - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - - - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); //NOTE: icid value from 5067_01 -log("### f_mtc_check_TP_IMS_5108_01_ic: v_sip=", v_sip.request.msgHeader.pChargingVector); - if(ispresent(v_sip.request.msgHeader.pChargingVector)) { - if(ispresent(v_sip.request.msgHeader.pChargingVector.chargeParams)) { -log("### f_mtc_check_TP_IMS_5108_01_ic: then"); - p_paramList := v_sip.request.msgHeader.pChargingVector.chargeParams; -log("### f_mtc_check_TP_IMS_5108_01_ic: p_paramList=", p_paramList); - for(var integer i := 0; i < lengthof(p_paramList); i:= i+1) { - if(p_paramList[i].id == "icid-value") { -log("### f_mtc_check_TP_IMS_5108_01_ic: find param=", p_paramList[i]); - p_param := p_paramList[i]; - break; - } - } - } - } -log("### f_mtc_check_TP_IMS_5108_01_ic: start"); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5108_01_ic(v_SCSCF_IMS_B, p_param))},//pass criteria - { - mw_SipRequest(mdw_TP_IMS_5108_01_f_ic), //fail criteria - mw_SipRequest(mw_INVITE_Request_Base) //fail criteria - }, - {0, omit}, - "TP_IMS_5108_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5301_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5301_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5301_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_IMS_A := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5301_01_ic(?, v_SCSCF_IMS_A))}, - {mw_SipRequest(mw_BYE_Request_Base(?))}, - {0, omit}, - "TP_IMS_5301_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0008 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5081_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5081_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_100Trying_Base)}, - {}, - {0, omit}, - "TP_IMS_5081_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5082_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipResponse(mw_200OK_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - v_skip, - "TP_IMS_5082_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5082_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipResponse(mw_200OK_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5082_01_ic)},//TODO check updated access-network-charging-info - {mw_SipResponse(mw_200OK_Base)}, - v_skip, - "TP_IMS_5082_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5120_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5120_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5120_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_scscfEutBUrl := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - //INVITE from IMS_A to IMS_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5120_01", - false, - false - ) - ); - p_monitorCompRef.done; - - // 100 Trying from IMS_B to IMS_A - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_100Trying_Base)}, - {}, - {0, omit}, - "TP_IMS_5120_01", - false, - false - ) - ); - p_monitorCompRef.done; - - // INVITE from IMS_B to IMS_A - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5120_01_ic(v_scscfEutBUrl))}, - {}, - {0, omit}, - "TP_IMS_5120_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0009 { - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5052_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5052_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5052_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_PCSCF_IMS_A := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)); - var template RecordRoute p_recordRoute := omit; - var SipMessage v_sip := {request := valueof(m_ACK_Dummy)}; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_ACK_Request_Base(?))}, - {}, - {1, mw_SipRequest(mw_ACK_Request_Base(?))}, - "TP_IMS_5052_01", - true, - false - ) - ); - p_monitorCompRef.done; - - // get Record-route header from prev ACK - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if(ispresent(v_sip.request.msgHeader.recordRoute)){ - p_recordRoute := v_sip.request.msgHeader.recordRoute; - } - - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5052_01_p_ic(?,p_recordRoute))}, - { - mw_SipRequest(mdw_TP_IMS_5052_01_f_ic(?, v_PCSCF_IMS_A)), - mw_SipRequest(mw_BYE_Request_Base(?)) - }, - {0, omit}, - "TP_IMS_5052_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0010 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5048_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5048_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5048_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_pcscfEutAUrl := (mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_A)), - mw_SipUrl_Host(f_GetEUTPcscfIpAddress(PX_EUT_A))); - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - // INVITE from IMS_A to IMS_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5048_01_ic(v_pcscfEutAUrl))}, - {}, - v_skip, - "TP_IMS_5048_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5080_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - // INVITE from IMS_A to IMS_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5080_01_ic)}, - {}, - {0, omit}, - "TP_IMS_5080_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0011 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5080_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipRequest(mw_UPDATE_Request_Base(?))}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_UPDATE_Request_Base(?))}, - {}, - v_skip, - "TP_IMS_5080_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5080_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - // INVITE from IMS_A to IMS_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5080_02_ic(?))}, - {}, - {0, omit}, - "TP_IMS_5080_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0012 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5120_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipRequest(mw_UPDATE_Request_Base(?))}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_UPDATE_Request_Base(?))}, - {}, - v_skip, - "TP_IMS_5120_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5120_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_scscfEutBUrl := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_UPDATE_Request_Base(?))}; - } - - //UPDATE from IMS_A to IMS_B - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_UPDATE_Request_Base(?))}, - {}, - v_skip, - "TP_IMS_5120_02", - false, - false - ) - ); - p_monitorCompRef.done; - - // 100 Trying from IMS_B to IMS_A - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_100Trying_Base)}, - {}, - {0, omit}, - "TP_IMS_5120_02", - false, - false - ) - ); - p_monitorCompRef.done; - - // UPDATE from IMS_B to IMS_A - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5120_02_ic(?, v_scscfEutBUrl))}, - {}, - {0, omit}, - "TP_IMS_5120_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0014 { - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_03_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_CANCEL_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5107_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5107_03_ic(?, v_scscfImsAUrl))}, - {}, - {0, omit}, - "TP_IMS_5107_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } //function - -} // group - -group checksTC_IMS_CALL_0015 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5073_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5073_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5073_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5073_01_ic(?))}, - {}, - {0, omit}, - "TP_IMS_5073_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } -} // group - -group checksTC_IMS_CALL_0016 { - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5139_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_scscfImsAUrl := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)); - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - var SipUrl v_UE_URI; - var To v_to; - var From v_from; - var CallId v_callId; - var CSeq v_cSeq; - var Route v_route; - - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5139_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - // Get Contact Header from INVITE - - if(ischosen(v_sip.request)) { - v_from := valueof(v_sip.request.msgHeader.fromField); - v_callId := valueof(v_sip.request.msgHeader.callId); - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5139_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - // Get Contact Header from 200-OK response - - if(ischosen(v_sip.response)) { - if(ispresent(v_sip.response.msgHeader.contact)) { - v_UE_URI := f_getContactAddr(v_sip.response.msgHeader.contact); - } - v_to := valueof(v_sip.response.msgHeader.toField); - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5139_01_ic(v_callId, v_UE_URI, v_to, v_from, ?, ?))}, - {}, - {0, omit}, - "TP_IMS_5139_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } //function -} // group - -group checksTC_IMS_CALL_0024 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5135_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5135_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5135_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5135_01_ic(v_ibcfEutAUrl))}, - {}, - {0, omit}, - "TP_IMS_5135_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5137_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5137_01_ic(v_ibcfEutAUrl))}, - {}, - {0, omit}, - "TP_IMS_5137_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5404_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5404_01_gm)}, - {}, - {0, omit}, - "TP_IMS_5404_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5404_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5404_01_ic)}, - {}, - {0, omit}, - "TP_IMS_5404_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5414_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5414_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5414_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_100Trying_Base)}, - {}, - {0, omit}, - "TP_IMS_5414_01", - false, - false - ) - ); - p_monitorCompRef.done; - - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5137_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_180Ringing_Base)}, - {}, - {0, omit}, - "TP_IMS_5137_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5137_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5137_02_ic)}, - {}, - {0, omit}, - "TP_IMS_5137_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5137_03_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5137_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5137_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5137_03_ic)}, - {}, - {0, omit}, - "TP_IMS_5137_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_ACK_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5408_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5408_01_ic(?, v_ibcfEutAUrl))}, - {}, - {0, omit}, - "TP_IMS_5408_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_03_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5408_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5408_03_ic(?, v_ibcfEutAUrl))}, - {}, - {0, omit}, - "TP_IMS_5408_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0025 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_CANCEL_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5408_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5408_02_ic(?, v_ibcfEutAUrl))}, - {}, - {0, omit}, - "TP_IMS_5408_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - -group checksTC_IMS_CALL_0026 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_04_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5408_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5408_04_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_ibcfEutAUrl := mw_SipUrl_Host(f_GetEUTIbcfAddress(PX_EUT_A)); - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5408_04_ic(v_ibcfEutAUrl))}, - {}, - v_skip, - "TP_IMS_5408_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -} // group - - -group checksTC_IMS_SS_0001 { - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5310_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5310_01_gm)}, - {}, - v_skip, - "TP_IMS_5310_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5310_01_isc( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5310_01_isc)}, - {}, - {0, omit}, - "TP_IMS_5310_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5312_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5312_01_ic)}, - {}, - v_skip, - "mdw_TP_IMS_5312_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5312_01_isc( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5312_01_isc)}, - {}, - {0, omit}, - "TP_IMS_5312_01", - false, - false - ) - ); - p_monitorCompRef.done; - } -} // group - - -group checksTC_IMS_SS_0002 { - - // f_mtc_check_TP_IMS_5310_01_gm already used in test TC_IMS_SS_0001 - // f_mtc_check_TP_IMS_5310_01_isc already used in test TC_IMS_SS_0001 - // f_mtc_check_TP_IMS_5312_01_ic already used in test TC_IMS_SS_0001 - // f_mtc_check_TP_IMS_5312_01_isc already used in test TC_IMS_SS_0001 -} - - -group checksTC_IMS_SS_0003 { - - // f_mtc_check_TP_IMS_5097_02_gm already used in test TC_IMS_CALL_0001 - // f_mtc_check_TP_IMS_5097_02_ic already used in test TC_IMS_CALL_0001 - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5108_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_03_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SipUrl v_AS_IMS_B := (mw_SipUrl_Host(f_GetEUTASServerAddress(PX_EUT_B)), - mw_SipUrl_Host(f_GetEUTASServerIpAddress(PX_EUT_B))); - var template SipUrl v_SCSCF_IMS_B := (mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)), - mw_SipUrl_Host(f_GetEUTScscfIpAddress(PX_EUT_B))); - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipRequest(mw_INVITE_Request_Base)}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5108_03_isc(v_AS_IMS_B, v_SCSCF_IMS_B))}, - {mw_SipRequest(mdw_TP_IMS_5108_03_f_isc)}, - v_skip, - "TP_IMS_5108_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_08_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)},//check 200OK from ASB->IMSB - {}, - {1, mw_SipResponse(mw_200OK_Base)},//skip 200OK from IMSB->ASB - "TP_IMS_5115_08", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5115_08_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - integer p_skipCount - ) runs on ImsTestCoordinator { - - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {p_skipCount, mw_SipResponse(mw_Response_Base(c_statusLine200, ?, ?))}; - } - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5115_08_ic)}, - {}, - v_skip, - "TP_IMS_5115_08", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } -} - -group checksTC_IMS_SS_0004 { - - // f_mtc_check_TP_IMS_5108_03_ic already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5108_03_isc already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5115_08_ic already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5115_08_isc already used in test TC_IMS_SS_0003 -} -group checksTC_IMS_SS_0005 { - -// f_mtc_check_TP_IMS_5108_03_ic already used in test TC_IMS_SS_0003 -// f_mtc_check_TP_IMS_5108_03_isc already used in test TC_IMS_SS_0003 - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5313_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5313_01_ic)}, - {}, - {0, omit}, - "TP_IMS_5313_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5313_01_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5313_01_isc)}, - {}, - {0, omit}, - "TP_IMS_5313_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } -}//end group checksTC_IMS_SS_0005 - -group checksTC_IMS_SS_0006 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_09_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5097_09", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_09_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_AS_IMS_B := mw_SipUrl_Host(f_GetEUTASServerAddress(PX_EUT_B)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_09_isc(v_AS_IMS_B))}, - {mw_SipRequest(mdw_TP_IMS_5097_09_f_isc)}, - {0, omit}, - "TP_IMS_5097_09", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - -}//end group checksTC_IMS_SS_0006 - -group checksTC_IMS_SS_0007 { - - // f_mtc_check_TP_IMS_5097_01_gm already used in test TC_IMS_CALL_0001 - // f_mtc_check_TP_IMS_5097_01_ic already used in test TC_IMS_CALL_0001 - // f_mtc_check_TP_IMS_5108_03_ic already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5108_03_isc already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5115_08_ic already used in test TC_IMS_SS_0003 - // f_mtc_check_TP_IMS_5115_08_isc already used in test TC_IMS_SS_0003 - -}//end group checksTC_IMS_SS_0007 - -group checksTC_IMS_SS_0008 { - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5046_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5046_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5046_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - 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.hostPort), *}, - {mw_ViaBody_interface(v_pcscfEutAIpUrl.hostPort), *} ) - }; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest((mdw_TP_IMS_5046_01_ic(v_pcscfEutAUrl, v_UserEutBUrl), - mdw_TP_IMS_5046_01_ic(v_pcscfEutAIpUrl, v_UserEutBUrl)))}, - {mw_SipRequest(mw_INVITE_Request_Base)}, - {0, omit}, - "TP_IMS_5046_01", - 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_IMS_5046_01"); - } - // Check Via header - if (match(v_Via, vt_pcscfVia)) { - } else { - f_setIotVerdictFAIL("TP_IMS_5046_01"); - } - } - - /** - * @desc Starts monitor component - */ - function f_mtc_check_TP_IMS_5110_01_isc( - ImsInterfaceMonitor p_monitorCompRef) - runs on ImsTestCoordinator - { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {1, mw_SipResponse(mw_200OK_Base)}, - "TP_IMS_5110_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - /** - * @desc Starts monitor component - */ - function f_mtc_check_TP_IMS_5110_01_ic( - ImsInterfaceMonitor p_monitorCompRef) - runs on ImsTestCoordinator - { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5110_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - -} // group - -group checksTC_IMS_SS_0009 { -}//end group checksTC_IMS_SS_0009 - -group checksTC_IMS_SS_0010 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5308_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5308_01_gm)}, - {}, - {0, omit}, - "TP_IMS_5308_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5308_01_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5308_01_isc)}, - {mw_SipResponse(mw_180Ringing_Base)}, - {0, omit}, - "TP_IMS_5308_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5308_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5308_02_gm)}, - {}, - {0, omit}, - "TP_IMS_5308_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5308_02_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_TP_IMS_5308_02_isc)}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5308_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - -}//end group checksTC_IMS_SS_0010 - - group checksTC_IMS_PRES_0001 { - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_13_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_PUBLISH_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5097_13", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_13_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_AS_IMS_B := mw_SipUrl_Host(f_GetEUTASServerAddress(PX_EUT_B)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_13_isc(?, v_AS_IMS_B))}, - {mw_SipRequest(mdw_TP_IMS_5097_13_f_isc(?))}, - {0, omit}, - "TP_IMS_5097_13", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_07_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_07", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_07_isc( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - var template SipUrl v_AS_IMS_B := (mw_SipUrl_Host(f_GetEUTASServerAddress(PX_EUT_B)), - mw_SipUrl_Host(f_GetEUTASServerIpAddress(PX_EUT_B))); - var template SipUrl v_SCSCF_IMS_B := (mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)), - mw_SipUrl_Host(f_GetEUTScscfIpAddress(PX_EUT_B))); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5108_07_isc(v_AS_IMS_B, v_SCSCF_IMS_B))}, - {mw_SipRequest(mdw_TP_IMS_5108_07_f_isc)}, - {0, omit}, - "TP_IMS_5108_07", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /*functions already used in test checksTC_IMS_SS_0003 - * f_mtc_check_TP_IMS_5115_08_isc - * f_mtc_check_TP_IMS_5115_08_ic - * - */ - - -}//end group checksTC_IMS_PRES_0001 - -group checksTC_IMS_PRES_0002 { - - /*functions already used in test checksTC_IMS_PRES_0001 - * f_mtc_check_TP_IMS_5108_07_gm - * f_mtc_check_TP_IMS_5108_07_isc - * f_mtc_check_TP_IMS_5115_08_isc - * f_mtc_check_TP_IMS_5115_08_ic - * - */ - - -}//end group checksTC_IMS_PRES_0002 - -group checksTC_IMS_PRES_0003 { - - /*functions already used in test checksTC_IMS_PRES_0001 - * f_mtc_check_TP_IMS_5115_08_isc - * f_mtc_check_TP_IMS_5115_08_ic - * - */ - -}//end group checksTC_IMS_PRES_0003 - -group checksTC_IMS_PRES_0004 { - - /*functions already used in test checksTC_IMS_PRES_0001 - * f_mtc_check_TP_IMS_5097_13_isc - * f_mtc_check_TP_IMS_5097_13_ic - * f_mtc_check_TP_IMS_5108_07_gm - * f_mtc_check_TP_IMS_5108_07_isc - * and checksTC_IMS_SS_0005 - * f_mtc_check_TP_IMS_5313_01_ic - * f_mtc_check_TP_IMS_5313_01_isc - * - */ - -}//end group checksTC_IMS_PRES_0004 - -group checksTC_IMS_PRES_0005 { - - /*functions already used in test checksTC_IMS_PRES_0001 - * f_mtc_check_TP_IMS_5108_07_gm - * f_mtc_check_TP_IMS_5108_07_isc - * and checksTC_IMS_SS_0005 - * f_mtc_check_TP_IMS_5313_01_ic - * f_mtc_check_TP_IMS_5313_01_isc - * - */ - -}//end group checksTC_IMS_PRES_0005 - -group checksTC_IMS_CHAT_0014 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_04_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REFER_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_5107_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5107_04_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5107_04_ic(?, mw_SipUrl_Host(v_EUT_A_Addr)))}, - {}, - {0, omit}, - "TP_IMS_5107_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function - - }//end group checksTC_IMS_CHAT_0014 - -group checksTC_IMS_SHARE_0001 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_OPTIONS_Request_Base(?))}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_CONTENT_SHARE_01_ic(?))}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function*/ - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_CONTENT_SHARE_02_ic)}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function*/ - - }//end group checksTC_IMS_SHARE_0001 - -group checksTC_IMS_SHARE_0009 { - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_03_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_603Decline_Base)}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_CONTENT_SHARE_03_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_603Decline_Base)}, - {}, - {0, omit}, - "TP_IMS_CONTENT_SHARE_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } //function*/ - - }//end group checksTC_IMS_SHARE_0009 - - group messagingChecks { - /** - * @desc Starts monitor component behavior for TP_IMS_5097_05 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_05_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5097_05", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_05 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_05_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress(PX_EUT_A); - - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest(mdw_TP_IMS_5097_05_p_ic(*)) }, - { - mw_SipRequest(mdw_TP_IMS_5097_05_f_ic(*)), - mw_SipRequest(mdw_TP_IMS_5097_05_f2_ic(*,mw_SipUrl_Host(v_EUT_A_Addr))), - mw_SipRequest(mw_MESSAGE_Request_Base) - }, - {0, omit}, - "TP_IMS_5097_05", - false, - true - ) - ); - p_monitorCompRef.done; - - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_05_p_ic(*))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_05", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_05 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_07_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5097_07", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_07 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_07_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_07_ic(*,mw_SIP_URI_Base, mw_TEL_URI_Base))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_07", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_08 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_08_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var ImsUserInfo v_userTelInfoB := f_getTelUserId(PX_EUT_B); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_08_gm(mw_TEL_URI_Base))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_08", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_08 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5097_08_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5097_08_ic(v_eutBUri))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5097_08", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5117_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5117_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_2XX_Base)}, - {}, - {0, omit}, - "TP_IMS_5117_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5117_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5117_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_TP_IMS_5117_02_ic)}, - {mw_SipResponse(mdw_2XX_Base)}, - {0, omit}, - "TP_IMS_5117_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - - /** - * @desc Starts monitor component behavior for TP_IMS_5117_06 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5117_06_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_2XX_Base)}, - {}, - {0, omit}, - "TP_IMS_5117_06", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5117_06 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5117_06_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_TP_IMS_5117_06_ic)}, - {mw_SipResponse(mdw_2XX_Base)}, - {0, omit}, - "TP_IMS_5117_06", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5118_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5118_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_200OK_Base)}, - {}, - {0, omit}, - "TP_IMS_5118_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5118_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5118_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_TP_IMS_5118_01_ic)}, - {mw_SipResponse(mw_200OK_Base)}, - {0, omit}, - "TP_IMS_5118_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5108_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5108_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_02_ic( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_IMS_B := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_B)); - var SemicolonParam_List p_paramList; - var GenericParam p_param; - var SipMessage v_sip := {request := valueof(m_INVITE_Dummy)}; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5108_02a_ic(*))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5108_02", - true, - true - ) - ); - p_monitorCompRef.done; - - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - p_paramList := v_sip.request.msgHeader.pChargingVector.chargeParams; - for(var integer i := 0; i < lengthof(p_paramList); i:= i+1) { - if(p_paramList[i].id == "icid-value") { - p_param := p_paramList[i]; - } - } - - p_monitorCompRef.start( - f_imsIot_receive( - {}, - { - mw_SipRequest(mdw_TP_IMS_5108_02b_f_ic(*)), - mw_SipRequest(mw_MESSAGE_Request_Base) - }, - {0, omit}, - "TP_IMS_5108_02", - false, - true - ) - ); - p_monitorCompRef.done; - - - p_monitorCompRef.start( - f_imsIot_receive( - {}, - { - mw_SipRequest(mdw_TP_IMS_5108_02b_p_ic(*, v_SCSCF_IMS_B, p_param)), - mw_SipRequest(mw_MESSAGE_Request_Base) - }, - {0, omit}, - "TP_IMS_5108_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5050_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5050_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5050_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5050_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5050_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - var template SipUrl v_PCSCF_IMS_B := mw_SipUrl_Host(f_GetEUTPcscfAddress(PX_EUT_B)); - var template SipUrl v_UE_A := mw_SipUrl_Host(f_GetEUTPublicId(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5050_01_ic(*, v_PCSCF_IMS_B, v_UE_A))}, - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {0, omit}, - "TP_IMS_5050_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5050_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5114_02_gm( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5114_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5050_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5114_02_ic( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5114_02", - false, - false - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_4XX_Base)}, - {}, - {0, omit}, - "TP_IMS_5114_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5108_06 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_06_gm( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_06", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5108_06 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5108_06_ic( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_06", - false, - false - ) - ); - p_monitorCompRef.done; - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_404NotFound_Base)}, - {}, - {0, omit}, - "TP_IMS_5108_06", - false, - false - ) - ); - p_monitorCompRef.done; - } - } - - group callChecks { - - - /** - * @desc Starts monitor component behavior for TP_IMS_5106_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5106_01_gm( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipRequest(mw_INVITE_Request_Base)}; - } - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - v_skip, - "TP_IMS_5106_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5106_01 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5106_01_ic( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_A_Uri := (mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)), - mw_SipUrl_Host(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_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5106_01_ic(v_SCSCF_A_Uri))}, - {mw_SipRequest(mw_INVITE_Request_Base)}, - v_skip, - "TP_IMS_5106_01", - false, - false - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5106_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5106_02_gm( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_UPDATE_Request_Base(*))}, - {}, - {0, omit}, - "TP_IMS_5106_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - - /** - * @desc Starts monitor component behavior for TP_IMS_5106_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5106_02_ic( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_A_Uri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)); - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mdw_TP_IMS_5106_02_p_ic(*,v_SCSCF_A_Uri))}, - { - mw_SipRequest(mdw_TP_IMS_5106_02_f_ic(*,v_SCSCF_A_Uri)), - mw_SipRequest(mw_UPDATE_Request_Base(*))}, - {0, omit}, - "TP_IMS_5106_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5121_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5121_02_gm( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - // TODO TP must be checked, currently only 2XX is checked - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipResponse(mdw_2XX_Base)}; - } - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mdw_2XX_Base)}, - {}, - v_skip, - "TP_IMS_5121_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - - /** - * @desc Starts monitor component behavior for TP_IMS_5121_02 - * @param p_monitorCompRef Reference to monitor component - */ - function f_mtc_check_TP_IMS_5121_02_ic( - ImsInterfaceMonitor p_monitorCompRef, - integer p_skipCount - ) runs on ImsTestCoordinator { - var template SipUrl v_SCSCF_A_Uri := mw_SipUrl_Host(f_GetEUTScscfAddress(PX_EUT_A)); - var template SkipType v_skip := {0, omit}; - - if(p_skipCount > 0) { - v_skip := {1, mw_SipResponse(mdw_2XX_Base)}; - } - - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_TP_IMS_5121_02_ic)}, - {mw_SipResponse(mdw_2XX_Base)}, - v_skip, - "TP_IMS_5121_02", - false, - false - ) - ); - p_monitorCompRef.done; - } - } - group mx { - function f_mtc_check_invite_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INVITE_Request_Base)}, - {}, - {0,omit}, - "f_mtc_check_invite_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_message ( ImsInterfaceMonitor p_monitorCompRef ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( f_imsIot_receive ( { mw_SipRequest ( mw_MESSAGE_Request_Base ) }, - { }, { 0, omit }, "f_mtc_check_message", false, false ) ); - p_monitorCompRef.done; - } - - function f_mtc_check_message_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_MESSAGE_Request_Base)}, - {}, - {0,omit}, - "f_mtc_check_message_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_ack_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_ACK_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_ack_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_prack_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_PRACK_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_prack_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_publish_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive ( - {mw_SipRequest(mw_PUBLISH_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_publish_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_bye_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_BYE_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_bye_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_update_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_UPDATE_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_update_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_register_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {}, - {0,omit}, - "f_mtc_check_register_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_notify_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_NOTIFY_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_notify_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_info_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_INFO_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_info_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_subscribe( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, - {}, - {0,omit}, - "f_mtc_check_subscribe", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_cancel_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_CANCEL_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_cancel_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_refer_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_REFER_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_refer_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_options_mx( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipRequest(mw_OPTIONS_Request_Base(?))}, - {}, - {0,omit}, - "f_mtc_check_options_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - function f_mtc_check_options ( ImsInterfaceMonitor p_monitorCompRef, charstring p_rcsCap ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( f_imsIot_receive ( { mw_SipRequest( mw_OPTIONS_Request ( p_rcsCap ) ) }, - { }, { 0, omit }, "f_mtc_check_options", false, false ) ); - p_monitorCompRef.done; - } - - function f_mtc_check_response ( ImsInterfaceMonitor p_monitorCompRef, template StatusLine p_statusLine, - charstring p_rcsCap ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( f_imsIot_receive ( { mw_SipResponse ( mw_Response ( p_statusLine, p_rcsCap ) ) }, - { }, { 0, omit },"f_mtc_check_response", false, false ) ); - p_monitorCompRef.done; - } - - function f_mtc_check_response_mx( - ImsInterfaceMonitor p_monitorCompRef, - template StatusLine p_statusLine - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - {mw_SipResponse(mw_Response_Base(p_statusLine, ?, ?))}, - {}, - {0,omit}, - "f_mtc_check_response_mx", - false, - false - ) - ); - p_monitorCompRef.done; - } - - } - - group msrpChecks { - - /** - * @desc Starts monitor component behavior - * @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. - * @return The INVITE request message value - *

    -         * ensure that {
    -         * when { 
    -         *     User A initiates the call to User B 
    -         * }
    -         * then { 
    -         *     UE_A sends the initial INVITE 
    -         *         containing an offered session-description indicating a session of MSRP
    -         *     }
    -         * }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator return SipMessage { - var SipMessage v_sip := { request := valueof(m_INVITE_Dummy) }; // used to store INVITE request message - - p_monitorCompRef.start( - f_imsIot_receive( - { - mw_SipRequest(mw_INVITE_MSRP_Session(mw_media_MSRP)) - }, - { }, - {0, omit}, - "TP_MSRP_9000_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - // Retrieve INVITE request message - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - log("### f_mtc_check_TP_MSRP_9000_01: v_invite=", v_sip.request.messageBody.sdpMessageBody.media_list); - - return v_sip; - } // End of function f_mtc_check_TP_MSRP_9000_01 - - /** - * @desc Starts monitor component behavior - * @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. - * @return The INVITE request message value - *
    -         * ensure that {
    -         * when { 
    -         *     UE_A sends SEND_MSRP to UE_B 
    -         * }
    -         * then { 
    -         *     UE_A receives the INVITE200 OK response 
    -         *         containing an offered session-description indicating a session of MSRP
    -         *     }
    -         * }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_02( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - template StatusLine p_statusLine - ) runs on ImsTestCoordinator return SipMessage { - var SipMessage v_sip := { request := valueof(m_INVITE_Dummy) }; - - p_monitorCompRef.start( - f_imsIot_receive( - { - mw_SipResponse(mw_Response_Base(p_statusLine, ?, ?)) - }, - { }, - {0, omit}, - "TP_MSRP_9000_02", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - // Retrieve INVITE response message - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - log("### f_mtc_check_TP_MSRP_9000_02: v_invite=", v_sip.response.messageBody.sdpMessageBody.media_list); - - return v_sip; - } // End of function f_mtc_check_TP_MSRP_9000_02 - - /** - * @desc Starts monitor component behavior - * @param p_monitorCompRef Reference to monitor component - * @param p_checkMessage TODO - * @param p_inviteReq INVITE request message - * @param p_inviteResp INVITE 200 OK response message - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A sends SEND_MSRP to UE_B 
    -         *     }
    -         *     then { 
    -         *         UE_B receives the SEND_MSRP containing 
    -         *             FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE 
    -         *             ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response
    -         *             Content-Type_header indicating text/plain
    -         *     }
    -         * }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_03( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - in SipMessage p_inviteReq, - in SipMessage p_inviteResp - ) runs on ImsTestCoordinator { - var SipMessage v_sip := { msrpRequest := valueof(m_msrpSend_Dummy) }; - var template MsrpURI v_toPath := valueof(m_msrpURIs_ToPath_Dummy); - var template MsrpURI v_fromPath := valueof(m_msrpURIs_FromPath_Dummy); - var SDP_media_desc_list v_mediasFromInvite; // Used to extract media description list from SDP in the INVITE request message - var SDP_media_desc_list v_mediasFromResponse; // Used to extract media description list from SDP in the INVITE 200 OK response message - - // Sanity checks - if (not(ispresent(p_inviteReq.request.messageBody))) { - setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_03: 'messageBody' field not present ***"); - } else if (not(ischosen(p_inviteReq.request.messageBody.sdpMessageBody))) { - setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_03: 'sdpMessageBody' field not selected ***"); - } else if (not(ispresent(p_inviteReq.request.messageBody.sdpMessageBody.media_list))) { - setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_03: 'media_list' field not present ***"); - } else { - if ( ispresent ( p_inviteReq.request.messageBody.sdpMessageBody.media_list ) ) { - v_mediasFromInvite := p_inviteReq.request.messageBody.sdpMessageBody.media_list; - } - v_mediasFromResponse := p_inviteResp.response.messageBody.sdpMessageBody.media_list; - if (lengthof(v_mediasFromInvite) == 0) { - setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_03: 'media_list' is empty ***"); - } else { - // Extrat fromPath and toPath - if ( - not(f_str2msrpUri(v_mediasFromResponse[0].attributes[0].msrp.attr_value, v_toPath)) or - not(f_str2msrpUri(v_mediasFromInvite[0].attributes[0].msrp.attr_value, v_fromPath))) { // FIXME To be refined - setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_03: 'media_list' is empty ***"); - } else { - p_monitorCompRef.start( - f_imsIot_receive( - { // Pass criteria - mw_MsrpRequest( - mw_msrpSEND_toPath_fromPath_contentType( - mw_toPath(v_toPath), // ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response - mw_fromPath(v_fromPath), // FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE - mw_contentType("text", "plain") // Content-Type_header indicating text/plain - ) - ) - }, - { }, // Fail criteria - {0, omit}, - "TP_MSRP_9000_03", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - // Retrieve MSRP SEND message - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - log("### f_mtc_check_TP_MSRP_9000_03: v_sip=", v_sip.msrpRequest); - } - } - } - } // End of function f_mtc_check_TP_MSRP_9000_03 - - /** - * @desc Starts monitor component behavior for TP_MSRP_9000_04 - * @param p_monitorCompRef Reference to monitor component - * @param p_checkMessage TODO - * @param p_inviteReq INVITE request message - * @param p_inviteResp INVITE 200 OK response message - *
    -         * ensure that { 
    -         *     when { 
    -         *         UE_B receives SEND_MSRP from UE_A 
    -         *     }
    -         *     then { 
    -         *         UE_B sends the 200_response_MSRP containing 
    -         *             FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE 
    -         *             ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response 
    -         *         }
    -         *     }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_04( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - in SipMessage p_inviteReq, - in SipMessage p_inviteResp - ) runs on ImsTestCoordinator { - var SipMessage v_sip := { msrpResponse := valueof(m_msrpResponse_Dummy) }; - var template MsrpURI v_toPath := valueof(m_msrpURIs_ToPath_Dummy); - var template MsrpURI v_fromPath := valueof(m_msrpURIs_FromPath_Dummy); - var SDP_media_desc_list v_mediasFromInvite; // Used to extract media description list from SDP in the INVITE request message - var SDP_media_desc_list v_mediasFromResponse; // Used to extract media description list from SDP in the INVITE 200 OK response message - - // Note that sanity checks were done in TP_MSRP_9000_03 - v_mediasFromInvite := p_inviteReq.request.messageBody.sdpMessageBody.media_list; - v_mediasFromResponse := p_inviteResp.response.messageBody.sdpMessageBody.media_list; - - p_monitorCompRef.start( - f_imsIot_receive( - { // Pass criteria - mw_MsrpResponse(mw_msrpResponse_toPath_fromPath( - mw_toPath(v_toPath), // ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response - mw_fromPath(v_fromPath) // FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE - )) - }, - { }, // Fail criteria - {0, omit}, - "TP_MSRP_9000_04", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - // Retrieve MSRP SEND message - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - log("### f_mtc_check_TP_MSRP_9000_04: v_sip=", v_sip.msrpResponse); - - - } // End of function f_mtc_check_TP_MSRP_9000_04 - - /** - * @desc Starts monitor component behavior for TP_MSRP_9000_05 - * @param p_monitorCompRef Reference to monitor component - * @param p_checkMessage TODO - *
    -         * ensure that { 
    -         *     when { 
    -         *         UE_B receives SEND_MSRP from UE_A during file transfert 
    -         *     }
    -         *     then { 
    -         *         UE_B sends a REPORT containing 
    -         *             a status indicating no error (200 OK)
    -         *         }
    -         *     }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_05( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - - p_monitorCompRef.start( - f_imsIot_receive( - { // Pass criteria - mw_MsrpRequest(mw_msrpREPORT_success) - }, - { }, // Fail criteria - {0, omit}, - "TP_MSRP_9000_05", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } // End of function f_mtc_check_TP_MSRP_9000_05 - - /** - * @desc Starts monitor component behavior for TP_MSRP_9000_06 - * @param p_monitorCompRef Reference to monitor component - *
    -         * ensure that { 
    -         *     when { 
    -         *          UE_A sends INVITE to IMS_A
    -         *     }
    -         *     then { 
    -         *         UE_B receives an INVITE from IMS_A containing 
    -         *             Request-URI set to IM CONFERENCE FACTORY URI 
    -         *             and MIME resource-list body including invited IM Users
    -         *         }
    -         *     }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_06( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest(mdw_TP_IMS_5097_04_gm(mw_SIP_URI_ConfFactory)) }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MSRP_9000_06", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_MSRP_9000_06 - - /** - * @desc Starts monitor component behavior for TP_IMS_5097_07 - * @param p_monitorCompRef Reference to monitor component - *
    -         * ensure that { 
    -         *     when { 
    -         *          UE_A sends REFER to IMS_A
    -         *     }
    -         *     then { 
    -         *         REFER containing 
    -         *             Refer-To header value equals to UE_D URI 
    -         *             and Refer-Sub header value set to "false"
    -         *         }
    -         *     }
    -         * 
    - */ - function f_mtc_check_TP_MSRP_9000_07( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest(mdw_TP_MSRP_9000_07(?, false)) }, - { mw_SipRequest(mw_REFER_Request_Base(?)) }, - {0, omit}, - "TP_MSRP_9000_07", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_MSRP_9000_07 - - } // End of group msrpChecks - - group epcChecks { - - /** - * Starts monitor component behavior for TP_EPC_6002_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A sends REGISTER to IMS_P-CSCF 
    -         *     }
    -         *     then { 
    -         *         IMS_P-CSCF receives REGISTER
    -         *     }
    -         *     when { 
    -         *         IMS_P-CSCF sends response on REGISTER to UE_A 
    -         *     }
    -         *     then { 
    -         *         UE_A receives response on REGISTER
    -         *     }
    -         * }
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.1 - */ - function f_mtc_check_TP_EPC_6002_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - f_mtc_check_TP_IMS_5011_01_gm(p_monitorCompRef, p_checkMessage); // Check: IMS_P-CSCF receives REGISTER - f_mtc_check_response_mx(p_monitorCompRef, c_statusLine200); // Check: UE_A receives response on REGISTER - } // End of function f_mtc_check_TP_EPC_6002_01 - - /** - * Starts monitor component behavior for TP_EPC_6003_01 - * @param p_ueRef_A Reference to IMS UE user component A - * @param p_monitorCompRef_A Reference to monitor component which initiate the INVITE request message - * @param p_compRef_A Reference originator user - * @param p_ueRef_B Reference to IMS UE user component B - * @param p_monitorCompRef_B Reference to monitor component which receive the INVITE request message - * @param p_compRef_B Reference destination user - * @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. - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A sends IP_packets to UE_B 
    -         *     }
    -         *     then { 
    -         *         EPC filters the IP_packets 
    -         *         and the IP_packets not visible on PO_SGi 
    -         *     } 
    -         *     when { 
    -         *         UE_B sends IP_packets to UE_A 
    -         *     } 
    -         *     then { 
    -         *         EPC filters the IP_packets 
    -         *         and the IP_packets not visible on PO_SGi
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.1 - */ - function f_mtc_check_TP_EPC_6003_01( - in EquipmentUser p_ueRef_A, - in ImsInterfaceMonitor p_monitorCompRef_A, - in EquipmentUser p_ueRef_B, - in ImsInterfaceMonitor p_monitorCompRef_B - ) runs on ImsTestCoordinator { - p_monitorCompRef_A.start ( - f_check_ExistingDedicatedBearer ( p_ueRef_A ) - ); - p_monitorCompRef_A.done; - p_monitorCompRef_B.start ( - f_check_ExistingDedicatedBearer ( p_ueRef_B ) - ); - p_monitorCompRef_B.done; - } // End of function f_mtc_check_TP_EPC_6003_01 - - /** - * Checks for existing bearer - * @param p_ueRef_A Reference to IMS UE user component A - * @param p_monitorCompRef_A Reference to monitor component A - * @param p_ueRef_B Reference to IMS UE user component B - * @param p_monitorCompRef_B Reference to monitor component B - * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). - * @see TS 103 029 V3.1.1 clause 7.1.1 - */ - function f_check_ExistingDedicatedBearer ( - in EquipmentUser p_ueRef - ) runs on ImsInterfaceMonitor { - // External function TODO - } // End of function f_check_ExistingDedicatedBearer - - /** - * Starts monitor component behavior for TP_EPC_6003_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A sends media to UE_B 
    -         *     }
    -         *     then { 
    -         *         EPC filters the IP_packets 
    -         *         and the IP_packets not visible on PO_SGi 
    -         *     } 
    -         *     when { 
    -         *         UE_B sends media to UE_A 
    -         *     } 
    -         *     then { 
    -         *         EPC filters the IP_packets 
    -         *         and the IP_packets not visible on PO_SGi
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.1 - */ - function f_mtc_check_TP_EPC_6003_02( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveIpMsg ( p_checkMessage , "TP_EPC_6003_02" ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6003_02 - - /** - * Starts monitor component behavior for TP_EPC_6004_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A starts_complete_network_detachment from EPC 
    -         *     }
    -         *     then { 
    -         *         EPC_PCRF removes_relevant_bearers 
    -         *         and EPC_PCRF triggers_termination of SIP_session 
    -         *         and EPC_PCRF triggers_termination of IMS_signalling
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6004_01( - IotEquipmentUser p_ue - ) runs on ImsTestCoordinator { - f_mtc_triggerUserCommand ( p_ue, "start complete network detachment"); - f_mtc_userRadioEnabled ( p_ue, false, true ); - } // End of function f_mtc_check_TP_EPC_6004_01 - - /** - * Starts monitor component behavior for TP_EPC_6005_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         EPC_PCRF triggers_termination of SIP_session 
    -         *     }
    -         *     then { 
    -         *         EPC_PCRF sends Abort-Session-Request to IMS_P-CSCF containing 
    -         *             Session-Id_AVP indicating session of SIP_session
    -         *             Abort-Cause_AVP indicating BEARER_RELEASED (0)
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6005_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { aSR_MSG := mw_ASR_dummy } , "TP_EPC_6005_01", true ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6005_01 - - /** - * Starts monitor component behavior for TP_EPC_6006_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         IMS_P-CSCF receives Abort-Session-Request for SIP_session 
    -         *     }
    -         *     then { 
    -         *         IMS_P-CSCF sends 
    -         *             Abort-Session-Answer to EPC_PCRF containing 
    -         *                 Session-Id_AVP indicating value_received in Abort-Session-Request
    -         *                 Result-Code_AVP indicating DIAMETER_SUCCESS(2001)
    -         *         and IMS_P-CSCF sends 
    -         *             Session-Termination-Request to EPC_PCRF containing 
    -         *                 Session-Id_AVP indicating value_received in Abort-Session-Request 
    -         *         and IMS_P-CSCF triggers_call_release 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6006_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - f_mtc_check_TP_EPC_6006_02 ( p_monitorCompRef ); - f_mtc_check_TP_EPC_6009_01 ( p_monitorCompRef ); - } // End of function f_mtc_check_TP_EPC_6006_01 - - /** - * Starts monitor component behavior for TP_EPC_6006_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         IMS_P-CSCF receives Abort-Session-Request for IMS_signalling 
    -         *     }
    -         *     then { 
    -         *         IMS_P-CSCF sends 
    -         *             Abort-Session-Answer to EPC_PCRF containing 
    -         *                 Session-Id_AVP indicating value_received in Abort-Session-Request
    -         *                 Result-Code_AVP indicating DIAMETER_SUCCESS(2001)
    -         *         and IMS_P-CSCF sends 
    -         *             Session-Termination-Request to EPC_PCRF containing 
    -         *                 Session-Id_AVP indicating value_received in Abort-Session-Request 
    -         *         and IMS_P-CSCF triggers_call_release 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6006_02( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { aSA_MSG := mw_ASA_dummy } , "TP_EPC_6006_02", true ) - ); - p_monitorCompRef.done; - f_mtc_check_TP_EPC_6022_01 ( p_monitorCompRef ); - } // End of function f_mtc_check_TP_EPC_6006_02 - - /** - * Starts monitor component behavior for TP_EPC_6009_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         EPC_PCRF receives Session-Termination-Request from IMS_P-CSCF containing 
    -         *             Session-Id_AVP indicating session for SIP_session
    -         *     }
    -         *     then { 
    -         *         EPC_PCRF sends Session-Termination-Answer to IMS_P-CSCF containing 
    -         *             Session-Id_AVP indicating SIP_session value_received in Session-Termination-Request
    -         *             Result-Code_AVP indicating DIAMETER_SUCCESS(2001) 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6009_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { sTA_MSG := mw_STA_dummy } , "TP_EPC_6009_01", true ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6009_01 - - /** - * Starts monitor component behavior for TP_EPC_6009_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         EPC_PCRF receives Session-Termination-Request from IMS_PCSCF containing 
    -         *             Session-Id_AVP indicating IMS_signalling value_received in Session-Termination-Request 
    -         *             and Result-Code_AVP indicating DIAMETER_SUCCESS(2001) 
    -         *     }
    -         *     then { 
    -         *         EPC_PCRF sends Session-Termination-Answer to IMS_P-CSCF containing 
    -         *             Session-Id_AVP indicating IMS_signalling value_received in Session-Termination-Request 
    -         *             Result-Code_AVP indicating DIAMETER_SUCCESS(2001) 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6009_02( - in EquipmentUser p_ueRef, - in ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_check_ExistingDedicatedBearer ( p_ueRef ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6009_02 - - /** - * Starts monitor component behavior for TP_EPC_6010_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         IMS_P-CSCF triggers_call_release
    -         *     }
    -         *     then { 
    -         *         IMS_P-CSCF sends BYE to UE_A containing 
    -         *             Request_URI indicating contact_address from Contact_header of UE_A 
    -         *             and To_header indicating the initial 200_OK_From_value 
    -         *             and From_header indicating the initial INVITE_To_value 
    -         *             and Call-ID_header indicating the initial INVITE_Call_Id_value 
    -         *             and CSeq_header including an incremented Sequence_Number 
    -         *             and Route_header indicating specific_routing_information for UE_A 
    -         *             and Reason_header indicating 503_service_unavailable 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - function f_mtc_check_TP_EPC_6010_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_imsIot_receive ( - { mw_SipRequest ( mw_BYE_Request_Base( ? ) ) }, { }, { 0, omit }, - "TP_EPC_6010_01", false, p_checkMessage - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6010_01 - - /** - * Starts monitor component behavior for TP_EPC_6012_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         IMS_P-CSCF receives 2xx_Response on REGISTER from IMS_SCSCF
    -         *     }
    -         *     then { 
    -         *         UE_A receives 2xx_Response 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.2.1.1 - */ - function f_mtc_check_TP_EPC_6012_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_imsIot_receive ( - { mw_SipResponse ( mw_200OK_Base ) }, { }, { 0, omit }, - "TP_EPC_6012_01", true, p_checkMessage - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6012_01 - - /** - * Starts monitor component behavior for TP_EPC_6012_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. - */ - function f_mtc_check_TP_EPC_6012_02( - ImsInterfaceMonitor p_monitorCompRef, - ImsInterfaceMonitor p_monitorCompRef_B - ) runs on ImsTestCoordinator { - f_mtc_check_TP_EPC_6012_01 ( p_monitorCompRef, false ); - f_mtc_check_TP_EPC_6022_01 ( p_monitorCompRef ); - f_mtc_check_TP_EPC_6009_01 ( p_monitorCompRef ); - } // End of function f_mtc_check_TP_EPC_6012_02 - - /** - * Starts monitor component behavior for TP_EPC_6013_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         IMS_P-CSCF receives 2xx_Response on REGISTER from IMS_SCSCF
    -         *     }
    -         *     then { 
    -         *         IMS_P-CSCF sends AA-Request to EPC_PCRF containing 
    -         *             a framed IPv4_Address AVP indicating IPv4_Address of UE_A 
    -         *             or a framed IPv6_Address AVP indicating IPv6_Address of UE_A 
    -         *             and one or more Media-Component-Description_AVP containing 
    -         *                 Media-Component-Number_AVP indicating value 0
    -         *                 and Flow-Description_AVP indicating 
    -         *                     indicating permit_in_ip from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) 
    -         *                     or permit_in_udp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) 
    -         *                     or permit_in_tcp from (UE_A-IP_address and UE_A_port_number) to (P-CSCF-IP_address and P-CSCF_port_number) 
    -         *                 and Flow-Description_AVP indicating 
    -         *                     permit_out_ip from (P-CSCF-IP_address PCSCF_port_number) to UE_A-IP_address 
    -         *                     or permit_out_udp from (P-CSCF-IP_address PCSCF_port_number) to UE_A-IP_address 
    -         *                     or permit_out_tcp from (P-CSCF-IP_address PCSCF_port_number) to UE_A-IP_address 
    -         *                 and Flow-Usage_AVP indicating AF_SIGNALING(0)
    -         *                 and Flow-Status_AVP indicating ENABLED(2)
    -         *                 and AF-Signalling-Protocol_AVP indicating SIP(1)
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.2.1.1 - */ - function f_mtc_check_TP_EPC_6013_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { aAR_MSG := mw_AAR_dummy } , "TP_EPC_6013_01", true ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6013_01 - - /** - * Starts monitor component behavior for TP_EPC_6014_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. - */ - function f_mtc_check_TP_EPC_6014_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { aAA_MSG := mw_AAA_dummy } , "TP_EPC_6014_01", true ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6014_01 - - /** - * Starts monitor component behavior for TP_EPC_6015_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. - */ - function f_mtc_check_TP_EPC_6015_01( - ImsInterfaceMonitor p_monitorCompRef_A, - ImsInterfaceMonitor p_monitorCompRef_B - ) runs on ImsTestCoordinator { - f_mtc_check_subscribe ( p_monitorCompRef_A ); - f_mtc_check_subscribe ( p_monitorCompRef_B ); - } // End of function f_mtc_check_TP_EPC_6015_01 - - /** - * Starts monitor component behavior for TP_EPC_6016_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. - */ - function f_mtc_check_TP_EPC_6016_01 ( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_imsIot_receive ( - { mw_SipResponse ( mdw_4XX_Base ) }, { }, { 0, omit }, - "TP_EPC_6016_01", false, false - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6016_01 - - /** - * Starts monitor component behavior for TP_EPC_6017_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. - *
    -         * ensure that {
    -         *     when { 
    -         *         UE_A sends REGISTER for de-registration to IMS_P-CSCF 
    -         *     } 
    -         *     then { 
    -         *          UE_A receives 2xx_Response from IMS_P-CSCF 
    -         *          and IMS_P-CSCF sends Session-Termination-Request to EPC_PCRF containing 
    -         *              Session Session-Id_AVP indicating session for IMS_signalling session 
    -         *     } 
    -         * } 
    -         * 
    - * @see TS 103 029 V3.1.1 clause 7.2.2 - */ - function f_mtc_check_TP_EPC_6017_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage, - ImsInterfaceMonitor p_monitorCompRef_B - ) runs on ImsTestCoordinator { - f_mtc_check_TP_EPC_6018_01 ( p_monitorCompRef, p_checkMessage ); - f_mtc_check_TP_EPC_6022_01 ( p_monitorCompRef_B ); - } // End of function f_mtc_check_TP_EPC_6017_01 - - /** - * Starts monitor component behavior for TP_EPC_6018_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. - * - * @see TS 103 029 V3.1.1 clause 7.2.2 - */ - function f_mtc_check_TP_EPC_6018_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive ( - { mw_SipRequest ( mw_REGISTER_Request_Base ) }, { }, { 0, omit }, - "TP_EPC_6018_01", false, p_checkMessage - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6018_01 - - /** - * Starts monitor component behavior for TP_EPC_6021_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. - */ - function f_mtc_check_TP_EPC_6021_01( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - f_mtc_check_TP_EPC_6018_01 ( p_monitorCompRef, p_checkMessage ); - f_mtc_check_TP_EPC_6010_01 ( p_monitorCompRef, p_checkMessage ); - } // End of function f_mtc_check_TP_EPC_6021_01 - - /** - * Starts monitor component behavior for TP_EPC_6022_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. - */ - function f_mtc_check_TP_EPC_6022_01( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_receiveDiameterMsg ( { sTR_MSG := mw_STR_dummy } , "TP_EPC_6022_01", true ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6022_01 - - /** - * Starts monitor component behavior for TP_EPC_6024_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. - */ - function f_mtc_check_TP_EPC_6024_01( - ImsInterfaceMonitor p_monitorCompRef, - IotEquipmentUser p_ue - ) runs on ImsTestCoordinator { - f_mtc_triggerUserCommand ( p_ue, "Trigger administrative de-registration for UE A"); - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest ( mw_NOTIFY_Request_Base ( ? ) ) }, { }, { 0, omit }, - "TP_EPC_6024_01", false, false - ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6024_01 - - /** - - * Starts monitor component behavior for TP_EPC_6026_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. - */ - function f_mtc_check_TP_EPC_6026_01( - ImsInterfaceMonitor p_monitorCompRef, - IotEquipmentUser p_ue - ) runs on ImsTestCoordinator { - f_mtc_triggerUserCommand ( p_ue, "Trigger registration expiration for UE A"); - f_mtc_check_TP_EPC_6022_01 ( p_monitorCompRef ); - } // End of function f_mtc_check_TP_EPC_6026_01 - - /** - * Starts monitor component behavior for TP_EPC_6027_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. - */ - function f_mtc_check_TP_EPC_6027_06( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start ( - f_imsIot_receive( - { mw_SipResponse ( mw_180Ringing_Base ) }, { }, { 0, omit }, - "TP_EPC_6027_06", false, p_checkMessage ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6027_06 - - /** - * Starts monitor component behavior for TP_EPC_6029_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. - */ - function f_mtc_check_TP_EPC_6029_03( - ImsInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest ( mw_ACK_Request_Base ( ? ) ) }, { }, { 0, omit }, - "TP_EPC_6029_03", false, p_checkMessage ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6029_03 - - /** - * Starts monitor component behavior for TP_EPC_6033_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. - *
    -         * ensure that {
    -         * 	when { IMS_P-CSCF receives INVITE with no SDP from UE_A }
    -         * 		then { IMS_P-CSCF does not send AA-Request to EPC_PCRF }
    -         * 		when { IMS_P-CSCF receives 200_response on INVITE with no SDP from IMS_S-CSCF }
    -         * 			then { IMS_P-CSCF does not send AA-Request to EPC_PCRF }
    -         * 			when { IMS_P-CSCF receives ACK with no SDP from UE_A }
    -         * 				then { IMS_P-CSCF does not send AA-Request to EPC_PCRF }
    -         * }
    -         * 
    - */ - function f_mtc_check_TP_EPC_6033_01( - ImsInterfaceMonitor p_monitorCompRef_A, - ImsInterfaceMonitor p_monitorCompRef_B - ) runs on ImsTestCoordinator { - p_monitorCompRef_A.start( - f_imsIot_receive( - { mw_SipRequest ( mw_INVITE_Request_Base ) }, { }, { 0, omit }, - "TP_EPC_6033_01 INVITE", false, false ) - ); - p_monitorCompRef_A.done; - f_mtc_check_TP_EPC_6012_01 ( p_monitorCompRef_A, false ); - f_mtc_check_TP_EPC_6029_03 ( p_monitorCompRef_A, false ); - f_mtc_check_TP_EPC_6013_01 ( p_monitorCompRef_B ); - } // End of function f_mtc_check_TP_EPC_6033_01 - - /** - * Starts monitor component behavior for TP_EPC_6034_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. - */ - function f_mtc_check_TP_EPC_6034_02( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipRequest ( mw_CANCEL_Request_Base ( ? ) ) }, { }, { 0, omit }, - "TP_EPC_6034_02", false, false ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6034_02 - - /** - * Starts monitor component behavior for TP_EPC_6034_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. - */ - function f_mtc_check_TP_EPC_6034_04( - ImsInterfaceMonitor p_monitorCompRef - ) runs on ImsTestCoordinator { - p_monitorCompRef.start( - f_imsIot_receive( - { mw_SipResponse ( mw_Response_Base ( c_statusLine486, ?, ? ) ) }, { }, { 0, omit }, - "TP_EPC_6034_04", false, false ) - ); - p_monitorCompRef.done; - } // End of function f_mtc_check_TP_EPC_6034_04 - - } // End of group epcChecks - -} // end group -}// end module \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..9680275d453990c569aa1410e78710835f02f7f4 --- /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 index 6e0c38396e16531d18a4e1ad78bc8832aef69eb1..9a94e23cc26e6e76f9cc7b3a78df047ff5bd4d6a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -1,63 +1,76 @@ /** - * @author STF 370 + * @author STF 370, TTF006; * @version $Id: $ - * @desc This module provides common function for TestCoordinator component. + * @desc This module provides common function for TestCoordinator component. */ module AtsImsIot_Functions { - - import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } - import from AtsImsIot_TestSystem all; - import from LibSip_SIPTypesAndValues all; - import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } - import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } - import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType; } - import from LibIms_UpperTester all; - import from LibUpperTester all; - import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } - import from LibIot_Functions { function f_getE2EVerdict; } - import from LibIot_TypesAndValues { type DefaultList; } + + //LibDiameter import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} - - 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; - } - + + //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 @@ -67,103 +80,103 @@ module AtsImsIot_Functions { * 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; - } + 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 @@ -184,289 +197,289 @@ module AtsImsIot_Functions { f_mtc_userCheckCallEstablished(p_ueRefB); if(f_getE2EVerdict() == pass) { - v_success := true; + 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; + + /** + * + * @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.start(f_checkUserRemoveNewMediaStream()); - p_userCompRef.done; + 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; - } - - /** + 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; - } + 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 @@ -476,218 +489,218 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - return v_status; + 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; } - /** - * @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; - + 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; - + 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 - */ + 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; - } + 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 + * 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 @@ -702,7 +715,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to Verify that user is informed - * of peer user presence information + * 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 @@ -717,7 +730,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to Verify that user is not informed - * of peer user presence information + * 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 @@ -732,7 +745,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to subscribes presence - * information from peer user + * information from peer user * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -747,7 +760,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to subscribes to resource list - * userPRES_list containing peer user SIP URI + * 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 @@ -777,8 +790,8 @@ module AtsImsIot_Functions { /** * @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 + * 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 @@ -793,7 +806,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to authorizes peer user to be - * informed of its own presence information + * 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 @@ -817,7 +830,7 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //if( p_calledParty.publicId == "dummy" ) { return true; } //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); return v_status; } @@ -825,7 +838,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that Conference is being set up + * 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 @@ -840,7 +853,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that Conference is established + * that Conference is established * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -865,7 +878,7 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //if( p_calledParty.publicId == "dummy" ) { return true; } //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); return v_status; } @@ -914,7 +927,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify user is alerted when - * peer joins the conference call + * 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 @@ -967,14 +980,14 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //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 + * of incoming chat invitation * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -989,7 +1002,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to initiate chat 1-to-Many - * of incoming chat invitation + * 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 @@ -1006,7 +1019,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to Add a new participant in a chat 1-to-Many - * of incoming chat invitation + * of incoming chat invitation * @param p_ueRef Reference to IMS UE user component * @param p_calledParty Reference to the new participant * @return @@ -1022,7 +1035,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that invitation to 1-to-1 chat session has reached + * 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 @@ -1037,7 +1050,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that invitation to 1-to-Many chat session has reached + * 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 @@ -1108,7 +1121,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is - * informed that 1-to-1 chat session has ended + * 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 @@ -1123,7 +1136,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to automatically accepts - * 1-to-1 chat invitation + * 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 @@ -1138,7 +1151,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to rejects the invitation - * to chat session + * to chat session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1153,7 +1166,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that there is no answer + * 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 @@ -1168,7 +1181,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef given reports that call has been - * cancelled + * cancelled * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1183,7 +1196,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef given reports that call has been - * terminated + * terminated * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1219,12 +1232,12 @@ module AtsImsIot_Functions { * otherwise false * @see RFC 4976 */ - function f_mtc_userCheckMSRPAuthenticated(EquipmentUser p_ueRef) + function f_mtc_userCheckMSRPAuthenticated(EquipmentUser p_ueRef) runs on TestCoordinator return boolean { - var boolean v_status := true; - // TODO - return v_status; - } + var boolean v_status := true; + // TODO + return v_status; + } /** * @desc Trigger UE given by p_ueRef to initiate chat conference @@ -1238,14 +1251,14 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //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 + * 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 @@ -1260,7 +1273,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that invitation to chat conference session has reached + * 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 @@ -1275,7 +1288,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user join to chat - * conference session + * conference session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1290,7 +1303,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that users perform - * chating conference + * chating conference * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1305,7 +1318,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user leave to chat - * conference session + * conference session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1320,7 +1333,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is - * informed that conference chat session has ended + * 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 @@ -1335,7 +1348,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that peer user leave chat - * conference session + * conference session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1350,7 +1363,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user rejoin to chat - * conference session + * conference session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1360,14 +1373,14 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //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 + * 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 @@ -1382,7 +1395,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that peer user rejoin chat - * conference session + * conference session * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1407,14 +1420,14 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //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 + * 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 @@ -1429,7 +1442,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that invitation to file transfer session has reached + * 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 @@ -1486,7 +1499,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to automatically accepts - * file transfer invitation + * file transfer invitation * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1557,7 +1570,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is - * informed that file transfer has ended + * 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 @@ -1572,7 +1585,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is - * informed that file transfer has terminated + * 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 @@ -1615,7 +1628,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef given reports that file transfer has been - * cancelled + * cancelled * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1640,7 +1653,7 @@ module AtsImsIot_Functions { runs on TestCoordinator return boolean { var boolean v_status := true; // TODO - //if( p_calledParty.publicId == "dummy" ) { return true; } + //if( p_calledParty.publicId == "dummy" ) { return true; } //v_status := f_mtc_userInitiateCallSuccessful(p_ueRef); return v_status; } @@ -1689,7 +1702,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to check that user is informed that - * request has been answered + * request has been answered * @param p_userCompRef Reference to IMS UE user component * @return * true in case of successfull execution of the trigger command @@ -1732,7 +1745,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that connected user cannot share content + * 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 @@ -1747,7 +1760,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that connected user cannot share content + * 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 @@ -1790,7 +1803,7 @@ module AtsImsIot_Functions { /** * @desc Trigger UE given by p_ueRef to verify that user is informed - * that request has been rejected + * 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 @@ -1804,211 +1817,211 @@ module AtsImsIot_Functions { } - /** - * @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 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" }; + 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; - } - + + 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; - } - + */ + 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; - } - + */ + 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; + 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; - } - - /* - * + 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; + 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; - } - + 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; + 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].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; - } + 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; + } /* * @@ -2034,8 +2047,8 @@ module AtsImsIot_Functions { } // end if } // end for i log("f_getPresUser: Did not find specified product in PX_IMS_USER_DATA"); - return c_dummyInfo; - } + return c_dummyInfo; + } /* * @@ -2061,8 +2074,8 @@ module AtsImsIot_Functions { } // end if } // end for i log("f_getFtUser: Did not find specified product in PX_IMS_USER_DATA"); - return c_dummyInfo; - } + return c_dummyInfo; + } /* * @@ -2088,8 +2101,8 @@ module AtsImsIot_Functions { } // end if } // end for i log("f_getShareUser: Did not find specified product in PX_IMS_USER_DATA"); - return c_dummyInfo; - } + return c_dummyInfo; + } /* * @@ -2101,7 +2114,7 @@ module AtsImsIot_Functions { 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); @@ -2115,316 +2128,332 @@ module AtsImsIot_Functions { } // 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 - */ + 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; + 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 - */ + 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; + 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."; - } + 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 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 { + /** + * @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; @@ -2478,32 +2507,32 @@ module AtsImsIot_Functions { 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."); + 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."); + 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."); - } + 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 { + /** + * @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; @@ -2535,259 +2564,444 @@ module AtsImsIot_Functions { 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; + } + + 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 { + 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 ); + 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; - } + [] 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 ImsInterfaceMonitor { - timer t_local := PX_MAX_MSG_WAIT; - var boolean v_loop := true; - log ( "### " & p_log ); + } + } + } + + 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 { - [] rxPort.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; - } - } - [] rxPort.receive { - 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; + } } - } - } - } - - 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 ); + } + } //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 ***"); - } - } - } - } - } + 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 { + 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 (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***"); - } + []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); + } } - } - } - - 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; - } - } + [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); + } + } + } - /** - * @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 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; - 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; - icpPort.send(v_msg); - } - } - } - }// end group - - function f_setInterfaceNameOnComponent(charstring p_name) runs on ImsInterfaceMonitor{ - vc_interfaceName := p_name; - } - - group general_td_functions { - - /** + }// 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 @@ -2829,7 +3043,7 @@ module AtsImsIot_Functions { * allows read access to the top element of incoming port queues * without removing the top element from the queue. */ - function f_imsIot_receive( + function f_imsIot_receive( // FIXME To be removed in template SipMessageList p_passCriteria, in template SipMessageList p_failCriteria, in template SkipType p_skip, @@ -2839,140 +3053,460 @@ module AtsImsIot_Functions { ) 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); + 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 - } - - /** + + // 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. + * 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( + 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 & " ****"); - } + 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 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( - 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; - } + /** + * @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"); - } + } - }//end group - - - group misc { - - /** + + /** + * @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); - } - - } + 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 0000000000000000000000000000000000000000..b8bd9b00832f8eb4758962bb9131d4a5e59c80dc --- /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 0000000000000000000000000000000000000000..ca42c582af795f85d6bb1b7380fc627c9de1905f --- /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 0000000000000000000000000000000000000000..0dd94a779ed5a8eaf86b84ca69aedabf826a347a --- /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 0000000000000000000000000000000000000000..a88b3f0c7ac6e23809c9ecb75d09d45bb7277747 --- /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 0000000000000000000000000000000000000000..a41eadaddcaa983793f8f76e848273aacbb9edf7 --- /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 0000000000000000000000000000000000000000..bde4e5489100212c57e4ffdd3e963c2037e50f94 --- /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 0000000000000000000000000000000000000000..55300d3592d5192377b99394245d3ecb8497edba --- /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 0000000000000000000000000000000000000000..cec6cb6aaee05febe453544f7d2187da7a9c8208 --- /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 0000000000000000000000000000000000000000..7596bc0d4586027312dc4f03354d17bda475fb8c --- /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 0000000000000000000000000000000000000000..f46956de12723e164ff64f815ff1636c3be18682 --- /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 0000000000000000000000000000000000000000..0559a250ed280d9a5aa2b102e20d70e4ef87feb7 --- /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 0000000000000000000000000000000000000000..69203d79b2c941dc9e904fcd50a520026822d8ec --- /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 0000000000000000000000000000000000000000..21076ef9a2207c352d39fc2ae51efc3189860372 --- /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 0000000000000000000000000000000000000000..c6aaded8d4ba8de6bfaf61368c3f3fd0f97b9ff4 --- /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 0000000000000000000000000000000000000000..9ccf70c563b167d1ea1a52d4523d73dd46a54878 --- /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 0000000000000000000000000000000000000000..606a44dae44cdab2468f4bb427ffc6c0f43a858f --- /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 0000000000000000000000000000000000000000..ebfc870fb79f194fc152f096f38f60e1d81dd008 --- /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 0000000000000000000000000000000000000000..a0bdc8be2e313011d1f3249921559f3264a7a0c1 --- /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 0000000000000000000000000000000000000000..92729988708498b921818b0aee493b941c3e3199 --- /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 index 4c023cab413d074949806fb331091b22f69946f4..94df95f1cc06e7a08d97f3b52c79eeb7fbbc15cc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -29,6 +29,11 @@ module AtsImsIot_Templates { }; 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, @@ -45,7 +50,7 @@ module AtsImsIot_Templates { PX_IOT_MERGE_TOOL_PATH, PX_IOT_IFACES; } - import from LibIms_PIXITS { + import from AtsImsIot_PIXITS { modulepar PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN }; @@ -118,7 +123,11 @@ module AtsImsIot_Templates { template NAPTRmessage mw_EnumQuery_Base := { enumMessage := { query := { - enumQuestion_list := ? length (1 .. infinity) + header := ?, + enumQuestion_list := ? length (1 .. infinity), + enumResponse_list := *, + authority_list := *, + additional_list := * } } } @@ -175,7 +184,7 @@ module AtsImsIot_Templates { template GenericParam mw_User_Caps ( charstring p_rcseTags ) := { id := ?, - paramValue := p_rcseTags + paramValue := { quotedString := p_rcseTags } } } @@ -185,7 +194,7 @@ module AtsImsIot_Templates { * * @desc Message Request containing a message body greater than 1500 bytes. */ - template MESSAGE_Request mdw_TP_IMS_4002_01(template CallId p_callId) modifies mw_MESSAGE_Request_Base := { + template MESSAGE_Request mdw_MESSAGE_1500c(template CallId p_callId := ?) modifies mw_MESSAGE_Request_Base := { msgHeader := { contact := * }, @@ -230,7 +239,7 @@ module AtsImsIot_Templates { * } }, - authorization := m_Authorization(mw_credentialIntegrityNo), + authorization := mw_Authorization(mw_credentialIntegrityNo), securityClient := omit, securityVerify :=omit, pVisitedNetworkID := mw_PVisitedNetworkIDAny @@ -276,7 +285,7 @@ module AtsImsIot_Templates { {id := "orig-ioi", paramValue := ?}, * }), - authorization := m_Authorization(mw_credentialIntegrityYes), + authorization := mw_Authorization(mw_credentialIntegrityYes), securityClient := omit, securityVerify :=omit, pVisitedNetworkID := mw_PVisitedNetworkIDAny @@ -312,7 +321,7 @@ module AtsImsIot_Templates { * } }, - authorization := m_Authorization(mw_credentialIntegrityIpAssocPending), + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending), securityClient := omit, securityVerify :=omit, pVisitedNetworkID := mw_PVisitedNetworkIDAny @@ -332,7 +341,7 @@ module AtsImsIot_Templates { {id := "orig-ioi", paramValue := ?}, * }), - authorization := m_Authorization(mw_credentialIntegrityIpAssocYes), + authorization := mw_Authorization(mw_credentialIntegrityIpAssocYes), securityClient := omit, securityVerify :=omit, pVisitedNetworkID := mw_PVisitedNetworkIDAny @@ -345,7 +354,7 @@ module AtsImsIot_Templates { */ template REGISTER_Request mdw_TP_IMS_5089_01_ic_when modifies mw_REGISTER_Request_Base := { msgHeader := { - authorization := m_Authorization(mw_credentialIntegrityNo) + authorization := mw_Authorization(mw_credentialIntegrityNo) } } @@ -355,7 +364,7 @@ module AtsImsIot_Templates { */ template REGISTER_Request mdw_TP_IMS_5089_02_ic_when modifies mw_REGISTER_Request_Base := { msgHeader := { - authorization := m_Authorization(mw_credentialIntegrityIpAssocPending) + authorization := mw_Authorization(mw_credentialIntegrityIpAssocPending) } } @@ -365,7 +374,7 @@ module AtsImsIot_Templates { */ template REGISTER_Request mdw_TP_IMS_5092_01_ic_when modifies mw_REGISTER_Request_Base := { msgHeader := { - authorization := m_Authorization(mw_credentialIntegrityNo) + authorization := mw_Authorization(mw_credentialIntegrityNo) } } @@ -399,7 +408,7 @@ module AtsImsIot_Templates { */ template Response mdw_TP_IMS_5089_01_ic modifies mw_401Unauthorized_Base := { msgHeader := { - wwwAuthenticate := mw_WwwAuthenticate + wwwAuthenticate := mw_WwwAuthenticate_AKA } } @@ -431,7 +440,7 @@ module AtsImsIot_Templates { }, msgHeader := { fromField := mw_From (p_eutAUri), - toField := mw_To_NameAddr_SipUrl (p_EUTB_PublicId, ?, ?), + 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)), @@ -776,14 +785,15 @@ module AtsImsIot_Templates { 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 := { - fieldName := ROUTE_E, - routeBody := { - ?, - complement(mw_routeBody(p_SCSCF_SIP_URI)), - * - } - } + route := * +// route := { +// fieldName := ROUTE_E, +// routeBody := { +// ?, +// complement(mw_routeBody(p_SCSCF_SIP_URI)), +// * +// } +// } } } @@ -1889,6 +1899,13 @@ module AtsImsIot_Templates { 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, @@ -1934,6 +1951,38 @@ module AtsImsIot_Templates { 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, ?}), @@ -1967,7 +2016,7 @@ module AtsImsIot_Templates { } template REGISTER_Request mdw_TP_IMS_5088_01_gm modifies mw_REGISTER_Request_Base := { - msgHeader := {authorization := m_Authorization(mw_credentialIntegrityYes)} + 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 := { @@ -2178,12 +2227,12 @@ module AtsImsIot_Templates { displayName := *, addrSpec := { scheme := "sip", - userInfo := *, - hostPort := { - host := p_Host, - portField := *}, - urlParameters := *, - headers := omit} + components := {sip := { + userInfo := *, + hostPort := {host := p_Host,portField := *} + }}, + urlParameters := *, + headers := omit} }, rrParam := omit }} @@ -2196,6 +2245,7 @@ module AtsImsIot_Templates { template PChargingVector mw_PChargingVector (template SemicolonParam_List p_List) := { fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, chargeParams := p_List } // template @@ -2227,7 +2277,7 @@ module AtsImsIot_Templates { {nameAddr := ?, genericParams := p_SemicolonParam_List}, * } } - template WwwAuthenticate mw_WwwAuthenticate := { + template WwwAuthenticate mw_WwwAuthenticate_AKA := { fieldName := WWW_AUTHENTICATE_E, challenge := { digestCln := { //{id := "username", paramValue := ?}, @@ -2237,7 +2287,7 @@ module AtsImsIot_Templates { {id := "autn", paramValue := ?}, {id := "ik", paramValue := ?}, {id := "ck", paramValue := ?}, - {id := "algorithm", paramValue := "AKAv1-MD5"}, + {id := "algorithm", paramValue := { quotedString := "AKAv1-MD5" }}, *} } @@ -2250,7 +2300,19 @@ module AtsImsIot_Templates { {id := "realm", paramValue := ?}, // TODO containing operator ID {id := "nonce", paramValue := ?}, {id := "qop", paramValue := ?}, - {id := "algorithm", paramValue := "MD5"}, + {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 := ?}, *} } @@ -2264,7 +2326,7 @@ module AtsImsIot_Templates { acRcParams := { { id := "Video Sharing Feature Tag", - paramValue := "+g.3gpp.cs-voice" + paramValue := {quotedString:="+g.3gpp.cs-voice"} } } } @@ -2280,7 +2342,7 @@ module AtsImsIot_Templates { contactParams := { { id := "Video Sharing Feature Tag", - paramValue := "+g.3gpp.cs-voice" + paramValue := {quotedString:="+g.3gpp.cs-voice"} } } } @@ -2294,21 +2356,24 @@ module AtsImsIot_Templates { group AuxiliaryInformationElementTemplates { template Credentials mw_credentialIntegrityYes := { - otherResponse := {authScheme := ?, authParams := { {"integrity-protected", "yes"},*} // TODO + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="yes"}},*} // TODO }} + template Credentials mw_credentialIntegrityNo := { - otherResponse := {authScheme := ?, authParams := { {"integrity-protected", "no"},*} // TODO + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="no"}},*} // TODO }} + template Credentials mw_credentialIntegrityIpAssocPending := { otherResponse := { authScheme := ?, authParams := { - complement ({"integrity-protected", "no"},{"integrity-protected", "yes"},{"integrity-protected", "ip-assoc-yes"}), *//alowed parameters are {"integrity-protected" id with "ip-assoc-pending" value or no "integrity-protected" id} + 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", "ip-assoc-yes"},*} // TODO + otherResponse := {authScheme := ?, authParams := { {"integrity-protected", {quotedString:="ip-assoc-yes"}},*} // TODO }} template RouteBody mw_routeBodyTH (template SipUrl p_sipurl):= { @@ -2330,24 +2395,31 @@ module AtsImsIot_Templates { template SipUrl mw_SIP_URI_Base := { scheme := "sip", // meaning "not tel" - userInfo := ?, - hostPort := ?, + components := { sip := { + userInfo := ?, + hostPort := ? + } + }, urlParameters := *, headers := * } template SipUrl mw_TEL_URI_Base := { scheme := "tel", - userInfo := ?, - hostPort := *, + components := { tel := { + subscriber := ? + } + }, urlParameters := *, headers := * } template SipUrl mw_SIP_URI_ConfFactory modifies mw_SIP_URI_Base := { - userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, - hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} + components := { sip := { + userInfo := {userOrTelephoneSubscriber:=PX_IMS_SUT_CONF_FACTORY_NAME, password:=*}, + hostPort := {host := PX_IMS_SUT_CONF_HOME_DOMAIN, portField := *} + } } } } //end group diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..ce18a371d79cd7c25531969f7ede57b2761eff34 --- /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 0000000000000000000000000000000000000000..4624eff87d242859548fb3da05c8adfacc9bd069 --- /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 0000000000000000000000000000000000000000..4d82cc0f3b7e301dfd2aed15b89766799e34931a --- /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_TestCases_CALL.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_CALL.ttcn deleted file mode 100644 index 2a74342799172dcaf5a9de9663d12aba69e41a83..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_CALL.ttcn +++ /dev/null @@ -1,2108 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions. - */ -module AtsImsIot_TestCases_CALL { - import from AtsImsIot_Behavior { - function all; - } - - import from AtsImsIot_Functions { - function all; - } - - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} - - import from LibIms_UpperTester {type ImsUserInfo;} - - import from LibSip_SIPTypesAndValues {const c_statusLine100, c_statusLine180, c_statusLine200;} - - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - - import from AtsImsIot_TestConfiguration { - const all; - function all; - } - - import from LibIot_TestInterface {type IotEquipmentUser;} - - import from AtsImsIot_TestSystem { - type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface; - } - - import from AtsImsIot_TestSystem {type CF_INT_CALL;} - - - /** - * @desc Default SIP URI with DNS/ENUM lookup procedure - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.1 - */ - testcase TC_IMS_CALL_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsUserInfo v_userTelInfoB := f_getTelUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5097_02_gm(v_gmA, true); // Check2 - f_mtc_check_TP_IMS_5097_04_gm(v_gmA, false); // Check3 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5097_02_ic(v_ic, true); // Check2 - f_mtc_check_TP_IMS_5097_04_ic(v_ic, false); // Check3 - f_mtc_check_invite_mx(v_mxB); - - // checks 6, 10 (180 Ringing) - f_mtc_check_TP_IMS_5115_01_gm(v_gmB, true); // Check 6 - f_mtc_check_TP_IMS_5115_03_gm(v_gmB, true); // Check 7 - f_mtc_check_TP_IMS_5131_01_gm(v_gmB, false); // Check 10 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5115_01_ic(v_ic, true); // Check 6 - f_mtc_check_TP_IMS_5115_03_ic(v_ic, true); // Check 7 - f_mtc_check_TP_IMS_5131_01_ic(v_ic, false); // Check 10 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - - // checks 8, 11 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, true); // Check 8 - f_mtc_check_TP_IMS_5115_04_gm(v_gmB, true); // Check 9 - f_mtc_check_TP_IMS_5131_02_gm(v_gmB, false); // Check 11 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_ic(v_ic, true); // Check 8 - f_mtc_check_TP_IMS_5115_04_ic(v_ic, true); // Check 9 - f_mtc_check_TP_IMS_5131_02_ic(v_ic, false); // Check 11 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - //check 4 (ACK) - f_mtc_check_TP_IMS_5107_02_gm(v_gmA, false); // Check2 - f_mtc_check_ack_mx(v_mxA); - f_mtc_check_TP_IMS_5107_02_ic(v_ic, false); // Check2 - f_mtc_check_ack_mx(v_mxB); - - f_mtc_EndCall(v_ueA); //Test Sequence Step 7 - - // check 5 (BYE) - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check3 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5107_01_ic(v_ic, false); // Check3 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0001 - - - /** - * @desc Default SIP URI - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.2 - */ - testcase TC_IMS_CALL_0001F() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueB2 := f_cf_create_IotEquipmentUser(c_userUE_B2); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueB2); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueB2, v_userInfoB); - - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - // checks 4, 6 (180 Ringing) - f_mtc_check_TP_IMS_5115_01_gm(v_gmB, true); // Check 4 - f_mtc_check_TP_IMS_5131_01_gm(v_gmB, false); // Check 6 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5115_01_ic(v_ic, true); // Check4 - f_mtc_check_TP_IMS_5131_01_ic(v_ic, false); // Check6 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - f_mtc_check_TP_IMS_5115_01_gm(v_gmB, true); // Check4 - f_mtc_check_TP_IMS_5131_01_gm(v_gmB, false); // Check6 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5115_01_ic(v_ic, true); // Check4 from UE_B2 - f_mtc_check_TP_IMS_5131_01_ic(v_ic, false); // Check6 from UE_B2 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckRinging(v_ueB2); //Test Sequence Step 3 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 4 - f_mtc_userAnswerCall(v_ueB2); //Test Sequence Step 5 - - // checks 5, 7 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, true); // Check 5 - f_mtc_check_TP_IMS_5131_02_gm(v_gmB, false); // Check 7 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_ic(v_ic, true); // Check 5 - f_mtc_check_TP_IMS_5131_02_ic(v_ic, false); // Check 7 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, true); // Check 5 - f_mtc_check_TP_IMS_5131_02_gm(v_gmB, false); // Check 7 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_ic(v_ic, true); // Check5 from UE_B2 - f_mtc_check_TP_IMS_5131_02_ic(v_ic, false); // Check7 from UE_B2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - - f_mtc_userCheckCallNoLongerOffered(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 7 - f_mtc_userCheckCallEstablished(v_ueB2); //Test Sequence Step 8 - - //check 2 (ACK) - f_mtc_check_TP_IMS_5107_02_gm(v_gmA, false); // Check2 - f_mtc_check_ack_mx(v_mxA); - f_mtc_check_TP_IMS_5107_02_ic(v_ic, false); // Check2 - f_mtc_check_ack_mx(v_mxB); - - f_mtc_EndCall(v_ueA); //Test Sequence Step 9 - - // check 3 (BYE) - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check3 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5107_01_ic(v_ic, false); // Check3 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueB2 ); //Test Sequence Step 10 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 11 - - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueB2); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueB2); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0001F - - - /** - * @desc Default Tel URI - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.3 - */ - testcase TC_IMS_CALL_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5097_02_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5097_02_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - // checks 6, 10 (180 Ringing) - f_mtc_check_TP_IMS_5115_01_gm(v_gmB, true); // Check 5 - f_mtc_check_TP_IMS_5115_03_gm(v_gmB, true); // Check 6 - f_mtc_check_TP_IMS_5131_01_gm(v_gmB, false); // Check 9 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5115_01_ic(v_ic, true); // Check 5 - f_mtc_check_TP_IMS_5115_03_ic(v_ic, true); // Check 6 - f_mtc_check_TP_IMS_5131_01_ic(v_ic, false); // Check 9 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - - // checks 8, 11 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, true); // Check 7 - f_mtc_check_TP_IMS_5115_04_gm(v_gmB, true); // Check 8 - f_mtc_check_TP_IMS_5131_02_gm(v_gmB, false); // Check 10 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_ic(v_ic, true); // Check 7 - f_mtc_check_TP_IMS_5115_04_ic(v_ic, true); // Check 8 - f_mtc_check_TP_IMS_5131_02_ic(v_ic, false); // Check 10 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - //check 4 (ACK) - f_mtc_check_TP_IMS_5107_02_gm(v_gmA, false); // Check3 - f_mtc_check_ack_mx(v_mxA); - f_mtc_check_TP_IMS_5107_02_ic(v_ic, false); // Check3 - f_mtc_check_ack_mx(v_mxB); - - f_mtc_EndCall(v_ueA); //Test Sequence Step 7 - - // check 5 (BYE) - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check4 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5107_01_ic(v_ic, false); // Check4 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0002 - - - /** - * @desc Rejection of call from barred user - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.4 - */ - testcase TC_IMS_CALL_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - - //check 1 (INVITE) - f_mtc_check_TP_IMS_5108_05_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5108_05_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallCannotBeEstablished(v_ueA); //Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0003 - - - /** - * @desc Rejection of call to non existing user - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.5 - */ - testcase TC_IMS_CALL_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - - // test body - v_userInfoB.privateId := ("non_existing_user"); - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 // - - //check 1 (INVITE) - f_mtc_check_TP_IMS_5132_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5132_01_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallCannotBeEstablished(v_ueA); //Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0004 - - - /** - * @desc Rejection of call to unavailable user - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.6 - */ - testcase TC_IMS_CALL_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - - // test body - v_userInfoB.privateId := ("unavailable"); - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 // - - //check 1 (INVITE) - f_mtc_check_TP_IMS_5133_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5133_01_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallCannotBeEstablished(v_ueA); //Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0005 - - - /** - * @desc Initial request to non-registered user with terminating unregistered filter criterion - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.1.7 - */ - testcase TC_IMS_CALL_0006() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - - // test body - v_userInfoB.privateId := ("userNOAS_in_IMSB"); - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 // - - //check 1 (INVITE) - f_mtc_check_TP_IMS_5109_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5109_01_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallCannotBeEstablished(v_ueA); //Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0006 - - - /** - * @desc Normal call (roaming) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.1 - */ - testcase TC_IMS_CALL_0007() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA); //Test Sequence Step 1 - - // checks 1,2 gm - f_mtc_check_TP_IMS_5046_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - //checks 1,2 (INVITE from IMS_A to IMS_B) - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - //checks 7,3 (INVITE from IMS_B to IMS_A and 100 Trying from IMS_A to IMS_B) - f_mtc_check_TP_IMS_5108_01_ic(v_ic, true); // Check7 - f_mtc_check_response_mx(v_mxB, c_statusLine100); - f_mtc_check_TP_IMS_5070_01_ic(v_ic, false,0); // Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine100); - - // checks 5 (180 Ringing) - f_mtc_check_TP_IMS_5055_01_gm(v_gmA, true); // Check 5 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5055_01_ic(v_ic, true); // Check 5 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueA); //Test Sequence Step 4 - - // checks 6 (2xx) - f_mtc_check_TP_IMS_5055_02_gm(v_gmA, true); // Check 6 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5055_02_ic(v_ic, true); // Check 6 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 6 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 7 - - // check 4 (BYE) - f_mtc_check_TP_IMS_5301_01_gm(v_gmA, false); // Check4 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5301_01_ic(v_ic, false); // Check4 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0007 - - - /** - * @desc Normal call with hold/resume - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.2 - */ - testcase TC_IMS_CALL_0008() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueA); //Test Sequence Step 7 - - // checks 3 and 1 (INVITE and 100 Trying) - f_mtc_check_TP_IMS_5120_01_gm(v_gmA, false, 1); // Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine100); - f_mtc_check_TP_IMS_5081_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5120_01_ic(v_ic, false, 2); // Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine100); - - //checks 2 (200 OK) - f_mtc_check_TP_IMS_5082_01_gm(v_gmA, false, 1); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5082_01_ic(v_ic, false, 2); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - f_mtc_userCheckUserOnHold(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckUserOnHold(v_ueA); //Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueA); //Test Sequence Step 10 - - // checks 3 and 1 (INVITE and 100 Trying) - f_mtc_check_TP_IMS_5120_01_gm(v_gmA, false, 0); // Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine100); - f_mtc_check_TP_IMS_5120_01_ic(v_ic, true, 0); // Check3 - f_mtc_check_TP_IMS_5081_01_ic(v_ic, false); // Check1 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - //checks 2 (200 OK) - f_mtc_check_TP_IMS_5082_01_gm(v_gmA, false, 0); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5082_01_ic(v_ic, false, 0); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - f_mtc_userCheckCallResumed(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallResumed(v_ueA); //Test Sequence Step 12 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 13 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0008 - - - /** - * @desc Subsequent request(other than target refresh) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.3 - */ - testcase TC_IMS_CALL_0009() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA); //Test Sequence Step 1 - - f_mtc_userCheckRinging(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueA); //Test Sequence Step 4 - - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 6 - - f_mtc_EndCall(v_ueB); //Test Sequence Step 7 - - // check 1 (BYE) - f_mtc_check_TP_IMS_5052_01_gm(v_gmA, false); // Check1 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5052_01_ic(v_ic, false); // Check1 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0009 - - - /** - * @desc Subsequent target refresh request(INVITE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.4 - */ - testcase TC_IMS_CALL_0010() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueA); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueB); //Test Sequence Step 7 - - // checks 1 and 2 (INVITE) - f_mtc_check_TP_IMS_5048_01_gm(v_gmA, false, 1); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5048_01_ic(v_ic, true, 2); // Check1 - f_mtc_check_TP_IMS_5080_01_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckUserOnHold(v_ueB); //Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueB); //Test Sequence Step 10 - - // checks 1 and 2 (INVITE) - f_mtc_check_TP_IMS_5048_01_gm(v_gmA, false, 0); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5048_01_ic(v_ic, true, 1); // Check1 - f_mtc_check_TP_IMS_5080_01_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueA); //Test Sequence Step 11 - f_mtc_userCheckCallResumed(v_ueB); //Test Sequence Step 12 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 13 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0010 - - - /** - * @desc IMS network handles subsequent UPDATEs correctly in case of a user initiated - * call hold and resume when roaming caller puts a home user on hold and resumes call - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.5 - */ - testcase TC_IMS_CALL_0011() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueA); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueB); //Test Sequence Step 7 - - // checks 1 (UPDATE) - f_mtc_check_TP_IMS_5080_02_gm(v_gmA, false, 1); // Check1 - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5080_02_ic(v_ic, false); // Check1 - f_mtc_check_update_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckUserOnHold(v_ueB); //Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueB); //Test Sequence Step 10 - - // checks 1 (UPDATE) - f_mtc_check_TP_IMS_5080_02_gm(v_gmA, false, 1); // Check1 - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5080_02_ic(v_ic, false); // Check1 - f_mtc_check_update_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueA); //Test Sequence Step 11 - f_mtc_userCheckCallResumed(v_ueB); //Test Sequence Step 12 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 13 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0011 - - - /** - * @desc IMS network handles subsequent UPDATEs correctly in case of a user initiated - * call hold and resume when home caller puts a roaming user on hold and resumes call - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.2.6 - */ - testcase TC_IMS_CALL_0012() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueA); //Test Sequence Step 7 - - // checks 1 (UPDATE) - f_mtc_check_TP_IMS_5120_02_gm(v_gmA, false, 1); // Check1 - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5120_02_ic(v_ic, false, 0); // Check1 - f_mtc_check_update_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckUserOnHold(v_ueA); //Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueA); //Test Sequence Step 10 - - // checks 1 (UPDATE) - f_mtc_check_TP_IMS_5120_02_gm(v_gmA, false, 1); // Check1 - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5120_02_ic(v_ic, false, 0); // Check1 - f_mtc_check_update_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallResumed(v_ueA); //Test Sequence Step 12 - - f_mtc_EndCall(v_ueB); //Test Sequence Step 13 - - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0012 - - /** - * @desc Call CANCEL by calling user - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.1 - */ - testcase TC_IMS_CALL_0014() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userTriggerCancelCall (v_ueA); //Test Sequence Step 4 - - //check1 CANCEL - f_mtc_check_TP_IMS_5107_03_gm(v_gmA, false); // Check1 - f_mtc_check_cancel_mx(v_mxA); - f_mtc_check_TP_IMS_5107_03_ic(v_ic, false); // Check1 - f_mtc_check_cancel_mx(v_mxB); - - f_mtc_userCheckCallCancelled(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0014 - - /** - * @desc IMS network ends call in case calling UE looses connectivity during a call - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.2 - */ - testcase TC_IMS_CALL_0015() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 6 - - //Check 1 BYE - f_mtc_check_TP_IMS_5073_01_gm(v_gmA, false); // Check1 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5073_01_ic(v_ic, false); // Check1 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userLooseConnection(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0015 - - - /** - * @desc Call failure due to de-registration of calling user during call - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.3 - */ - testcase TC_IMS_CALL_0016() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_imsA := f_cf_create_IotEquipmentUser("IMS A"); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_imsA); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - f_mtc_imsTriggerUeDeregistration(v_imsA, v_ueA); //Test Sequence Step 7 - - //f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5139_01_ic(v_ic, false); // Check 1 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_imsA); - f_cf_adapter_down(); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0016 - - - /** - * @desc Subsequent target refresh request (INVITE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.4 - */ - testcase TC_IMS_CALL_0017() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userTriggerHold(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,1); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,1); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 8 ---------------------> - f_mtc_userCheckUserOnHold(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 9 ---------------------> - f_mtc_userCheckUserOnHold(v_ueA); - // Test Sequence 10 --------------------> - f_mtc_userTriggerResume(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,0); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,0); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckCallResumed(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_userCheckCallResumed(v_ueA); - // Test Sequence 13 --------------------> - f_mtc_EndCall(v_ueA); - // Test Sequence 14 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - // Test Sequence 15 --------------------> - f_mtc_userCheckCallEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Subsequent target refresh request (UPDATE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.5 - */ - testcase TC_IMS_CALL_0018() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userTriggerHold(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 8 ---------------------> - f_mtc_userCheckUserOnHold(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 9 ---------------------> - f_mtc_userCheckUserOnHold(v_ueA); - // Test Sequence 10 --------------------> - f_mtc_userTriggerResume(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckCallResumed(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_userCheckCallResumed(v_ueA); - // Test Sequence 13 --------------------> - f_mtc_EndCall(v_ueA); - // Test Sequence 14 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - // Test Sequence 15 --------------------> - f_mtc_userCheckCallEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Addition of media streams (reINVITE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.6 - */ - testcase TC_IMS_CALL_0019() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userAddNewMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,1); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,1); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 8 ---------------------> - // optional - // Test Sequence 9 ---------------------> - // optional - - // Test Sequence 10 --------------------> - f_mtc_userCheckNewMediaStream(v_ueB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckNewMediaStream(v_ueA); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_EndCall(v_ueA); - // Test Sequence 13 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 14 --------------------> - f_mtc_userCheckCallEnded(v_ueA ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Addition of media streams (reINVITE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.7 - */ - testcase TC_IMS_CALL_0020() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_A); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userAddNewMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,1); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,1); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 8 ---------------------> - // optional - // Test Sequence 9 ---------------------> - // optional - - // Test Sequence 10 --------------------> - f_mtc_userCheckNewMediaStream(v_ueB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckNewMediaStream(v_ueA); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_userModifiyMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,0); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,0); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 13 --------------------> - // optional - // Test Sequence 14 --------------------> - // optional - - // Test Sequence 15 --------------------> - f_mtc_userCheckNewMediaStream(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 16 --------------------> - f_mtc_userCheckNewMediaStream(v_ueA); - - // Test Sequence 17 --------------------> - f_mtc_EndCall(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 18 --------------------> - f_mtc_userCheckCallEnded(v_ueA ); - - // Test Sequence 19 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Hold/resume media streams (reINVITE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.8 - */ - testcase TC_IMS_CALL_0021() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_A); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userAddNewMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,1); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,1); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 8 ---------------------> - // optional - // Test Sequence 9 ---------------------> - // optional - - // Test Sequence 10 --------------------> - f_mtc_userCheckNewMediaStream(v_ueB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckNewMediaStream(v_ueA); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_userTriggerHold(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,0); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,0); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 13 --------------------> - f_mtc_userCheckUserOnHold(v_ueA); - - // Test Sequence 14 --------------------> - f_mtc_userCheckUserOnHold(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 15 --------------------> - f_mtc_userTriggerResume(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,0); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,0); - f_mtc_check_invite_mx(v_mxB); - - // Test Sequence 16 --------------------> - f_mtc_userCheckCallResumed(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 17 --------------------> - f_mtc_userCheckCallResumed(v_ueA); - - // Test Sequence 18 --------------------> - f_mtc_userRemoveMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_01_gm(v_gmA,0); - f_mtc_check_TP_IMS_5106_01_ic(v_ic,0); - - // Test Sequence 19 --------------------> - f_mtc_userCheckRemoveMediaStream(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - - // Test Sequence 20 --------------------> - // optional - - // Test Sequence 21 --------------------> - f_mtc_EndCall(v_ueB); - - // Test Sequence 22 --------------------> - f_mtc_userCheckCallEnded(v_ueA ); - - // Test Sequence 23 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Hold/resume media streams (UPDATE) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.3.9 - */ - testcase TC_IMS_CALL_0022() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_A); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - - // variables - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // 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); - - // test body - - // Test Sequence 1 ---------------------> - f_mtc_userInitiateCall (v_ueA, v_userInfoB); - // Test Sequence 2 ---------------------> - f_mtc_userCheckRinging(v_ueB); - // Test Sequence 3 ---------------------> - f_mtc_userCheckPeerIsRinging(v_ueA); - // Test Sequence 4 ---------------------> - f_mtc_userAnswerCall(v_ueB); - // Test Sequence 5 ---------------------> - f_mtc_userCheckCallEstablished(v_ueA); - // Test Sequence 6 ---------------------> - f_mtc_userCheckCallEstablished(v_ueB); - // Test Sequence 7 ---------------------> - f_mtc_userAddNewMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 8 ---------------------> - // optional - // Test Sequence 9 ---------------------> - // optional - - // Test Sequence 10 --------------------> - f_mtc_userCheckNewMediaStream(v_ueB); - - // Test Sequence 11 --------------------> - f_mtc_userCheckNewMediaStream(v_ueA); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,1); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,1); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 12 --------------------> - f_mtc_userTriggerHold(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 13 --------------------> - f_mtc_userCheckUserOnHold(v_ueA); - - // Test Sequence 14 --------------------> - f_mtc_userCheckUserOnHold(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 15 --------------------> - f_mtc_userTriggerResume(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 16 --------------------> - f_mtc_userCheckCallResumed(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 17 --------------------> - f_mtc_userCheckCallResumed(v_ueA); - - // Test Sequence 18 --------------------> - f_mtc_userRemoveMediaStream(v_ueA); - - // check 1 - f_mtc_check_TP_IMS_5106_02_gm(v_gmA); - f_mtc_check_update_mx(v_mxA); - f_mtc_check_TP_IMS_5106_02_ic(v_ic); - f_mtc_check_update_mx(v_mxB); - - // Test Sequence 19 --------------------> - f_mtc_userCheckRemoveMediaStream(v_ueB); - - // check 2 - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence 20 --------------------> - // optional - - // Test Sequence 21 --------------------> - f_mtc_EndCall(v_ueB); - - // Test Sequence 22 --------------------> - f_mtc_userCheckCallEnded(v_ueA ); - - // Test Sequence 23 --------------------> - f_mtc_userCheckCallEnded(v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - f_cf_adapter_down(); - } - - - /** - * @desc Normal call - TH(Topology hiding) - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.5.1 - */ - testcase TC_IMS_CALL_0024() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - - //check 1,2,3,6 (INVITE and 100Trying) - f_mtc_check_TP_IMS_5135_01_gm(v_gmA, true); // Check1 - INVITE - f_mtc_check_TP_IMS_5404_01_gm(v_gmA, false); // Check3 - INVITE -// f_mtc_check_response_mx(v_mxA, c_statusLine100); - f_mtc_check_TP_IMS_5135_01_ic(v_ic, true); // Check1 - INVITE - f_mtc_check_TP_IMS_5137_01_ic(v_ic, true); // Check2 - INVITE - f_mtc_check_TP_IMS_5404_01_ic(v_ic, true); // Check3 - INVITE - f_mtc_check_TP_IMS_5414_01_ic(v_ic, false); // Check6 - INVITE and 100Trying - f_mtc_check_response_mx(v_mxB, c_statusLine100); - - //check 7 (180 Ringing) - - f_mtc_check_TP_IMS_5137_02_gm(v_gmB, false); // Check 7 - f_mtc_check_response_mx(v_mxB, c_statusLine180); - f_mtc_check_TP_IMS_5137_02_ic(v_ic, false); // Check 7 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - - //check 8 (2xx) - - f_mtc_check_TP_IMS_5137_03_gm(v_gmB, false); // Check 8 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5137_03_ic(v_ic, false); // Check 8 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - // check 4 (ACK) - f_mtc_check_TP_IMS_5408_01_gm(v_gmA, false); // Check4 - f_mtc_check_ack_mx(v_mxA); - f_mtc_check_TP_IMS_5408_01_ic(v_ic, false); // Check4 - f_mtc_check_ack_mx(v_mxB); - - f_mtc_EndCall(v_ueA); //Test Sequence Step 7 - - // check 5 (BYE) - f_mtc_check_TP_IMS_5408_03_gm(v_gmA, false); // Check4 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5408_03_ic(v_ic, false); // Check4 - f_mtc_check_bye_mx(v_mxB); - - //check 8 (2xx) - - f_mtc_check_TP_IMS_5137_03_gm(v_gmB, false); // Check 8 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5137_03_ic(v_ic, false); // Check 8 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_call_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0024 - - /** - * @desc CANCEL call by calling user - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.5.2 - */ - testcase TC_IMS_CALL_0025() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userTriggerCancelCall (v_ueA); //Test Sequence Step 4 - - //Check1 CANCEL - f_mtc_check_TP_IMS_5408_02_gm(v_gmA, false); // Check1 - f_mtc_check_cancel_mx(v_mxA); - f_mtc_check_TP_IMS_5408_02_ic(v_ic, false); // Check1 - f_mtc_check_cancel_mx(v_mxB); - - f_mtc_userCheckCallCancelled(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckCallTerminated(v_ueA); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_call_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CALL_0025 - - - /** - * @desc Normal call with hold/resume - roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.3.1.5.3 - */ - testcase TC_IMS_CALL_0026() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckRinging(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB); //Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueA); //Test Sequence Step 7 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5408_04_gm(v_gmA, false,1); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5408_04_ic(v_ic, false,2); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckUserOnHold(v_ueA); //Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueA); //Test Sequence Step 10 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5408_04_gm(v_gmA, false,0); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5408_04_ic(v_ic, false,1); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallResumed(v_ueA); //Test Sequence Step 12 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 13 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - } //end testcase TC_IMS_CALL_0026 - -} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_ENUM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_ENUM.ttcn deleted file mode 100644 index 31c52337e4f443f2aeadbf8e1bc81ca1d28e2e76..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_ENUM.ttcn +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @author STF 435 - * @version $Id: $ - * @desc This module provides ATS specific ENUM test case. - */ -module AtsImsIot_TestCases_ENUM { - - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B; } - import from LibIms_UpperTester { type ImsUserInfo; } - import from LibSip_SIPTypesAndValues { const c_statusLine100, c_statusLine180, c_statusLine200; } - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser; } - import from LibIot_TestInterface { type IotEquipmentUser; } - import from AtsImsIot_TestSystem { type CF_INT_CALL, ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface; } - import from AtsImsIot_TestConfiguration { const all; function all; } - import from AtsImsIot_Functions { function all; } - import from AtsImsIot_Behavior { function all; } - - - /** - * @desc ENUM query should result in return of NAPTR with correct SIP URI - */ - testcase TC_IMS_ENUM_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_INT_CALL v_config; - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getSipUserId ( PX_EUT_B ); - var ImsUserInfo v_userTelInfoB := f_getTelUserId ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.naptr := f_cf_create_monitor ( c_naptr ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_int_call_up ( v_config ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - f_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_userInitiateCall ( v_ueA, v_userTelInfoB ); // UE A invite UE B by using Tel number - - // check 1 (INVITE + ENUM db exchange) - f_mtc_check_TP_IMS_ENUM_01 ( v_config.gmA, v_config.naptr ); - // check 2 (INVITE arrived at gmB) - f_mtc_check_TP_IMS_5097_01_gm ( v_config.gmB, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - f_cf_int_call_down ( v_config ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_adapter_down ( ); - } -} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_EPC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_EPC.ttcn deleted file mode 100644 index f34bfbb893bdc9da5bf88a40cfa208f7c67b5f59..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_EPC.ttcn +++ /dev/null @@ -1,1345 +0,0 @@ -/** - * @author STF 435 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions for EPC. - * @see ETSI TS 103 029 V3.1.1 (2011-11) - */ -module AtsImsIot_TestCases_EPC { - - // 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 }; - // 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_Behavior { group epcChecks; function f_mtc_check_response_mx, f_mtc_check_TP_IMS_5011_01_gm }; - - 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 103 029 V3.1.1 clause 7.1.1 - */ - testcase TC_IMSEPC_Network_Attachment_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueA ); - f_cf_epc_call_up ( v_config ); - - // 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_ueB, v_userInfoB ); - - // 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_EPC_6002_01 ( v_config.gmA, false ); // Check - f_mtc_userCheckRegistration ( v_ueA, f_getAnyValidUser ( PX_EUT_A ) ); - f_mtc_check_TP_EPC_6003_01 ( v_ueA, v_config.gmA, v_ueB, v_config.gmB ); // Test sequence #4-5 - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Network_Attachment_0001 - - /** - * @desc Network Detachment with Previously Established IMS Registration and sessions. - * On complete network detachment, without previous termination of IMS sessions and registration, the EPC informs the IMS about the event. - * EPC removes all relevant bearers. IMS terminates all the ongoing IMS sessions and the IMS registration - * @see TS 103 029 V3.1.1 clause 7.1.2 - */ - testcase TC_IMSEPC_Network_Detachment_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - f_mtc_userCheckCallEstablished ( v_ueA ); - f_mtc_userCheckCallEstablished ( v_ueB ); - - // test body - f_mtc_check_TP_EPC_6004_01 ( v_ueA ); // User A starts complete network detachment - f_mtc_check_TP_EPC_6005_01 ( v_config.rx ); // EPC-PCRF -> P-CSCF Diameter ASR (rx) SIP session - f_mtc_check_TP_EPC_6006_01 ( v_config.rx ); // P-CSCF -> EPC-PCRF Diameter ASA + STR (rx) SIP session - // EPC-PCRF -> P-CSCF Diameter STA (rx) SIP session - f_mtc_check_TP_EPC_6010_01 ( v_config.gmB, false ); // P-CSCF -> UE A SIP BYE (gmB) - f_mtc_check_TP_EPC_6005_01 ( v_config.rx ); // EPC-PCRF -> P-CSCF Diameter ASR (rx) SIP registration - f_mtc_check_TP_EPC_6006_02 ( v_config.rx ); // P-CSCF -> EPC-PCRF Diameter ASA + STR (rx) SIP registration - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); // EPC-PCRF -> P-CSCF Diameter STA (rx) SIP registration - f_mtc_check_TP_EPC_6018_01 ( v_config.mxA, false ); // P-CSCF -> S-CSCF SIP REGISTER (mw/mx) - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); // No SGi channels - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueB ); - f_cf_user_down ( v_ueA ); - f_cf_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Network_Detachment_0002 - } // End of group networkAttachmentAndDefaultBearer - - group imsRegistrationAndAFSignallingBearer { - /** - * @desc IMS Initial Registration - Successful. - * On successful initial registration, the P-CSCF shall request at the PCRF the allocation of a bearer for SIP signalling. - * The PCRF should act on the request and allocate the bearer. Subsequent signalling should make use of the respective bearer's QoS and priority characteristics - * @see TS 103 029 V3.1.1 clause 7.2.1.1 - */ - testcase TC_IMSEPC_Registration_Initial_Successful_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6015_01 ( v_config.gmA, v_config.gmB ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Registration_Initial_Successful_0001 - - /** - * @desc IMS Initial Registration - Failed. - * On failed UE Registration to IMS, IMS will not trigger the creation of a bearer for the - * transport of the subsequent SIP signalling. - */ - testcase TC_IMSEPC_Registration_Initial_Failed_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_ueB, v_userInfoB ); - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - - // test body - f_mtc_check_TP_EPC_6016_01 ( v_config.gmA ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Registration_Initial_Failed_0001 - - /** - * @desc IMS De-registration. - * On UE_A de-registration, P-CSCF signals to PCRF the termination of the IMS signalling session. - * EPC removes the IMS signalling bearer. - * Initial registration are still possible, but traffic will be categorized in the Default Bearer - * @see TS 103 029 V3.1.1 clause 7.2.2 - */ - testcase TC_IMSEPC_DeRegistration_UE_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_userRadioEnabled ( v_ueA, false, true ); - f_mtc_check_TP_EPC_6017_01 ( v_config.mxA, false , v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_02 ( v_ueA, v_config.gmA ); - f_mtc_check_TP_EPC_6018_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_DeRegistration_UE_0001 - - /** - * @desc IMS De-registration. - * On UE A de-registration, the S-CSCF performs S-CSCF-initiated termination of active - * session. P-CSCF will act on this event and signals to PCRF termination of the SIP session bearers. - * EPC removes the SIP Session bearer. - * Media cannot be exchange any longer on previous SIP Session bearer. - * The S-CSCF answers to the de-registration. - * The P-CSCF signals to PCRF the termination of IMS signalling session. - * EPC removes IMS signalling bearer. - */ - testcase TC_IMSEPC_DeRegistration_UE_Active_Session_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_userRadioEnabled ( v_ueA, false, true ); - f_mtc_check_TP_EPC_6021_01 ( v_config.mxA, false ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6012_02 ( v_config.mxA , v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_DeRegistration_UE_Active_Session_0001 - - /** - * @desc IMS De-registration. - * On administrative de-registration, S-CSCF notifies the UE A and P-CSCF about the event. - * P-CSCF signals to PCRF the termination of the IMS signalling session. - * EPC removes the IMS signalling bearer. - * Initial registration are still possible, but traffic will be categorized in the Default Bearer. - */ - testcase TC_IMSEPC_DeRegistration_Administrative_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6024_01 ( v_config.mw, v_ueA ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_02 ( v_ueA, v_config.gmA ); - f_mtc_check_TP_EPC_6018_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_DeRegistration_Administrative_0001 - - /** - * @desc IMS De-registration. - * On registration expiration, P-CSCF signals to PCRF the termination of the IMS signalling session. - * EPC removes the IMS signalling bearer. - * Initial registration are still possible, but traffic will be categorized in the Default Bearer. - */ - testcase TC_IMSEPC_DeRegistration_Expiration_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6026_01 ( v_config.rx, v_ueA ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_02 ( v_ueA, v_config.gmA ); - f_mtc_check_TP_EPC_6018_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_DeRegistration_Expiration_0001 - } // End of group imsRegistrationAndAFSignallingBearer - - group sipSessionAndSessionBearer { - group sipSessionEstablishment { - - /** - * @desc Originating Leg - With SDP Negotiation in INVITE/200 OK. - * On successful call setup, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow. - * These are pushed towards EPC as request for creation of adequate bearers. EPC creates based on the EPC's operator policies the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. Media transport is possible only after the successful establishment of the session. - * Media negotiation happens during INVITE/200 OK (UE A sends SDP-offer, UE B responds with SDP-answer) - * @see TS 103 029 V3.1.1 clause 7.3.1.1.1 - */ - testcase TC_IMSEPC_Session_Establishment_Originating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Originating_0001 - - /** - * @desc Originating Leg - With SDP Negotiation in 200 OK/ACK. - * On successful call setup, the P-CSCF should derive from the SDP offer and answer, - * descriptions of the Service Data Flow. These are pushed towards EPC as request for - * creation of adequate bearers. - * EPC creates based on the EPC's operator policies the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible only after the successful establishment of the session. - * Media negotiation happens during 200 OK / ACK (UE B sends SDP-offer, UE A responds - * with SDP-answer) - */ - testcase TC_IMSEPC_Session_Establishment_Originating_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6029_03 ( v_config.mw, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Originating_0002 - - /** - * @desc Originating Leg - Without SDP Negotiation in the initial SIP transaction. - * On successful call setup without SDP negotiation (no SDP-offer/answer in the initial SIP INVITE Request / 200 OK Response / ACK Request), there is no request for establishing media bearers from the P-CSCF towards EPC. - * Media transport is not possible either before or after this empty session setup - * @see TS 103 029 V3.1.1 clause 7.3.1.1.3 - */ - testcase TC_IMSEPC_Session_Establishment_Originating_0003 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6033_01 ( v_config.gmA, v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Originating_0003 - - /** - * @desc Terminating Leg - With SDP Negotiation in INVITE/200 OK. - * On successful call setup, the P-CSCF should derive from the SDP offer and answer, - * descriptions of the Service Data Flow. These are pushed towards EPC as request for - * creation of adequate bearers. - * EPC creates based on the EPC's operator policies the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible only after the successful establishment of the session. - * Media negotiation happens during INVITE/200 OK (UE A sends SDP-offer, UE B - * responds with SDP-answer) - */ - testcase TC_IMSEPC_Session_Establishment_Terminating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmB, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Terminating_0001 - - /** - * @desc Terminating Leg - With SDP Negotiation in 200 OK/ACK. - * On successful call setup, the P-CSCF should derive from the SDP offer and answer, - * descriptions of the Service Data Flow. These are pushed towards EPC as request for - * creation of adequate bearers. - * EPC creates based on the EPC's operator policies the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible only after the successful establishment of the session. - * Media negotiation happens during 200 OK / ACK (UE B sends SDP-offer, UE A responds - * with SDP-answer) - */ - testcase TC_IMSEPC_Session_Establishment_Terminating_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6029_03 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6029_03 ( v_config.gmB, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Terminating_0002 - - /** - * @desc Terminating Leg - Without SDP Negotiation in the initial SIP transaction. - * On successful call setup without SDP negotiation (no SDP-offer/answer in the initial SIP - * INVITE Request / 200 OK Response / ACK Request), there is no request for establishing - * media bearers from the P-CSCF towards EPC. - * Media transport is not possible either before or after this empty session setup. - */ - testcase TC_IMSEPC_Session_Establishment_Terminating_0003 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6033_01 ( v_config.gmA, v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Establishment_Terminating_0003 - } // End of group sipSessionEstablishment - - group sipSessionModification { - - /** - * @desc Originating Leg - With removal of SDF (e.g. Call-Hold). - * On successful call hold, the P-CSCF should derive from the SDP offer and answer, - * updates for the Service Data Flows. These are pushed towards EPC as request for - * modification of the previously created bearers. - * EPC modifies, based on the EPC's operator policies, the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible, after the successful modification of the session, only on the - * remaining active Service Data Flows. - */ - testcase TC_IMSEPC_Session_Modification_Originating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Modification_Originating_0001 - - /** - * @desc Originating Leg - With addition of SDF (e.g. Call-Resume). - * On successful call resume, the P-CSCF should derive from the SDP offer and answer, - * updates for the Service Data Flows. These are pushed towards EPC as request for - * modification of the previously created bearers. - * EPC modifies, based on the EPC's operator policies, the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible, after the successful modification of the session, on any new - * and also on the remaining active Service Data Flows. - */ - testcase TC_IMSEPC_Session_Modification_Originating_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmB, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Modification_Originating_0002 - - /** - * @desc Terminating Leg - With removal of SDF (e.g. Call-Hold). - * On successful call hold, the P-CSCF should derive from the SDP offer and answer, - * updates for the Service Data Flows. These are pushed towards EPC as request for - * modification of the previously created bearers. - * EPC modifies, based on the EPC's operator policies, the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible, after the successful modification of the session, only on the - * remaining active Service Data Flows. - */ - testcase TC_IMSEPC_Session_Modification_Terminating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmB, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Modification_Terminating_0001 - - /** - * @desc Terminating Leg - With addition of SDF (e.g. Call-Resume). - * On successful call resume, the P-CSCF should derive from the SDP offer and answer, - * updates for the Service Data Flows. These are pushed towards EPC as request for - * modification of the previously created bearers. - * EPC modifies, based on the EPC's operator policies, the bearers for media. - * When transporting media, the EPC will employ the respective bearer's characteristics. - * Media transport is possible, after the successful modification of the session, on any new - * and also on the remaining active Service Data Flows. - */ - testcase TC_IMSEPC_Session_Modification_Terminating_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmB, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx); - f_mtc_check_TP_EPC_6012_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Modification_Terminating_0002 - } // End of group - - group sipSessionRelease { - - /** - * @desc Originating Leg - * On call release, the P-CSCF should trigger the removal of all relevant previously created bearers. - * EPC removes the bearers for media. - * Media transport is no longer possible, after the session release. - */ - testcase TC_IMSEPC_Session_Release_Originating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_check_TP_EPC_6010_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Release_Originating_0001 - - /** - * @desc Terminating Leg - * On call release, the P-CSCF should trigger the removal of all relevant previously created bearers. - * EPC removes the bearers for media. - * Media transport is no longer possible, after the session release. - */ - testcase TC_IMSEPC_Session_Release_Terminating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_check_TP_EPC_6010_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Release_Terminating_0001 - } // End of group sipSessionRelease - - group sipSessionAbortReject { - - /** - * @desc Originating Leg - * On session abort, the P-CSCF should trigger the removal of all relevant early-media bearers previously created. - * EPC removes the bearers for early-media. - * Media transport is no longer possible, after the session abort. - */ - testcase TC_IMSEPC_Session_Abort_Originating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6027_06 ( v_config.mxA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6027_06 ( v_config.gmA, false ); - // UE A sends media to UE B - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - // UE B sends media to UE A - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_check_TP_EPC_6034_02 ( v_config.gmA ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Abort_Originating_0001 - - /** - * @desc Terminating Leg - * On session abort, the P-CSCF should trigger the removal of all relevant early-media bearers previously created. - * EPC removes the bearers for early-media. - * Media transport is no longer possible, after the session abort. - */ - testcase TC_IMSEPC_Session_Abort_Terminating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6027_06 ( v_config.mxA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6027_06 ( v_config.gmA, false ); - // UE A sends media to UE B - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - // UE B sends media to UE A - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6034_02 ( v_config.gmA ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Abort_Terminating_0001 - - /** - * @desc Originating Leg - * On session reject, the P-CSCF should trigger the removal of all relevant previously created early-media bearers. - * EPC removes the bearers for early-media. - * Media transport is no longer possible, after the session reject. - */ - testcase TC_IMSEPC_Session_Reject_Originating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6027_06 ( v_config.mxA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6027_06 ( v_config.gmA, false ); - // UE A sends media to UE B - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - // UE B sends media to UE A - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_check_TP_EPC_6034_04 ( v_config.mxA ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_Reject_Originating_0001 - - /** - * @desc Terminating Leg - * On session reject, the P-CSCF should trigger the removal of all relevant previously created early-media bearers. - * EPC removes the bearers for early-media. - * Media transport is no longer possible, after the session reject - */ - testcase TC_IMSEPC_Session_RejectTerminating_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - f_mtc_check_TP_EPC_6027_06 ( v_config.mxA, false ); - f_mtc_check_TP_EPC_6013_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6014_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6027_06 ( v_config.gmA, false ); - // UE A sends media to UE B - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - // UE B sends media to UE A - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, true ); - f_mtc_check_TP_EPC_6034_04 ( v_config.mxA ); - f_mtc_check_TP_EPC_6022_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6009_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Session_RejectTerminating_0001 - } // End of group sipSessionAbortReject - - group epcInitiatedBearerModification { - - /** - * @desc EPC Initiated Bearer Modification - * On removal of all bearers, EPC PCRF will notify IMS P-CSCF that Rx session should be aborted. - * IMS will take action and terminate all ongoing SIP sessions and the IMS registration. - */ - testcase TC_IMSEPC_Bearer_Modification_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_EPC_CALL v_config; - 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 ); - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.rx := f_cf_create_monitor ( c_rx ); - v_config.mw := f_cf_create_monitor ( c_mw ); - v_config.sgi := f_cf_create_monitor ( c_sgi ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_epc_call_up ( v_config ); - - // 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_mtc_userRegistration ( v_ueB, v_userInfoB ); - f_mtc_userInitiateCall ( v_ueA, v_userInfoB ); - - // test body - // EPC removes relevant_bearers for SIP_session - f_mtc_check_TP_EPC_6005_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6006_01 ( v_config.rx ); - f_mtc_check_TP_EPC_6010_01 ( v_config.gmA, false ); - f_mtc_check_TP_EPC_6003_02 ( v_config.sgi, false ); - - // postamble - f_PO_user_home_deregistration ( v_ueB ); - 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_epc_call_down ( v_config ); - f_cf_adapter_down ( ); - } // End of TC TC_IMSEPC_Bearer_Modification_0001 - } // End of group epcInitiatedBearerModification - } // End of group sipSessionAndSessionBearer - -} // End of module AtsImsIot_TestCases_EPC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_MESS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_MESS.ttcn deleted file mode 100644 index 54c3e0ad2764ab3d537b4f4237f58824c8197918..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_MESS.ttcn +++ /dev/null @@ -1,378 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions. - */ -module AtsImsIot_TestCases_MESS { - - import from AtsImsIot_Behavior {function all;} - import from AtsImsIot_Functions {function all;} - import from LibSip_SIPTypesAndValues {const c_statusLine200;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser; } - import from AtsImsIot_TestConfiguration { const all; function all; } - import from LibIot_TestInterface { type IotEquipmentUser; } - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface; } - import from AtsImsIot_TestSystem { type CF_INT_CALL; } - import from AtsImsIot_Templates all; - import from AtsImsIot_TypesAndValues { type NAPTRmessage, EnumResponse, EnumQuery; } - - /** - * @desc - * IMS network shall support SIP messages greater than 1500 bytes. - * (in ETSI TS 186 011-2 V3.1.1 Clause 4.5.1.1) - */ - testcase TC_IMS_MESS_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - - // preamble - f_cf_int_call_up(v_config); - f_PR_user_home_registration(v_ueA, f_getAnyValidUser(PX_EUT_A)); - f_PR_user_home_registration(v_ueB, f_getAnyValidUser(PX_EUT_B)); - log("**** TC_IMS_MESS_0001: Preamble done. ****"); - - // test body - f_mtc_userSendMessage(v_ueA, f_getMessageBody(1301)); - f_mtc_check_TP_IMS_4002_01_gm(v_gmA); - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_4002_01_ic(v_ic); - f_mtc_check_message_mx(v_mxB); - f_mtc_userCheckMessageReceipt(v_ueB); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - log("**** TC_IMS_MESS_0001: Postamble done. ****"); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } - - - - /** - * @desc - * IMS network handles messaging with SIP identity correctly without - * topology hiding. (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.1) - */ - testcase TC_IMS_MESS_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_PR_user_home_registration(v_ueA, f_getSipUserId(PX_EUT_A)); - f_PR_user_home_registration(v_ueB, f_getAnyValidUser(PX_EUT_B)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_TP_IMS_5097_05_gm(v_gmA, false); // message not removed from port queue - //f_mtc_check_TP_IMS_5097_07_gm(v_gmA, false); // message removed from port queue - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5097_05_ic(v_ic, false);// message not removed from port queue - //f_mtc_check_TP_IMS_5097_07_ic(v_ic, false);// message removed from port queue - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageReceipt(v_ueB); - - f_mtc_check_TP_IMS_5117_02_gm(v_gmB, true);// message not removed from port queue - f_mtc_check_TP_IMS_5118_01_gm(v_gmB, false);// message removed from port queue - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5117_02_ic(v_ic, true);// message not removed from port queue - f_mtc_check_TP_IMS_5118_01_ic(v_ic, false);// message removed from port queue - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } - - - /** - * @desc - * IMS network handles messaging with TEL URI identities correctly - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.2) - */ - testcase TC_IMS_MESS_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_PR_user_home_registration(v_ueA, f_getTelUserId(PX_EUT_A)); - f_PR_user_home_registration(v_ueB, f_getTelUserId(PX_EUT_B)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_TP_IMS_5097_07_gm(v_gmA, false); - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5097_07_ic(v_ic, false); - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageReceipt(v_ueB); - - f_mtc_check_TP_IMS_5117_02_gm(v_gmB, true);// message not removed from port queue - f_mtc_check_TP_IMS_5118_01_gm(v_gmB, true);// message not removed from port queue - f_mtc_check_TP_IMS_5117_06_gm(v_gmB, false);// message removed from port queue - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5117_02_ic(v_ic, true);// message not removed from port queue - f_mtc_check_TP_IMS_5118_01_ic(v_ic, true);// message not removed from port queue - f_mtc_check_TP_IMS_5117_06_ic(v_ic, false);// message removed from port queue - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } - - /** - * @desc - * IMS network handles messaging with DNS/ENUM lookup procedure correctly - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.3) - */ - testcase TC_IMS_MESS_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var EnumQuery v_enumQuery; - var EnumResponse v_enumResponse; - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit}; - v_config.naptr := f_cf_create_monitor ( c_naptr ); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_PR_user_home_registration(v_ueA, f_getTelUserId(PX_EUT_A)); - f_PR_user_home_registration(v_ueB, f_getTelUserId(PX_EUT_B)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_TP_IMS_5097_08_gm(v_gmA, false); - v_enumQuery := f_mtc_check_TP_IMS_ENUM_01_enumQuery ( v_config.naptr ); // ENUM query - //TODO check ENUM query message as described in the spec. - v_enumResponse := f_mtc_check_TP_IMS_ENUM_01_enumResponse ( v_config.naptr ); // ENUM response - //TODO check ENUM response message as described in the spec. - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5097_08_ic(v_ic, false); - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageReceipt(v_ueB); - - f_mtc_check_TP_IMS_5117_06_gm(v_gmB, false); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5117_06_ic(v_ic, false); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } - - /** - * @desc - * IMS network handles messaging while roaming correctly. - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.4) - */ - testcase TC_IMS_MESS_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_call_up(v_gmA, v_mxA, v_ic, v_mxB); - - // preamble - f_PR_user_home_registration(v_ueA, f_getAnyValidUser(PX_EUT_A)); - f_PR_user_roaming_registration(v_ueB, f_getAnyValidUser(PX_EUT_B)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5108_02_ic(v_ic); // TODO must be checked - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageReceipt(v_ueB); - - f_mtc_check_TP_IMS_5118_01_gm(v_gmA, false); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5118_01_ic(v_ic, false); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_roaming_deregistration(v_ueB); - f_cf_roam_call_down(v_gmA, v_mxA, v_ic, v_mxB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } - - /** - * @desc - * IMS network handles messaging correctly when receiving user is nit registered. - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.5) - */ - testcase TC_IMS_MESS_0006() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_int_call_up(v_config); - - // preamble - f_PR_user_home_registration(v_ueA, f_getAnyValidUser(PX_EUT_A)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_TP_IMS_5114_02_gm(v_gmA); - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5114_02_ic(v_ic); - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageNotDelivered(v_ueA); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_adapter_down(); - } - - - /** - * @desc - * IMS network handles messaging correctly when receiving user is nit registered. - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.4.6) - */ - testcase TC_IMS_MESS_0007() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_CALL v_config := {v_gmA, v_mxA, v_ic, v_mxB, omit, omit}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_call_up(v_config); - - // preamble - f_PR_user_home_registration(v_ueA, f_getAnyValidUser(PX_EUT_A)); - f_PR_user_home_registration(v_ueB, f_getAnyValidUser(PX_EUT_B)); - - // test body - f_mtc_userSendMessage(v_ueA, "test"); - - f_mtc_check_TP_IMS_5108_06_gm(v_gmA); - f_mtc_check_message_mx(v_mxA); - f_mtc_check_TP_IMS_5108_06_ic(v_ic); - f_mtc_check_message_mx(v_mxB); - - f_mtc_userCheckMessageNotDelivered(v_ueA); - - // postabmle - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_cf_int_call_down(v_config); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } -} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_RCS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_RCS.ttcn deleted file mode 100644 index 45a801dddcd3160c46c0c826d1ce10077d854a1f..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_RCS.ttcn +++ /dev/null @@ -1,5111 +0,0 @@ -/** - * @author STF 407 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions. - */ -module AtsImsIot_TestCases_RCS { - import from AtsImsIot_Behavior { function all; } - import from AtsImsIot_TypesAndValues { type SipMessage; } - import from AtsImsIot_Functions { function all; } - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C, PX_EUT_D } - import from LibIms_UpperTester { type ImsUserInfo; } - import from LibSip_SIPTypesAndValues { const c_statusLine100, c_statusLine180, c_statusLine200, c_statusLine404, - c_statusLine480,c_statusLine603; } - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser; } - import from AtsImsIot_TestConfiguration { const all; function all; } - import from LibIot_TestInterface {type IotEquipmentUser;} - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface; } - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface, CF_INT_AS, CF_ROAM_AS; } - - /** - * @desc User A capabilities (RCS-e services Tags) - */ - modulepar charstring PX_RCSE_A := ""; - /** - * @desc User B capabilities (RCS-e services Tags) - */ - modulepar charstring PX_RCSE_B := ""; - - /** - * @desc IMS network supports capability discovery and OPTIONS messages exchange - * between two users in their home network can be performed. User B must be - * Registered. - */ - testcase TD_IMS_CAP_0001 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_INT_AS v_config; - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getSipUserId ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.iscA := omit; - v_config.iscB := omit; - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_int_as_up ( v_config ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - f_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - - // check (OPTIONS + 200 OK exchange) - f_mtc_check_options ( v_config.mxB, PX_RCSE_A ); - f_mtc_check_response ( v_config.mxA, c_statusLine200, PX_RCSE_B ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_int_as_down ( v_config ); - f_cf_adapter_down ( ); - } - - /** - * @desc IMS network supports capability discovery and OPTIONS messages exchange - * between one user in its home network and another in visited network can be - * performed. User B must be Registered. - */ - testcase TD_IMS_CAP_0002 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_ROAM_AS v_config; - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getSipUserId ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.iscA := omit; - v_config.iscB := omit; - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_roam_as_up ( v_config ); - f_cf_roam_call_up ( v_config.gmA, v_config.mxA, v_config.ici, v_config.mxB ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - f_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - - // check (OPTIONS + 200 OK exchange) - f_mtc_check_options ( v_config.mxB, PX_RCSE_A ); - f_mtc_check_response ( v_config.mxA, c_statusLine200, PX_RCSE_B ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_roam_as_down ( v_config ); - f_cf_adapter_down ( ); - } - - /** - * @desc IMS network supports capability discovery and OPTIONS messages exchange - * between two users in their home network can be performed. User B must be not - * Registered. - */ - testcase TD_IMS_CAP_0003 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_INT_AS v_config; - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getSipUserId ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.iscA := omit; - v_config.iscB := omit; - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_int_as_up ( v_config ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - - // test body - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - - // check (OPTIONS + 480 exchange) - f_mtc_check_options ( v_config.mxB, PX_RCSE_A ); - f_mtc_check_response_mx ( v_config.mxA, c_statusLine480 ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_int_as_down ( v_config ); - f_cf_adapter_down ( ); - } - - /** - * @desc IMS network supports capability discovery and OPTIONS messages exchange - * between two users in their home network can be performed. User B must be - * Registered. - */ - testcase TD_IMS_CAP_0004 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var CF_INT_AS v_config; - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getSipUserId ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.iscA := omit; - v_config.iscB := omit; - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_int_as_up ( v_config ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - f_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - f_mtc_triggerUserCommand ( v_ueB, "Force user B to be not provisionned for RCS-e" ); // Trigger UE B - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - - // check (OPTIONS + 404 exchange) - f_mtc_check_options ( v_config.mxB, PX_RCSE_A ); - f_mtc_check_response_mx ( v_config.mxA, c_statusLine404 ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_int_as_down ( v_config ); - f_cf_adapter_down ( ); - } - - /** - * @desc IMS network supports properly presence service when a watcher - * subscribes to presence information for a presentity that it’s - * located in a different network. - * @see TS 102 901-2 V2.1.2 clause 4.5.1.1 - */ - testcase TC_IMS_PRES_0001() runs on ImsTestCoordinator system IotSystemInterface { - var CF_ROAM_AS v_config; - var ImsUserInfo v_userInfoA := f_getPresUser ( PX_EUT_A ); - var ImsUserInfo v_userInfoB := f_getPresUser ( PX_EUT_B ); - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); - - // create components - v_config.gmA := f_cf_create_monitor ( c_gm_A ); - v_config.gmB := f_cf_create_monitor ( c_gm_B ); - v_config.ici := f_cf_create_monitor ( c_ic ); - v_config.mxA := f_cf_create_monitor ( c_mx_A ); - v_config.mxB := f_cf_create_monitor ( c_mx_B ); - v_config.iscA := omit; - v_config.iscB := f_cf_create_monitor ( c_isc_B ); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_ueB ); - f_cf_roam_as_up ( v_config ); - - // preamble - f_mtc_userRegistration ( v_ueA, v_userInfoA ); - f_mtc_userRegistration ( v_ueB, v_userInfoB ); - - // test body - - // check - PUBLISH + 200 OK (from User B to IMS A that forwards it to AS B) - f_mtc_triggerUserCommand ( v_ueB, "publish presence and capability information"); - f_mtc_check_publish_mx ( v_config.mxB ); - f_mtc_check_response_mx ( v_config.mxB, c_statusLine200 ); - - // check (OPTIONS + 200 OK exchange) - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - f_mtc_check_options ( v_config.mxB, PX_RCSE_A ); - f_mtc_check_response ( v_config.mxA, c_statusLine200, PX_RCSE_B ); - - f_mtc_userSubscribeToPresenceInformation ( v_ueA ); - // check - SUBSCRIBE (from User A to AS B) - f_mtc_check_TP_IMS_5108_07_gm ( v_config.gmA, false ); - f_mtc_check_subscribe ( v_config.mxB ); - f_mtc_check_TP_IMS_5108_07_isc ( v_config.iscB, false ); - - // check - 200 OK - f_mtc_check_response_mx ( v_config.mxB, c_statusLine200 ); - f_mtc_check_response_mx ( v_config.mxA, c_statusLine200 ); - - f_mtc_triggerUserCommand ( v_ueB, "verify reception of an authorization request from user A"); - f_mtc_userAuthorizationToPeer ( v_ueB ); - f_mtc_userCheckPresenceInformation ( v_ueA ); - - // postamble - f_PO_user_home_deregistration ( v_ueA ); - f_PO_user_home_deregistration ( v_ueB ); - - //unmap/disconnet component ports - f_cf_user_down ( v_ueA ); - f_cf_user_down ( v_ueB ); - f_cf_roam_as_down ( v_config ); - f_cf_adapter_down ( ); - - } //end testcase TC_IMS_PRES_0001 - - /** - * @desc IMS network supports properly presence service when a watcher subscribes - * to presence information for a presentity that it’s located in a different - * network. - * @see TS 102 901-2 V2.1.2 clause 4.5.1.2 - */ - testcase TC_IMS_PRES_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getPresUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getPresUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_triggerUserCommand ( v_ueB, "publish presence and capability information"); - - f_mtc_userCheckPresenceStatus(v_ueB);//Test Sequence Step 2 - f_mtc_userSubscribeToPresenceInformation(v_ueA);//Test Sequence Step 3 - - // check (OPTIONS + 200 OK exchange) - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - f_mtc_check_options ( v_mxB, PX_RCSE_A ); - f_mtc_check_response ( v_mxA, c_statusLine200, PX_RCSE_B ); - - //check 1 - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Check1 - f_mtc_check_subscribe(v_mxA); - f_mtc_check_subscribe(v_mxB); - f_mtc_check_TP_IMS_5108_07_isc(v_iscB,false); // Check1 - - //check 2 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_triggerUserCommand ( v_ueB, "verify reception of an authorization request from user A"); - f_mtc_userAuthorizationToPeer(v_ueB);//Test Sequence Step 5 - f_mtc_userCheckPresenceInformation(v_ueA);//Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_PRES_0002 - - /** - * @desc IMS network supports properly presence service when a watcher subscribes - * to presence information for a presentity that it’s located in a different - * network and does not authorize the watcher to be informed of his presence - * information. - * @see TS 102 901-2 V2.1.2 clause 4.5.1.3 - */ - testcase TC_IMS_PRES_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getPresUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getPresUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - // check (OPTIONS + 200 OK exchange) - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - f_mtc_check_options ( v_mxB, PX_RCSE_A ); - f_mtc_check_response ( v_mxA, c_statusLine200, PX_RCSE_B ); - - f_mtc_userSubscribeToPresenceInformation(v_ueA);//Test Sequence Step 1 - - //check 1 - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Check1 - f_mtc_check_subscribe(v_mxA); - f_mtc_check_subscribe(v_mxB); - f_mtc_check_TP_IMS_5108_07_isc(v_iscB,false); // Check1 - - f_mtc_userCheckNoPresenceInformation(v_ueA);//Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_PRES_0003 - - /** - * @desc IMS network supports properly presence service when a watcher subscribes - * to a resource list containing one or more presentities located in - * different networks. - * @see TS 102 901-2 V2.1.2 clause 4.5.1.4 - */ - testcase TC_IMS_PRES_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getPresUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getPresUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_triggerUserCommand ( v_ueB, "publish presence and capability information"); - - //check 1 - PUBLISH - f_mtc_check_publish_mx(v_mxA); - f_mtc_check_TP_IMS_5097_13_ic(v_ic, false); // Check1 - f_mtc_check_publish_mx(v_mxB); - f_mtc_check_TP_IMS_5097_13_isc(v_iscB, false); // Check1 - - f_mtc_userCheckPresenceStatus(v_ueB);//Test Sequence Step 2 - - // check (OPTIONS + 200 OK exchange) - f_mtc_triggerUserCommand ( v_ueA, "select a contact of user B" ); // Trigger UE A to send OPTIONS to UE B - f_mtc_check_options ( v_mxB, PX_RCSE_A ); - f_mtc_check_response ( v_mxA, c_statusLine200, PX_RCSE_B ); - - f_mtc_userSubscribeToPresenceResourceList(v_ueA);//Test Sequence Step 3 - - //check 2 - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Check2 - f_mtc_check_subscribe(v_mxA); - f_mtc_check_subscribe(v_mxB); - f_mtc_check_TP_IMS_5108_07_isc(v_iscB,false); // Check2 - - //check 3 - 200 OK - f_mtc_check_TP_IMS_5313_01_isc(v_iscB, false); // Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5313_01_ic(v_ic, false); // Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckPresenceInformation(v_ueA);//Test Sequence Step 4 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_PRES_0004 - - /** - * @desc IMS network supports properly presence service when a watcher subscribes - * to a resource list containing one or more presentities located in - * different networks. - * @see TS 102 901-2 V2.1.2 clause 4.5.1.5 - */ - testcase TC_IMS_PRES_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getPresUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getPresUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_triggerUserCommand ( v_ueB, "publish presence and capability information"); - - f_mtc_userCheckPresenceStatus(v_ueB);//Test Sequence Step 2 - - f_mtc_userSubscribeToPresenceResourceList(v_ueA);//Test Sequence Step 3 - - //check 1 - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Check1 - f_mtc_check_subscribe(v_mxA); - f_mtc_check_subscribe(v_mxB); - f_mtc_check_TP_IMS_5108_07_isc(v_iscB,false); // Check1 - - //check 2 - 200 OK - f_mtc_check_TP_IMS_5313_01_isc(v_iscB, false); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5313_01_ic(v_ic, false); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckPresenceInformation(v_ueA);//Test Sequence Step 4 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_PRES_0005 - - /** - * @desc 1-to-1 chat standard procedure - interworking - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users in their home network can be performed. - * @see TS 102 901-2 V2.1.2 clause 4.5.2.1.1 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - * @see RFC 4976 clause 5 - */ - testcase TC_IMS_CHAT_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, true); // Check1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check 2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check 2 - - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - - // check MESSAGE + 200 OK exchange - f_mtc_check_message ( v_gmB ); - f_mtc_check_message ( v_iscB ); - f_mtc_check_message ( v_iscA ); - f_mtc_check_message ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - - f_mtc_userCheckChatInfo(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueA); //Test Sequence Step 3 - f_mtc_userAnswerChat(v_ueB); //Test Sequence Step 4 - - // checks 3 (2xx) - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false); // Check 3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0); // Check 3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckChating(v_ueA,v_ueB); //Test Sequence Step 5 - f_mtc_check_TP_MSRP_9000_03(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE B responds with 200 OK to UE A - - f_mtc_EndChat(v_ueA); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0001 - - /** - * @desc 1-to-1 chat standard procedure - roaming. - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users, one user in its home network and one user roaming can be performed. - * @see TS 102 901-2 V2.1.2 clause 4.5.3.1.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueB, v_userInfoA); //Test Sequence Step 1 - - // check 1,2,3 (INVITE) - f_mtc_check_TP_IMS_5046_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmA, true); // Check2 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true); // Check2 - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false); // Check3 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false); // Check3 - - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - - // check MESSAGE + 200 OK exchange - f_mtc_check_message ( v_gmB ); - f_mtc_check_message ( v_iscB ); - f_mtc_check_message ( v_iscA ); - f_mtc_check_message ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - - f_mtc_userCheckChatInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userAnswerChat(v_ueA); //Test Sequence Step 4 - - f_mtc_userCheckChating(v_ueB,v_ueA); //Test Sequence Step 5 - f_mtc_check_TP_MSRP_9000_03(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_A receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE_B sends the RECIVE_MSRP - - f_mtc_EndChat(v_ueB); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0002 - - /** - * @desc Several messages prior to establishment of 1-to-1 chat - interworking - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users in their home network can be performed. User B must wait until receiving several messages from User A before accepting the chat invitation. - * @see TS 102 901-2 V2.1.2 clause 4.5.3.2.1 - */ - testcase TC_IMS_CHAT_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, true); // Check1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check 2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check 2 - - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - - // check MESSAGE + 200 OK exchange - f_mtc_check_message ( v_gmB ); - f_mtc_check_message ( v_iscB ); - f_mtc_check_message ( v_iscA ); - f_mtc_check_message ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - - f_mtc_userCheckAutomaticalyAcceptedChat(v_ueB); //Test Sequence Step 2 - - // checks 3 (2xx) - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false); // Check 3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0); // Check 3 - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmA, true, c_statusLine200); // CheckMSRP2: Store 200 OK response message - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckChating(v_ueA,v_ueB); //Test Sequence Step 3 - f_mtc_check_TP_MSRP_9000_03(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_A receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE_B sends the RECIVE_MSRP - - f_mtc_EndChat(v_ueA); //Test Sequence Step 4 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0003 - - /** - * @desc Several messages prior to establishment of 1-to-1 chat - roaming (optional). - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users, one user in its home network and one user roaming can be performed. User B must wait until receiving several messages from User A before accepting the chat invitation - * @see TS 102 901-2 V2.1.2 clause 4.5.3.2.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueB, v_userInfoA); //Test Sequence Step 1 - - // check 1,2,3 (INVITE) - f_mtc_check_TP_IMS_5046_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmA, true); // Check2 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true); // Check2 - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false); // Check3 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false); // Check3 - - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - - // check MESSAGE + 200 OK exchange - f_mtc_check_message ( v_gmB ); - f_mtc_check_message ( v_iscB ); - f_mtc_check_message ( v_iscA ); - f_mtc_check_message ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscA, c_statusLine200 ); - f_mtc_check_response_mx ( v_iscB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - - f_mtc_userCheckAutomaticalyAcceptedChat(v_ueB); //Test Sequence Step 2 - - f_mtc_userCheckChating(v_ueB,v_ueA); //Test Sequence Step 3 - f_mtc_check_TP_MSRP_9000_03(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE B responds with 200 OK to UE A - - f_mtc_EndChat(v_ueB); //Test Sequence Step 4 - - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0004 - - /** - * @desc IMS network supports instant messaging (IM) service and messages - * exchange between two users in their home network can be performed. - * User B rejects the chat invitation. - * @see TS 102 901-2 V2.1.2 clause 4.5.2.1.5 - */ - testcase TC_IMS_CHAT_0005_RemovedInRel_e ( ) runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check 1 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check 1 - - f_mtc_userCheckChatInfo(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueA); //Test Sequence Step 3 - f_mtc_userCheckChatRejected(v_ueB); //Test Sequence Step 4 - - // check 2 (ACK) - f_mtc_check_TP_IMS_5107_02_gm(v_gmA, false); // Check 1 - f_mtc_check_ack_mx(v_mxA); - f_mtc_check_TP_IMS_5107_02_ic(v_ic, false); // Check 1 - f_mtc_check_ack_mx(v_mxB); - - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0005 - - /** - * @desc IMS network supports instant messaging (IM) service and messages exchange - * between two users, one user in its home network and one user roaming can - * be performed. User B rejects the chat invitation. - * @see TS 102 901-2 V2.1.2 clause 4.5.2.1.6 - */ - testcase TC_IMS_CHAT_0006_RemovedInRel_e ( ) runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueB, v_userInfoA); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckChatInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userCheckChatRejected(v_ueA); //Test Sequence Step 4 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0006 - - /** - * @desc IMS network supports instant messaging (IM) service and messages - * exchange between two users in their home network can be performed. - * User B rejects the chat invitation. - * MSC was Fully changed in RCS-e - * @see TS 102 901-2 V2.1.2 clause 4.5.2.1.7 - */ - testcase TC_IMS_CHAT_0007_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckChatInfo(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueA); //Test Sequence Step 3 - f_mtc_userInformedNoAnswer(v_ueA); //Test Sequence Step 5 - - // check 1 (CANCEL) - f_mtc_check_TP_IMS_5107_03_gm(v_gmA, false); // Check 1 - f_mtc_check_cancel_mx(v_mxA); - f_mtc_check_TP_IMS_5107_03_ic(v_ic, false); // Check 1 - f_mtc_check_cancel_mx(v_mxB); - - f_mtc_userCheckChatCancelled(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckChatTerminated(v_ueA); //Test Sequence Step 7 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0007_Rcs_2 - - /** - * @desc Switching to 1-to-many chat - interworking. - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users in their home network can be performed. - * User A switching 1-to-1 chat to 1-to-many chat by inviting User C - * @see TS 102 901-2 V2.1.2 clause 4.5.3.3.1 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0007() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); // Test Sequence Step 6 - Step 2 - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); // Step3: ueA sends INVITE - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // CheckMSRP1 - // checks 2,3 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); // Check 2 - Step 9 - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Check 2 - Step 9 - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); // Check3 - f_mtc_userCheckChatingConf(v_ueA, v_ueB); // Check 3-4 - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // Step 28 - - f_mtc_EndChat(v_ueB); // Step 43 - f_mtc_check_TP_IMS_5107_01_gm(v_gmB, false); // Check send bye on gmB - Step 43A - - // checks 200 OK - f_mtc_check_TP_IMS_5107_02_gm(v_gmB, false); // Step 59 - - // UE_A subscrbes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueA); // Step 60 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Step 60 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Step 63 - // check - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmA, v_userInfoA, false); // Step 65 - - // UE_B subscribes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueB); // Step 69 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmB, false); // Step 69 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxB, c_statusLine200); // Step 82 - // check6 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmB, v_userInfoB, false); // Step 89 - - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); //Test Sequence Step 10 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 10 //userC - - f_mtc_EndChat(v_ueA); - f_mtc_EndChat(v_ueC); - - f_mtc_userCheckChatEnded(v_ueC); - f_mtc_userCheckChatEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0007 - - /** - * @desc IMS network supports instant messaging (IM) service and messages exchange - * between two users, one user in its home network and one user roaming can - * be performed. User B rejects the chat invitation. - * @see TS 102 901-2 V2.1.2 clause 4.5.2.1.8 - */ - testcase TC_IMS_CHAT_0008_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueB, v_userInfoA); //Test Sequence Step 1 - - f_mtc_userCheckChatInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userInformedNoAnswer(v_ueB); //Test Sequence Step 5 - - // check 1 (CANCEL) - f_mtc_check_TP_IMS_5107_03_gm(v_gmA, false); // Check 1 - f_mtc_check_cancel_mx(v_mxA); - f_mtc_check_TP_IMS_5107_03_ic(v_ic, false); // Check 1 - f_mtc_check_cancel_mx(v_mxB); - - f_mtc_userCheckChatCancelled(v_ueA); //Test Sequence Step 6 - f_mtc_userCheckChatTerminated(v_ueB); //Test Sequence Step 7 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0008_Rcs_2 - - /** - * @desc Switching to 1-to-many chat - roaming (optional). - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users, - * one user in its home network and one user roaming can be performed. - * User B switching 1-to-1 chat to 1-to-many chat by inviting User C - * @see TS 102 901-2 V2.1.2 clause 4.5.3.3.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0008() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); // Test Sequence Step 6 - Step 2 - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); // Step3: ueA sends INVITE - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // CheckMSRP1 - // checks 2,3 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); // Check 2 - Step 9 - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Check 2 - Step 9 - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); // Check3 - f_mtc_userCheckChatingConf(v_ueA, v_ueB); // Check 3-4 - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // Step 28 - - f_mtc_EndChat(v_ueA); // Step 54 - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check send bye on gmA - Step 54 - f_mtc_check_TP_IMS_5107_01_gm(v_gmB, false); // Check send bye on gmB - Step 65 - f_mtc_check_response_mx(v_gmA, c_statusLine200); // Step 77 - - // UE_B subscrbes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueB); // Step 78 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmB, false); // Step 78 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_gmB, c_statusLine200); // Step 87 - // check - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmA, v_userInfoA, false); // Step 92 - - // UE_A subscribes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueA); // Step 99 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Step 99 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_gmA, c_statusLine200); // Step 112 - // check6 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmA, v_userInfoB, false); // Step 119 - - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); //Test Sequence Step 10 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 10 //userC - - f_mtc_EndChat(v_ueA); - f_mtc_EndChat(v_ueC); - - f_mtc_userCheckChatEnded(v_ueC); - f_mtc_userCheckChatEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0008 - - /** - * @desc IMS network supports instant messaging (IM) service and messages - * exchange between two users in their home network can be performed. - * User B must explicitly accept the chat invitation - * @see TS 102 901-2 V2.1.2 clause 4.5.3.1.1 - */ - testcase TC_IMS_CHAT_0009_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check 2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check 2 - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - - // checks 3 (2xx) - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false); // Check 3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0); // Check 3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 9 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 10 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0009_Rcs_2 - - /** - * @desc File transfer within 1-to-1 chat - interworking. - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users in their home network can be performed. - * User A starts file transfer with User B - * @see TS 102 901-2 V2.1.2 clause 4.5.3.4.1 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0009() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateFt(v_ueA, v_userInfoB); // Step 2 - // Check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check2 - - // Check 3 - f_mtc_userCheckFtInfo(v_ueB); - f_mtc_userCheckPeerFtInfo(v_ueA); - f_mtc_userTriggerFtAccept(v_ueB); - - // Check 4 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false);// Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0);// Check4 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Check 5 - f_mtc_check_TP_MSRP_9000_03(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_05(v_gmA, false); // CheckMSRP3-b: UE B sends report with success status (200 OK) to UE A - f_mtc_userCheckChating(v_ueA, v_ueB); // Step 42 - - f_mtc_EndChat(v_ueA); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0009 - - /** - * @desc IMS network supports instant messaging (IM) service and messages - * exchange between two users, one user in its home network and one - * user roaming can be performed. User B must explicitly accept the - * chat invitation. - * @see TS 102 901-2 V2.1.2 clause 4.5.3.1.2 - */ - testcase TC_IMS_CHAT_0010_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5046_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - - // checks 2 (2xx) - f_mtc_check_TP_IMS_5110_01_isc(v_iscA); // Check 2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5110_01_ic(v_ic); // Check 2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 9 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 10 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0010_Rcs_2 - - /** - * @desc File transfer within 1-to-1 chat - roaming. - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users, one user in its home network and one user roaming can be performed. - * User B starts file transfer with User A - * @see TS 102 901-2 V2.1.2 clause 4.5.3.4.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0010() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateFt(v_ueB, v_userInfoA); // Step 2 - // Check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmB, false); // Check1 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5108_03_isc(v_iscA, false, 0); // Check2 - - // Check 3 - f_mtc_userCheckFtInfo(v_ueA); - f_mtc_userCheckPeerFtInfo(v_ueB); - f_mtc_userTriggerFtAccept(v_ueA); - - // Check 4 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscA, false);// Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0);// Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - // Check 5 - f_mtc_check_TP_MSRP_9000_03(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_05(v_gmB, false); // CheckMSRP3-b: UE B sends report with success status (200 OK) to UE A - f_mtc_userCheckChating(v_ueB, v_ueA); // Step 42 - - f_mtc_EndChat(v_ueB); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0010 - - - - /** - * @desc IMS network handles subsequent INVITEs and NOTIFYs correctly during extension - * of 1-to-1 session to an Ad-hoc IM Conferences between users in their home network - * @see TS 102 901-2 V2.1.2 clause 4.5.3.2.1 - */ - testcase TC_IMS_CHAT_0011_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckAutomaticalyAcceptedChat(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckChating(v_ueB,v_ueA); //Test Sequence Step 3 - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 4 - - // check 1 (INVITE) - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 1); // Check 1 - skip one INVITE when call is established - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5108_03_isc(v_iscA, false, 2); // Check 1 - - skip two INVITE when call is established - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 6 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 8 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 10 - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 11 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 12 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 13 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 14 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 15 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 16 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0011_Rcs_2 - - /** - * @desc File transfer rejection within 1-to-1 chat - interworking. - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users in their home network can be performed. - * User A starts file transfer with User B, but User B rejects invitation - * @see TS 102 901-2 V2.1.2 clause 4.5.3.5.1 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0011() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateFt(v_ueA, v_userInfoB); // Step 2 - // Check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check2 - - // Check 3 - f_mtc_userCheckFtInfo(v_ueB); - f_mtc_userRejectsFt(v_ueB); // Step 21- Test sequence 7 - f_mtc_check_response_mx(v_gmB, c_statusLine603); // Step22 - - // Check 4 - 603 Decline - f_mtc_check_response_mx(v_ic, c_statusLine603); - f_mtc_check_response_mx(v_gmA, c_statusLine603); - - // Check 5 - f_mtc_userCheckChating(v_ueA,v_ueB); // Test Sequence Step 9 - f_mtc_check_TP_MSRP_9000_03(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE B responds with 200 OK to UE A - - f_mtc_EndChat(v_ueA); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0011 - - /** - * @desc IMS network handles subsequent INVITEs and NOTIFYs correctly during extension - * of 1-to-1 session to an Ad-hoc IM Conferences between users, one user in its - * home network and the other user roaming - * @see TS 102 901-2 V2.1.2 clause 4.5.3.2.2 - */ - testcase TC_IMS_CHAT_0012_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChat(v_ueB, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckAutomaticalyAcceptedChat(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckChating(v_ueB,v_ueA); //Test Sequence Step 3 - - f_mtc_userInitiateChatConf (v_ueB, v_userInfoA); //Test Sequence Step 4 - - // check 1 (INVITE from IMS_B to IMS_A and 100 Trying from IMS_A to IMS_B) - f_mtc_check_response_mx(v_mxA, c_statusLine100); - f_mtc_check_TP_IMS_5070_01_ic(v_ic, false,3); // Check1 skip three packs with INVITE and 100 Trying - f_mtc_check_response_mx(v_mxB, c_statusLine100); - - f_mtc_userCheckChatConfInfo(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckPeerChatConfInfo(v_ueA); //Test Sequence Step 6 - f_mtc_userJoinChatConf(v_ueA); //Test Sequence Step 7 - f_mtc_userCheckChatConfInfo(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 10 - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 11 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 12 - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 13 - f_mtc_userCheckPeerLeaveChatConf(v_ueB); //Test Sequence Step 14 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 15 - - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 16 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0012_Rcs_2 - - /** - * @desc File transfer rejection within 1-to-1 chat - roaming. - * IMS network supports 1-to-1 IM/Chat service and messages exchange between two users in their home network can be performed. - * User A starts file transfer with User B - * @see TS 102 901-2 V2.1.2 clause 4.5.3.5.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0012() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_4_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); // Test Sequence Step 5 - - // test body - f_mtc_userInitiateFt(v_ueA, v_userInfoB); // Step 2 - // Check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check2 - - // Check 3 - f_mtc_userCheckFtInfo(v_ueB); - f_mtc_userRejectsFt(v_ueB); // Step 21- Test sequence 7 - f_mtc_check_response_mx(v_gmB, c_statusLine603); // Step22 - - // Check 4 - 603 Decline - f_mtc_check_response_mx(v_ic, c_statusLine603); - f_mtc_check_response_mx(v_gmA, c_statusLine603); - - // Check 5 - f_mtc_userCheckChating(v_ueA,v_ueB); // Test Sequence Step 9 - f_mtc_check_TP_MSRP_9000_03(v_gmB, false, v_inviteReq, v_inviteResp); // CheckMSRP3-a: UE_B receives the SEND_MSRP - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3-b: UE B responds with 200 OK to UE A - - f_mtc_EndChat(v_ueA); //Test Sequence Step 6 - - f_mtc_userCheckChatEnded(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0012 - - /** - * @desc IMS network handles subsequent INVITEs, REFERs and NOTIFYs correctly - * during addition of user C to an Ad-hoc IM Conferences between users - * in their home network - * User B must explicitly accept the chat invitation - * @see TS 102 901-2 V2.1.2 clause 4.5.3.3.1 - */ - testcase TC_IMS_CHAT_0013_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoC); //Test Sequence Step 7 - - f_mtc_userCheckPeerChatConfInfo(v_ueC); //Test Sequence Step 8 - f_mtc_userJoinChatConf(v_ueC); //Test Sequence Step 9 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 10 //userC - - // checks 1,2 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, true); // Check 1 - f_mtc_check_TP_IMS_5115_04_gm(v_gmB, false); // Check 2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_02_ic(v_ic, true); // Check 1 - f_mtc_check_TP_IMS_5115_04_ic(v_ic, false); // Check 2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckChatingConf(v_ueA,v_ueC); //Test Sequence Step 11 - f_mtc_userLeaveChatConf(v_ueC); //Test Sequence Step 12 - f_mtc_userCheckChatConfEnded(v_ueC); //Test Sequence Step 13 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 14 //peer userC - - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 15 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 16 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 17 //peer userB - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 18 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 19 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0013_Rcs_2 - - /** - * @desc 1-to-many chat - interworking. - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users in their home network can be performed. - * User A starts 1-to-many chat with users B and C - * @see TS 102 901-2 V2.1.2 clause 4.5.3.6.1 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0013() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_gmC := f_cf_create_monitor(c_gm_C); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueB, v_userInfoC); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_6_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); - - // test body - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); // Test Sequence Step 6 - Step 1 - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); // Step2: ueA sends INVITE - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // CheckMSRP1 - // checks 1 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); // Check 1 - Step 8 - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Check 1 - Step 8 - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); // Check3 - f_mtc_userCheckChatingConf(v_ueA, v_ueB); // Check 2-3 - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // Step27 - - // UE_A subscrbes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueA); // Step 41 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmA, false); // Step 41 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Step 44 - // check4 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmA, v_userInfoA, false); // Step 46 - - // UE_B subscribes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueB); // Step 50 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmB, false); // Step 50 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxB, c_statusLine200); // Step 63 - // check5 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmB, v_userInfoB, false); // Step 70 - - // Check6-7 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - f_mtc_userCheckPeerChatInfoOneToMany(v_ueB); - f_mtc_userCheckChatConfInfo(v_ueA); - - f_mtc_EndChat(v_ueB); // Step 81A - f_mtc_check_TP_IMS_5107_01_gm(v_gmB, false); // Check send bye on gmB - Step 82A - f_mtc_userCheckChatEnded(v_ueB); - - // Check6 ueA receives NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmA, v_userInfoA, false); // Step 98A - - f_mtc_EndChat(v_ueA); // Step 101A - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check send bye on gmB - Step 102A - f_mtc_userCheckChatEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0013 - - /** - * @desc IMS network handles subsequent INVITEs, REFERs and NOTIFYs correctly during - * addition of user C to an Ad-hoc IM Conferences between users, one user in - * its home network and the other user roaming - * @see TS 102 901-2 V2.1.2 clause 4.5.3.3.2 - */ - testcase TC_IMS_CHAT_0014_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 7 - - // check 1 (REFER) - f_mtc_check_TP_IMS_5107_04_gm(v_gmB, false); // Check1 - f_mtc_check_refer_mx(v_mxB); - f_mtc_check_TP_IMS_5107_04_ic(v_ic, false); // Check1 - f_mtc_check_refer_mx(v_mxA); - - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 8 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 10 - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 11 - - f_mtc_userLeaveChatConf(v_ueC); //Test Sequence Step 12 - f_mtc_userCheckChatConfEnded(v_ueC); //Test Sequence Step 13 - f_mtc_userCheckPeerLeaveChatConf(v_ueB); //Test Sequence Step 14 - - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 15 - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 16 - f_mtc_userCheckPeerLeaveChatConf(v_ueB); //Test Sequence Step 17 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 18 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 19 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0014_Rcs_2 - - /** - * @desc 1-to-many chat - roaming. - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users, one user in its home network and one user roaming can be performed. - * User B starts 1-to-many chat with user A and C - * @see TS 102 901-2 V2.1.2 clause 4.5.3.6.2 - * @see RFC 4975 clauses 5.4, 7.1 and 7.2 - */ - testcase TC_IMS_CHAT_0014() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_6_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); // Test Sequence Step 1 - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // CheckMSRP1: Store INVITE request message - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); // CheckMSRP2: Store 200 OK response message - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); - - // test body - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); // Test Sequence Step 6 - Step 1 - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); // Step2: ueA sends INVITE - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // CheckMSRP1 - // checks 1 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); // Check 1 - Step 8 - f_mtc_check_response_mx(v_mxA, c_statusLine200); // Check 1 - Step 8 - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); // Check3 - f_mtc_userCheckChatingConf(v_ueA, v_ueB); // Check 2-3 - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); // Step27 - - // UE_B subscrbes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueB); // Step 53 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmB, false); // Step 53 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxB, c_statusLine200); // Step 62 - // check4 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmB, v_userInfoB, false); // Step 67 - - // UE_A subscribes to the conference event package - f_mtc_userSubscribeToConferenceEventPackage(v_ueB); // Step 74 - // check - SUBSCRIBE - f_mtc_check_TP_IMS_5108_07_gm(v_gmB, false); // Step 74 - // SUBSCRIBE - 200 OK - f_mtc_check_response_mx(v_mxB, c_statusLine200); // Step 87 - // check6 - NOTIFY - f_mtc_check_TP_IMS_5094_01_UE(v_gmB, v_userInfoB, false); // Step 94 - - // Check6-7 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - f_mtc_userCheckPeerChatInfoOneToMany(v_ueB); - f_mtc_userCheckChatConfInfo(v_ueA); - - f_mtc_EndChat(v_ueB); // Step 81A - f_mtc_check_TP_IMS_5107_01_gm(v_gmB, false); // Check send bye on gmB - Step 82A - f_mtc_userCheckChatEnded(v_ueB); - - // Check6 ueA receives NOTIFY - f_mtc_check_notify_mx(v_gmA); // Step 98A - - f_mtc_EndChat(v_ueA); // Step 101A - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check send bye on gmB - Step 102A - f_mtc_userCheckChatEnded(v_ueA); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0014 - - /** - * @desc IMS network handles subsequent INVITEs and NOTIFYs correctly during rejoining - * of user B to existing Ad-hoc IM Conferences between users in their home network - * @see TS 102 901-2 V2.1.2 clause 4.5.3.4.1 - */ - testcase TC_IMS_CHAT_0015_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChatConf (v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueB); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueA); //Test Sequence Step 5 - - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckPeerLeaveChatConf(v_ueA); //Test Sequence Step 9 - - f_mtc_userRejoinChatConf(v_ueB, v_userInfoA); //Test Sequence Step 10 - f_mtc_userCheckRejoinChatConfInfo(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckPeerRejoinChatConfInfo(v_ueA); //Test Sequence Step 12 - - // check 1 (200 OK) - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5110_01_ic(v_ic); // Check 1 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5110_01_isc(v_iscA); // Check 1 - - f_mtc_userCheckChatingConf(v_ueB,v_ueA); //Test Sequence Step 13 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 14 - - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 15 - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 16 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0015_Rcs_2 - - /** - * @desc Adding participants to an already established 1-to-many chat session - interworking. - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users in their network can be performed. - * User A invites User D to an already established 1-to-many Chat - * @see TS 102 901-2 V2.1.2 clause 4.5.3.7.1 - */ - testcase TC_IMS_CHAT_0015() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var IotEquipmentUser v_ueD := f_cf_create_IotEquipmentUser(c_userUE_D); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_gmC := f_cf_create_monitor(c_gm_C); - var ImsInterfaceMonitor v_gmD := f_cf_create_monitor(c_gm_D); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsUserInfo v_userInfoD := f_getImUser(PX_EUT_D); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_user_up(v_ueD); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - f_mtc_userRegistration(v_ueD, v_userInfoD); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_6_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); - - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); - // checks 1 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); - f_mtc_userCheckChatingConf(v_ueA, v_ueB); - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); - - // test body - f_mtc_userAddNewPaticipantChatOneToMany (v_ueA, v_userInfoD); // Step2 - f_mtc_check_TP_MSRP_9000_07(v_gmB, true); // Step3 - f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // Step3 - - f_mtc_userCheckChatingConf(v_ueA, v_ueD); // Check 2-3 - f_mtc_check_TP_MSRP_9000_01(v_gmD, false); // Step23 - - // Check4 ueA receives NOTIFY - f_mtc_check_notify_mx(v_gmA); // Check 4 - Step 38 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - - // UE_D subscrbes to the conference event package - Step42 - - // FIXME How to subscrbes to the conference event package??? Check with Bostjan - - // Check5 ueBD receives NOTIFY - f_mtc_check_notify_mx(v_gmD); // Step 62 - - // Check6-7 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - f_mtc_userCheckPeerChatInfoOneToMany(v_ueD); - f_mtc_check_TP_MSRP_9000_03(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3 - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3 - - f_mtc_EndChat(v_ueD); // Step 73 - f_mtc_check_TP_IMS_5107_01_gm(v_gmD, false); // Check send bye on gmB - Step 73 - f_mtc_userCheckChatEnded(v_ueD); - - // Check8 ueA receives NOTIFY - f_mtc_check_notify_mx(v_gmA); // Step 89 - - f_mtc_EndChat(v_ueA); - f_mtc_EndChat(v_ueB); - f_mtc_EndChat(v_ueC); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - f_PO_user_home_deregistration(v_ueD); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_user_down(v_ueD); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0015 - - /** - * @desc IMS network handles subsequent INVITEs and NOTIFYs correctly during rejoining - * of user B to existing Ad-hoc IM Conferences between users, one user in its - * home network and the other user roaming - * @see TS 102 901-2 V2.1.2 clause 4.5.3.4.2 - */ - testcase TC_IMS_CHAT_0016_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateChatConf (v_ueB, v_userInfoA); //Test Sequence Step 1 - - f_mtc_userCheckChatConfInfo(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerChatConfInfo(v_ueA); //Test Sequence Step 3 - f_mtc_userJoinChatConf(v_ueA); //Test Sequence Step 4 - f_mtc_userCheckChatConfInfo(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 6 - f_mtc_userLeaveChatConf(v_ueA); //Test Sequence Step 7 - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckPeerLeaveChatConf(v_ueB); //Test Sequence Step 9 - - f_mtc_userRejoinChatConf (v_ueA, v_userInfoB); //Test Sequence Step 10 - - // check 1 (INVITE) - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false); // Check3 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false); // Check3 - - f_mtc_userCheckRejoinChatConfInfo(v_ueA); //Test Sequence Step 11 - f_mtc_userCheckPeerRejoinChatConfInfo(v_ueB); //Test Sequence Step 12 - - f_mtc_userCheckChatingConf(v_ueA,v_ueB); //Test Sequence Step 13 - - f_mtc_userLeaveChatConf(v_ueB); //Test Sequence Step 14 - - f_mtc_userCheckChatConfEnded(v_ueB); //Test Sequence Step 15 - f_mtc_userCheckChatConfEnded(v_ueA); //Test Sequence Step 16 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_0016_Rcs_2 - - /** - * @desc Adding participants to an already established 1-to-many chat session - roaming. - * IMS network supports 1-to-many IM/Chat service and messages exchange between two users, one user in its home network and one user roaming can be performed. - * User A invites User D to an already established 1-to-many Chat - * @see TS 102 901-2 V2.1.2 clause 4.5.3.7.2 - */ - testcase TC_IMS_CHAT_0016() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueC := f_cf_create_IotEquipmentUser(c_userUE_C); - var IotEquipmentUser v_ueD := f_cf_create_IotEquipmentUser(c_userUE_D); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_gmC := f_cf_create_monitor(c_gm_C); - var ImsInterfaceMonitor v_gmD := f_cf_create_monitor(c_gm_D); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsUserInfo v_userInfoC := f_getImUser(PX_EUT_C); - var ImsUserInfo v_userInfoD := f_getImUser(PX_EUT_D); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - var SipMessage v_inviteReq; // Used to store INVITE request message - var SipMessage v_inviteResp; // Used to store INVITE 200 OK response message - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueC); - f_cf_user_up(v_ueD); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueC, v_userInfoC); - f_mtc_userRegistration(v_ueD, v_userInfoD); - - // Test Sequence Step 1: UE_A Initiate 1-to-1 chat with UE_B (UC_RCS_6_I steps 1 to 68) - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateChat (v_ueA, v_userInfoB); - v_inviteReq := f_mtc_check_TP_MSRP_9000_01(v_gmA, false); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_invite_mx(v_mxB); - // check INVITE 200 OK message with MSRP - v_inviteResp := f_mtc_check_TP_MSRP_9000_02(v_gmB, false, c_statusLine200); - // Setup TCP connection - f_mtc_userInitiateMSRPAuthentication(v_ueA); - f_mtc_userCheckMSRPAuthenticated(v_ueA); - f_mtc_userInitiateMSRPAuthentication(v_ueB); - f_mtc_userCheckMSRPAuthenticated(v_ueB); - f_mtc_userCheckChatInfo(v_ueB); - f_mtc_userCheckPeerChatInfo(v_ueA); - - f_mtc_userInitiateChatOneToMany (v_ueA, v_userInfoB, v_userInfoC); - - f_mtc_check_TP_MSRP_9000_06(v_gmB, true); - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); - // checks 1 (2xx) - f_mtc_check_TP_IMS_5115_02_gm(v_gmB, false); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_MSRP_9000_02(v_gmA, false, c_statusLine200); - f_mtc_userCheckChatingConf(v_ueA, v_ueB); - f_mtc_check_TP_MSRP_9000_01(v_gmB, false); - - // test body - f_mtc_userAddNewPaticipantChatOneToMany (v_ueA, v_userInfoD); // Step2 - f_mtc_check_TP_MSRP_9000_07(v_gmB, true); // Step3 - f_mtc_check_TP_MSRP_9000_01(v_gmA, false); // Step3 - - f_mtc_userCheckChatingConf(v_ueA, v_ueD); // Check 2-3 - f_mtc_check_TP_MSRP_9000_01(v_gmD, false); // Step23 - - // Check4 ueA receives NOTIFY - f_mtc_check_notify_mx(v_gmA); // Check 4 - Step 38 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - - // UE_D subscrbes to the conference event package - Step42 - - // FIXME How to subscrbes to the conference event package??? Check with Bostjan - - // Check5 ueBD receives NOTIFY - f_mtc_check_notify_mx(v_gmD); // Step 62 - - // Check6-7 - f_mtc_userCheckPeerChatInfoOneToMany(v_ueA); - f_mtc_userCheckPeerChatInfoOneToMany(v_ueD); - f_mtc_check_TP_MSRP_9000_03(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3 - f_mtc_check_TP_MSRP_9000_04(v_gmA, false, v_inviteReq, v_inviteResp); // CheckMSRP3 - - f_mtc_EndChat(v_ueD); // Step 73 - f_mtc_check_TP_IMS_5107_01_gm(v_gmD, false); // Check send bye on gmB - Step 73 - f_mtc_userCheckChatEnded(v_ueD); - - // Check8 ueA receives NOTIFY - f_mtc_check_notify_mx(v_gmA); // Step 89 - - f_mtc_EndChat(v_ueA); - f_mtc_EndChat(v_ueB); - f_mtc_EndChat(v_ueC); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueC); - f_PO_user_home_deregistration(v_ueD); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueC); - f_cf_user_down(v_ueD); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CHAT_00165 - - /** - * @desc IMS network supports file transfer service and file between two users - * in their home network can be performed. User B must explicitly accept - * the file transfer. - */ - testcase TC_IMS_FILE_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateFt (v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0);// Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0);// Check2 - - f_mtc_userCheckFtInfo(v_ueB); //Test Sequence Step 2 - f_mtc_userCheckPeerFtInfo(v_ueA); //Test Sequence Step 3 - f_mtc_userAcceptsFt(v_ueB); //Test Sequence Step 4 - - //check 3 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false);// Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0);// Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckFileTransferring(v_ueA, v_ueB); //Test Sequence Step 5 - - f_mtc_EndFt(v_ueA); //Test Sequence Step 6 - - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 7 - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0001 - - /** - * @desc IMS network supports file transfer service and file transfer between - * two users, one user in its home network and one user roaming can be - * performed. User B must explicitly accept the file transfer. - */ - testcase TC_IMS_FILE_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateFt (v_ueB, v_userInfoA); //Test Sequence Step 1 - - // check INVITE - f_mtc_check_TP_IMS_5046_01_gm ( v_gmB, true ); - f_mtc_check_invite_mx ( v_mxB ); - f_mtc_check_TP_IMS_5046_01_ic ( v_ic, true ); - f_mtc_check_TP_IMS_5067_01_ic ( v_ic, true ); - f_mtc_check_TP_IMS_5097_09_ic ( v_ic, false ); - f_mtc_check_TP_IMS_5097_09_isc ( v_iscA, false ); - f_mtc_userCheckFtInfo ( v_ueB ); - f_mtc_userCheckPeerFtInfo ( v_ueA ); - f_mtc_userAcceptsFt ( v_ueA ); - //check 200 OK - f_mtc_check_response_mx ( v_mxA, c_statusLine200 ); - f_mtc_check_response_mx ( v_mxB, c_statusLine200 ); - // check ACK - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_userCheckFileTransferring ( v_ueA, v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_userCheckFtEnded ( v_ueA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_userCheckFtEnded ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - } //end testcase TC_IMS_FILE_0002 - - /** - * @desc IMS network supports file transfer service and file between two users in - * their home network can be performed. Immediate response applies. - */ - testcase TC_IMS_FILE_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_TP_IMS_5097_01_gm ( v_gmA, false ); - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_TP_IMS_5097_01_ic ( v_ic, true ); - f_mtc_check_TP_IMS_5108_03_ic ( v_ic, false, 0 ); - f_mtc_check_invite_mx ( v_mxB ); - f_mtc_check_TP_IMS_5108_03_isc ( v_iscB, false, 0 ); - f_mtc_userCheckFtInfo ( v_ueB ); - f_mtc_userTriggerReleaseFtBeforeFileTransfered ( v_ueB ); - //check 603 - f_mtc_check_response_mx ( v_mxB, c_statusLine603 ); - f_mtc_check_response_mx ( v_mxA, c_statusLine603 ); - // check ACK - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_userCheckFtEnded ( v_ueB ); - f_mtc_userCheckFtEnded ( v_ueA ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0003 - - /** - * @desc IMS network supports file transfer service and file between two users in - * their home network can be performed. Immediate response applies. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.1.3 - */ - testcase TC_IMS_FILE_0003_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueA, v_userInfoB); //Test Sequence Step 1 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check 2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check 2 - - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueB); //Test Sequence Step 2 - - // checks 3 (2xx) - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false); // Check 3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0); // Check 3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckFt(v_ueA,v_ueB); //Test Sequence Step 3 - - f_mtc_EndFt(v_ueA); //Test Sequence Step 4 - - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 5 - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0003_Rcs_2 - - /** - * @desc IMS network supports file transfer service and file transfer between two users, - * one user in its home network and one user roaming can be performed. Immediate - * response applies. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.1.4 - */ - testcase TC_IMS_FILE_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_TP_IMS_5046_01_gm ( v_gmA, true ); - f_mtc_check_TP_IMS_5067_01_gm ( v_gmA, false ); - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_TP_IMS_5046_01_ic ( v_ic, true ); - f_mtc_check_TP_IMS_5067_01_ic ( v_ic, true ); - f_mtc_check_TP_IMS_5097_09_ic ( v_ic, false ); - f_mtc_check_invite_mx ( v_mxB ); - f_mtc_check_TP_IMS_5097_09_isc ( v_iscB, false ); - f_mtc_userCheckFtInfo ( v_ueB ); - f_mtc_userTriggerReleaseFtBeforeFileTransfered ( v_ueB ); - // check 603 - f_mtc_check_response_mx ( v_mxB, c_statusLine603 ); - f_mtc_check_response_mx ( v_mxA, c_statusLine603 ); - // check ACK - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_userCheckFtEnded ( v_ueB ); - f_mtc_userCheckFtEnded ( v_ueA ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0004 - - /** - * @desc IMS network supports file transfer service and file transfer between two users, - * one user in its home network and one user roaming can be performed. Immediate - * response applies. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.1.4 - */ - testcase TC_IMS_FILE_0004_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueB, v_userInfoA); //Test Sequence Step 1 - - // check 1,2,3 (INVITE) - f_mtc_check_TP_IMS_5046_01_gm(v_gmA, true); // Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true); // Check2 - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false); // Check3 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false); // Check3 - - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueB); //Test Sequence Step 2 - - f_mtc_userCheckFt(v_ueB,v_ueA); //Test Sequence Step 3 - - f_mtc_EndFt(v_ueB); //Test Sequence Step 4 - - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 5 - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 6 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0004_Rcs_2 - - /** - * @desc IMS network supports instant File transfer service and messages exchange between - * two users in their home networks can be performed. User A starts file transfer, but - * User B terminates it in the middle of the process - */ - testcase TC_IMS_FILE_0005 () runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userAcceptsFt ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckPeerFtInfo ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_userCheckFtInfo ( v_ueA ); - f_mtc_EndFt ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndFt ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_userCheckFtEnded ( v_ueA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckFtEnded ( v_ueB ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0005 - - /** - * @desc IMS network supports instant File transfer service and messages exchange between - * two users, one user in its home network and one user roaming can be performed. User - * A starts file transfer, but User B terminates it in the middle of the process - */ - testcase TC_IMS_FILE_0006 () runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userAcceptsFt ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckPeerFtInfo ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_userCheckFtInfo ( v_ueA ); - f_mtc_EndFt ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndFt ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_userCheckFtEnded ( v_ueA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckFtEnded ( v_ueB ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0006 - - /** - * @desc An established file transfer session is cancelled by the initiator of the session - * @see TS 102 901-2 V2.1.2 clause 4.5.4.3.1 - */ - testcase TC_IMS_FILE_0011_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueA, v_userInfoB); //Test Sequence Step 1 - - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueB); //Test Sequence Step 2 - - f_mtc_userCheckFt(v_ueA,v_ueB); //Test Sequence Step 3 - - f_mtc_userCheckFtCancel(v_ueA); //Test Sequence Step 4 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5106_01_gm(v_gmA, 0); - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5106_01_ic(v_ic, 0); - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckFtTerminated(v_ueB); //Test Sequence Step 5 - - // check 2 (200 OK) - f_mtc_check_TP_IMS_5121_02_gm(v_gmB, 0); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic, 0); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckFtStopped(v_ueA,v_ueB); //Test Sequence Step 6 - - f_mtc_EndFt(v_ueA); //Test Sequence Step 7 //File transfer session ends - - // check 1 (BYE) - f_mtc_check_TP_IMS_5107_01_gm(v_gmA, false); // Check3 - f_mtc_check_bye_mx(v_mxA); - f_mtc_check_TP_IMS_5107_01_ic(v_ic, false); // Check3 - f_mtc_check_bye_mx(v_mxB); - - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 8 //information about File transfer session has been released - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 9 //information about File transfer session has been released - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0011_Rcs_2 - - /** - * @desc An established file transfer session is cancelled by the roaming initiator - * of the session. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.4.2 - */ - testcase TC_IMS_FILE_0012_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getImUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getImUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueB, v_userInfoA); //Test Sequence Step 1 - - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueA); //Test Sequence Step 2 - - f_mtc_userCheckFt(v_ueA,v_ueB); //Test Sequence Step 3 - - f_mtc_userCheckFtCancel(v_ueB); //Test Sequence Step 4 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5048_01_gm(v_gmA, false, 0); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5048_01_ic(v_ic, true, 0); // Check1 - f_mtc_check_TP_IMS_5080_01_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckFtTerminated(v_ueB); //Test Sequence Step 5 - - f_mtc_userCheckFtStopped(v_ueA,v_ueB); //Test Sequence Step 6 - - f_mtc_EndFt(v_ueB); //Test Sequence Step 7 //File transfer session ends - - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 8 //information about File transfer session has been released - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 9 //information about File transfer session has been released - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0012_Rcs_2 - - /** - * @desc An established file transfer session is cancelled by the destination of the file transfer. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.4.1 - */ - testcase TC_IMS_FILE_0013_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueA, v_userInfoB); //Test Sequence Step 1 - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueB); //Test Sequence Step 2 - - f_mtc_userCheckFtInfo(v_ueA); //Test Sequence Step 3 //FT invitation - f_mtc_userTriggerFtStart(v_ueA); //Test Sequence Step 4 //File transfer started - f_mtc_userTriggerFtAccept(v_ueB); //Test Sequence Step 5 //File transfer accepted by peer - - f_mtc_userCheckFtStarted(v_ueA); //Test Sequence Step 6 - f_mtc_userCheckFtStarted(v_ueB); //Test Sequence Step 7 - - f_mtc_userTriggerReleaseFtBeforeFileTransfered(v_ueB); //Test Sequence Step 8 - - // check 1 (INVITE) - f_mtc_check_TP_IMS_5310_01_gm(v_gmB, 0); // Check1 - f_mtc_check_TP_IMS_5310_01_isc(v_iscB); // Check1 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_invite_mx(v_mxA); - - // check 2 (200 OK) - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_ic(v_ic, 0); // Check 2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_isc(v_iscB); // Check 2 - - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 10 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0013_Rcs_2 - - /** - * @desc An established file transfer session is cancelled by the destination of the file transfer. - * @see TS 102 901-2 V2.1.2 clause 4.5.4.4.2 - */ - testcase TC_IMS_FILE_0014_Rcs_2 () runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getFtUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getFtUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userInitiateFt(v_ueB, v_userInfoA); //Test Sequence Step 1 - f_mtc_userCheckAutomaticalyAcceptedFt(v_ueA); //Test Sequence Step 2 - - f_mtc_userCheckFtInfo(v_ueB); //Test Sequence Step 3 //FT invitation - f_mtc_userTriggerFtStart(v_ueB); //Test Sequence Step 4 //File transfer started - f_mtc_userTriggerFtAccept(v_ueA); //Test Sequence Step 5 //File transfer accepted by peer - - f_mtc_userCheckFtStarted(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckFtStarted(v_ueA); //Test Sequence Step 7 - - f_mtc_userTriggerReleaseFtBeforeFileTransfered(v_ueA); //Test Sequence Step 8 - - // check 1,2 (INVITE) - f_mtc_check_TP_IMS_5048_01_gm(v_gmB, false, 0); // Check1 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5048_01_ic(v_ic, true, 0); // Check1 - f_mtc_check_TP_IMS_5080_01_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - - f_mtc_userCheckFtEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckFtEnded(v_ueA); //Test Sequence Step 10 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_FILE_0014_Rcs_2 - - /** - * @desc User A sets up a voice call to user B and shares content with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.1.1 - */ - testcase TC_IMS_SHARE_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_mxB ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_userCheckSharingRequestAnswered ( v_ueB ); - f_mtc_EndSharing ( v_ueA ); - f_mtc_userCheckSharingEnded ( v_ueB ); - f_mtc_userCheckSharingEnded ( v_ueA ); - f_mtc_EndCall ( v_ueA ); - f_mtc_userCheckCallEnded ( v_ueB ); - f_mtc_userCheckCallEnded ( v_ueA ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0001 - - /** - * @desc User A sets up a voice call to user B and shares content with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.1.1 - */ - testcase TC_IMS_SHARE_0001_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - - // check 2 (INVITE) - f_mtc_check_TP_IMS_CONTENT_SHARE_02_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_02_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - f_mtc_EndSharing(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 11 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0001_Rcs_2 - - /** - * @desc User A sets up a voice call to user B and shares content with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.1.2 - */ - testcase TC_IMS_SHARE_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndSharing ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndSharing ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueB ); - f_mtc_userCheckSharingEnded ( v_ueA ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0002 - - /** - * @desc User A sets up a voice call to user B and shares content with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.1.2 - */ - testcase TC_IMS_SHARE_0002_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - - // check 2 (INVITE) - f_mtc_check_TP_IMS_CONTENT_SHARE_02_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_02_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - f_mtc_EndSharing(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 11 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0002_Rcs_2 - - /** - * @desc Termination of voice call during content sharing - * @see TS 102 901-2 V2.1.2 clause 4.5.5.2.1 - */ - testcase TC_IMS_SHARE_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - // check BYE - f_mtc_EndSharing ( v_ueA ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndSharing ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueB ); - f_mtc_userCheckSharingEnded ( v_ueA ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0003 - - /** - * @desc Termination of voice call during content sharing - * @see TS 102 901-2 V2.1.2 clause 4.5.5.2.1 - */ - testcase TC_IMS_SHARE_0003_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - - // check 2 (INVITE) - f_mtc_check_TP_IMS_CONTENT_SHARE_02_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_02_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0003_Rcs_2 - - /** - * @desc Termination of voice call during content sharing - * @see TS 102 901-2 V2.1.2 clause 4.5.5.2.2 - */ - testcase TC_IMS_SHARE_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndSharing ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndSharing ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueB ); - f_mtc_userCheckSharingEnded ( v_ueA ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0004 - - /** - * @desc Termination of voice call during content sharing - * @see TS 102 901-2 V2.1.2 clause 4.5.5.2.2 - */ - testcase TC_IMS_SHARE_0004_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - - // check 2 (INVITE) - f_mtc_check_TP_IMS_CONTENT_SHARE_02_gm(v_gmA, false); // Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_02_ic(v_ic, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueB); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - f_mtc_EndCall(v_ueA); //Test Sequence Step 8 - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0004_Rcs_2 - - /** - * @desc User A sets up a voice call to user B and user B shares content with user A. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.3.1 - */ - testcase TC_IMS_SHARE_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0005 - - /** - * @desc User A sets up a voice call to user B and user B shares content with user A. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.3.1 - */ - testcase TC_IMS_SHARE_0005_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueB, v_userInfoA); //Test Sequence Step 4 - - f_mtc_userRequestedToAcceptSharing(v_ueA); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueA); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - - f_mtc_EndSharing(v_ueB); //Test Sequence Step 8 - - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - f_mtc_EndCall(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0005_Rcs_2 - - /** - * @desc User A sets up a voice call to user B and user B shares content with user A. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.3.2 - */ - testcase TC_IMS_SHARE_0006() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndSharing ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueA ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0006 - - /** - * @desc User A sets up a voice call to user B and user B shares content with user A. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.3.2 - */ - testcase TC_IMS_SHARE_0006_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueB, v_userInfoA); //Test Sequence Step 4 - - f_mtc_userRequestedToAcceptSharing(v_ueA); //Test Sequence Step 5 - f_mtc_userAcceptsSharing(v_ueA); //Test Sequence Step 6 - f_mtc_userCheckSharingRequestAnswered(v_ueB); //Test Sequence Step 7 - - f_mtc_EndSharing(v_ueB); //Test Sequence Step 8 - - f_mtc_userCheckSharingEnded(v_ueB); //Test Sequence Step 9 - f_mtc_userCheckSharingEnded(v_ueA); //Test Sequence Step 10 - - f_mtc_EndCall(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 11 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 11 - - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0006_Rcs_2 - - /** - * @desc User A receive information that content sharing is not possible with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.4.1 - */ - testcase TC_IMS_SHARE_0007() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRejectsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine603 ); - f_mtc_userCheckSharingRequestRejected ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0007 - - /** - * @desc User A receive information that content sharing is not possible with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.4.1 - */ - testcase TC_IMS_SHARE_0007_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userInformedAboutPartnerCannotShareContent(v_ueA); //Test Sequence Step 2 - f_mtc_userInformedAboutPartnerCanShareContent(v_ueB); //Test Sequence Step 3 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 4 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 4 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0007_Rcs_2 - - /** - * @desc User A receive information that content sharing is not possible with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.4.2 - */ - testcase TC_IMS_SHARE_0008() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userRejectsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine603 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine603 ); - f_mtc_userCheckSharingRequestRejected ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0008 - - /** - * @desc User A receive information that content sharing is not possible with user B. - * @see TS 102 901-2 V2.1.2 clause 4.5.5.4.2 - */ - testcase TC_IMS_SHARE_0008_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userInformedAboutPartnerCannotShareContent(v_ueA); //Test Sequence Step 2 - f_mtc_userInformedAboutPartnerCanShareContent(v_ueB); //Test Sequence Step 3 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 4 - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 4 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 4 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0008_Rcs_2 - - /** - * @desc User B rejects to share content with user A - * @see TS 102 901-2 V2.1.2 clause 4.5.5.5.1 - */ - testcase TC_IMS_SHARE_0009() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndSharing ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndSharing ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_userCheckSharingEnded ( v_ueA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueB ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0009 - - /** - * @desc User B rejects to share content with user A - * @see TS 102 901-2 V2.1.2 clause 4.5.5.5.1 - */ - testcase TC_IMS_SHARE_0009_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userRejectsSharing(v_ueB); //Test Sequence Step 6 - - // check 2 (603) - f_mtc_check_TP_IMS_CONTENT_SHARE_03_gm(v_gmA, false); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine603); - f_mtc_check_TP_IMS_CONTENT_SHARE_03_ic(v_ic, false); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine603); - - f_mtc_userCheckSharingRequestRejected(v_ueA); //Test Sequence Step 7 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 8 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0009_Rcs_2 - - /** - * @desc Content sharing rejection - * @see TS 102 901-2 V2.1.2 clause 4.5.5.5.2 - */ - testcase TC_IMS_SHARE_0010() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall ( v_ueA, v_ueB, v_userInfoB ); - f_mtc_userInitiateShare ( v_ueA, v_userInfoB ); - // check INVITE - f_mtc_check_invite_mx ( v_mxA ); - f_mtc_check_invite_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine100 ); - f_mtc_userRequestedToAcceptSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmA, c_statusLine180 ); - f_mtc_userAcceptsSharing ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingRequestAnswered ( v_ueA ); - // check ACK - f_mtc_check_ack_mx ( v_gmA ); - f_mtc_check_ack_mx ( v_gmB ); - f_mtc_EndSharing ( v_ueA ); - // check BYE - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_userCheckSharingEnded ( v_ueB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueA ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxB ); - f_mtc_check_options_mx ( v_gmA ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_EndCall ( v_ueA ); - f_mtc_EndSharing ( v_ueB ); - // check BYE - f_mtc_check_bye_mx ( v_gmB ); - f_mtc_check_bye_mx ( v_gmA ); - f_mtc_userCheckSharingEnded ( v_ueA ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_userCheckSharingEnded ( v_ueB ); - // check OPTIONS - f_mtc_check_options_mx ( v_mxA ); - f_mtc_check_options_mx ( v_gmB ); - f_mtc_check_response_mx ( v_gmB, c_statusLine200 ); - f_mtc_check_response_mx ( v_gmA, c_statusLine200 ); - f_mtc_EndCall ( v_ueB ); - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0010 - - /** - * @desc Content sharing rejection - * @see TS 102 901-2 V2.1.2 clause 4.5.5.5.2 - */ - testcase TC_IMS_SHARE_0010_Rcs_2() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getShareUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getShareUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - - f_mtc_userSetupVoiceCall(v_ueA, v_ueB, v_userInfoB); //Test Sequence Step 1 - - // check 1 (OPTIONS) - f_mtc_check_TP_IMS_CONTENT_SHARE_01_gm(v_gmA, false); // Check1 - f_mtc_check_options_mx(v_mxA); - f_mtc_check_TP_IMS_CONTENT_SHARE_01_ic(v_ic, false); // Check1 - f_mtc_check_options_mx(v_mxB); - - - f_mtc_userCheckPartnerSharingCapabilities(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckPartnerSharingCapabilities(v_ueB); //Test Sequence Step 3 - f_mtc_userInitiateShare (v_ueA, v_userInfoB); //Test Sequence Step 4 - f_mtc_userRequestedToAcceptSharing(v_ueB); //Test Sequence Step 5 - f_mtc_userRejectsSharing(v_ueB); //Test Sequence Step 6 - - // check 2 (603) - f_mtc_check_TP_IMS_CONTENT_SHARE_03_gm(v_gmA, false); // Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine603); - f_mtc_check_TP_IMS_CONTENT_SHARE_03_ic(v_ic, false); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine603); - - f_mtc_userCheckSharingRequestRejected(v_ueA); //Test Sequence Step 7 - - f_mtc_EndCall(v_ueA); //Test Sequence Step 8 - - f_mtc_userCheckCallEnded(v_ueB); //Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA); //Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SHARE_0010_Rcs_2 - -}//end module AtsImsIot_TestCases_RCS \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_REG.ttcn deleted file mode 100644 index 6cb2a7f62762cc8be177534d37f61f5e4e085264..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_REG.ttcn +++ /dev/null @@ -1,348 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions. - */ -module AtsImsIot_TestCases_REG { - - import from AtsImsIot_Behavior { - function all; - } - - import from AtsImsIot_Functions { - function all; - } - - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} - - import from LibIms_UpperTester {type ImsUserInfo;} - - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - - import from AtsImsIot_TestConfiguration { - const all; - function all; - } - - import from LibSip_SIPTypesAndValues {const c_statusLine200, c_statusLine401, c_statusLine403;} - - import from LibIot_TestInterface {type IotEquipmentUser;} - - import from AtsImsIot_TestSystem { - type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface; - } - - import from LibSip_SIPTypesAndValues all; - - - - /** - * @desc - * First time registration in a visited IMS network. - * (in ETSI TS 186 011-2 V3.1.1 clause 4.5.2.1) - */ - testcase TC_IMS_REG_0001_AKA() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_anyValidUser := f_getAnyValidUser(PX_EUT_B); - var Response v_200OK_Step8; - var Request v_Subscribe_Step10; - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - f_mtc_userRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 1 @TODO shouldn't this be EUT_A? - - // @TODO check mw_credentialIntegrityNo, mw_credentialIntegrityYes - - f_mtc_check_TP_IMS_5011_01_gm(v_gmA, true); // Check1 when - f_mtc_check_TP_IMS_5011_01_ic(v_ic, true); // Check1 then - - f_mtc_check_TP_IMS_5089_01_gm_when(v_gmA, false); // Check4 when (Gm) - f_mtc_check_register_mx(v_mxA); - f_mtc_check_TP_IMS_5089_01_ic_when(v_ic, false); // Check4 when (Mw) - f_mtc_check_register_mx(v_mxB); - f_mtc_check_response_mx(v_mxB, c_statusLine401); - f_mtc_check_TP_IMS_5089_01_ic_then(v_ic, false); // Check4 then @TODO check mw_WwwAuthenticate - f_mtc_check_response_mx(v_mxA, c_statusLine401); - - f_mtc_check_TP_IMS_5011_02_gm(v_gmA, true); // Check2 when (Gm) - f_mtc_check_TP_IMS_5011_02_ic(v_ic, true); // Check2 then (Mw) - - f_mtc_check_TP_IMS_5092_01_gm(v_gmA, false); // Check5 when (Gm) - f_mtc_check_register_mx(v_mxA); - f_mtc_check_TP_IMS_5092_01_ic_when(v_ic, false); // Check5 when (Mw) - f_mtc_check_register_mx(v_mxB); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5092_01_ic(v_ic, true); // Check5 then - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_check_subscribe(v_mxA); - v_200OK_Step8 := f_mtc_check_TP_IMS_5044_01_ic_when(v_ic, false); // Check3 when - f_mtc_check_TP_IMS_5044_01_ic(v_ic, v_200OK_Step8, true); // Check3 then - f_mtc_check_subscribe(v_mxB); - - f_mtc_check_response_mx(v_mxB, c_statusLine200); - v_Subscribe_Step10 := f_mtc_check_TP_IMS_5096_01_ic_when(v_ic, false); // Check6 when - f_mtc_check_TP_IMS_5096_01_ic(v_ic, v_Subscribe_Step10, false); // Check6 then - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence Step 2 - f_mtc_userCheckRegistration(v_ueB, v_anyValidUser); - - // postamble - f_PO_user_home_deregistration(v_ueB); - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - f_cf_adapter_down(); - } - - /** - * @desc - * First time registration in a visited IMS network. - * (in ETSI TS 186 011-2 V3.1.1 clause 4.5.2.1) - */ - testcase TC_IMS_REG_0001_MD5() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_anyValidUser := f_getAnyValidUser(PX_EUT_B); - var Response v_200OK_Step8; - var Request v_Subscribe_Step10; - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - f_mtc_userRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 1 @TODO shouldn't this be EUT_A? - - // @TODO check mw_credentialIntegrityNo, mw_credentialIntegrityYes - - f_mtc_check_TP_IMS_5011_03_gm(v_gmA, true); // Check1 when - f_mtc_check_TP_IMS_5011_03_ic(v_ic, true); // Check1 then - - f_mtc_check_TP_IMS_5089_02_gm_when(v_gmA, false); // Check4 when (Gm) - f_mtc_check_register_mx(v_mxA); - f_mtc_check_TP_IMS_5089_02_ic_when(v_ic, false); // Check4 when (Mw) - f_mtc_check_register_mx(v_mxB); - f_mtc_check_response_mx(v_mxB, c_statusLine401); - f_mtc_check_TP_IMS_5089_02_ic_then(v_ic, false); // Check4 then @TODO check mw_WwwAuthenticate - f_mtc_check_response_mx(v_mxA, c_statusLine401); - - f_mtc_check_TP_IMS_5011_04_gm(v_gmA, true); // Check2 when (Gm) - f_mtc_check_TP_IMS_5011_04_ic(v_ic, true); // Check2 then (Mw) - - f_mtc_check_TP_IMS_5092_01_gm(v_gmA, false); // Check5 when (Gm) - f_mtc_check_register_mx(v_mxA); - f_mtc_check_TP_IMS_5092_01_ic_when(v_ic, false); // Check5 when (Mw) - f_mtc_check_register_mx(v_mxB); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5092_01_ic(v_ic, true); // Check5 then - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_check_subscribe(v_mxA); - v_200OK_Step8 := f_mtc_check_TP_IMS_5044_01_ic_when(v_ic, false); // Check3 when - f_mtc_check_TP_IMS_5044_01_ic(v_ic, v_200OK_Step8, true); // Check3 then - f_mtc_check_subscribe(v_mxB); - - - f_mtc_check_response_mx(v_mxB, c_statusLine200); - v_Subscribe_Step10 := f_mtc_check_TP_IMS_5096_01_ic_when(v_ic, false); // Check6 when - f_mtc_check_TP_IMS_5096_01_ic(v_ic, v_Subscribe_Step10, false); // Check6 then - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - // Test Sequence Step 2 - f_mtc_userCheckRegistration(v_ueB, v_anyValidUser); - - // postamble - f_PO_user_home_deregistration(v_ueB); - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - f_cf_adapter_down(); - } - - /** - * @desc - * No response from first entry point on REGISTER with topology hiding - * (TS 186 011-2 V3.1.1 Clause 4.5.2.2) - */ - // @TODO - testcase TC_IMS_REG_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var Request v_Register_Step4; // why do we need this variable? - var Response v_200OK_Step9; - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - f_mtc_userRegistration(v_ueB, f_getAnyValidUser(PX_EUT_A)); // Test Sequence Step 1 - - // check no response (check1-when) -message skip (1st register) - // check included in check1-then - - f_mtc_check_register_mx(v_mxA); - // check mw for second register request - f_mtc_check_TP_IMS_5203_01_ic(v_ic); // (Check1-then) - f_mtc_check_register_mx(v_mxB); - - // check gm for protected register (Check2-when) - - // check mw for protected register (check2-when) - - // check mw for 200_response (check2-then) - //v_200OK_Step9 := f_mtc_check_TP_IMS_5092_01_ic(v_ic); // Check2 - - //Step 2 - f_mtc_userCheckRegistration(v_ueB, f_getAnyValidUser(PX_EUT_B)); - - // postamble - f_PO_user_home_deregistration(v_ueB); - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - f_cf_adapter_down(); - } - - /** - * @desc - * 403 response to REGISTER from an un-trusted domain without topology hiding - * (ETSI TS 186 011-2 V3.1.1 Clause 4.5.2.4) - */ - testcase TC_IMS_REG_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_anyValidUser := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - f_mtc_userRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 1 - - f_mtc_check_TP_IMS_5129_01_gm(v_gmA, false); // Check1 when (Gm) - - f_mtc_check_register_mx(v_mxA); - f_mtc_check_TP_IMS_5129_01_ic_when(v_ic, false); // Check1 when (Mw) - f_mtc_check_register_mx(v_mxB); - - f_mtc_check_response_mx(v_mxB, c_statusLine403); - f_mtc_check_TP_IMS_5129_01_ic(v_ic, false); // Check1 then - f_mtc_check_response_mx(v_mxA, c_statusLine403); - - f_mtc_userCheckNoRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 2 - unsuccessful registration - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - } - - /** - * @desc IMS network can initiate user de-registration, - * e.g., when a user runs out of credit - * @see ETSI TS 186 011-2 V3.1.1 Clause 4.5.2.7 - */ - testcase TC_IMS_REG_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_anyValidUser := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - // IMS_B is triggered manually to de-register user B // Test Sequence Step 1 manuallz - - // IMS_B receives a network_originated_deregistration_event // Check1 when manually - - f_mtc_check_notify_mx(v_mxB); - f_mtc_check_TP_IMS_5093_01_UE_ic(v_ic, v_anyValidUser, false); // check1 then - 1st NOTIFY - f_mtc_check_notify_mx(v_mxA); - - f_mtc_check_notify_mx(v_mxB); - f_mtc_check_TP_IMS_5093_01_IMS_ic(v_ic, false); // check1 then - 2nd NOTIFY - f_mtc_check_notify_mx(v_mxA); - - f_mtc_userCheckNoRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 2 - check that user is not registered anymore (de-registration) - - // postamble - f_PO_user_home_deregistration(v_ueB); - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - } - /** - * @desc IMS network can initiate user re-authentication - * @see ETSI TS 186 011-2 V3.1.1 Clause 4.5.2.8 - */ - testcase TC_IMS_REG_0006() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsUserInfo v_anyValidUser := f_getAnyValidUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueB); - f_cf_roam_reg_up(v_gmA, v_mxA, v_ic, v_mxB); - - // test body - - //IMS_B receives a network_originated_deregistration_event // Check1 when manually - - f_mtc_check_TP_IMS_5094_01_UE(v_ic, v_anyValidUser, false); // check1 then - 1st NOTIFY - f_mtc_check_TP_IMS_5094_01_IMS(v_ic, false); // check1 then - 2nd NOTIFY - - f_mtc_userCheckRegistration(v_ueB, v_anyValidUser); // Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueB); - f_cf_roam_reg_down(v_gmA, v_mxA, v_ic, v_mxB); - - // unmap/disconnect component ports - f_cf_user_down(v_ueB); - f_cf_adapter_down(); - } -} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestCases_SS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestCases_SS.ttcn deleted file mode 100644 index e3230788f1342ed94228e9f13efd8ac94ab7b340..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestCases_SS.ttcn +++ /dev/null @@ -1,808 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides ATS specific test case definitions. - */ -module AtsImsIot_TestCases_SS { - - import from AtsImsIot_Behavior { - function all; - } - - import from AtsImsIot_Functions { - function all; - } - - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} - - import from LibIms_UpperTester {type ImsUserInfo;} - - import from LibSip_SIPTypesAndValues {const c_statusLine180, c_statusLine200, c_statusLine433;} - - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - - import from AtsImsIot_TestConfiguration { - const all; - function all; - } - - import from LibIot_TestInterface {type IotEquipmentUser;} - - import from AtsImsIot_TestSystem { - type ImsInterfaceMonitor, ImsTestCoordinator, IotSystemInterface, CF_INT_AS, CF_ROAM_AS; - } - - /** - * @desc Supplementary Service HOLD with AS - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.1 - */ - testcase TC_IMS_SS_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getHoldUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - f_mtc_userCheckRinging(v_ueB);//Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA);//Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueB);//Test Sequence Step 7 - - //check 1 - INVITE(hold) - f_mtc_check_TP_IMS_5310_01_gm(v_gmB, 0); // Check1 - f_mtc_check_TP_IMS_5310_01_isc(v_iscB); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueA);//Test Sequence Step 8 - - //check 2 - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_ic(v_ic, 1); // Check2 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_isc(v_iscB); // Check2 - - f_mtc_userCheckUserOnHold(v_ueB);//Test Sequence Step 9 - - f_mtc_userTriggerResume(v_ueB);//Test Sequence Step 10 - - //check 3 - INVITE(resume) - f_mtc_check_TP_IMS_5310_01_gm(v_gmB, 0); // Check3 - f_mtc_check_TP_IMS_5310_01_isc(v_iscB); // Check3 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueA);//Test Sequence Step 11 - - //check 4 - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_ic(v_ic, 0); // Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_isc(v_iscB); // Check4 - - f_mtc_userCheckCallResumed(v_ueB);//Test Sequence Step 12 - f_mtc_EndCall(v_ueA);//Test Sequence Step 13 - f_mtc_userCheckCallEnded(v_ueB );//Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0001 - - /** - * @desc Supplementary Service HOLD with AS in roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.2 - */ - testcase TC_IMS_SS_0002() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getHoldUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - f_mtc_userCheckRinging(v_ueB);//Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA);//Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 6 - - f_mtc_userTriggerHold(v_ueB);//Test Sequence Step 7 - - //check 1 - INVITE(hold) - f_mtc_check_TP_IMS_5310_01_gm(v_gmB, 1); // Check1 - skip one INVITE when call is established - f_mtc_check_TP_IMS_5310_01_isc(v_iscB); // Check1 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckUserOnHold(v_ueA);//Test Sequence Step 8 - - //check 2 - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_ic(v_ic, 2); // Check2 - skip two 200OK when call is established - because roaming - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_isc(v_iscB); // Check2 - - f_mtc_userCheckUserOnHold(v_ueB);//Test Sequence Step 9 - f_mtc_userTriggerResume(v_ueB);//Test Sequence Step 10 - - //check 3 - INVITE(resume) - f_mtc_check_TP_IMS_5310_01_gm(v_gmB, 0); // Check3 - f_mtc_check_TP_IMS_5310_01_isc(v_iscB); // Check3 - f_mtc_check_invite_mx(v_mxB); - - f_mtc_userCheckCallResumed(v_ueA);//Test Sequence Step 11 - - //check 4 - 200 OK - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_ic(v_ic, 1); // Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5312_01_isc(v_iscB); // Check4 - - f_mtc_userCheckCallResumed(v_ueB);//Test Sequence Step 12 - f_mtc_EndCall(v_ueA);//Test Sequence Step 13 - f_mtc_userCheckCallEnded(v_ueB );//Test Sequence Step 14 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 15 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0002 - - /** - * @desc Supplementary Service OIP with AS - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.3 - */ - testcase TC_IMS_SS_0003() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIPUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - //check 1,2 - INVITE - f_mtc_check_TP_IMS_5097_02_gm(v_gmA, false);// Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_02_ic(v_ic, true);// Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0);// Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0);// Check2 - - f_mtc_userCheckRinging(v_ueB);//Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA);//Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB);//Test Sequence Step 4 - - //check 3 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false);// Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0);// Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 6 - - f_mtc_EndCall(v_ueA);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueB);//Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0003 - - /** - * @desc Supplementary Service OIP with AS in roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.4 - */ - testcase TC_IMS_SS_0004() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIPUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - //checks 1,2 - INVITE - f_mtc_check_TP_IMS_5097_02_gm(v_gmA, false);// Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_02_ic(v_ic, true);// Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0);// Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0);// Check2 - - f_mtc_userCheckRinging(v_ueB);//Test Sequence Step 2 - f_mtc_userCheckPeerIsRinging(v_ueA);//Test Sequence Step 3 - f_mtc_userAnswerCall(v_ueB);//Test Sequence Step 4 - - //check 3 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false);// Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 1);// Check3 //skip 200OK IMSA->IMSB - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 5 - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 6 - - f_mtc_EndCall(v_ueA);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueB);//Test Sequence Step 8 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 9 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0004 - - /** - * @desc Supplementary Service OIR and ACR with AS - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.5 - */ - testcase TC_IMS_SS_0005() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getOIRUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getACRUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - //check 1 - INVITE - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0);// Check1 - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0);// Check1 - f_mtc_check_invite_mx(v_mxB); - - //check 2 - 433 Anonymity Disallowe - f_mtc_check_response_mx(v_mxB, c_statusLine433); - f_mtc_check_TP_IMS_5313_01_ic(v_ic, false);// Check2 - f_mtc_check_response_mx(v_mxA, c_statusLine433); - f_mtc_check_TP_IMS_5313_01_isc(v_iscA, false);// Check2 - - f_mtc_userCheckCallRejectedACR(v_ueA);//Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0005 - - /** - * @desc Supplementary Service OIR and ACR with AS in roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.6 - */ - testcase TC_IMS_SS_0006() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getACRUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIRUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_StartAllTrafficCapture(); - f_mtc_userInitiateCall (v_ueB, v_userInfoA);//Test Sequence Step 1 - - //checks 1,2,3 - INVITE - f_mtc_check_TP_IMS_5046_01_gm(v_gmB, true);// Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmB, false);// Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true);// Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true);// Check2 - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false);// Check3 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false);// Check3 - - f_mtc_userCheckCallRejectedACR(v_ueB);//Test Sequence Step 2 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0006 - - /** - * @desc Supplementary Service CFU with AS - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.7 - */ - testcase TC_IMS_SS_0007() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueB2 := f_cf_create_IotEquipmentUser(c_userUE_B2); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsUserInfo v_userInfoB2 := f_getAnyValidUser(PX_EUT_B);//// TODO f_getAnyValidUser2 ? - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, omit, v_iscB}; - - // map/connect component ports - // f_cf_user_up(v_ueB); - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueB2); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueB2, v_userInfoB2); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - // checks 1,2 - INVITE - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check2 - - //f_mtc_userCheckRinging(v_ueB2); //possible Test Sequence Step - //f_mtc_userCheckPeerIsRinging(v_ueA); //possible Test Sequence Step - f_mtc_userAnswerCall(v_ueB2);//Test Sequence Step 3 - - //check 3 - 200 OK - f_mtc_check_TP_IMS_5115_08_isc(v_iscB, false);// Check3 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5115_08_ic(v_ic, false, 0);// Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueB2);//Test Sequence Step 5 - - f_mtc_EndCall(v_ueA);//Test Sequence Step 6 - f_mtc_userCheckCallEnded(v_ueB2);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueB2); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueB2); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0007 - - /** - * @desc Supplementary Service CFU with AS in roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.8 - */ - testcase TC_IMS_SS_0008() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var IotEquipmentUser v_ueA2 := f_cf_create_IotEquipmentUser(c_userUE_A2); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsUserInfo v_userInfoA := f_getAnyValidUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getAnyValidUser(PX_EUT_B); - var ImsUserInfo v_userInfoA2 := f_getAnyValidUser(PX_EUT_A);//// TODO f_getAnyValidUser2 ? - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, omit}; - - // map/connect component ports - // f_cf_user_up(v_ueB); - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_user_up(v_ueA2); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - f_mtc_userRegistration(v_ueA2, v_userInfoA2); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA);//Test Sequence Step 1 - - // checks 1,2,3 - INVITE - f_mtc_check_TP_IMS_5046_01_gm(v_gmB, true); // Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmB, false); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true); // Check2 - f_mtc_check_TP_IMS_5070_01_ic(v_ic, false,0); // Check3 - f_mtc_check_invite_mx(v_mxA); - - //f_mtc_userCheckRinging(v_ueA2); //possible Test Sequence Step - //f_mtc_userCheckPeerIsRinging(v_ueA); //possible Test Sequence Step - f_mtc_userAnswerCall(v_ueA2);//Test Sequence Step 3 - - //check 4 - 200 OK - f_mtc_check_TP_IMS_5110_01_isc(v_iscA); // Check4 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - f_mtc_check_TP_IMS_5110_01_ic(v_ic); // Check4 - f_mtc_check_response_mx(v_mxB, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA2);//Test Sequence Step 5 - - f_mtc_EndCall(v_ueB);//Test Sequence Step 6 - f_mtc_userCheckCallEnded(v_ueA2);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueB);//Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - f_PO_user_home_deregistration(v_ueA2); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_user_down(v_ueA2); - f_cf_roam_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0008 - - /** - * @desc Supplementary Service OIP and OIR with AS - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.9 - */ - testcase TC_IMS_SS_0009() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getOIRUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIPUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - // f_cf_user_up(v_ueB); - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueA, v_userInfoB);//Test Sequence Step 1 - - // checks 1,2 - INVITE - f_mtc_check_TP_IMS_5097_01_gm(v_gmA, false); // Check1 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_01_ic(v_ic, true); // Check1 - f_mtc_check_TP_IMS_5108_03_ic(v_ic, false, 0); // Check2 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5108_03_isc(v_iscB, false, 0); // Check2 - - f_mtc_userCheckRinging(v_ueB); //possible Test Sequence Step - f_mtc_userCheckPeerIsRinging(v_ueA); //possible Test Sequence Step - f_mtc_userAnswerCall(v_ueB);//Test Sequence Step 3 - - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 5 - - f_mtc_EndCall(v_ueB);//Test Sequence Step 6 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueB);//Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_SS_0009 - - /** - * @desc Supplementary Service OIP and OIR with AS in roaming - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.10 - */ - testcase TC_IMS_SS_0010() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getOIRUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIPUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_ROAM_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - // f_cf_user_up(v_ueB); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_roam_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateCall (v_ueB, v_userInfoA);//Test Sequence Step 1 - - //checks 1,2,5 - INVITE - f_mtc_check_TP_IMS_5046_01_gm(v_gmB, true);// Check1 - f_mtc_check_TP_IMS_5067_01_gm(v_gmB, false);// Check5 - f_mtc_check_invite_mx(v_mxB); - f_mtc_check_TP_IMS_5046_01_ic(v_ic, true);// Check1 - f_mtc_check_TP_IMS_5067_01_ic(v_ic, true);// Check5 - f_mtc_check_TP_IMS_5097_09_ic(v_ic, false);// Check2 - f_mtc_check_invite_mx(v_mxA); - f_mtc_check_TP_IMS_5097_09_isc(v_iscB, false);// Check2 - - //check 3 -180 Ringing - f_mtc_check_TP_IMS_5308_01_gm(v_gmA, false);// Check3 - f_mtc_check_TP_IMS_5308_01_isc(v_iscA, false);// Check3 - f_mtc_check_response_mx(v_mxA, c_statusLine180); - - f_mtc_userCheckRinging(v_ueB); //possible Test Sequence Step - f_mtc_userCheckPeerIsRinging(v_ueA); //possible Test Sequence Step - f_mtc_userAnswerCall(v_ueA);//Test Sequence Step 3 - - //check 4 -200 OK - f_mtc_check_TP_IMS_5308_02_gm(v_gmA, false);// Check4 - f_mtc_check_TP_IMS_5308_02_isc(v_iscA, false);// Check4 - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckCallEstablished(v_ueB);//Test Sequence Step 4 - f_mtc_userCheckCallEstablished(v_ueA);//Test Sequence Step 5 - - f_mtc_EndCall(v_ueB);//Test Sequence Step 6 - f_mtc_userCheckCallEnded(v_ueA);//Test Sequence Step 7 - f_mtc_userCheckCallEnded(v_ueB);//Test Sequence Step 8 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_roam_as_down(v_config); - } //end testcase TC_IMS_SS_0010 - - /** - * @desc IMS network handles subsequent INVITEs, UPDATEs, REFERs and NOTIFYs - * correctly during Ad-Hoc Conference calls - * @see TS 186 011-2 V3.1.1 Clause 4.5.5.11 - */ - testcase TC_IMS_CONF_0001() runs on ImsTestCoordinator system IotSystemInterface { - // create components - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser(c_userUE_A); - var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser(c_userUE_B); - var ImsInterfaceMonitor v_gmA := f_cf_create_monitor(c_gm_A); - var ImsInterfaceMonitor v_gmB := f_cf_create_monitor(c_gm_B); - var ImsInterfaceMonitor v_ic := f_cf_create_monitor(c_ic); - var ImsInterfaceMonitor v_iscA := f_cf_create_monitor(c_isc_A); - var ImsInterfaceMonitor v_iscB := f_cf_create_monitor(c_isc_B); - var ImsUserInfo v_userInfoA := f_getOIRUser(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getOIPUser(PX_EUT_B); - var ImsInterfaceMonitor v_mxA := f_cf_create_monitor(c_mx_A); - var ImsInterfaceMonitor v_mxB := f_cf_create_monitor(c_mx_B); - var CF_INT_AS v_config := {v_gmA, v_mxA, v_ic, v_mxB, v_gmB, v_iscA, v_iscB}; - - // map/connect component ports - // f_cf_user_up(v_ueB); - f_cf_adapter_up(); - f_cf_user_up(v_ueA); - f_cf_user_up(v_ueB); - f_cf_int_as_up(v_config); - - // preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_ueB, v_userInfoB); - - // test body - f_mtc_userInitiateConferenceCall (v_ueA);//Test Sequence Step 1 - - f_mtc_userCheckConferenceSetUp(v_ueA); //Test Sequence Step 2 - f_mtc_userCheckConferenceEstablished(v_ueA); //Test Sequence Step 3 - - f_mtc_userInviteUserToJoinConferenceCall (v_ueA, v_userInfoB);//Test Sequence Step 4 - f_mtc_userCheckConferenceCallRinging(v_ueB); //Test Sequence Step 5 - - f_mtc_userCheckConferenceCallPeerIsRinging(v_ueA); // Test Sequence Step 6 - - f_mtc_userAnswerConferenceCall(v_ueB);//Test Sequence Step 7 - - // check 1 200 OK - f_mtc_check_TP_IMS_5121_02_gm(v_gmB,0); - f_mtc_check_response_mx(v_mxB, c_statusLine200); - f_mtc_check_TP_IMS_5121_02_ic(v_ic,0); - f_mtc_check_response_mx(v_mxA, c_statusLine200); - - f_mtc_userCheckInfoWhenPeerJoinsConference(v_ueA);//Test Sequence Step 8 - - f_mtc_LeaveConferenceCall(v_ueB);//Test Sequence Step 9 - f_mtc_userCheckConferenceCallEnded(v_ueB);//Test Sequence Step 10 - f_mtc_userCheckConferenceCallEnded(v_ueA);//Test Sequence Step 11 - - // postamble - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - - //unmap/disconnet component ports - f_cf_user_down(v_ueA); - f_cf_user_down(v_ueB); - f_cf_int_as_down(v_config); - f_cf_adapter_down(); - } //end testcase TC_IMS_CONF_0001 -} diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index a65d5b47caa2a2c0495806c7c62176fc638129c4..237f8314eb96c7170ec3a1d73c4f41194252ff51 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -14,19 +14,20 @@ module AtsImsIot_TestConfiguration { 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, InterfaceInfo, InterfaceInfoList, Product, + 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, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL;} + 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;} + import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} group constantDefinitions { //* interface monitor name Gm A @@ -71,6 +72,10 @@ module AtsImsIot_TestConfiguration { 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 { @@ -134,6 +139,66 @@ module AtsImsIot_TestConfiguration { // 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 @@ -150,12 +215,71 @@ module AtsImsIot_TestConfiguration { // 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 ImsInterfaceMonitor { + function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { var SetFilterRsp v_rsp; var template Status v_status := { code := e_success, @@ -181,8 +305,108 @@ module AtsImsIot_TestConfiguration { } } } + + /** + * @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 { @@ -198,10 +422,58 @@ module AtsImsIot_TestConfiguration { 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 { + group testConfiguration { //TODO: check to delete at end of STF574 ATS devel /** * @desc @@ -1233,6 +1505,307 @@ module AtsImsIot_TestConfiguration { 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 0000000000000000000000000000000000000000..71567c68f4ce6bfb4534e788e8b2acd75beacc5e --- /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_TestControl.ttcn3 b/ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn3 deleted file mode 100644 index 7be0d9a5b6ad58fc81aaada491977bc86458e32c..0000000000000000000000000000000000000000 --- a/ttcn/AtsImsIot/AtsImsIot_TestControl.ttcn3 +++ /dev/null @@ -1,32 +0,0 @@ -/** - * @author STF 370 - * @version $Id: $ - * @desc This module provides ATS specific test control declarations. - */ -module AtsImsIot_TestControl { - import from AtsImsIot_TestCases_CALL all; - import from AtsImsIot_TestCases_MESS all; - import from AtsImsIot_TestCases_REG all; - import from AtsImsIot_TestCases_SS all; - import from AtsImsIot_TestCases_RCS all; - import from AtsImsIot_TestCases_ENUM all; - import from AtsImsIot_TestCases_EPC all; - - control { - // MESS TCs - //execute(TC_IMS_MESS_0001()); - - // CALL TCs - //execute(TC_IMS_CALL_0001()); - execute(TC_IMS_CALL_0003()); // OK - //execute(TC_IMS_CALL_0007()); - //execute(TC_IMS_CALL_0017()); - - // REG TCs - //execute(TC_IMS_REG_0002()); - //execute(TC_IMS_REG_0003()); - - // SS TCs - //execute(TC_IMS_SS_0006()); - } -} \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index 96b74a7f80f4f7f3b7f721c2a33b6fc03f7d2721..a86c23287c338cafa4992b3fcedb4749b1d85e30 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -5,6 +5,7 @@ module AtsImsIot_TestSystem { 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;} /** @@ -12,6 +13,9 @@ module AtsImsIot_TestSystem { */ type component IotSystemInterface { port DataPort dPort; + port SipPort sipPort; + port DiameterPort diameterPort; + port SgiPort sgiPort; port EquipmentAccessPort eaPort; port AdapterConfigPort acPort; } @@ -27,6 +31,24 @@ module AtsImsIot_TestSystem { 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 @@ -35,15 +57,20 @@ module AtsImsIot_TestSystem { */ 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; + 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; } @@ -89,4 +116,50 @@ module AtsImsIot_TestSystem { 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 index 69330524706eaa0017afa2d5496b170d00037f50..61a232b5d73119e38c4ba6877068aee442e13f8f 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -13,6 +13,7 @@ module AtsImsIot_TypesAndValues { SEND_request, RECEIVE_response }; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG} import from LibCommon_DataStrings {type Bit1, Bit3}; group SIPmessageTypes { @@ -40,6 +41,17 @@ module AtsImsIot_TypesAndValues { 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 { /** diff --git a/ttcn/LibDiameter b/ttcn/LibDiameter index 9d2e24aeb673ade20d4e6c4e69184285b8b43c7f..1f3760b09ac67c211d11508263c565c50776c98a 160000 --- a/ttcn/LibDiameter +++ b/ttcn/LibDiameter @@ -1 +1 @@ -Subproject commit 9d2e24aeb673ade20d4e6c4e69184285b8b43c7f +Subproject commit 1f3760b09ac67c211d11508263c565c50776c98a diff --git a/ttcn/LibIms b/ttcn/LibIms index 476286ca120c7f740d669f4a768e966fed02d36b..d640fce7b8bd65dbb77c93a98f80c53a73bb2a24 160000 --- a/ttcn/LibIms +++ b/ttcn/LibIms @@ -1 +1 @@ -Subproject commit 476286ca120c7f740d669f4a768e966fed02d36b +Subproject commit d640fce7b8bd65dbb77c93a98f80c53a73bb2a24 diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn index 22091fa5d4ffee8ede2dff74d48cba8b7221f658..f94b9658871741f3d0d94523c79b0b32fbb9a3db 100644 --- a/ttcn/LibIot/LibIot_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -1,364 +1,379 @@ -/* - * @author STF 370 - * @version $Id: LibIot_PIXITS.ttcn 277 2009-06-16 15:06:42Z pintar $ - * @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; - } - - /** - * @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 - */ - modulepar ProductList PX_PRODUCTS := { - { - // productIndex = 0 - productName := "ProductA", - monitorInterfaces := { - { - interfaceName := "Gm", - 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", - 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", - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "ibcf.ProductA.etsi", - IpAddress := "fe80::21a:a0ff:fe07:100", //"192.86.1.100", - portNumbers := {5060} - } - } - } - }, - { - interfaceName := "ISC", - 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", - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "", - IpAddress := "", - portNumbers := {1111} - } - } - } - }, - { - interfaceName := "Sgi", - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "", - IpAddress := "", - portNumbers := {1111} - } - } - } - }, - { - interfaceName := "Mw", - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "", - IpAddress := "", - portNumbers := {2222} - } - } - } - } - } - }, - { - // productIndex = 1 - productName := "ProductB", - monitorInterfaces := { - { - interfaceName := "Gm", - 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", - 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", - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "ibcf.ProductB.etsi", - IpAddress := "fec0::216:d3ff:fe0d:10", - portNumbers := {5185,5187,5188,5189} - } - } - } - }, - { - interfaceName := "ISC", - 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 -} \ No newline at end of file +/* + * @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_TestInterface.ttcn b/ttcn/LibIot/LibIot_TestInterface.ttcn index 41a2ae4a4fa74f6a209bf923bd3aed500fbc446a..6baefb05c86d42054e94210995f6a29d9967f65f 100644 --- a/ttcn/LibIot/LibIot_TestInterface.ttcn +++ b/ttcn/LibIot/LibIot_TestInterface.ttcn @@ -58,6 +58,7 @@ module LibIot_TestInterface { type component InterfaceMonitor extends OracleClient { timer tc_wait := PX_MAX_MSG_WAIT; var charstring vc_interfaceName := "Undefined"; + var MonitorInterfaceInfo vc_Interface; port AdapterConfigPort acPort; } diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn index a24b0e5437a0000c0df9965a917bfb1eb078a4f2..8a97ca9c9100f9b50ec6e86e56d3c0bf15324ba9 100644 --- a/ttcn/LibIot/LibIot_TypesAndValues.ttcn +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -92,6 +92,29 @@ module LibIot_TypesAndValues { * @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 + } /** * @@ -228,6 +251,9 @@ module LibIot_TypesAndValues { } } + with{ + encode "IOTCodec"; + } group oracleRelatedTypes { // used for PIXIT definition diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn new file mode 100644 index 0000000000000000000000000000000000000000..096ee757473fddda2d2e7ac569a0cbd4dfc09d95 --- /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