S1AP_TCFunctions.ttcn 193 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;
    import from LibCommon_Time {function f_sleepIgnoreDef};
    import from S1AP_IEs language "ASN.1:1997" all;
garciay's avatar
garciay committed
    import from LibS1AP_Pixits all;
    import from LibS1AP_Templates all;
    import from LibS1AP_Interface all;
    import from LibS1AP_Steps all;

    // S1AP_Ats
    import from S1AP_Steps all;
garciay's avatar
garciay committed
    import from S1AP_Pixits 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. ***");
                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_rABSetupRequest();
                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_rABSetupRequest();
                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_rABSetupRequest();
                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
                const QCI c_qci_id := 1; // TODO
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                
                // Preamble
                f_S1AP_enb_init();
				f_rABSetupRequest();
                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(c_qci_id),
                        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,
                           ?
                       )
                   }
                ));
            
                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
                const QCI c_qci_id := 0; 
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                
                // Preamble
                f_S1AP_enb_init();
				f_rABSetupRequest();
                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(c_qci_id),
                            c_nAS_PDU
                        ),m_E_RABToBeModifiedItemBearerSUReq(
                            c_E_RAB_ID_A,
                            m_e_RABlevelQoSParameters(c_qci_id),
                            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 := multiple_E_RAB_ID_instances
                             }
                         ),
                         mw_E_RABItem(
                             c_E_RAB_ID_A,
                             {
                                 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_12
            /**
             * @desc Testcase function for TC_S1AP_eNB_RAB_13
             */
            function f_TC_S1AP_eNB_RAB_13  () runs on S1APComponent {
                // Local variables
                const QCI c_qci_id := 99; // TODO unknown QCI Id 
                const E_RAB_ID c_E_RAB_ID_A := 0;
                const NAS_PDU c_nAS_PDU := '0000'O;
                
                
                // Preamble
                f_S1AP_enb_init();
				f_rABSetupRequest();
                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(c_qci_id),
                            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 := unknown_E_RAB_ID
                            }
                         )
                     }
                ));

                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_13

			/**
			 * @desc Testcase function for TC_S1AP_eNB_RAB_14
			 */
			function f_TC_S1AP_eNB_RAB_14  () runs on S1APComponent {
				// Local variables
				const E_RAB_ID c_E_RAB_ID_A := 0;
				
				// Preamble
				f_S1AP_enb_init();
				f_rABSetupRequest();
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");

				f_send_E_RABReleaseRequest(m_E_RABReleaseReqIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						m_E_RABItem(
							c_E_RAB_ID_A,
							{
								radioNetwork :=not_supported_QCI_value
							}
						)
					}
				));
                
				f_recv_E_RABReleaseResponse(mw_E_RABReleaseResIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						mw_E_RABItem(
							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_14

			/**
			 * @desc Testcase function for TC_S1AP_eNB_RAB_15
			 */
			function f_TC_S1AP_eNB_RAB_15  () runs on S1APComponent {
				// Local variables
				const E_RAB_ID c_E_RAB_ID_A := 0;
				
				// Preamble
				f_S1AP_enb_init();
				f_rABSetupRequest();
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
				
				// S1-MME Interface
				
				f_send_E_RABReleaseRequest(m_E_RABReleaseReqIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						m_E_RABItem(
							c_E_RAB_ID_A,
							{
								radioNetwork :=not_supported_QCI_value
							}
						)
					}
				)
				);
                
				f_recv_E_RABReleaseResponse(mw_E_RABReleaseResIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						mw_E_RABItem(
							c_E_RAB_ID_A
						)
					},
					mw_UserLocationInformation(?,?)
				));
				

				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_15
			
			/**
			 * @desc Testcase function for TC_S1AP_eNB_RAB_16
			 */
			function f_TC_S1AP_eNB_RAB_16  () runs on S1APComponent {
				const E_RAB_ID c_E_RAB_ID_A := 0;
				
				// Preamble
				f_S1AP_enb_init();
				f_rABSetupRequest();
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
				log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");

				f_send_E_RABReleaseRequest(m_E_RABReleaseReqIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						m_E_RABItem(
							c_E_RAB_ID_A,
							{
								radioNetwork :=not_supported_QCI_value
							}
						)
					}
				)
				);
                
				f_recv_E_RABReleaseResponse(mw_E_RABReleaseResIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						mw_E_RABItem(
							c_E_RAB_ID_A
						)
					}
				));
				
				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
						(5)
					)}
				));
				f_recv_E_RABSetupResponse(mw_E_RABSetupResIEs(
					vc_MME_UE_ID,
					vc_eNB_UE_ID,
					{
						mw_E_RABSetupItemBearerSURes(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_16
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_RABToBeSetupItemCtxtSUReq (
                        -,
                        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_RABToBeSetupItemCtxtSUReq (
                                c_E_RAB_ID_A,
                                m_e_RABlevelQoSParameters(5),
                                c_transportLayerAddress,
                            m_E_RABToBeSetupItemCtxtSUReq(
                                c_E_RAB_ID_B,
                                m_e_RABlevelQoSParameters(255),
                                c_transportLayerAddress,
                        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_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (1),
                        c_transportLayerAddress,
                    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_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                    m_E_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                    )},
                    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_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                    )},
                    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_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                    )},
                    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_RABToBeSetupItemCtxtSUReq (
                        c_E_RAB_ID_A,
                        m_e_RABlevelQoSParameters
                        (5),
                        c_transportLayerAddress,
                    )},
                    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_RABToBeSetupItemCtxtSUReq (
                        -,
                        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

            /**
             * @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
                )); 
                                                                   
                // 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. ***");
                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 {
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_01
             */
            function f_TC_S1AP_eNB_HAS_01() runs on S1APComponent { 
                // Local variables
                const Target_ToSource_TransparentContainer c_target_ToSource_TransparentContainer := '12121212'O;
                
                // 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//SourceToTargetTransparentContainer
                    ));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                     
                    f_send_HandoverCommand(
                        m_HandoverCommandIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            c_target_ToSource_TransparentContainer//TargetToSourceTransparentContainer
                    ));
                f_rABSetupRelease();
                f_postamble_S1AP_eNB();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_HAS_01
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_02
             */
            function f_TC_S1AP_eNB_HAS_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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            ltetoutran,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//TODO Check if SourceRNCToTargetRNCTransparentContainer with UE History Information is present
                    ));
                    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_HAS_02
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_03
             */
            function f_TC_S1AP_eNB_HAS_03() 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            ltetogeran,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//TODO Check if SourceBSSToTargetBSSTransparentContainer
                    ));
                    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_HAS_03
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_04
             */
            function f_TC_S1AP_eNB_HAS_04() 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();
                // 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//SourceToTargetTransparentContainer
                    ));
                    
                    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_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_HAS_04
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_05
             */
            function f_TC_S1AP_eNB_HAS_05() 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//SourceToTargetTransparentContainer
                    ));
                    
                    log("No response is send to IUT before timer TS1RELOCprep expires.");
                    
                    //wait for timer TS1RELOCprep
                    f_sleepIgnoreDef(1.0);
                        mw_HandoverCancelIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -//Cause
                    ));
                    f_send_HandoverCancelAcknowledge(
                        m_HandoverCancelAckIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID
                    ));
                    
                    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_HAS_05
1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_06
             */
            function f_TC_S1AP_eNB_HAS_06() runs on S1APComponent { 
                // Local variables
                const Source_ToTarget_TransparentContainer c_source_ToTarget_TransparentContainer := '12121212'O;
                
                // 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_HandoverRequest(m_HandoverReqIEs(
                                   vc_MME_UE_ID,
                                   intralte,//Handover Type
                                   m_cause_ran(successful_handover),//Cause
                                   m_UEAggregateMaximumBitrate(1,1),//UE Aggregate_Max_Bit_Rate
                                   {m_E_RABToBeSetupItemHOReq (
                                       -,
                                       -,
                                       -,
                                       m_e_RABlevelQoSParameters
                                       (5)
                                   )},//E_RabsToBeSetupList
                                   c_source_ToTarget_TransparentContainer,//SourceToTargetTransparentContainer
                                   m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),//UeSecurityCapabilities
                                   m_securityContext//SecurityContext
                               ));

                f_recv_HandoverRequestAck(mw_HandoverRequestAckIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -,//ERabsAdmittedList
                    -//TargetToSourceTransparentContainer
                ));
               
                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_HAS_06
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_07
             */
            function f_TC_S1AP_eNB_HAS_07() runs on S1APComponent { 
                // Local variables
                const Source_ToTarget_TransparentContainer c_source_ToTarget_TransparentContainer := '12121212'O;
                const NASSecurityParameterstoE_UTRAN c_nASSecurityParameterstoE_UTRAN := '000000000000'O;
                
                // 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_HandoverRequest(m_HandoverReqIEs_nASSecParToEUTRAN(
                                   vc_MME_UE_ID,
                                   utrantolte,//Handover Type
                                   m_cause_ran(successful_handover),//Cause
                                   m_UEAggregateMaximumBitrate(1,1),//UE Aggregate_Max_Bit_Rate
                                   {m_E_RABToBeSetupItemHOReq (
                                       -,
                                       -,
                                       -,
                                       m_e_RABlevelQoSParameters
                                       (5)
                                   )},//E_RabsToBeSetupList
                                   c_source_ToTarget_TransparentContainer,//SourceToTargetTransparentContainer
                                   m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),//UeSecurityCapabilities
                                   m_securityContext,//SecurityContext
                                   c_nASSecurityParameterstoE_UTRAN//NASSecurityParameterstoE_UTRAN//for coding see TS 124 301 clause 9.9.2.7
                               ));

                f_recv_HandoverRequestAck(mw_HandoverRequestAckIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -,//ERabsAdmittedList
                    -//TargetToSourceTransparentContainer
                ));
               
                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_HAS_07
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_08
             */
            function f_TC_S1AP_eNB_HAS_08() runs on S1APComponent { 
                // Local variables
                const Source_ToTarget_TransparentContainer c_source_ToTarget_TransparentContainer := '12121212'O;
                const NASSecurityParameterstoE_UTRAN c_nASSecurityParameterstoE_UTRAN := '000000000000'O;
                // 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_HandoverRequest(m_HandoverReqIEs_nASSecParToEUTRAN(
                                   vc_MME_UE_ID,
                                   gerantolte,//Handover Type
                                   m_cause_ran(successful_handover),//Cause
                                   m_UEAggregateMaximumBitrate(1,1),//UE Aggregate_Max_Bit_Rate
                                   {m_E_RABToBeSetupItemHOReq (
                                       -,
                                       -,
                                       -,
                                       m_e_RABlevelQoSParameters
                                       (5)
                                   )},//E_RabsToBeSetupList
                                   c_source_ToTarget_TransparentContainer,//SourceToTargetTransparentContainer
                                   m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),//UeSecurityCapabilities
                                   m_securityContext,//SecurityContext
                                   c_nASSecurityParameterstoE_UTRAN//NASSecurityParameterstoE_UTRAN//for coding see TS 124 301 clause 9.9.2.7
                               ));

                f_recv_HandoverRequestAck(mw_HandoverRequestAckIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    -,//ERabsAdmittedList
                    -//TargetToSourceTransparentContainer
                ));
               
                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_HAS_08
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_09
             */
            function f_TC_S1AP_eNB_HAS_09() runs on S1APComponent { 
                // Local variables
                const Source_ToTarget_TransparentContainer c_source_ToTarget_TransparentContainer := '12121212'O;
                
                // 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_HandoverRequest(m_HandoverReqIEs_cSGMembershipStatus(
                                   vc_MME_UE_ID,
                                   gerantolte,//Handover Type
                                   m_cause_ran(successful_handover),//Cause
                                   m_UEAggregateMaximumBitrate(1,1),//UE Aggregate_Max_Bit_Rate
                                   {m_E_RABToBeSetupItemHOReq (
                                       -,
                                       -,
                                       -,
                                       m_e_RABlevelQoSParameters
                                       (5)
                                   )},//E_RabsToBeSetupList
                                   c_source_ToTarget_TransparentContainer,//SourceToTargetTransparentContainer
                                   m_UESecurityCapabilities('0101010101010101'B,'0101010101010101'B),//UeSecurityCapabilities
                                   m_securityContext,//SecurityContext
                                   member//CSG_MembershipStatus
                               ));

                f_recv_HandoverFailure(mw_HandoverFailureIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    mw_cause_ran(?)
                ));
               
                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_HAS_09
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_10
             */
            function f_TC_S1AP_eNB_HAS_10() 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 handover notification procedureE
                if (fx_eNB_Handover_notification_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER NOTIFY
                    f_recv_HandoverNotify(
                        mw_HandoverNotifyIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -,//E-UTRAN_CGI
                            -//TAI
                    ));

                    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_HAS_10
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_11
             */
            function f_TC_S1AP_eNB_HAS_11() 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 path switch request procedureE
                if (fx_eNB_Path_switch_request_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a PATH SWITCH REQUEST
                    f_recv_PathSwitchRequest(
                        mw_PathSwitchRequestIEs(
                            vc_eNB_UE_ID,
                            -,//E-RAB to be Switched
                            vc_MME_UE_ID,//Source MME_UE_S1AP_ID
                            -,//E-UTRAN_CGI
                            -,//TAI
                            -//UE Security capabilities
                    ));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                    

                    f_send_PathSwitchRequestAcknowledge(m_PathSwitchRequestAckIEs(
                        vc_MME_UE_ID,
                        vc_eNB_UE_ID,
                        m_securityContext//Security Context
                    ));
                
                }
                // 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_HAS_11
                    
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_12
             */
            function f_TC_S1AP_eNB_HAS_12() 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//SourceToTargetTransparentContainer
                    ));
                    
                    log("No response is send to IUT before timer TS1RELOCprep expires.");
                    
                    //wait for timer TS1RELOCprep
                    f_sleepIgnoreDef(1.0);
                    
                    f_recv_HandoverCancel(
                        mw_HandoverCancelIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            -//Cause
                    ));
                    
                    f_send_HandoverCancelAcknowledge(
                        m_HandoverCancelAckIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID
                    ));
                    
                    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_HAS_12
            
            /**
             * @desc Testcase function for TC_S1AP_eNB_HAS_13
             */
            function f_TC_S1AP_eNB_HAS_13() runs on S1APComponent { 
                // Local variables
                const Target_ToSource_TransparentContainer c_target_ToSource_TransparentContainer := '12121212'O;
                
                // 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 Handover to be forwarded
                if (fx_eNB_Handover_preparation_procedure() == false) {
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_error); 
                } else {
                    // 2. sends a HANDOVER_REQUIRED
                    f_recv_HandoverRequired(
                        mw_HandoverRequiredIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            -,//Cause
                            -,//TargetId
                            -//SourceToTargetTransparentContainer
                    ));
                     
                    f_send_HandoverCommand(
                        m_HandoverCommandIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            intralte,//handover_Type
                            c_target_ToSource_TransparentContainer//TargetToSourceTransparentContainer
                    ));

                    action("Await eNB_STATUS_TRANSFER MESSAGE.");
                    
                    f_recv_EnbStatusTransfer(
                        mw_EnbStatusTransferIEs(
                            vc_MME_UE_ID,
                            vc_eNB_UE_ID,
                            mw_eNBStatusTransferTransparentContainer//eNB Status Transfer Transparent Container
                    ));
                    
                    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_HAS_13
        } // 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(
                        superset (
                            all from 
                                mw_error_IndicationIEs(
                                    vc_MME_UE_ID,
                                    vc_eNB_UE_ID, 
                                    mw_cause_IE(
                                        -
                                    )
                                ),
                                mw_error_IndicationIEs(
                                    vc_MME_UE_ID,
                                    vc_eNB_UE_ID, 
                                    mw_criticalityDiagnostics_IE(
                                        -
                                    )
                                )
                        )
                    );
garciay's avatar
garciay committed
                }
                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 {
garciay's avatar
garciay committed
            // Void
        } // 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 {
garciay's avatar
garciay committed
            // Void
        } // 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_recv_E_RABSetupRequest(superset (all from mw_E_RABSetupReqIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    ?
                )));
garciay's avatar
garciay committed
                
                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 {
            /**
             * @desc Testcase function for TC_S1AP_mME_CMP_01
             */
            function f_TC_S1AP_mME_CMP_01() runs on S1APComponent { 
                // Local variables
                // Preamble
                f_S1AP_mme_init();
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                action("trigger an Initial Context Setup procedure");

                f_recv_InitialContext_SetupRequest(mw_InitialContextSetupRequestIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    mw_UEAggregateMaximumBitrate(?,?),
                    {
                        mw_E_RABToBeSetupItemCtxtSUReq(?,mw_e_RABlevelQoSParameters(5),?,?,?,omit)
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 
                f_postamble_S1AP_MME();
                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_mME_CMP_02
             */
            function f_TC_S1AP_mME_CMP_02() 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_mme_init();
                
                f_rABSetupRequest();
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                
                // Test body

                f_send_UE_Context_Release_Command(m_UeContextReleaseRequestIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID,
                    v_cause
                    ));
                    
                f_recv_InitialContext_SetupRequest((mw_UeContextReleaseCommandIEs_MME, mw_UeContextReleaseCommandIEs_ENB));                
                
                // Postamble
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); 

                f_send_UE_Context_Release_Complete(m_UeContextReleaseCompleteIEs(
                    vc_MME_UE_ID,
                    vc_eNB_UE_ID
                    ));
                
                f_postamble_S1AP_MME();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); 
                log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                
            } // End of function f_TC_S1AP_eNB_CMP_02
        } // 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(
                        superset (
                            all from 
                                mw_error_IndicationIEs(
                                    vc_MME_UE_ID,
                                    vc_eNB_UE_ID, 
                                    mw_cause_IE
                                ),
                                mw_error_IndicationIEs(
                                    vc_MME_UE_ID,
                                    vc_eNB_UE_ID, 
                                    mw_criticalityDiagnostics_IE
                                )
                        )
                    );
garciay's avatar
garciay committed
                    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_eNB_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();
garciay's avatar
garciay committed
                // Preamble action: A warning message procedure is exchanged
garciay's avatar
garciay committed
                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