ItsFntp_TestCases.ttcn3 236 KB
Newer Older
filatov's avatar
filatov committed
/**
 *  @author     ETSI / STF422_EETS
 *  @version    $URL:$
 *              $Id:$
 *  @desc       FAST networking & transport layer protocol (ISO 29281-2) test cases
 */
module ItsFntp_TestCases {

    // Libcommon
    import from LibCommon_BasicTypesAndValues { 
        const c_uInt8Max 
    }; 
    import from LibCommon_Sync all; 
    
    // LibIts
garciay's avatar
garciay committed
    import from LibItsCommon_Functions  {
        function 
            f_checkTimeValidity, f_getCurrentTime 
    } 
    
    // LibItsCalm
filatov's avatar
filatov committed
    import from CALMfntp language "ASN.1:1997" {
        type 
            FNTPNPDU, 
            FNTPpacketCounter
    };
    import from CALMmsap language "ASN.1:1997" {
        type CommandRef
    };
garciay's avatar
garciay committed
    import from CALMllsap language "ASN.1:1997" {
        type IN_UNITDATA_request
filatov's avatar
filatov committed
    };
    import from LibItsFntp_TypesAndValues all;
    import from LibItsFntp_Templates all;
    import from LibItsFntp_Functions all;
    import from LibItsFntp_Pics all;
garciay's avatar
garciay committed
    import from LibItsMgt_TypesAndValues {
        const c_dniCiid 
    }; 
    import from LibItsMgt_Functions { 
        function 
            f_getNextCommandRef 
    };
    import from LibItsCalm_Interface {
        type 
            ItsCalm, FntpInd; 
filatov's avatar
filatov committed
    };
    import from LibItsCalm_TestSystem {
        type ItsCalmSystem 
    };
garciay's avatar
garciay committed
    
    // 6.1 Transmitting Packets
filatov's avatar
filatov committed
    group transmittingPackets {
        
garciay's avatar
garciay committed
        // 6.1.1 Basic procedure
filatov's avatar
filatov committed
        group basicProcedure {
            
            group validBehavior {
                
                /**
                 * @desc    Single-hop broadcast transmission request with known VCI
                 * <pre>
                 * Pics Selection: PICS_ROLE_RH
                 * Config Id: CF01
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an FNTP forwarding table with proper entry in support of the local port number of the ITS-S application
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received a correctly formatted single hop BC transmission request
                 *      }
                 *      then {
                 *          the IUT generates a basic FNTP NPDU, and forwards it to the BC-VCI(s) for transmission
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/BP/BV/01
filatov's avatar
filatov committed
                 */
                testcase TC_FNTP_TXP_BP_BV_01() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
garciay's avatar
garciay committed
                    var FntpInd v_fntpInd; 
filatov's avatar
filatov committed
                    var FNTPNPDU v_basicNpdu;
                    
                    // Test control
                    if (not(PICS_ROLE_RH)) {
                        log("*** TC_FNTP_TXP_BP_BV_01: ERROR: 'PICS_ROLE_RH' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf01Up(); // Combined Host-Router 
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_BP_BV_01: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithoutConfirm(
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
                            f_getNextCommandRef(),                      // Unique cyclic reference number of command
                            vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
garciay's avatar
garciay committed
                            f_getIutWlLinkIdBc(),                       // Identifies the VCI to be used to transmit the packet
                            f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutShopValue())   // Content of the FNTP control field in the FNTP extended header
                        )
                    ); 
filatov's avatar
filatov committed
                    log("*** TC_FNTP_TXP_BP_BV_01: INFO: Formatted single hop BC transmission request done ***");
                    // Clause 'then'
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_BP_BV_01: INFO: expected template: ", mw_fntpInd(
                        mw_fntpInSapPrimitiveReq(
                            mdw_inUnitDataReq( 
                                mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()), 
                                mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutWlLocalCiid()) 
                    ))));
filatov's avatar
filatov committed
                    tc_ac.start;
                    alt { 
                        [] fntpPort.receive(
garciay's avatar
garciay committed
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq(
                                    mdw_inUnitDataReq( 
                                        mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()),  // See ISO 21218 Table 6 - Address parameters in e.g. IN-UNITDATA.request for CIs using 48-bit MAC addresses
                                        mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutWlLocalCiid()) 
                         )))) -> value v_fntpInd {
filatov's avatar
filatov committed
                            tc_ac.stop;
garciay's avatar
garciay committed
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_basicNpdu);
                            log("*** TC_FNTP_TXP_BP_BV_01: INFO: FNTPPDU: ", v_basicNpdu, " ***");
filatov's avatar
filatov committed
                            if (match(v_basicNpdu, mdw_fntpBasicNpdu(vc_portNumber, f_getIutRemotePortNumberValue()))) { 
garciay's avatar
garciay committed
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_BP_BV_01: WARN: Invalid timestamp ***");
                                }*/
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_BP_BV_01: PASS: Received basic FNTP NPDU as expected ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
filatov's avatar
filatov committed
                            } else {
                                log("*** TC_FNTP_TXP_BP_BV_01: FAIL: Unexpected basic FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
garciay's avatar
garciay committed
                        [] a_fntpUnsollictedMessages() { 
                            // Do not restart tc_ac
                            repeat; 
                        }
filatov's avatar
filatov committed
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_BP_BV_01: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_BP_BV_01: INFO: test body done ***");
                    
                    // Postamble
garciay's avatar
garciay committed
                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf01Down();
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_BP_BV_01: INFO: Postamble: done ***");
filatov's avatar
filatov committed
                    
                } // End of testcase TC_FNTP_TXP_BP_BV_01
                
                /**
                 * @desc    Single-hop unicast transmission request with known VCI
                 * <pre>
                 * Pics Selection: PICS_ROLE_RH
                 * Config Id: CF01
                 * Initial conditions: 
                 *  with {
garciay's avatar
garciay committed
                 *      the IUT having an FNTP forwarding table with proper entry in support of the requested local port number of the ITS-S application
filatov's avatar
filatov committed
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received a correctly formatted single hop UC transmission request
                 *      }
                 *      then {
                 *          the IUT generates a basic FNTP NPDU, and forwards it to the UC-VCI for transmission
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/BP/BV/02
filatov's avatar
filatov committed
                 */
                testcase TC_FNTP_TXP_BP_BV_02() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
garciay's avatar
garciay committed
                    var FntpInd v_fntpInd; 
filatov's avatar
filatov committed
                    var FNTPNPDU v_basicNpdu;
                    
                    // Test control
                    if (not(PICS_ROLE_RH)) {
                        log("*** TC_FNTP_TXP_BP_BV_02: ERROR: 'PICS_ROLE_RH' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf01Up(); // Combined Host-Router 
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_setupKnownPeerStation();
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_BP_BV_02: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithoutConfirm( 
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
                            f_getNextCommandRef(),                      // Unique cyclic reference number of command
                            vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
garciay's avatar
garciay committed
                            mw_linkId(                                  // Identifies the VCI to be used to transmit the packet
                                f_getIutRemoteDestCiidUc(), 
                                f_getIutWlLocalCiid()),
                            f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutShopValue())   // Content of the FNTP control field in the FNTP extended header
                        )
                    ); 
filatov's avatar
filatov committed
                    log("*** TC_FNTP_TXP_BP_BV_02: INFO: Formatted single hop UC transmission request done ***");
                    // Clause 'then'
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_BP_BV_02: DEBUG: Expected template: ", 
                        mw_fntpInd( 
                            mw_fntpInSapPrimitiveReq( 
                                mdw_inUnitDataReq( 
                                    mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()), 
                                    mw_linkId(f_getIutRemoteDestCiidUc(), f_getIutWlLocalCiid()) 
                        ))), 
                        " ***");
filatov's avatar
filatov committed
                    tc_ac.start;
                    alt {
                        [] fntpPort.receive( 
garciay's avatar
garciay committed
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq( 
                                    mdw_inUnitDataReq( 
                                        mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()), // See ISO 21218 Table 6 - Address parameters in e.g. IN-UNITDATA.request for CIs using 48-bit MAC addresses  
                                        mw_linkId(f_getIutRemoteDestCiidUc(), f_getIutWlLocalCiid()) 
                        )))) -> value v_fntpInd { 
filatov's avatar
filatov committed
                            tc_ac.stop;
garciay's avatar
garciay committed
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_basicNpdu);
                            log("*** TC_FNTP_TXP_BP_BV_02: INFO: FNTPPDU: ", v_basicNpdu, " ***");
filatov's avatar
filatov committed
                            if (match(v_basicNpdu, mdw_fntpBasicNpdu(vc_portNumber, ?))) {
garciay's avatar
garciay committed
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_BP_BV_02: WARN: Invalid timestamp ***");
                                }*/
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_BP_BV_02: PASS: Received basic FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
filatov's avatar
filatov committed
                            } else {
                                log("*** TC_FNTP_TXP_BP_BV_02: FAIL: Unexpected basic FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
garciay's avatar
garciay committed
                        [] a_fntpUnsollictedMessages() { 
                            // Do not restart tc_ac
                            repeat; 
                        }
filatov's avatar
filatov committed
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_BP_BV_02: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_BP_BV_02: INFO: test body done ***");
garciay's avatar
garciay committed
                                        
filatov's avatar
filatov committed
                    // Postamble
garciay's avatar
garciay committed
                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf01Down();
                    
                } // End of testcase TC_FNTP_TXP_BP_BV_02
                
            } // End of group validBehavior
            
garciay's avatar
garciay committed
            /**
             * Invalid test purposes will be defined in the next version of the present document once ISO has
             * implemented the concept of flows in the architecture standard ISO 21217 [i.7], and subsequently in
             * ISO 29281-1 [1]
             */
            group invalidBehavior {
                
            } // End of group invalidBehavior
filatov's avatar
filatov committed
            
        } // End of group basicProcedure
        
garciay's avatar
garciay committed
        // 6.1.2 Extended procedure
filatov's avatar
filatov committed
        group extendedProcedure {
            
            group validBehavior {
                
                /**
                 * @desc    N-hop broadcast transmission request with known VCI
                 * <pre>
                 * Pics Selection: PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC
                 * Config Id: CF01
                 * Initial conditions: 
                 *  with {
garciay's avatar
garciay committed
                 *      the IUT having an FNTP forwarding table with proper entry in support of the requested local port number of the ITS-S application
filatov's avatar
filatov committed
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received a correctly formatted N-hop BC transmission request
                 *      }
                 *      then {
                 *          the IUT generates an extended FNTP NPDU, and forwards it to the BC-VCI(s) for transmission
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/EP/BV/01
filatov's avatar
filatov committed
                 */
                testcase TC_FNTP_TXP_EP_BV_01() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
garciay's avatar
garciay committed
                    var FntpInd v_fntpInd; 
filatov's avatar
filatov committed
                    var FNTPNPDU v_extendedNpdu;
                    
                    // Test control
                    if (not(PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC)) {
                        log("*** TC_FNTP_TXP_EP_BV_01: ERROR: 'PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf01Up(); // Combined Host-Router 
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_EP_BV_01: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithoutConfirm(
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
                            f_getNextCommandRef(),                      // Unique cyclic reference number of command
                            vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
garciay's avatar
garciay committed
                            f_getIutWlLinkIdBc(),                       // Identifies the VCI to be used to broadcast the payload
                            f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutNhopsValue())) // Content of the FNTP control field in the FNTP extended header
                    );
filatov's avatar
filatov committed
                    log("*** TC_FNTP_TXP_EP_BV_01: INFO: Formatted N-hop BC transmission request done ***");
                    // Clause 'then'
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_EP_BV_01: DEBUG: Expected template: ", 
                        mw_fntpInd( 
                            mw_fntpInSapPrimitiveReq( 
                                mdw_inUnitDataReq( 
                                    mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()), 
                                    mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutWlLocalCiid()) 
                        ))), 
                        " ***");
filatov's avatar
filatov committed
                    tc_ac.start;
                    alt {
                        [] fntpPort.receive(
garciay's avatar
garciay committed
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq(
                                    mdw_inUnitDataReq( 
                                        mw_linkId((c_dniCiid, f_getIutWlRemoteCiid()), f_getIutWlLocalCiid()), 
                                        mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutWlLocalCiid()) 
                        )))) -> value v_fntpInd {
filatov's avatar
filatov committed
                            tc_ac.stop;
garciay's avatar
garciay committed
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_extendedNpdu);
                            log("*** TC_FNTP_TXP_EP_BV_01: INFO: Expected FNTPPDU: ", mdw_fntpExtendedNpdu(vc_portNumber, ?), " ***");
                            log("*** TC_FNTP_TXP_EP_BV_01: INFO: FNTPPDU: ", v_extendedNpdu, " ***");
filatov's avatar
filatov committed
                            if (match(v_extendedNpdu, mdw_fntpExtendedNpdu(vc_portNumber, ?))) {
garciay's avatar
garciay committed
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_EP_BV_01: WARN: Invalid timestamp ***");
                                }*/
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_EP_BV_01: PASS: Received extended N-hops FNTP NPDU as expected ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
filatov's avatar
filatov committed
                            } else {
                                log("*** TC_FNTP_TXP_EP_BV_01: FAIL: Unexpected extended N-hops FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
garciay's avatar
garciay committed
                        [] a_fntpUnsollictedMessages() { 
                            // Do not restart tc_ac
                            repeat; 
                        }
filatov's avatar
filatov committed
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_EP_BV_01: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_EP_BV_01: INFO: test body done ***");
                    
                    // Postamble
garciay's avatar
garciay committed
                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf01Down();
                    
                } // End of testcase TC_FNTP_TXP_EP_BV_01
                
            }// End of group validBehavior
            
            group invalidBehavior {
                
                // TODO BI shall be revised by ISO when concept of flows in architecture standard ISO 21217 will be done
                /**
garciay's avatar
garciay committed
                 * @desc    N-hop broadcast transmission request with unknown VCI
filatov's avatar
filatov committed
                 * <pre>
                 * Pics Selection: PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC
                 * Config Id: CF01
                 * Initial conditions: 
                 *  with {
garciay's avatar
garciay committed
                 *      the IUT having an FNTP forwarding table with no entry of the required BC-VCI, 
                 *      but with an entry for another BC-VCI properly serving the ITS-S application
filatov's avatar
filatov committed
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
garciay's avatar
garciay committed
                 *          the IUT having received a correctly formatted N-hop BC transmission request
filatov's avatar
filatov committed
                 *      }
                 *      then {
                 *          the IUT reports failure of delivery
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/EP/BI/01
garciay's avatar
garciay committed
                /* Removed from ETSI TS 102 985-2 V1.1.3 (2014-03)
                 * testcase TC_FNTP_TXP_EP_BI_01() runs on ItsCalm system ItsCalmSystem {
filatov's avatar
filatov committed
                    // Local variables
                    
                    // Test control
                    if (not(PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC)) {
garciay's avatar
garciay committed
                        log("*** TC_FNTP_TXP_EP_BI_01: ERROR: 'PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC' required for executing the TC ***");
filatov's avatar
filatov committed
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf01Up(); // Combined Host-Router 
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_EP_BI_01: INFO: Preamble: FNTP forwarding Table was setup properly ***");
filatov's avatar
filatov committed
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithConfirm( 
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
garciay's avatar
garciay committed
                            f_getNextCommandRef(),                          // Unique cyclic reference number of command
                            vc_portNumber,                                  // Port number allocated by FN-FNTP-PORT.create operation
                            f_getIutWlLinkIdUnknownBc(),                    // Identifies an unknown VCI to be used to transmit the packet
                            f_getIutItsFpdu(),                              // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutNhopsValue())),    // Content of the FNTP control field in the FNTP extended header
                        mdw_fntpCommConfirm_unspecFailure(vc_portNumber),    // Failure expected
filatov's avatar
filatov committed
                        true,
garciay's avatar
garciay committed
                        vc_utEventInd.utFntpEventInd);
                    log("*** TC_FNTP_TXP_EP_BI_01: DEBUG: FNTP-COMMAND.request: vc_utEventInd=", vc_utEventInd, " ***");
                    log("*** TC_FNTP_TXP_EP_BI_01: INFO: FNTP-COMMAND.request done ***");
filatov's avatar
filatov committed
                    // Clause 'then'
                    tc_noac.start; // No message expected
                    alt {
                        [] fntpPort.receive {
                            tc_noac.stop;
garciay's avatar
garciay committed
                            log("*** TC_FNTP_TXP_EP_BI_01: FAIL: No message was expected ***");
filatov's avatar
filatov committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
                        }
                        [] tc_noac.timeout {
garciay's avatar
garciay committed
                            log("*** TC_FNTP_TXP_EP_BI_01: PASS: No message received as expected ***");
filatov's avatar
filatov committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
                        }
                    } // End of 'alt' statement
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_EP_BI_01: INFO: test body done ***");
filatov's avatar
filatov committed
                    
                    // Postamble
                    f_poDefault();
                    f_cf01Down();
                    
garciay's avatar
garciay committed
                }*/ // End of testcase TC_FNTP_TXP_EP_BI_01
garciay's avatar
garciay committed
                 * @desc    N-hop broadcast transmission request with invalid FNTP control field, and with known VCI
filatov's avatar
filatov committed
                 * <pre>
garciay's avatar
garciay committed
                 * Pics Selection: PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC
                 * Config Id: CF01
filatov's avatar
filatov committed
                 * Initial conditions: 
                 *  with {
garciay's avatar
garciay committed
                 *      the IUT having an FNTP forwarding table with proper entry in support the local port number of the ITS-S application
filatov's avatar
filatov committed
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
garciay's avatar
garciay committed
                 *          the IUT having received an N-hop BC transmission request with non-supported bits in "controlField" also set to 1
filatov's avatar
filatov committed
                 *      }
                 *      then {
garciay's avatar
garciay committed
                 *          the IUT reports failure of delivery
filatov's avatar
filatov committed
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/EP/BI/02
garciay's avatar
garciay committed
                testcase TC_FNTP_TXP_EP_BI_02() runs on ItsCalm system ItsCalmSystem {
filatov's avatar
filatov committed
                    // Local variables
                    
                    // Test control
garciay's avatar
garciay committed
                    if (not(PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC)) {
                        log("*** TC_FNTP_TXP_EP_BI_02: ERROR: 'PICS_EXT and PICS_ROLE_RH and PICS_NHOPBC' required for executing the TC ***");
filatov's avatar
filatov committed
                        stop;
                    }
                    
                    // Test component configuration
garciay's avatar
garciay committed
                    f_cf01Up(); // Combined Host-Router 
filatov's avatar
filatov committed
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_EP_BI_02: INFO: Preamble: FNTP forwarding Table was setup properly ***");
filatov's avatar
filatov committed
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithConfirm(
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
garciay's avatar
garciay committed
                            f_getNextCommandRef(),                           // Unique cyclic reference number of command
                            vc_portNumber,                                   // Port number allocated by FN-FNTP-PORT.create operation
                            f_getIutWlLinkIdBc(),                            // Identifies the VCI to be used to transmit the packet
                            f_getIutItsFpdu(),                               // Contains the ITS-SP payload EPDU
                            md_nonSupportedFntpControlField                  // NFfntpCommRequest message with unsupported control field
                        ),
                        mdw_fntpCommConfirm_unspecFailure(vc_portNumber),    // Failure expected 
                        true,
                        vc_utEventInd.utFntpEventInd);
                    log("*** TC_FNTP_TXP_EP_BI_02: DEBUG: FNTP-COMMAND.request: vc_utEventInd=", vc_utEventInd, " ***");
                    log("*** TC_FNTP_TXP_EP_BI_02: INFO: FNTP-COMMAND.request done ***");
filatov's avatar
filatov committed
                    // Clause 'then'
garciay's avatar
garciay committed
                    tc_noac.start; // No message expected
filatov's avatar
filatov committed
                    alt {
garciay's avatar
garciay committed
                        [] fntpPort.receive {
                            tc_noac.stop;
                            log("*** TC_FNTP_TXP_EP_BI_02: FAIL: No message was expected ***");
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
                        }
                        [] tc_noac.timeout {
                            log("*** TC_FNTP_TXP_EP_BI_02: PASS: No message received as expected ***");
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_EP_BI_02: INFO: test body done ***");
                    
                    // Postamble
                    f_unInitializeFntpForwardingTable();
                    f_poDefault();
                    f_cf01Down();
                   
                } // End of testcase TC_FNTP_TXP_EP_BI_02
                
            } // End of group invalidBehavior
            
        } // End of group extendedProcedure
        
        // 6.1.3 Forwarding procedure
        group forwardingProcedure {
            
            group validBehavior {
                
                /**
                 * @desc    TX from ITS-S host
                 * <pre>
                 * Pics Selection: PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)
                 * Config Id: CF02
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an FNTP forwarding table with proper entry in support of the requested local port numbers of the ITS-S application
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when { 
                 *          the IUT having received a correctly formatted single hop BC transmission request for delivery via a VCI contained in a different ITS-SCU
                 *      }
                 *      then {
                 *          the IUT generates an FNTP forwarding NPDU, and forwards it to the BC-VCI for transmission to the selected ITS-S router
                 *      }
                 *  }
                 * </pre>
                 * 
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/FP/BV/01
                 */
                testcase TC_FNTP_TXP_FP_BV_01() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
                    var FntpInd v_fntpInd; 
                    var FNTPNPDU v_forwardingNpdu;
                    
                    // Test control
                    if (not(PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH))) {
                        log("*** TC_FNTP_TXP_FP_BV_01: ERROR: 'PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf02Up(); // Router only or Host only 
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_FP_BV_01: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
                    f_fntpGenerateNfSApRequestWithoutConfirm(
                        m_generateNfFntpCommRequest( 
                            f_getNextCommandRef(),                      // Unique cyclic reference number of command
                            vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
                            f_getIutLanLinkIdBc(),                      // Broadcast message with a different ITS-SCU
                            f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutShopValue()))  // Content of the FNTP control field in the FNTP extended header
                    );
                    log("*** TC_FNTP_TXP_FP_BV_01: INFO: Formatted single hop BC transmission request for delivery via a VCI contained in a different ITS-SCU done ***");
                    // Clause 'then'
                    tc_ac.start;
                    alt {
                        [] fntpPort.receive(
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq(
                                    mdw_inUnitDataReq( 
                                        mw_linkId(f_getIutLanRemoteCiidBc(), f_getIutLanLocalCiid()), 
                                        mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutDestLocalCiid()) 
                        )))) -> value v_fntpInd {
                            tc_ac.stop;
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_forwardingNpdu);
                            log("*** TC_FNTP_TXP_FP_BV_01: INFO: FNTPPDU: ", v_forwardingNpdu, " ***");
                            if(match(v_forwardingNpdu, mdw_fntpForwardingNpdu(c_portRtr, c_portHst, f_getIutForwardingSrcPort(), f_getIutForwardingDestPort(), ?, f_getIutShopValue()))) {
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_FP_BV_01: WARN: Invalid timestamp ***");
                                }*/
                                log("*** TC_FNTP_TXP_FP_BV_01: PASS: Received extended N-hops FNTP NPDU as expected ***");
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
                            } else {
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_FP_BV_01: FAIL: Unexpected extended N-hops FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
garciay's avatar
garciay committed
                        [] a_fntpUnsollictedMessages() {
                            // Do not restart tc_ac
                            repeat;
                        }
filatov's avatar
filatov committed
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_FP_BV_01: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_FP_BV_01: INFO: test body done ***");
                    
                    // Postamble
garciay's avatar
garciay committed
//                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf02Down();
                    
                } // End of testcase TC_FNTP_TXP_FP_BV_01
garciay's avatar
garciay committed
               
filatov's avatar
filatov committed
                /**
                 * @desc    RX at ITS-S router
                 * <pre>
                 * Pics Selection: PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)
                 * Config Id: CF02
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an FNTP forwarding table with proper entry in support of an ITS-S application in an ITS-S host
garciay's avatar
garciay committed
                *  }
filatov's avatar
filatov committed
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received an FNTP station-internal forwarding NPDU containing a correctly formatted FNTP basic NPDU for single hop BC transmission
                 *      }
                 *      then {
                 *          the IUT extracts the FNTP basic NPDU, and forwards it to the BC-VCI for transmission via the IN-SAP
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/FP/BV/02
filatov's avatar
filatov committed
                 */
                testcase TC_FNTP_TXP_FP_BV_02() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
garciay's avatar
garciay committed
                    var FntpInd v_fntpInd; 
filatov's avatar
filatov committed
                    var FNTPNPDU v_forwardingNpdu;
                    
                    // Test control
                    if (not(PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH))) {
                        log("*** TC_FNTP_TXP_FP_BV_02: ERROR: 'PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf02Up();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_FP_BV_02: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_sendForwardingNpdu( 
filatov's avatar
filatov committed
                        { portLong := c_portHst },      // From host
                        { portLong := c_portRtr },      // To router
                        f_getIutForwardingSrcPort(),    // Forwarding source port
                        f_getIutForwardingDestPort(),   // Forwarding destination port
                        m_llServiceAddr(m_linkId(f_getIutLanRemoteCiidBc(), f_getIutLanLocalCiid())), 
                        m_llServiceAddr(m_linkId(f_getIutRemoteDestCiidBc(), f_getIutDestLocalCiid())), 
                        0, 
                        f_getIutShopValue()             // S-Hop
                    );
                    log("*** TC_FNTP_TXP_FP_BV_02: INFO: FNTP station-internal forwarding NPDU containing a correctly formatted FNTP basic NPDU for single hop BC transmission done ***");
                    // Clause 'then'
                    tc_ac.start;
                    alt {
                        [] fntpPort.receive(
garciay's avatar
garciay committed
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq( 
                                    mdw_inUnitDataReq( 
                                        mw_linkId(f_getIutLanRemoteCiidBc(), f_getIutLanLocalCiid()), 
                                        mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutDestLocalCiid()) 
                        )))) -> value v_fntpInd {
filatov's avatar
filatov committed
                            tc_ac.stop;
garciay's avatar
garciay committed
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_forwardingNpdu);
                            log("*** TC_FNTP_TXP_FP_BV_02: INFO: FNTPPDU: ", v_forwardingNpdu, " ***");
filatov's avatar
filatov committed
                            if (match(v_forwardingNpdu, mdw_fntpForwardingNpdu(c_portRtr, c_portHst, f_getIutForwardingSrcPort(), f_getIutForwardingDestPort(), ?, ?))) {
garciay's avatar
garciay committed
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_FP_BV_02: WARN: Invalid timestamp ***");
                                }*/
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_FP_BV_02: PASS: Received forwarding S-Hop FNTP NPDU as expected ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
filatov's avatar
filatov committed
                            } else {
                                log("*** TC_FNTP_TXP_FP_BV_02: FAIL: Unexpected forwarding S-hops FNTP NPDU ***");
garciay's avatar
garciay committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
filatov's avatar
filatov committed
                            }
                        }
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_FP_BV_02: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_FP_BV_02: INFO: test body done ***");
                    
                    // Postamble
garciay's avatar
garciay committed
//                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf02Down();
                    
                } // End of testcase TC_FNTP_TXP_FP_BV_02
                
                /**
                 * @desc    TX from ITS-S host - increment of Counter
                 * <pre>
                 * Pics Selection: PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)
                 * Config Id: CF02
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an FNTP forwarding table with proper entry in support of the requested local port numbers of the ITS-S application 
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received a sequence of correctly formatted single hop BC transmission requests for delivery via a VCI contained in a different ITS-SCU, with the number of requests such that at least once the "Counter" value before increment is different to 255, 
                 *          and at least once it is equal to 255
                 *      }
                 *      then {
                 *          the IUT generates an FNTP forwarding NPDU for every request, with the "Counter" value in an FNTP forwarding NPDU equal to the "Counter" value from the previous FNTP forwarding NPDU incremented by one with a wrap around from the value 255 to 0
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/FP/BV/03
filatov's avatar
filatov committed
                 */
                testcase TC_FNTP_TXP_FP_BV_03() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
garciay's avatar
garciay committed
                    var FntpInd v_fntpInd; 
filatov's avatar
filatov committed
                    var FNTPNPDU v_forwardingNpdu;
                    var integer v_counter; // Index used for loop
                    var template FNTPpacketCounter v_fntpPacketCounter; // Expected FNTPpacketCounter value
                    
                    // Test control
                    if (not(PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH))) {
                        log("*** TC_FNTP_TXP_FP_BV_03: ERROR: 'PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf02Up();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
                    log("*** TC_FNTP_TXP_FP_BV_03: INFO: Preamble: FNTP forwarding Table was setup properly ***");
                    
                    // Test Body
                    // Clause 'when'
                    v_fntpPacketCounter := ?; // First loop, the fntpPacketCounter is unknown
                    v_counter := 0;
                    // Send first formatted single hop BC transmission request
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithoutConfirm( 
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
                            f_getNextCommandRef(),                      // Unique cyclic reference number of command
                            vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
                            f_getIutLanLinkIdBc(),                      // Broadcast message with a different ITS-SCU
garciay's avatar
garciay committed
                            f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutShopValue()))  // Content of the FNTP control field in the FNTP extended header
                    );
filatov's avatar
filatov committed
                    log("*** TC_FNTP_TXP_FP_BV_03: INFO: First formatted single hop BC transmission request for delivery via a VCI contained in a different ITS-SCU done ***");
                    // Clause 'then'
                    // Process first expected FNTP forwarding NPDU
                    tc_ac.start;
                    alt {
                        [] fntpPort.receive(
garciay's avatar
garciay committed
                            mw_fntpInd( 
                                mw_fntpInSapPrimitiveReq(
                                    mdw_inUnitDataReq( 
                                        mw_linkId(f_getIutLanRemoteCiidBc(), f_getIutLanLocalCiid()), 
                                        mw_linkId(f_getIutRemoteDestCiidBc(), f_getIutDestLocalCiid()) 
                        )))) -> value v_fntpInd {
filatov's avatar
filatov committed
                            tc_ac.stop;
                            log("*** TC_FNTP_TXP_FP_BV_03: INFO: Received next FNTP forwarding NPDU ***");
garciay's avatar
garciay committed
                            f_oct2npdu(v_fntpInd.msgIn.servPrimitive.IN_UNITDATA_request.data, c_tbDone, v_forwardingNpdu);
                            log("*** TC_FNTP_TXP_FP_BV_03: INFO: FNTPPDU: ", v_forwardingNpdu, " ***");
filatov's avatar
filatov committed
                            if (match(v_forwardingNpdu, mdw_fntpForwardingNpdu(c_portRtr, c_portHst, f_getIutForwardingSrcPort(), f_getIutForwardingDestPort(), v_fntpPacketCounter, f_getIutShopValue())) == false) {
garciay's avatar
garciay committed
                                //TODO Enhance to check generation timestamp
                                /*if (f_checkTimeValidity(int2float(v_fntpInd.receptionTime), int2float(f_getCurrentTime())) == false) { 
                                    log("*** TC_FNTP_TXP_FP_BV_03: WARN: Invalid timestamp ***");
                                }*/
                                log("*** TC_FNTP_TXP_FP_BV_03: ERROR: Received unexpected FNTP packet counter value ***");
filatov's avatar
filatov committed
                                f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
                            } else if (v_counter < 258) {
                                // Send next formatted single hop BC transmission request
                                v_counter := v_counter + 1;
                                v_fntpPacketCounter := (v_forwardingNpdu.header.options.intForw.counter + 1) mod (c_uInt8Max + 1); // Apply modulus 256 here
garciay's avatar
garciay committed
                                f_fntpGenerateNfSApRequestWithoutConfirm( 
filatov's avatar
filatov committed
                                    m_generateNfFntpCommRequest( 
garciay's avatar
garciay committed
                                        f_getNextCommandRef(),                      // Unique cyclic reference number of command
                                        vc_portNumber,                              // Port number allocated by FN-FNTP-PORT.create operation
                                        f_getIutLanLinkIdBc(),                      // Broadcast message with a different ITS-SCU
                                        f_getIutItsFpdu(),                          // Contains the ITS-SP payload EPDU
                                        md_nHopNfFntpOptions(f_getIutShopValue()))  // Content of the FNTP control field in the FNTP extended header
                                );
filatov's avatar
filatov committed
                                log("*** TC_FNTP_TXP_FP_BV_03: INFO: Second formatted single hop BC transmission request done ***");
                                repeat; // Continue the processing
                            } else {
                                // Here, the counter has passed the wrap around fromt the value 255 to 0
                                log("*** TC_FNTP_TXP_FP_BV_03: PASS: The counter has passed the wrap around fromt the value 255 to 0 ***");
                            }
                        }
garciay's avatar
garciay committed
                        [] a_fntpUnsollictedMessages() {
                            // Do not restart tc_ac
                            repeat;
                        }
filatov's avatar
filatov committed
                        [] tc_ac.timeout {
                            log("*** TC_FNTP_TXP_FP_BV_03: INCONC: Expected message not received ***");
garciay's avatar
garciay committed
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout);
filatov's avatar
filatov committed
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_FP_BV_03: INFO: test body done ***");
                    
                    // Postamble
garciay's avatar
garciay committed
//                    f_unInitializeFntpForwardingTable();
filatov's avatar
filatov committed
                    f_poDefault();
                    f_cf02Down();
                    
                } // End of testcase TC_FNTP_TXP_FP_BV_03
                
            } // End of group validBehavior
            
            group invalidBehavior {
                
                /**
                 * @desc    TX from ITS-S host - unknown access to ITS station-internal network
                 * <pre>
                 * Pics Selection: PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)
                 * Config Id: CF02
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an FNTP forwarding table with no entry related to an ITS station-internal network
                 *  }
                 * Expected behaviour:
garciay's avatar
garciay committed
                 *  ensure that {
filatov's avatar
filatov committed
                 *      when { 
                 *          the IUT having received a correctly formatted single hop BC transmission request for delivery via a VCI contained in a different ITS-SCU
                 *      }
                 *      then {
                 *          the IUT reports failure of delivery
                 *      }
                 *  }
                 * </pre>
                 * 
garciay's avatar
garciay committed
                 * @version 1.1.2
                 * @see     ETSI TS 102 985-2 v1.1.2 FNTP/TXP/FP/BI/01
filatov's avatar
filatov committed
                 */
//              FIXME Implementation shall be reviewed during ATS validation 
                testcase TC_FNTP_TXP_FP_BI_01() runs on ItsCalm system ItsCalmSystem {
                    // Local variables
                    
                    // Test control
                    if (not(PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH))) {
                        log("*** TC_FNTP_TXP_FP_BI_01: ERROR: 'PICS_ITS_S_INW and (PICS_ROLE_HONLY or PICS_ROLE_RH)' required for executing the TC ***");
                        stop;
                    }
                    
                    // Test component configuration
                    f_cf02Up();
                    
                    // Test adapter configuration
                    
                    // Preamble
                    // Clause 'Initial conditions'
                    f_initializeFntpForwardingTable(f_getIutAppPortValue());
                    f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success);
garciay's avatar
garciay committed
                    log("*** TC_FNTP_TXP_FP_BI_01: INFO: Preamble: FNTP forwarding Table was setup properly ***");
filatov's avatar
filatov committed
                    
                    // Test Body
                    // Clause 'when'
garciay's avatar
garciay committed
                    f_fntpGenerateNfSApRequestWithConfirm(
filatov's avatar
filatov committed
                        m_generateNfFntpCommRequest( 
garciay's avatar
garciay committed
                            f_getNextCommandRef(),                          // Unique cyclic reference number of command
                            vc_portNumber,                                  // Port number allocated by FN-FNTP-PORT.create operation
                            f_getIutLanLinkIdBc(),                          // Broadcast message with a different ITS-SCU
                            f_getIutItsFpdu(),                              // Contains the ITS-SP payload EPDU
                            md_nHopNfFntpOptions(f_getIutShopValue())),     // Content of the FNTP control field in the FNTP extended header
                        mdw_fntpCommConfirm_unspecFailure(vc_portNumber),    // Failure expected 
filatov's avatar
filatov committed
                        true,
garciay's avatar
garciay committed
                        vc_utEventInd.utFntpEventInd
                    );
filatov's avatar
filatov committed
                    log("*** TC_FNTP_TXP_FP_BI_01: INFO: FNTP-COMMAND.request done ***");
                    // Clause 'then'
                    tc_noac.start; // No more message expected
                    alt {
                        [] fntpPort.receive {
                            tc_noac.stop;
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); 
                            log("*** TC_FNTP_TXP_FP_BI_01: FAIL: No message was expected on FNTP port ***");
                        }
                        [] tc_noac.timeout {
                            f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); 
                            log("*** TC_FNTP_TXP_FP_BI_01: PASS: No message received as expected ***");
                        }
                    } // End of 'alt' statement
                    log("*** TC_FNTP_TXP_FP_BI_01: INFO: test body done ***");
                    
                    // Postamble
//                    f_unInitializeFntpForwardingTable();
                    f_poDefault();
                    f_cf02Down();
                    
                } // End of testcase TC_FNTP_TXP_FP_BI_01
                
            } // End of group invalidBehavior
            
        } // End of group forwardingProcedure
        
    } // End of group transmittingPackets
    
garciay's avatar
garciay committed
    // 6.2 Transmitting Packets
filatov's avatar
filatov committed
    group receivingPackets {
        
garciay's avatar
garciay committed
        // 6.2.1 Basic delivery procedure
filatov's avatar
filatov committed
        group basicProcedure {
            
            group validBehavior {
                
                /**
                 * @desc    Single hop unicast reception from peer station
                 * <pre>
                 * Pics Selection: PICS_ROLE_RH
                 * Config Id: CF01
                 * Initial conditions: 
                 *  with {
                 *      the IUT having an entry in the FNTP forwarding table with Service Port such that no ITS station-internal forwarding is needed