S1AP_TCFunctions.ttcn 151 KB
Newer Older
garciay's avatar
garciay committed
 *    @author   ETSI / STF519
garciay's avatar
garciay committed
 *    @desc     This module provides RfRo test functions used by the test cases.
 *    @copyright   ETSI Copyright Notification
 *                 No part may be reproduced except as authorized by written permission.
 *                 The copyright and the foregoing restriction extend to reproduction in all media.
 *                 All rights reserved.
 *    @see      ETSI TS 136 413 / 3GPP TS 36.413 version 13.4.0 Release 13
 */
module S1AP_TCFunctions {
    // LibCommon
    import from LibCommon_Sync all;
garciay's avatar
garciay committed
    import from LibCommon_VerdictControl all;
    // LibS1AP
    import from S1AP_Constants language "ASN.1:1997" all;
    import from S1AP_CommonDataTypes language "ASN.1:1997" all;
    // import from S1AP_Containers language "ASN.1:1997" all;
    import from S1AP_IEs language "ASN.1:1997" all;
    import from S1AP_PDU_Contents language "ASN.1:1997" all;
    import from S1AP_PDU_Descriptions language "ASN.1:1997" all;
    
garciay's avatar
garciay committed
    import from LibS1AP_Pixits all;
    //import from LibS1AP_TypesAndValues all;
    import from LibS1AP_Templates all;
    import from LibS1AP_Interface all;
    import from LibS1AP_Steps all;

    // Ats
    import from S1AP_Templates all;
    import from S1AP_Steps all;
garciay's avatar
garciay committed
    import from S1AP_Pixits all;
    import from S1AP_TestSystem all;
    
garciay's avatar
garciay committed
    group eNB_Role {
        /**
         * @desc E-RAB management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.2  E-RAB management group
         */
garciay's avatar
garciay committed
        group ERAB_management_group {
garciay's avatar
garciay committed
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_RAB_01
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_RAB_01() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
pintar's avatar
pintar committed

                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                    vc_eNB_UE_ID,
                    {m_E_RABToBeSetupItemBearerSUReq (
                        -,
                        m_e_RABlevelQoSParameters
                        (5)
                    )}
                ));

                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs(
                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                    vc_eNB_UE_ID,
garciay's avatar
garciay committed
                    {
                        mw_E_RABSetupItemBearerSURes
garciay's avatar
garciay committed
                    }
garciay's avatar
garciay committed
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_RAB_01
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_RAB_02
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_RAB_02() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                    vc_eNB_UE_ID,
garciay's avatar
garciay committed
                    {
                         m_E_RABToBeSetupItemBearerSUReq(1),
                         m_E_RABToBeSetupItemBearerSUReq(
                            2,
                            m_e_RABlevelQoSParameters
                            (255)
garciay's avatar
garciay committed
                         )
                     }
                ));

                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                    vc_eNB_UE_ID,
                    {
                          mw_E_RABSetupItemBearerSURes(1)
                    },
                    {
                        mw_E_RABItem(
                            2,
garciay's avatar
garciay committed
                            {
                                radioNetwork :=not_supported_QCI_value
garciay's avatar
garciay committed
                            }
garciay's avatar
garciay committed
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_RAB_02
garciay's avatar
garciay committed
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_03
             */
            function f_TC_S1AP_eNB_RAB_03() runs on S1APComponent { 
                // Local variables
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                        m_E_RABToBeSetupItemBearerSUReq
                    }
                ));
       
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -, //omit
                    {
                        mw_E_RABItem(
                            0,
                            {
                                radioNetwork :=
                            (s1_intra_system_handover_triggered,
                             s1_inter_system_handover_triggered,
                             x2_handover_triggered)
                            }
                        )
                    }
                ));
                                
               f_recv_Handover_Required(mw_HandoverRequiredIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    ltetoutran,
                    ?,
                    ?,
                    ?
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_03
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_04
             */
            function f_TC_S1AP_eNB_RAB_04() runs on S1APComponent { 
                // Local variables
                const QCI c_qci_id := 1; // TODO
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeSetupItemBearerSUReq (
                        -,
                        m_e_RABlevelQoSParameters(c_qci_id)
                    )}
                ));
                
                
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -, //omit
                    {
                        mw_E_RABItem(
                            0,
                            {
                                radioNetwork := not_supported_QCI_value
                            }
                        )
                    }
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_RAB_04
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_05
             */
            function f_TC_S1AP_eNB_RAB_05() runs on S1APComponent { 
                // Local variables
                const QCI c_qci_id := 1; // TODO
    
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
    
                // Test body
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                   vc_MME_UE_ID,
                   vc_eNB_UE_ID,
                   {
                        m_E_RABToBeSetupItemBearerSUReq(1),
                        m_E_RABToBeSetupItemBearerSUReq(1)
                    }
               ));
    
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -, //omit
                    {
                        mw_E_RABItem(
                            1,
                            {
                                radioNetwork := multiple_E_RAB_ID_instances
                            }
                        ),
                        mw_E_RABItem(
                            1,
                            {
                                radioNetwork := multiple_E_RAB_ID_instances
                            }
                        )
                    }
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_05
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_06
             */
            function f_TC_S1AP_eNB_RAB_06() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                // Test body
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeSetupItemBearerSUReq (
                        1,
                        m_e_RABlevelQoSParameters
                        (5)
                    )}
                ));
    
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                        mw_E_RABSetupItemBearerSURes
                    }
                ));
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                         m_E_RABToBeSetupItemBearerSUReq(1)
                     }
                ));
                
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -, //omit
                    {
                        mw_E_RABItem(
                            1,
                            {
                                radioNetwork := multiple_E_RAB_ID_instances
                            }
                        )
                    }
                ));     
                               
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_06        
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_07
             */
            function f_TC_S1AP_eNB_RAB_07() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                  const TransportLayerAddress c_transportLayerAddress := '0'B;
                   const GTP_TEID c_gTP_TEID := '00000000'O;
                   const NAS_PDU c_nAS_PDU := '0000'O;
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
            
                // Test body
                f_send_E_RABSetupRequest(m_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (1),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU,
                        {m_correlationID_IE('01020304'O), m_SIPTO_correlationID_IE('01020304'O)} // iE_Extensions
                    )}
                ));
                f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs_FailedToSetupList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -, //omit
                    {
                        mw_E_RABItem(
                            1,
                            ?
                        )
                    }
                )); 
             
                               
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_07     
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_08
             */
            function f_TC_S1AP_eNB_RAB_08() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                f_send_E_RABModifiedRequest(m_E_RABModifiedReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeModifiedItemBearerSUReq(
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters(5),
                        c_nAS_PDU
                    )}
                ));
                
                f_recv_E_RABModifiedResponse(mw_E_RABModifiedResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                        mw_E_RABModifyItemBearerModRes(c_E_RAB_ID_A)
                    }
                ));
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
    
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_08          
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_09
             */
            function f_TC_S1AP_eNB_RAB_09 () runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                f_send_E_RABModifiedRequest(m_E_RABModifiedReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeModifiedItemBearerSUReq(
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters(255),
                        c_nAS_PDU
                    )}
                ));
                f_recv_E_RABModifiedResponse(mw_E_RABModifiedResIEs_FailedToModifyList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    omit,
                    {
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            {
                                radioNetwork := not_supported_QCI_value
                            }
                        )
                    }
                ));
                            
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_09 
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_10
             */
            function f_TC_S1AP_eNB_RAB_10 () runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                f_send_E_RABModifiedRequest(m_E_RABModifiedReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {m_E_RABToBeModifiedItemBearerSUReq(
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters(255),
                        c_nAS_PDU
                    )}
                ));
                
                f_recv_E_RABModifiedResponse(mw_E_RABModifiedResIEs_FailedToModifyList(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    omit,
                    {
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            {
                                radioNetwork := (s1_intra_system_handover_triggered,
                                             s1_inter_system_handover_triggered,
                                             x2_handover_triggered)
                            }
                        )
                    }
                ));
            
            
                f_recv_Handover_Required(mw_HandoverRequiredIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    ltetoutran,
                    ?,
                    ?,
                    ?
                ));
            
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_10
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_11
             */
            function f_TC_S1AP_eNB_RAB_11 () runs on S1APComponent { 
                // Local variables
                
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                // TODO
            
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_11
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_12
             */
            function f_TC_S1AP_eNB_RAB_12  () runs on S1APComponent {
                // Local variables
                
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict());
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_RAB_12
garciay's avatar
garciay committed
        } // End of group ERAB_management_group
        
        /**
         * @desc Context management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.3  Context management group
         */
        group Context_management_group {
             * @desc Testcase function for TC_S1AP_eNB_CMP_01
            function f_TC_S1AP_eNB_CMP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        -,
                        m_e_RABlevelQoSParameters
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                    m_securityKey
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                        mw_E_RABSetupItemBearerSURes
                    }
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_01
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_02
             */
            function f_TC_S1AP_eNB_CMP_02() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const E_RAB_ID c_E_RAB_ID_B := 1;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(
                    m_InitialContextSetupReqIEs(
                        vc_MME_UE_ID,
                        vc_eNB_UE_ID,
                        m_UEAggregateMaximumBitrate(1,1),
                        {
                            m_E_RABToBeSetupItemBearerSUReq (
                                c_E_RAB_ID_A,
                                m_e_RABlevelQoSParameters(5),
                                c_transportLayerAddress,
                                c_gTP_TEID,
                                c_nAS_PDU
                            ),
                            m_E_RABToBeSetupItemBearerSUReq(
                                c_E_RAB_ID_B,
                                m_e_RABlevelQoSParameters(255),
                                c_transportLayerAddress,
                                c_gTP_TEID,
                                c_nAS_PDU
                        m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                        m_securityKey
                f_recv_InitialContext_SetupResponse(
                    mw_InitialContextSetupResIEs(
                        vc_MME_UE_ID,
                        vc_eNB_UE_ID,
                        {
                            mw_E_RABSetupItemBearerSURes(c_E_RAB_ID_A)
                        },
                        {
                            mw_E_RABItem(
                                c_E_RAB_ID_B,
                                {
                                    radioNetwork :=not_supported_QCI_value
                                }
                            )
                        }
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_02

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_03
             */
            function f_TC_S1AP_eNB_CMP_03() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (1),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                    m_securityKey
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupResIEs(
                    {
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            ?
                        )
                    }
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_03

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_04
             */
            function f_TC_S1AP_eNB_CMP_04() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    ),
                    m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    )},
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                    m_securityKey
                ));
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -,
                    {
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            {
                            radioNetwork := multiple_E_RAB_ID_instances
                            }                    
                        ),
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            {
                            radioNetwork := multiple_E_RAB_ID_instances
                            }                            
                        )
                    }
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_04
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_05
             */
            function f_TC_S1AP_eNB_CMP_05() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                const EncryptionAlgorithms c_notSupportedEncryptionAlgorithms := '0000000000000000'B;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    )},
                    m_UESecurityCapabilities(c_notSupportedEncryptionAlgorithms,'0101010101010101'B),
                    m_securityKey
                ));
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupFailureIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    mw_cause_ran(encryption_and_or_integrity_protection_algorithms_not_supported)
                ));
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_CMP_05
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_06
             */
            function f_TC_S1AP_eNB_CMP_06() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                const IntegrityProtectionAlgorithms c_notSupportedIntegrityProtectionAlgorithms := '0000000000000000'B;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    )},
                    m_UESecurityCapabilities('0101010101010101'B, c_notSupportedIntegrityProtectionAlgorithms),
                    m_securityKey
                ));
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupFailureIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    mw_cause_ran(encryption_and_or_integrity_protection_algorithms_not_supported)
                ));
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_CMP_06
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_07
             */
            function f_TC_S1AP_eNB_CMP_07() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. NOTE: the cell accessed by the UE need to be a hybrid cell!***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU
                    )},
                    m_UESecurityCapabilities('0101010101010101'B, '0101010101010101'B),
                    m_securityKey
                ));
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupFailureIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    mw_cause_nas(csg_subscription_expiry)
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_07
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_08
             */
            function f_TC_S1AP_eNB_CMP_08() runs on S1APComponent { 
                // Local variables
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const TransportLayerAddress c_transportLayerAddress := '0'B;
                const GTP_TEID c_gTP_TEID := '00000000'O;
                const NAS_PDU c_nAS_PDU := '0000'O;
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (1),
                        c_transportLayerAddress,
                        c_gTP_TEID,
                        c_nAS_PDU,
                        {m_correlationID_IE('01020304'O), m_SIPTO_correlationID_IE('01020304'O)} // iE_Extensions
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                    m_securityKey
                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -,
                    {
                        mw_E_RABItem(
                            c_E_RAB_ID_A,
                            ?
                        )
                    }
                ));
                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_08

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_09
             */
            function f_TC_S1AP_eNB_CMP_09() runs on S1APComponent { 
                // Local variables
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_recv_UE_Context_Release_Request(mw_UeContextReleaseRequestIEs
                                                  (vc_MME_UE_ID, vc_eNB_UE_ID,
                                                   ?));                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_09
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_10
             */
            function f_TC_S1AP_eNB_CMP_10() runs on S1APComponent { 
                // Local variables
                var template(value) Cause v_cause;
                select(PX_VA){
                    case(1){v_cause := m_cause_ran(user_inactivity)}
                    case(2){v_cause := m_cause_ran(radio_connection_with_ue_lost)}
                    case(3){v_cause := m_cause_nas(csg_subscription_expiry)}
                    case(4){v_cause := m_cause_ran(cs_fallback_triggered)}
                    case(5){v_cause := m_cause_ran(redirection_towards_1xRTT)}
                    case(6){v_cause := m_cause_ran(interrat_redirection)}
                    case(7){v_cause := m_cause_ran(ue_not_available_for_ps_service)}
                    case else {setverdict(fail, "undefined PIXIT value for variant")}
                }
                
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_UE_Context_Release_Command(m_UeContextReleaseCommandIEs_MME(
                    vc_MME_UE_ID,
                    v_cause
                    ));
                f_recv_UE_Context_Release_Complete(mw_UeContextReleaseCompleteIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID
                ));
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_CMP_10
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_11
             */
            function f_TC_S1AP_eNB_CMP_11() runs on S1APComponent { 
                // Local variables
                var template(value) Cause v_cause;
                select(PX_VA){
                    case(1){v_cause := m_cause_ran(user_inactivity)}
                    case(2){v_cause := m_cause_ran(radio_connection_with_ue_lost)}
                    case(3){v_cause := m_cause_nas(csg_subscription_expiry)}
                    case(4){v_cause := m_cause_ran(cs_fallback_triggered)}
                    case(5){v_cause := m_cause_ran(redirection_towards_1xRTT)}
                    case(6){v_cause := m_cause_ran(interrat_redirection)}
                    case(7){v_cause := m_cause_ran(ue_not_available_for_ps_service)}
                    case else {setverdict(fail, "undefined PIXIT value for variant")}
                }
                
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_UE_Context_Release_Command(m_UeContextReleaseCommandIEs_ENB(
                    vc_eNB_UE_ID,
                    v_cause
                    ));
                f_recv_UE_Context_Release_Complete(mw_UeContextReleaseCompleteIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID
                ));
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
            } // End of function f_TC_S1AP_eNB_CMP_11
            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_12
             */
            function f_TC_S1AP_eNB_CMP_12() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_InitialContext_SetupRequest(m_InitialContextSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1),
                    {m_E_RABToBeSetupItemBearerSUReq (
                        -,
                        m_e_RABlevelQoSParameters
                        (5),
                        -,
                        -
                    )},
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),
                    m_securityKey
                ));

                f_recv_InitialContext_SetupResponse(mw_InitialContextSetupResIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    {
                        mw_E_RABSetupItemBearerSURes
                    }
                ));

                tc_wait.start(PX_TS1RELOCOverall);
                tc_wait.timeout;
                f_recv_UE_Context_Release_Request(mw_UeContextReleaseRequestIEs
                                                  (vc_MME_UE_ID, vc_eNB_UE_ID,
                                                   ?));    
                                                                   
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_12

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_13
             */
            function f_TC_S1AP_eNB_CMP_13() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();                
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_UE_Context_Modification_Request(m_ContextModificationReqIEsUEAgg(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    m_UEAggregateMaximumBitrate(1,1)
                ));

                f_recv_UE_Context_Modification_Response(mw_UeContextModificationResponseIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID
                )); 
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_13

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_14
             */
            function f_TC_S1AP_eNB_CMP_14() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();                
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_UE_Context_Modification_Request(m_ContextModificationReqIEsSecKey(
                    cs_fallback_required,
                    m_securityKey
                f_recv_UE_Context_Modification_Failure(mw_UeContextModificationFailureIEs(
                    ? // cause
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_14

            /**
             * @desc Testcase function for TC_S1AP_eNB_CMP_15
             */
            function f_TC_S1AP_eNB_CMP_15() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                
                f_rABSetupRequest();                
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_UE_Context_Modification_Request(m_ContextModificationReqIEsSecCap(
                    cs_fallback_required,
                    m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B)
                f_recv_UE_Context_Modification_Failure(mw_UeContextModificationFailureIEs(
                    ? // cause
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_15

rennoch's avatar
rennoch committed
			/**
			 * @desc Testcase function for TC_S1AP_eNB_CMP_16
			 */
			function f_TC_S1AP_eNB_CMP_16() runs on S1APComponent { 
				// Local variables
                
				// Preamble
				f_S1AP_enb_init();
                                
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
				// Test body
				f_send_UE_Radio_Capability_Match_Request(m_UeRadioCapabilityMatchReqIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					'0001'O // UERadioCapability
				));

				f_recv_UeRadioCapabilityMatchResponse(mw_UeRadioCapabilityMatchResponseIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					? // Voice_Support_Match_Indicator
				)); 
rennoch's avatar
rennoch committed
												                   
				// Postamble
				f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
				f_postamble_S1AP_eNB();
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
			} // End of function f_TC_S1AP_eNB_CMP_16


			/**
			 * @desc Testcase function for TC_S1AP_eNB_CMP_17
			 */
			function f_TC_S1AP_eNB_CMP_17() runs on S1APComponent { 
				// Local variables
                
				// Preamble
				f_S1AP_enb_init();
                                
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
				// Test body
                action("trigger a UE context modification indication");

				f_recv_Ue_Context_Modification_Indication(mw_UeContextModificationIndicationIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID
				)); 
                                                                   
				// Postamble
				f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
				f_postamble_S1AP_eNB();
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
			} // End of function f_TC_S1AP_eNB_CMP_17

			/**
			 * @desc Testcase function for TC_S1AP_eNB_CMP_18
			 */
			function f_TC_S1AP_eNB_CMP_18() runs on S1APComponent { 
				// Local variables
                
				// Preamble
				f_S1AP_enb_init();
                                
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
				// Test body
				action("trigger a UE context suspend request");

				f_recv_Ue_Context_Suspend_Request(mw_UeContextSuspendRequestIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID
				)); 
                                                                   
				// Postamble
				f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
				f_postamble_S1AP_eNB();
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
			} // End of function f_TC_S1AP_eNB_CMP_18

			/**
			 * @desc Testcase function for TC_S1AP_eNB_CMP_19
			 */
			function f_TC_S1AP_eNB_CMP_19() runs on S1APComponent { 
				// Local variables
                
				// Preamble
				f_S1AP_enb_init();
                                
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
				// Test body
				action("trigger a UE context resume request");

				f_recv_Ue_Context_Resume_Request(mw_UeContextResumeRequestIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID
				)); 
                                                                   
				// Postamble
				f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
				f_postamble_S1AP_eNB();
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
				log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
			} // End of function f_TC_S1AP_eNB_CMP_19

        } // End of group Context_management_group
        
        /**
         * @desc Handover signalling group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.4  Handover signalling group
         */
        group Handover_signalling_group {
        } // End of group Handover_signalling_group
        
        /**
         * @desc Paging group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.5  Paging group
         */
        group Paging_group {
        } // End of group Paging_group
        
        /**
         * @desc NAS transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.6   NAS transport group
         */
        group NAS_transport_group {
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_NAS_01
             */
            function f_TC_S1AP_eNB_NAS_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate the initiation of a NAS Transport procedure
                if (fx_eNB_Initiate_NAS_transport_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an INITIAL UE MESSAGE
                    f_recv_Initial_UE_Message(
                        mw_initial_uE_MessageIEs(
                            vc_eNB_UE_ID,
                            -,
                            mw_TAI(
                                PX_PLMN_IDENTITY, 
                                PX_TAC
                            ),
                            mw_eUTRAN_CGI(
                                PX_PLMN_IDENTITY, 
                                PX_CELL_ID
                            ),
                            mw_cause_ran(
                                - // TODO To be refined
                    )));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_NAS_01
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_NAS_02
             */
            function f_TC_S1AP_eNB_NAS_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                // And a NAS procedure is initiated
                fx_eNB_Initiate_NAS_transport_procedure();
                f_recv_Initial_UE_Message(
                    mw_initial_uE_MessageIEs(
                        vc_eNB_UE_ID,
                        -,
                        mw_TAI(
                            PX_PLMN_IDENTITY, 
                            PX_TAC
                        ),
                        mw_eUTRAN_CGI(
                            PX_PLMN_IDENTITY, 
                            PX_CELL_ID
                        ),
                        mw_cause_ran(
                            - // TODO To be refined 
                )));
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an ongoing NAS Transport procedure
                if (fx_eNB_NAS_transport_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an UPLINK_NAS_TRANSPORT
                    f_recv_Uplink_NAS_Transport(
                        mw_uplink_nAS_TransportIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -,
                            mw_eUTRAN_CGI(
                                PX_PLMN_IDENTITY, 
                                PX_CELL_ID
                            ),
                            mw_TAI(
                                PX_PLMN_IDENTITY, 
                                PX_TAC
                    )));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_NAS_02
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_NAS_03
             */
            function f_TC_S1AP_eNB_NAS_03() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                // And UE is not exchanged
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a UE has not received a INITIAL_UE_MESSAGE
                if (fx_eNB_NAS_transport_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a NAS_NON_DELIVERY_INDICATION
                    f_recv_NAS_Non_Delivery_Indication(
                        mw_nAS_Non_Delivery_IndicationIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -,
                            mw_cause_ran(
                                unspecified // TODO Check the value to be used
                            )
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_NAS_03
            
        } // End of group NAS_transport_group
        
        /**
         * @desc Management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.7 Management group
         */
        group Management_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_MNP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Reset(
                    m_resetIEs(
                        m_cause_nas(
                            unspecified // TODO Check the value to be used
                        ),
                        m_resetType_all
                ));
                
                f_recv_Reset_Acknowledge(
                    mw_reset_AcknowledgeIEs(
                        {
                            ?/*mw_uE_associatedLogicalS1_ConnectionItemResAck_IE(
                                mw_uE_associatedLogicalS1_ConnectionItem(
                                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                                    vc_eNB_UE_ID
                            ))*/
                        }
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_MNP_01
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_02
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_MNP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Reset procedure initiated from the E-UTRAN
garciay's avatar
garciay committed
                if (fx_eNB_Reset_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a RESET
                    f_recv_Reset(
                        mw_resetIEs(
                            mw_cause_nas(
                                unspecified // TODO Check the value to be used
                            ),
                            m_resetType_all
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_MNP_02
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_03
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_MNP_03() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Reset(
                    m_resetIEs(
                        m_cause_nas(
                            unspecified // TODO Check the value to be used
                        ),
                        m_resetType_partOfS1_Interface(
                            {
                                m_uE_associatedLogicalS1_ConnectionItemResAck_IE(
                                    m_uE_associatedLogicalS1_ConnectionItem(
                                        0,
                                        0
                                ))
                            }
                        )
                ));
                
                f_recv_Reset_Acknowledge(
                    mw_reset_AcknowledgeIEs(
                        {
                            ?/*mw_uE_associatedLogicalS1_ConnectionItemResAck_IE(
                                mw_uE_associatedLogicalS1_ConnectionItem(
                                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                                    vc_eNB_UE_ID
                            ))*/
                        }
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_MNP_03
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_TRP_04
             */
            function f_TC_S1AP_eNB_MNP_04() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an Error Indication procedure
                if (fx_eNB_Error_Indication_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a ERROR_INDICATION
                    f_recv_Error_Indication(
                        mw_error_IndicationIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID // TODO To be refined
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_04
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_TRP_05
             */
            function f_TC_S1AP_eNB_MNP_05() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a S1 Setup procedure
                if (fx_eNB_S1_Setup_Request_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a S1 SETUP REQUEST
                    f_recv_S1_Setup_Request(
                        mw_s1_Setup_RequestIEs(
                            mw_Global_eNB_ID(
                                PX_PLMN_IDENTITY, 
                                PX_eNB_ID
                            ),
                            {
                                mw_supportedTAs_Item(
                                    PX_TAC,
                                    {
                                        PX_PLMN_IDENTITY
                                    } 
                                )
                            },
                            PX_PAGING_DRX
                    ));
                    // Send the response to finalyse the procedure
                    f_send_S1_Setup_Response(
                        m_s1_Setup_ResponseIEs(
                            {
                                m_servedGUMMEIsItem(
                                    { PX_PLMN_IDENTITY },
                                    { PX_MME_GROUP_ID },
                                    { PX_MME_CODE }
                                )
                            }, 
                            PX_RELATIVE_MME_CAPAVCITY
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_05
            /**
             * @desc Testcase function for TC_S1AP_eNB_TRP_06
             */
            function f_TC_S1AP_eNB_MNP_06() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an eNB Configuration Update procedure
                if (fx_eNB_Configuration_Update_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an ENB_CONFIGURATION_UPDATE
                    f_recv_eNB_Configuration_Update(
                        mw_eNB_Configuration_UpdateIEs(
                            mw_Global_eNB_ID(
                                PX_PLMN_IDENTITY, 
                                PX_eNB_ID
                            ),
                            {
                                mw_supportedTAs_Item(
                                    PX_TAC,
                                    {
                                        PX_PLMN_IDENTITY
                                    } 
                                )
                            }
                    ));
                    // Send the acknowledge to finalyse the procedure
                    f_send_eNB_Configuration_Update_Acknowledge(
                        m_eNB_Configuration_Update_AcknowledgeIEs
                    );
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_06
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_TRP_07
             */
            function f_TC_S1AP_eNB_MNP_07() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_MME_Configuration_Update(
                    m_mME_Configuration_UpdateIEs(
                        {
                            m_servedGUMMEIsItem(
                                { PX_PLMN_IDENTITY },
                                { PX_MME_GROUP_ID },
                                { PX_MME_CODE }
                            )
                        } 
                ));
                
                f_recv_MME_Configuration_Update_Acknowledge(
                    mw_mME_Configuration_Update_AcknowledgeIEs
                );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_07
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_TRP_08
             */
            function f_TC_S1AP_eNB_MNP_08() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_MME_Configuration_Update(
                    m_mME_Configuration_UpdateIEs(
                        {
                            m_servedGUMMEIsItem(
                                { 
                                    PX_PLMN_IDENTITY,
                                    PX_PLMN_IDENTITY_UNKNOWN
                                },
                                { PX_MME_GROUP_ID },
                                { PX_MME_CODE }
                            )
                        } 
                ));
                
                f_recv_MME_Configuration_Update_Failure(
                    mw_mME_Configuration_Update_FailureIEs(
                        mw_cause_misc(
                            unknown_PLMN
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_08
            
        } // End of group Management_group 
        
        /**
         * @desc S1 CDMA 2000 tunnelling group 
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.8   S1 CDMA 2000 tunnelling group 
         */
        group S1_CDMA_2000_tunnelling_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_STP_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_STP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a CDMA2000 to be forwarded
garciay's avatar
garciay committed
                if (fx_eNB_Uplink_S1_CDMA2000_Tunnelling_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a an UPLINK_S1_CDMA2000_TUNNELLING
                    f_recv_Uplink_S1_CDMA2000_Tunnelling(
                        mw_uplink_S1_CDMA2000_TunnellingIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
                            PX_CDMA200_RAT_TYPE, 
                            PX_CDMA200_SECTOR_ID,
                            PX_CDMA200_PDU
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_STP_01
            
        } // End of group S1_CDMA_2000_tunnelling_group
        
        /**
         * @desc UE capability info indication group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.9   UE capability info indication group
         */
        group UE_capability_info_indication_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_UEC_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_UEC_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a capability-related information update
garciay's avatar
garciay committed
                if (fx_eNB_UE_Capability_Info_Indication_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a UE_CAPABILITY_INFO_INDICATION
                    f_recv_eNB_UE_Capability_Info_Indication(
                        mw_uE_Capability_Info_IndicationIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
                            - // TODO To be refined
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_UEC_01
            
        } // End of group UE_capability_info_indication_group
        
garciay's avatar
garciay committed
        /**
         * @desc Warning message transmission group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.10  Trace group
         */
        group Trace_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_01
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_TRP_01() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged, and a handover procedure is initiated.
                f_rABSetupRequest();
                f_initiate_handover();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Trace_Start(
                    m_trace_StartIEs(
                        m_traceActivation(
                            PX_EUTRAN_TRACE_ID,
                            PX_INTERFACES_TO_TRACE,
                            PX_TRACE_DEPTH,
                            PX_TRANSPORT_LAYER_ADDRESS
                )));
                
                f_recv_Trace_Failure_Indication(
                    mw_trace_Failure_IndicationIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        PX_EUTRAN_TRACE_ID,
                        - // TODO To be refined
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_TRP_01
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_02
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_TRP_02() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged, and a handover procedure is initiated.
                f_rABSetupRequest();
                f_initiate_traceStart();
                f_initiate_handover();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_deactivate_Trace(
                    m_deactivate_TraceIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        PX_EUTRAN_TRACE_ID
                ));
                
                f_recv_Trace_Failure_Indication(
                    mw_trace_Failure_IndicationIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        PX_EUTRAN_TRACE_ID,
                        - // TODO To be refined
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_initiate_deactivateTrace();
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_TRP_02
garciay's avatar
garciay committed
            
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_TRP_03
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_TRP_03() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged, and a handover procedure is initiated.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_initiate_traceStart();
                
                f_recv_Cell_Traffic_Trace(
                    mw_cell_Traffic_TraceIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
                        PX_EUTRAN_TRACE_ID,
                        mw_eUTRAN_CGI,
                        - // TODO To be refined
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_initiate_deactivateTrace();
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_TRP_03
garciay's avatar
garciay committed
        } // End of group Trace_group
        
        /**
         * @desc Warning message transmission group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.11  Location reporting group
         */
        group Location_reporting_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LRP_01
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LRP_01() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Location_Reporting_Control(
                    m_location_Reporting_ControlIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        m_request_Type(
                            direct,
                            PX_REPORT_AREA
                )));
                
                f_recv_Location_Report(
                    mw_location_ReportIEs(
                        ?,
                        ?,
                        mw_eUTRAN_CGI(
                            PX_PLMN_IDENTITY, 
                            PX_CELL_ID
                        ),
                        mw_TAI(
                            PX_PLMN_IDENTITY, 
                            PX_TAC
                        ),
                        mw_request_Type(
                            direct,
                            PX_REPORT_AREA
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LRP_01
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LRP_02
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LRP_02() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Location_Reporting_Control(
                    m_location_Reporting_ControlIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        m_request_Type(
                            change_of_serve_cell,
                            PX_REPORT_AREA
                )));
                
                fx_move_UE_to_new_cell(); // when UE changes to new cell
                
                f_recv_Location_Report(
                    mw_location_ReportIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        mw_eUTRAN_CGI(
                            PX_PLMN_IDENTITY, 
                            PX_CELL_ID
                        ),
                        mw_TAI(
                            PX_PLMN_IDENTITY, 
                            PX_TAC
                        ),
                        mw_request_Type(
                            change_of_serve_cell,
                            PX_REPORT_AREA
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LRP_02
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LRP_03
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LRP_03() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Location_Reporting_Control(
                    m_location_Reporting_ControlIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        m_request_Type(
                            stop_change_of_serve_cell,
                            PX_REPORT_AREA
                )));
                
                fx_check_UE_stops_reporting(); // when UE stop reporting at change of serving cell
                
                f_recv_Location_Report(
                    mw_location_ReportIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        mw_eUTRAN_CGI(
                            PX_PLMN_IDENTITY, 
                            PX_CELL_ID
                        ),
                        mw_TAI(
                            PX_PLMN_IDENTITY, 
                            PX_TAC
                        ),
                        mw_request_Type(
                            stop_change_of_serve_cell,
                            PX_REPORT_AREA
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LRP_03
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LRP_04
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LRP_04() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged, and a handover procedure is initiated.
                f_rABSetupRequest();
                f_initiate_handover();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Location_Reporting_Control(
                    m_location_Reporting_ControlIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        m_request_Type(
                            PX_EVENT_TYPE,
                            PX_REPORT_AREA
                )));
                
                f_recv_Location_Report_Failure_Indication(
                    mw_location_Report_Failure_IndicationIEs(
                        vc_MME_UE_ID,
garciay's avatar
garciay committed
                        vc_eNB_UE_ID,
garciay's avatar
garciay committed
                        ? // TODO To be refined: what kind of cause :-(
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LRP_04
garciay's avatar
garciay committed
            
        } // End of group Location_reporting_group
        
        /**
         * @desc Warning message transmission group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.12 Warning message transmission group
         */
        group Warning_message_transmission_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_WTP_01
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_WTP_01() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Write_Replace_Warning_Request(
                    m_write_Replace_Warning_RequestIEs(
                        PX_MESSAGE_IDENTIFIER,
                        PX_SERIAL_NUMBER,
                        PX_REPETITION_PERIOD, 
                        PX_NUMBER_OF_BROADCASTS_REQUESTED
                ));
                
                f_recv_Write_Replace_Warning_Response(
                    mw_write_Replace_Warning_ResponseIEs(
                        ?,
                        ?
                ));
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_WTP_01
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_WTP_02
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_WTP_02() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Kill_Request(
                    m_kill_RequestIEs(
                        PX_MESSAGE_IDENTIFIER,
                        PX_SERIAL_NUMBER
                ));
                
                f_recv_Kill_Response(
                    mw_kill_ResponseIEs(
                        ?,
                        ?
                ));
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_WTP_02
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_WTP_03
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_WTP_03() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a PWS Restart Indication procedure
garciay's avatar
garciay committed
                if (fx_eNB_PWS_Restart_Indication_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a PWS_RESTART_INDICATION
                    f_recv_eNB_PWS_Restart_Indication(
                        mw_pWS_Restart_IndicationIEs( 
                            { 
                                mw_eUTRAN_CGI(
                                    PX_PLMN_IDENTITY, 
                                    PX_CELL_ID
                                ) 
                            },
garciay's avatar
garciay committed
                            mw_Global_eNB_ID(
garciay's avatar
garciay committed
                                PX_PLMN_IDENTITY, 
garciay's avatar
garciay committed
                                PX_eNB_ID
garciay's avatar
garciay committed
                            ),
                            { 
                                mw_TAI(
                                    PX_PLMN_IDENTITY, 
                                    PX_TAC
                                ) 
                            },
                            { PX_EMERGENCY_AREA_ID }
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_WTP_03
garciay's avatar
garciay committed
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_WTP_04
garciay's avatar
garciay committed
             */
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_WTP_04() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a PWS Failure Indication procedure
garciay's avatar
garciay committed
                if (fx_eNB_PWS_Failure_Indication_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a PWS_FAILURE_INDICATION
                    f_recv_eNB_PWS_Failure_Indication(
                        mw_pWS_Failure_IndicationIEs( 
                            { 
                                mw_eUTRAN_CGI(
                                    PX_PLMN_IDENTITY, 
                                    PX_CELL_ID
                                ) 
                            },
garciay's avatar
garciay committed
                            mw_Global_eNB_ID(
garciay's avatar
garciay committed
                                PX_PLMN_IDENTITY, 
garciay's avatar
garciay committed
                                PX_eNB_ID
garciay's avatar
garciay committed
                            )
                    ));
                }
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_WTP_04
garciay's avatar
garciay committed
            
        } // End of group Warning_message_transmission_group
        
        /**
         * @desc eNB direct information transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.13  eNB direct information transfer group
         */
        group ENB_direct_information_transfer_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_EIT_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_EIT_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an ENB Direct Information Transfer procedure
garciay's avatar
garciay committed
                if (fx_eNB_Direct_Information_Transfer_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a ENB_DIRECT_INFORMATION_TRANSFER
                    f_recv_eNB_Direct_Information_Transfer(
                        mw_eNBDirectInformationTransfer_EDT(
                            mw_Inter_SystemInformationTransferType(
                                mw_RIMTransfer(
                                    ? // FIXME To be refined
                    ))));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_EIT_01
            
        } // End of group ENB_direct_information_transfer_group
        /**
         * @desc NAS transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.14  MME direct information transport group
         */
        group MME_direct_information_transfer_group {
        } // End of group MME_direct_information_transfer_group
garciay's avatar
garciay committed
         * @desc eNB configuration transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.15  eNB configuration transfer group
         */
        group ENB_configuration_transfer_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_ECT_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_ECT_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an ENB Configuration Transfer procedure
garciay's avatar
garciay committed
                if (fx_eNB_Configuration_Transfer_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a ENB_CONFIGURATION_TRANSFER
                    f_recv_eNB_Direct_Information_Transfer(
                        mw_sON_Configuration_Transfer_ECT(
                            mw_sON_Configuration_Transfer(
garciay's avatar
garciay committed
                                mw_TargeteNB_ID(mw_Global_eNB_ID, mw_TAI),
                                mw_SourceeNB_ID(mw_Global_eNB_ID, mw_TAI),
                                ? // FIXME To be refined
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_ECT_01
            
        } // End of group ENB_configuration_transfer_group 
        /**
         * @desc NAS transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.16  MME configuration transport group
         */
        group MME_configuration_transfer_group {
        } // End of group MME_configuration_transfer_group
        
        /**
         * @desc LPPa transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.17  LPPa transport group
         */
        group LPPa_transport_group {
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LPP_01
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LPP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a LPPa Transport procedure using a UE associated signalling
                if (fx_eNB_LPPa_Transport_procedure_ind(true) == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a UPLINK_UE_ASSOCIATED_LPPA_TRANSPORT
                    f_recv_Uplink_UE_Associated_Lppa_Transport(
                        mw_UplinkUEAssociatedLppaTransportIEs_LPPa_PDU(
                            ?
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LPP_01
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_LPP_02
garciay's avatar
garciay committed
            function f_TC_S1AP_eNB_LPP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_enb_init();
                // Preamble action: E-RAB Setup is exchanged
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a LPPa Transport procedure using a UE associated signalling
                if (fx_eNB_LPPa_Transport_procedure_ind(false) == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a UPLINK_NONE_UE_ASSOCIATED_LPPA_TRANSPORT
                    f_recv_Uplink_Non_UE_Associated_Lppa_Transport(
                        mw_UplinkNonUEAssociatedLppaTransportIEs_LPPa_PDU(
                            ?
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_eNB_LPP_02
         * @desc Unknown, Unforseen and Erroneous Protocol Data
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.18  Unknown, Unforseen and Erroneous Protocol Data
         */
        group Unknown_unforseen_errorneous_group {
        } // End of group Unknown_unforseen_errorneous_group
garciay's avatar
garciay committed
    } // End of group eNB_Role
garciay's avatar
garciay committed
    group MME_Role {
        
        /**
         * @desc E-RAB management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.1.2  E-RAB management group
         */
garciay's avatar
garciay committed
        group ERAB_management_group { 
            
            /**
garciay's avatar
garciay committed
             * @desc Testcase function for TC_S1AP_eNB_RAB_01
garciay's avatar
garciay committed
             */
            function f_TC_S1AP_MME_RAB_01() runs on S1APComponent { 
garciay's avatar
garciay committed
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                //f_send_(                    );
                
                //f_recv_(                    );
                
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
garciay's avatar
garciay committed
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
garciay's avatar
garciay committed
            } // End of function f_TC_S1AP_MME_RAB_01
garciay's avatar
garciay committed
            
        } // End of group ERAB_management_group
        /**
         * @desc Context management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.3  Context management group
         */
        group Context_management_group {
        } // End of group Context_management_group
        /**
         * @desc Handover signalling group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.4  Handover signalling group
         */
        group Handover_signalling_group {
        } // End of group Handover_signalling_group
        /**
         * @desc Paging group
         * @see ETSI TS 103 497-2 Clause 5.2.2.2.5  Paging group
        group Pagin_group {
            /**
             * @desc Testcase function for TC_S1AP_MME_PAG_01
             */
            function f_TC_S1AP_MME_PAG_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Paging procedure
                if (fx_MME_Paging_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a PAGING
                    f_recv_Paging(
                        mw_pagingIEs(
                            PX_UE_IDENTITY_INDEX_VALUE,
                            mw_uEPagingID_iMSI(
                                PX_IMSI
                            ),
                            PX_CNDOMAIN,
                            - // TODO To be refined
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_PAG_01
            
        } // End of group Pagin_group
        
        /**
         * @desc NAS transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.6  NAS transport group
         */
        group NAS_transport_group {
            /**
             * @desc Testcase function for TC_S1AP_MME_NAS_01
             */
            function f_TC_S1AP_MME_NAS_01() runs on S1APComponent { 
                // Local variables
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                // Test body
                // 1. to indicate an ongoing NAS Transport procedure
                if (fx_MME_Downlink_NAS_Transport_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a DOWNLINK_NAS_TRANSPORT
                    f_recv_Downlink_NAS_Transport(
                        mw_downlink_nAS_TransportIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_NAS_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_NAS_02
             */
            function f_TC_S1AP_MME_NAS_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged, and a NAS procedure is initiated.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Reroute NAS Request procedure
                if (fx_MME_Reroute_NAS_Request_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a REROUTE_NAS_REQUEST
                    f_recv_Reroute_NAS_Request(
                        mw_reroute_nAS_RequestIEs(
                            vc_MME_UE_ID,
                            -,
                            PX_MME_GROUP_ID
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_NAS_02
            
        } // End of group NAS_transport_group
garciay's avatar
garciay committed
        
garciay's avatar
garciay committed
        /**
         * @desc Management group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.7 Management group
         */
        group Management_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_01
             */
            function f_TC_S1AP_MME_MNP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Reset procedure initiated from the MME
                if (fx_MME_Reset_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a RESET
                    f_recv_Reset(
                        mw_resetIEs(
                            mw_cause_nas(
                                unspecified // TODO Check the value to be used
                            ),
                            m_resetType_all
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_02
             */
            function f_TC_S1AP_MME_MNP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Reset(
                    m_resetIEs(
                        m_cause_nas(
                            unspecified // TODO Check the value to be used
                        ),
                        m_resetType_all
                ));
                f_recv_Reset_Acknowledge(
                    mw_reset_AcknowledgeIEs(
                        {
                            ?/*mw_uE_associatedLogicalS1_ConnectionItemResAck_IE(
                                mw_uE_associatedLogicalS1_ConnectionItem(
                                    vc_MME_UE_ID,
garciay's avatar
garciay committed
                                    vc_eNB_UE_ID
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_02
            
garciay's avatar
garciay committed
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_03
             */
            function f_TC_S1AP_MME_MNP_03() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_Reset(
                    m_resetIEs(
                        m_cause_nas(
                            unspecified // TODO Check the value to be used
garciay's avatar
garciay committed
                        ),
                        m_resetType_all
                ));
                f_recv_Reset_Acknowledge(
                    mw_reset_AcknowledgeIEs(
                        {
                            ?/*mw_uE_associatedLogicalS1_ConnectionItemResAck_IE(
                                mw_uE_associatedLogicalS1_ConnectionItem(
                                    vc_MME_UE_ID,
                                    vc_eNB_UE_ID
                            ))*/
                        }
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
garciay's avatar
garciay committed
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_03
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_04
             */
            function f_TC_S1AP_MME_MNP_04() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an Error Indication procedure
                if (fx_MME_Error_Indication_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a ERROR INDICATION
                    f_recv_Error_Indication(
                        mw_error_IndicationIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID // TODO To be refined
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_04
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_05
             */
            function f_TC_S1AP_MME_MNP_05() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_S1_Setup_Request(
                    m_s1_Setup_RequestIEs(
                        m_Global_eNB_ID(
                            PX_PLMN_IDENTITY, 
                            PX_eNB_ID
                        ),
                        {
                            m_supportedTAs_Item(
                                PX_TAC,
                                {
                                    PX_PLMN_IDENTITY
                                } 
                            )
                        },
                        PX_PAGING_DRX
                ));
                f_recv_S1_Setup_Response(
                    mw_s1_Setup_ResponseIEs(
                        {
                            mw_servedGUMMEIsItem(
                                { PX_PLMN_IDENTITY },
                                { PX_MME_GROUP_ID },
                                { PX_MME_CODE }
                            )
                        }, 
                        PX_RELATIVE_MME_CAPAVCITY
                ));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
garciay's avatar
garciay committed
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_05
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_06
             */
            function f_TC_S1AP_MME_MNP_06() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_S1_Setup_Request(
                    m_s1_Setup_RequestIEs(
                        m_Global_eNB_ID(
                            PX_PLMN_IDENTITY, 
                            PX_eNB_ID
                        ),
                        {
                            m_supportedTAs_Item(
                                PX_TAC,
                                {
                                    PX_PLMN_IDENTITY,
                                    PX_PLMN_IDENTITY_UNKNOWN
                                } 
                            )
                        },
                        PX_PAGING_DRX
                ));
                f_recv_S1_Setup_Failure(
                    mw_s1_Setup_FailureIEs(
                        mw_cause_misc(
                            unknown_PLMN
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_06
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_07
             */
            function f_TC_S1AP_MME_MNP_07() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_eNB_Configuration_Update(
                    m_eNB_Configuration_UpdateIEs(
                        m_Global_eNB_ID(
                            PX_PLMN_IDENTITY, 
                            PX_eNB_ID
                        ),
                        {
                            m_supportedTAs_Item(
                                PX_TAC,
                                {
                                    PX_PLMN_IDENTITY
                                } 
                            )
                        }
                ));
                f_recv_eNB_Configuration_Update_Acknowledge(
                    mw_mME_Configuration_Update_AcknowledgeIEs
                );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_07
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_08
             */
            function f_TC_S1AP_MME_MNP_08() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                f_send_eNB_Configuration_Update(
                    m_eNB_Configuration_UpdateIEs(
                        m_Global_eNB_ID(
                            PX_PLMN_IDENTITY_UNKNOWN, 
                            PX_eNB_ID_UNKNOWN
                        ),
                        {
                            m_supportedTAs_Item(
                                PX_TAC,
                                {
                                    PX_PLMN_IDENTITY_UNKNOWN
                                } 
                            )
                        }
                ));
                f_recv_eNB_Configuration_Update_Failure(
                    mw_eNB_Configuration_Update_FailureIEs(
                        mw_cause_misc(
                            unknown_PLMN
                )));
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                
                // Postamble
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_MNP_08
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_09
             */
            function f_TC_S1AP_MME_MNP_09() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an eNB Configuration Update procedure
                if (fx_eNB_Configuration_Update_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an ENB Configuration Update
                    f_recv_eNB_Configuration_Update(
                        mw_eNB_Configuration_UpdateIEs(
                            mw_Global_eNB_ID(
                                PX_PLMN_IDENTITY, 
                                PX_eNB_ID
                            ),
                            {
                                mw_supportedTAs_Item(
                                    PX_TAC,
                                    {
                                        PX_PLMN_IDENTITY
                                    } 
                                )
                            }
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_09
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_10
             */
            function f_TC_S1AP_MME_MNP_10() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an Overload Start procedure
                if (fx_eNB_Overload_Start_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an OVERLOAD_START
                    f_recv_eNB_Overload_Start(
                        mw_eNB_Overload_StartIEs(
                            mw_OverloadResponse(
                                reject_non_emergency_mo_dt 
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_10
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MNP_11
             */
            function f_TC_S1AP_MME_MNP_11() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an Overload Stop procedure
                if (fx_eNB_Overload_Stop_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends an OVERLOAD_STOP
                    f_recv_eNB_Overload_Stop(
                        mw_eNB_Overload_StopIEs(
                            { 
                                mw_gUMMEI(
                                    -,
                                    -,
                                    -
                                )
                            } 
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MNP_11
            
        } // End of group Management_group
        
        /**
         * @desc S1 CDMA 2000 tunnelling group 
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.8   S1 CDMA 2000 tunnelling group 
         */
        group S1_CDMA_2000_tunnelling_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_STP_01
             */
            function f_TC_S1AP_MME_STP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a CDMA2000 signalling event
                if (fx_MME_Downlink_S1_CDMA2000_Tunnelling_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a DOWNLINK_S1_CDMA2000_TUNNELLING
                    f_recv_Downlink_S1_CDMA2000_Tunnelling(
                        mw_downlink_S1_CDMA2000_TunnellingIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
                            {
                                mw_eRABDataForwardingItem // TODO To be refined
                            },
                            PX_CDMA200_PDU,
                            PX_CDMA200_RAT_TYPE
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_STP_01
            
        } // End of group S1_CDMA_2000_tunnelling_group

        /**
         * @desc UE capability info indication group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.9   UE capability info indication group
         */
        group UE_capability_info_indication_group {
            
        } // End of group UE_capability_info_indication_group

        
        /**
         * @desc Trace Procedures group
garciay's avatar
garciay committed
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.10  Trace group
         */
        group Trace_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_TRP_01
             */
            function f_TC_S1AP_MME_TRP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Trace Start procedure
                if (fx_MME_Trace_Start_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a TRACE_START
                    f_recv_Trace_Start(
                        mw_trace_StartIEs(
                            mw_traceActivation(
                                PX_EUTRAN_TRACE_ID,
                                PX_INTERFACES_TO_TRACE,
                                PX_TRACE_DEPTH,
                                PX_TRANSPORT_LAYER_ADDRESS
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_TRP_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_TRP_02
             */
            function f_TC_S1AP_MME_TRP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                fx_MME_Trace_Start_procedure();
garciay's avatar
garciay committed
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Deactivate Trace procedure
                if (fx_MME_Deactivate_Trace_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a DEACTIVATE_TRACE
garciay's avatar
garciay committed
                    f_recv_Deactivate_Trace(
                        mw_deactivate_TraceIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
garciay's avatar
garciay committed
                            PX_EUTRAN_TRACE_ID
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_TRP_02
            
        } // End of group Trace_group
        
        /**
         * @desc Location Reporting Procedures group
garciay's avatar
garciay committed
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.11  Location reporting group
         */
        group Location_reporting_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_LRP_01
             */
            function f_TC_S1AP_MME_LRP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged.
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Location Reporting Control procedure
                if (fx_MME_Location_Reporting_Control_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a LOCATION_REPORTING_CONTROL
                    f_recv_Location_Reporting_Control(
                        mw_location_Reporting_ControlIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
garciay's avatar
garciay committed
                            m_request_Type(
                                PX_EVENT_TYPE,
                                PX_REPORT_AREA
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_LRP_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_LRP_02
             */
            function f_TC_S1AP_MME_LRP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged, and a handover procedure is initiated.
                f_rABSetupRequest();
                f_initiate_handover();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Location Reporting Control procedure
                if (fx_MME_Location_Reporting_Control_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a LOCATION_REPORTING_CONTROL
                    f_recv_Location_Reporting_Control(
                        mw_location_Reporting_ControlIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
garciay's avatar
garciay committed
                            m_request_Type(
                                direct,
                                PX_REPORT_AREA
                    )));
                    f_send_Location_Report_Failure_Indication(
                        m_location_Report_Failure_IndicationIEs(
                            vc_MME_UE_ID,
garciay's avatar
garciay committed
                            vc_eNB_UE_ID,
garciay's avatar
garciay committed
                            m_cause_nas(
                                unspecified
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_LRP_02
            
        } // End of group Location_reporting_group
        
        /**
         * @desc MME direct information transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.12  Warning message transmission group
         */
        group MME_Warning_message_transmission_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_WTP_01
             */
            function f_TC_S1AP_MME_WTP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Warning Message Transmission procedure
                if (fx_MME_Write_Replace_Warning_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a WRITE-REPLACE_WARNING_REQUEST
                    f_recv_Write_Replace_Warning_Request(
                        mw_write_Replace_Warning_RequestIEs(
                            PX_MESSAGE_IDENTIFIER,
                            PX_SERIAL_NUMBER,
                            PX_REPETITION_PERIOD, 
                            PX_NUMBER_OF_BROADCASTS_REQUESTED
                    ));
                    f_send_Write_Replace_Warning_Response(
                        m_write_Replace_Warning_ResponseIEs(
                            PX_MESSAGE_IDENTIFIER,
                            PX_SERIAL_NUMBER
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_WTP_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_WTP_02
             */
            function f_TC_S1AP_MME_WTP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged
                f_writeReplaceWarningExchanges(); 
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a Warning Message Transmission procedure
                if (fx_MME_Kill_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a KILLG_REQUEST
                    f_recv_Kill_Request(
                        mw_kill_RequestIEs(
                            PX_MESSAGE_IDENTIFIER,
                            PX_SERIAL_NUMBER
                    ));
                    f_send_Kill_Response(
                        m_kill_ResponseIEs(
                            PX_MESSAGE_IDENTIFIER,
                            PX_SERIAL_NUMBER
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_WTP_02
            
        } // End of group MME_Warning_message_transmission_group 


        /**
         * @desc eNB direct information transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.13  eNB direct information transfer group
         */
        group ENB_direct_information_transfer_group {
            
        } // End of group ENB_direct_information_transfer_group 


garciay's avatar
garciay committed
        
        /**
         * @desc MME direct information transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.14  MME direct information transfer group
         */
        group MME_direct_information_transfer_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MIT_01
             */
            function f_TC_S1AP_MME_MIT_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an MME Direct Information Transfer procedure
                if (fx_MME_Direct_Information_Transfer_procedure() == false) {
garciay's avatar
garciay committed
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a MME_DIRECT_INFORMATION_TRANSFER
                    f_recv_Mme_Direct_Information_Transfer(
                        mw_mMEDirectInformationTransfer(
                            mw_Inter_SystemInformationTransferType(
                                mw_RIMTransfer(
                                    ? // FIXME To be refined
                    ))));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MIT_01
            
        } // End of group MME_direct_information_transfer_group 

        
        /**
         * @desc eNB configuration transfer group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.15  eNB configuration transfer group
         */
        group ENB_configuration_transfer_group {
            
        } // End of group ENB_configuration_transfer_group 


garciay's avatar
garciay committed
        
        /**
         * @desc MME configuration transfer group
garciay's avatar
garciay committed
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.16 MME configuration transfer group
         */
        group MME_configuration_transfer_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_MCT_01
             */
            function f_TC_S1AP_MME_MCT_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate an MME Configuration Transfer procedure
                if (fx_MME_Configuration_Transfer_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a MME_CONFIGURATION_TRANSFER
                    f_recv_Mme_Configuration_Transfer(
                        mw_sON_Configuration_Transfer_MCT(
                            mw_sON_Configuration_Transfer(
garciay's avatar
garciay committed
                                mw_TargeteNB_ID(mw_Global_eNB_ID, mw_TAI),
                                mw_SourceeNB_ID(mw_Global_eNB_ID, mw_TAI),
                                ? // FIXME To be refined
                    )));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_MCT_01
            
        } // End of group MME_configuration_transfer_group 
        
        /**
         * @desc LPPa transport group
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.17  LPPa transport group
         */
        group LPPa_transport_group {
            
            /**
             * @desc Testcase function for TC_S1AP_MME_LPP_01
             */
            function f_TC_S1AP_MME_LPP_01() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a LPPa Transport procedure using a UE associated signalling
                if (fx_MME_LPPa_Transport_procedure_ind(true) == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a DOWNLINK_UE_ASSOCIATED_LPPA_TRANSPORT
                    f_recv_Downlink_UE_Associated_Lppa_Transport(
                        mw_DownlinkUEAssociatedLppaTransportIEs_LPPa_PDU(
                            ?
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_LPP_01
            
            /**
             * @desc Testcase function for TC_S1AP_MME_LPP_02
             */
            function f_TC_S1AP_MME_LPP_02() runs on S1APComponent { 
                // Local variables
                
                // Preamble
                f_S1AP_mme_init();
                // Preamble action: E-RAB Setup is exchanged
                f_rABSetupRequest();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body
                // 1. to indicate a LPPa Transport procedure using a UE associated signalling
                if (fx_MME_LPPa_Transport_procedure_ind(false) == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a DOWNLINK_NONE_UE_ASSOCIATED_LPPA_TRANSPORT
                    f_recv_Downlink_Non_UE_Associated_Lppa_Transport(
                        mw_DownlinkNonUEAssociatedLppaTransportIEs_LPPa_PDU(
                            ?
                    ));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                }
                
                // Postamble
                f_rABSetupRelease();
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_MME_LPP_02
            
        } // End of group LPPa_transport_group 
         * @desc Unknown, Unforseen and Erroneous Protocol Data
         * @see ETSI DTS/INT-00135-2 Clause 5.2.2.2.18  Unknown, Unforseen and Erroneous Protocol Data
         */
        group Unknown_unforseen_errorneous_group {
        } // End of group Unknown_unforseen_errorneous_group
garciay's avatar
garciay committed
    } // End of group MME_Role
garciay's avatar
garciay committed
} // End of module S1AP_TCFunctions