/** * @author ETSI / STF405 / STF449 * @version $URL$ * $Id$ * @desc GeoNetworking Testcases (TP version: 0.0.11) * */ module ItsGeoNetworking_TestCases { // Libcommon import from LibCommon_BasicTypesAndValues all; import from LibCommon_Time all; import from LibCommon_VerdictControl all; import from LibCommon_Sync all; // LibIts import from LibItsCommon_Functions all; import from LibItsGeoNetworking_TestSystem all; import from LibItsGeoNetworking_Functions all; import from LibItsGeoNetworking_Templates all; import from LibItsGeoNetworking_TypesAndValues all; import from LibItsGeoNetworking_Pics all; // 6.2.1 group geoFormatingAndDataValidity { // 6.2.1.1 group geoFdvBasicHeader { /** * @desc Testing defined values of default Gn parameters in the basic header *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet
             *      }
             *      then {
             *          the IUT sends a GeoUnicast packet
             *              containing a correctly formatted Basic Header
             *                  containing version field
             *                      set to itsGnProtocolVersion MIB parameter
             *                  containing RHL field
             *                      set to itsGnDefaultHopLimit MIB parameter
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BAH/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.2 , 8.6.2 and Annex G */ testcase TC_GEONW_FDV_BAH_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(vc_componentName); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket(?, ?), -, f_getDefaultHopLimit()))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Basic Header correctly formatted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BAH_BV_01 /** * @desc Testing discard of packet having incorrect version *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives the SHB packet from ItsNodeB
             *              containing a correctly formatted Basic Header
             *                  containing version field
             *                      set to value not equal to itsGnProtocolVersion MIB parameter
             *      }
             *      then {
             *          the IUT discards the received SHB packet
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BAH/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.3 */ testcase TC_GEONW_FDV_BAH_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB)); v_gnPacket.basicHeader.version := valueof(v_gnPacket.basicHeader.version) + 1; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was discarded and not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BAH_BV_02 } // end geoFdvBasicHeader // 6.2.1.2 group geoFdvCommonHeader { /** * @desc Common GeoNetworking header validity test (PL field) *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon message
             *      }
             *      then {
             *          the IUT sends a GeoNetworking message
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '1' (BEACON)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *                  containing PL field
             *                      set to '0'
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/COH/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.6 and 9.3.6 */ testcase TC_GEONW_FDV_COH_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(?)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Common Header correclty formatted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_COH_BV_01 /** * @desc Common GeoNetworking header validity test (PL field) *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a SHB packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '5' (TSB)
             *                  containing HST field
             *                      set to '0' (SINGLE_HOP)
             *                  containing MHL field
             *                      set to '1'
             *                  containing PL field
             *                      set to the length of the included payload
             *              containing a payload
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/COH/BV/02 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.4, 9.3.4 and 9.3.10 */ testcase TC_GEONW_FDV_COH_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var GeoNetworkingInd v_geoNwInd; var octetstring v_payload := char2oct("PAYLOAD"); // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateShbMessageWithPayload(v_payload)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwShbPacket))) -> value v_geoNwInd { tc_ac.stop; if(ispresent(v_geoNwInd.msgIn.gnPacket.packet.payload)) { if(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength == lengthof(v_geoNwInd.msgIn.gnPacket.packet.payload.rawPayload)) { log("*** " & testcasename() & ": PASS: PL field correctly indicates payload size ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: PL does correctly not indicate payload size (" & int2str(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength) & " != " & int2str(lengthof(v_geoNwInd.msgIn.gnPacket.packet.payload.rawPayload)) & ")***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } else { if(v_geoNwInd.msgIn.gnPacket.packet.commonHeader.plLength == 0) { log("*** " & testcasename() & ": PASS: PL field correctly indicates empty payload ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: PL does not indicate empty payload ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_COH_BV_02 /** * @desc Testing defined values of default Gn parameters in the common header *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *       the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet
             *      }
             *      then {
             *          the IUT sends a GeoUnicast packet
             *              containing a correctly formatted Common Header
             *                  containing Flags field
             *                      indicating value equalling the itsGnIsMobile MIB parameter
             *                  containing MHL field
             *                      set to itsGnDefaultHopLimit MIB parameter
             *     }
             *  }
             * 
* * @version 0.0.11 * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/COH/BV/03 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.2, 9.3.4 and Annex G */ testcase TC_GEONW_FDV_COH_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(vc_componentName); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwUnicastPacketWithHlAndFlags(?, ?, f_getDefaultHopLimit(), f_isMobile())))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Correct GeoNetworking Common Header received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] a_receiveAnyGeoUnicast() { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Incorrect GeoNetworking Common Header received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_COH_BV_03 group GEONW_FDV_COH_BV_04 { /** * @desc Test that a received TSB packet is discarded if received with RHL > MHL *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *       the IUT being in the "initial state" and
                 *       the IUT having received Beacon information from ItsNodeD and
                 *       the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a TSB packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1 higher than MHL1
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating MHL1
                 *      }
                 *      then {
                 *          the IUT discards the TSB packet
                 *     }
                 *  }
                 * 
* * @version 0.0.11 * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/COH/BV/04 * @reference EN 302 636-4-1 [1], clauses 9.3.5 */ testcase TC_GEONW_FDV_COH_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_FDV_COH_BV_04_nodeB()); v_nodeD.start(f_GEONW_FDV_COH_BV_04_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_FDV_COH_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_FDV_COH_BV_04) */ function f_GEONW_FDV_COH_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var UInt8 v_hopLimit := f_getDefaultHopLimit(); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB, v_hopLimit-1 ), -, v_hopLimit ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: TSB packet was not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: TSB was correctly discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_FDV_COH_BV_04_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_FDV_COH_BV_04) */ function f_GEONW_FDV_COH_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: TSB packet was not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: TSB was correctly discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_FDV_COH_BV_04_nodeD } // end GEONW_FDV_COH_BV_04 } // end geoFdvCommonHeader // 6.2.1.3 group geoFdvBeacon { /** * @desc Beacon header validity test *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '1' (BEACON)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *                  containing NH field
             *                      set to '0' (UNSPECIFIED)
             *              containing Extended Header
             *                  containing SOPV
             *                      indicating LPV of the IUT
             *      }
             *    }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BEA/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.6 and 9.3.6 */ testcase TC_GEONW_FDV_BEA_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition(v_longPosVectorIut), e_any)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Common Header correclty formatted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BEA_BV_01 /** * @desc GeoNetworking address validity test *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *    the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing SOPV field
             *                  containing GN_ADDR field
             *                      containing ST field
             *                          indicating the ITS Station type
             *                      containing SCC field
             *                          indicating the ITS Station country code
             *      }
             *  }
             *  NOTE: Correct Source GeoNetworking address value: itsGnLocalGnAddr MIB parameter value.
             *  
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BEA/BV/02 * @reference EN 302 636-4-1 [1], clauses 6.3 and 8.8.6.2 */ testcase TC_GEONW_FDV_BEA_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket( mw_longPosVectorAny(f_getIutGnLocalAddress()))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GN address correctly received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BEA_BV_02 /** * @desc Local Position Vector validity test, involving comparison against sensor input data *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correct SOPV field
             *                  indicating the latest position of the IUT
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BEA/BV/03 * @reference EN 302 636-4-1 [1], clauses 8.5.2.2 and 8.8.6.2 */ testcase TC_GEONW_FDV_BEA_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition_withDelta(v_longPosVectorIut))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Position equaling GN-MNGT primitive value received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BEA_BV_03 /** * @desc Local Position Vector validity test, involving timestamp comparison against sensor input data *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correct SOPV field
             *                  indicating the timestamp value corresponding to the sensor acquisition time of position data
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/BEA/BV/04 * @reference EN 302 636-4-1 [1], clauses 8.5.2.2 and 8.8.6.2 */ testcase TC_GEONW_FDV_BEA_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(mw_longPosVectorPosition_withDelta(v_longPosVectorIut))))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Timestamp equaling GN-MNGT primitive value received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_BEA_BV_04 } // end geoFdvBeacon // 6.2.1.4 group geoFdvGeoUnicast { /** * @desc GeoUnicast header validity *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *              containing GeoUnicast Extended Header
             *                  containing DEPV field
             *                      indicating position of the ItsNodeB
             *                  containing SOPV field
             *                      indicating position of the IUT
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/GUC/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.8.2.2 and 9.3.8 */ testcase TC_GEONW_FDV_GUC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacketWithSourcePv( mw_shortPosVectorPosition_withDelta(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), // DEPV ?, // sequence number mw_longPosVectorPosition_withDelta(v_longPosVectorIut) //SOPV ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Fields of the received GeoUnicast message correctly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: GeoUnicast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_GUC_BV_01 } // end geoFdvGeoUnicast // 6.2.1.5 group geoFdvGeoBroadcast { /** * @desc GeoBroadcast header validity *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from the ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoBroadcast packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '4' (GEOBROADCAST)
             *              containing GeoBroadcast Extended Header
             *                  containing SOPV field
             *                      indicating position of the IUT
             *       }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/GBC/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.5.2 and 9.3.11 */ testcase TC_GEONW_FDV_GBC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var octetstring v_payload := char2oct("PAYLOAD"); // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessageWithPayload(f_getArea(c_area1), v_payload)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), // SOPV ? // sequence number ) ) ), ? ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Fields of the received GeoBroadcast message correctly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_GBC_BV_01 } // end geoFdvGeoBroadcast // 6.2.1.6 group geoFdvGeoAnycast { /** * @desc GeoAnycast header validity *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from the ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoAnycast packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '3' (GEOANYCAST)
             *              containing GeoAnycast Extended Header
             *                  containing SOPV field
             *                      indicating position of IUT
             *       }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/GAC/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.5.2 and 9.3.12 */ testcase TC_GEONW_FDV_GAC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var octetstring v_payload := char2oct("PAYLOAD"); // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoAnycastMessageWithPayload(f_getArea(c_area1), v_payload)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), // SOPV ? // sequence number ) ) ), ? ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Fields of the received GeoAnycast message correctly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_GAC_BV_01 } // end geoFdvGeoAnycast // 6.2.1.7 group geoFdvSingleHopBroadcast { /** * @desc SHB header validity *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from the ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a SHB packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '5' (TSB)
             *                  containing HST field
             *                      set to '0' (SINGLE_HOP)
             *                  containing MHL field
             *                      set to '1'
             *              containing Extended Header
             *                  containing SOPV
             *                      indicating LPV of the IUT
             *       }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/SHB/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 9.3.4, 8.8.4.2 and 9.3.10 */ testcase TC_GEONW_FDV_SHB_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), // SOPV 1 //MHL ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Fields of the received SHB message correctly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: SHB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_SHB_BV_01 } // end geoFdvSingleHopBroadcast // 6.2.1.8 group geoFdvTopologicallyScopedBroadcast { /** * @desc TSB header validity *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from the ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a TSB packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '5' (TSB)
             *                  containing HST field
             *                      set to '1' (MULTI_HOP)
             *              containing TSB Extended Header
             *                  containing SOPV field
             *                      indicating position of the IUT
             *       }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/FDV/TSB/BV/01 * @reference EN 302 636-4-1 [1], clauses 8.7.2, 8.7.4, 8.8.3.2 and 9.3.9 */ testcase TC_GEONW_FDV_TSB_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateTsbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, // sequence number mw_longPosVectorPosition_withDelta(v_longPosVectorIut) // SOPV ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: message received with correct common and extended headers ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_FDV_TSB_BV_01 } // end geoFdvTopologicallyScopedBroadcast } // end geoFormatingAndDataValidity // 6.2.2 group geoProtocolOperation { // 6.2.2.1 group geoLocationTable { /** * @desc Test of adding new entries into location table from Beacon header *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from the ItsNodeB and
             *      the lifetime of the ItsNodeB Location Table entry not being expired
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT does not send a GeoNetworking packet
             *              containing a LS_REQUEST
             *                  containing Request field
             *                      containing GN_ADDR
             *                          containing M_ID
             *                              indicating ItsNodeB
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *              containing GeoUnicast Extended Header
             *                  containing DEPV field
             *                      indicating same position as the SOPV value of the Beacon information received from ItsNodeB
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.6.2 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoUnicast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] a_receiveAnyLsRequest() { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Received Location Service Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": TIMEOUT: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOT_BV_01 /** * @desc Test of adding new entries into location table from LS Reply data *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having been requested to send a first GeoUnicast packet to ItsNodeA and
             *      the IUT having sent a LS_REQUEST packet
             *          containing Request field
             *              containing GN_ADDR
             *                  containing M_ID
             *                      indicating ItsNodeA
             *      the IUT having received a LS_REPLY packet from ItsNodeA
             *          containing SOPV field and
             *      the IUT having sent the GeoUnicast packet to ItsNodeA and
             *      the lifetime of the ItsNodeA Location Table entry not being expired
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a second GeoUnicast packet to ItsNodeA
             *      }
             *      then {
             *          the IUT does not send a GeoNetworking packet
             *              containing a LS_REQUEST
             *                  containing Request field
             *                      containing GN_ADDR
             *                          containing M_ID
             *                              indicating ItsNodeA
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *              containing GeoUnicast Extended Header
             *                  containing DEPV field
             *                      indicating same position as the SOPV value of the LS_REPLY packet received from ItsNodeA
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.2, 9.3.7.1.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var GN_Address v_gnAddressNodeA; var boolean v_lsRequestReceived := false; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_gnAddressNodeA := v_longPosVectorNodeA.gnAddr; // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequestAndReply( ?, v_gnAddressNodeA.mid, v_longPosVectorNodeA, v_longPosVectorNodeB ) { v_lsRequestReceived := true; log("*** " & testcasename() & ": Pre-conditions: Received and answered Location Service Request ***"); repeat; } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { tc_ac.stop; if(v_lsRequestReceived == true) { log("*** " & testcasename() & ": Pre-conditions: First GeoUnicast message received correctly ***"); } else { log("*** " & testcasename() & ": Pre-conditions: GeoUnicast packet received without LS Request ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Initial conditions not satisfied. ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Received Location Service Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Received second GeoUnicast packet without LS Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOT_BV_02 group GEONW_PON_LOT_BV_03 { /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: Beacon packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwBeaconPacket( v_longPosVectorNodeA ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_01 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: GUC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_getIutShortPosVector(), vc_localSeqNumber ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_02 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: GAC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwAnycastPacket( v_longPosVectorNodeA, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_03 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: GBC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwBroadcastPacket( v_longPosVectorNodeA, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_04 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: TSB packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeA ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_05 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: SHB packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwShbPacket( v_longPosVectorNodeA ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_06 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: LS Request packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); activate(a_receiveAnyLsReply()); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwLsRequestPacket( v_longPosVectorNodeA, vc_localSeqNumber, f_getIutGnLocalAddress() ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_07 /** * @desc Test of adding new entries into location table from extended header processing * (e.g. Unicast header) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a MESSAGE from ItsNodeA
                 *  }
                 *  MESSAGE: LS Reply packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating ItsNodeA
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV of the MESSAGE received from ItsNodeA
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_03_08() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA := f_TP_GEONW_PON_LOT_BV_03_pre_1(); f_TP_GEONW_PON_LOT_BV_03_pre_2( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_getIutShortPosVector(), vc_localSeqNumber ) ); f_TP_GEONW_PON_LOT_BV_03_main(v_longPosVectorNodeA); } // end TC_GEONW_PON_LOT_BV_03_08 /** * @desc Function including first preamble part (TC_GEONW_PON_LOT_BV_03) */ function f_TP_GEONW_PON_LOT_BV_03_pre_1() runs on ItsGeoNetworking return LongPosVector { // Local variables var LongPosVector v_longPosVectorNodeA; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble part I f_prNeighbour(); return v_longPosVectorNodeA; } // end f_TP_GEONW_PON_LOT_BV_03_pre_1 /** * @desc Function including second preamble part (TC_GEONW_PON_LOT_BV_03) */ function f_TP_GEONW_PON_LOT_BV_03_pre_2(in template (value) GnNonSecuredPacket p_packet) runs on ItsGeoNetworking { //preamble part II f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet)) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } // end f_TP_GEONW_PON_LOT_BV_03_pre_2 /** * @desc Function including test body and postamble part (TC_GEONW_PON_LOT_BV_03) */ function f_TP_GEONW_PON_LOT_BV_03_main(in template (value) LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(valueof(p_longPosVectorNodeA.gnAddr))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveAnyLsRequest() { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Received Location Service Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_longPosVectorNodeA)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoUnicast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end f_TP_GEONW_PON_LOT_BV_03_main } //end GEONW_PON_LOT_BV_03 /** * @desc Test of handling entries expiring from location table *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacons information from ItsNodeB and
             *      the IUT not having received beacons from ItsNodeB for the duration of itsGnLifetimeLocTE parameter (20 sec)
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a LS_REQUEST
             *                  containing Request field
             *                      indicating GN_ADDR of ItsNodeB
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/04 * @reference EN 302 636-4-1 [1], clauses 7.1.3, 9.3.8.2, 9.3.7.1.2 and Annex G */ testcase TC_GEONW_PON_LOT_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prDefault(); // NodeB will send Beacon only once f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(f_getPosition(c_compNodeB)), -, c_hopLimit1))); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(f_getLifetimeLocTableEntry()); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeB.gnAddr.mid, v_longPosVectorIut ) { log("*** " & testcasename() & ": PASS: LS Request received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: LS Request not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_LOT_BV_04 group GEONW_PON_LOT_BV_05 { /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: GUC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwUnicastPacket( v_obsoleteLongPosVectorNodeB, f_getIutShortPosVector(), vc_localSeqNumber ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_01 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: GAC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwAnycastPacket( v_obsoleteLongPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_02 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: GBC packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwBroadcastPacket( v_obsoleteLongPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_03 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: TSB packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwTsbPacket( vc_localSeqNumber, v_obsoleteLongPosVectorNodeB ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_04 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: SHB packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwShbPacket( v_obsoleteLongPosVectorNodeB ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_05 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: LS Request packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); activate(a_receiveAnyLsReply()); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwLsRequestPacket( v_obsoleteLongPosVectorNodeB, vc_localSeqNumber, f_getIutGnLocalAddress() ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_06 /** * @desc Test of updating entries in location table with most up-to-date position data extracted * from common header processing (including timestamp comparison before updating) *
                 * Pics Selection: none
                 * Config Id: CF01
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a MESSAGE from ItsNodeB,
                 *          containing Extended Header
                 *              containing SOPV field
                 *                  indicating an older timestamp than the last Beacon packet and
                 *                  indicating a different position than the position of the last Beacon packet
                 *  }
                 *  MESSAGE: LS Reply packet
                 *
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
                 *      }
                 *      then {
                 *          the IUT does not send a GeoNetworking packet
                 *              containing a LS_REQUEST
                 *                  containing Request field
                 *                      indicating GN_ADDR of ItsNodeB
                 *          the IUT sends a GeoNetworking packet
                 *              containing a correctly formatted Common Header
                 *                  containing HT field
                 *                      set to '2' (GEOUNICAST)
                 *              containing GUC Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of the Beacon information received
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOT/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 and 9.3.8.2 */ testcase TC_GEONW_PON_LOT_BV_05_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_obsoleteLongPosVectorNodeB; f_TP_GEONW_PON_LOT_BV_05_pre_1(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); f_TP_GEONW_PON_LOT_BV_05_pre_2( m_geoNwLsReplyPacket( v_obsoleteLongPosVectorNodeB, f_getIutShortPosVector(), vc_localSeqNumber ) ); f_TP_GEONW_PON_LOT_BV_05_main(v_longPosVectorNodeB, v_obsoleteLongPosVectorNodeB); } // end TC_GEONW_PON_LOT_BV_05_07 /** * @desc Function including first preamble part (TC_GEONW_PON_LOT_BV_05) */ function f_TP_GEONW_PON_LOT_BV_05_pre_1(out LongPosVector p_longPosVectorNodeB, out LongPosVector p_obsoleteLongPosVectorNodeB) runs on ItsGeoNetworking { // Local variables // Test control // Test component configuration f_cf01Up(); p_longPosVectorNodeB := f_getPosition(c_compNodeB); p_obsoleteLongPosVectorNodeB := p_longPosVectorNodeB; p_obsoleteLongPosVectorNodeB.timestamp := p_obsoleteLongPosVectorNodeB.timestamp - 1000; p_obsoleteLongPosVectorNodeB.latitude := p_obsoleteLongPosVectorNodeB.latitude - 1; // Test adapter configuration // Preamble f_prDefault(); // Act as a neighbor and send one beacon f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(f_getPosition(c_compNodeB)), -, c_hopLimit1))); } // end f_TP_GEONW_PON_LOT_BV_05_pre_1 /** * @desc Function including second preamble part (TC_GEONW_PON_LOT_BV_05) */ function f_TP_GEONW_PON_LOT_BV_05_pre_2(in template (value) GnNonSecuredPacket p_packet) runs on ItsGeoNetworking { //preamble part II f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(p_packet)) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } // end f_TP_GEONW_PON_LOT_BV_05_pre_2 /** * @desc Function including test body and postamble part (TC_GEONW_PON_LOT_BV_05) */ function f_TP_GEONW_PON_LOT_BV_05_main(in template (value) LongPosVector p_longPosVectorNodeB, in template (value) LongPosVector p_obsoleteLongPosVectorNodeB) runs on ItsGeoNetworking { // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(valueof(p_longPosVectorNodeB.gnAddr)))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveAnyLsRequest() { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Received Location Service Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_obsoleteLongPosVectorNodeB)))) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast received with obsolete Destination Position Vector ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(valueof(p_longPosVectorNodeB)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoUnicast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end f_TP_GEONW_PON_LOT_BV_05_main } // end group GEONW_PON_LOT_BV_05 } // end geoLocationTable // 6.2.2.2 group geoLocalPositionVector { /** * @desc Test of the updating of the Local position vector *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having changed its position
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates eventually a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '1' (BEACON)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *                  containing Extended Header
             *                      containing SOPV field
             *                          indicating the new position
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LPV/BV/01 * @reference EN 302 636-4-1 [1], clauses 7.2.3, 9.2.2.2, 9.3.6.1 and Annex G */ testcase TC_GEONW_PON_LPV_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var template LongPosVector v_previouslongPosVectorIut; var GeoNetworkingInd v_geoNwInd; // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); v_previouslongPosVectorIut := v_longPosVectorIut; v_previouslongPosVectorIut.timestamp := ?; // Test adapter configuration // Preamble f_prNeighbour(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( mw_longPosVectorAny(v_longPosVectorIut.gnAddr) ) ))) -> value v_geoNwInd { tc_ac.stop; log("*** " & testcasename() & ": Pre-conditions: Beacon received ***"); v_longPosVectorIut := v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.beaconHeader.srcPosVector; } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } f_utChangePosition(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body geoNetworkingPort.clear; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( mw_longPosVectorAny(v_longPosVectorIut.gnAddr) ) ))) -> value v_geoNwInd { tc_ac.stop; //check if the position vector has changed if (match(v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.beaconHeader.srcPosVector, v_previouslongPosVectorIut)) { log("*** " & testcasename() & ": FAIL: Sender Postion Vector not correctly updated ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Sender Postion Vector correctly updated ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LPV_BV_01 } // end geoLocalPositionVector // 6.2.2.3 group geoSequenceNumber { /** * @desc Test of the initial sequence number assignment *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *              containing GeoUnicast Extended Header
             *                  containing SN field
             *                      indicating value '0'
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/SQN/BV/01 * @reference EN 302 636-4-1 [1], clauses 7.2.3, 9.3.8.2 */ testcase TC_GEONW_PON_SQN_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var UInt16 v_expectedSequenceNumber := 0; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoUnicast(mw_shortPosVectorPosition_anyPos(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), v_expectedSequenceNumber) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoUnicast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] a_receiveGeoUnicast(mw_shortPosVectorPosition_anyPos(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ?) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast packet received with incorrect sequence number ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_SQN_BV_01 /** * @desc Test of the local sequence number incrementing *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB and
             *      the IUT having sent a GeoUnicast packet to the ItsNodeB
             *          containing the Sequence Number field
             *              indicating value SN1
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *              containing GeoUnicast Extended Header
             *                  containing SN field
             *                      indicating value SN1 + 1
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/SQN/BV/02 * @reference EN 302 636-4-1 [1], clauses 7.2.3, 9.3.8.2 */ testcase TC_GEONW_PON_SQN_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var UInt16 v_expectedSequenceNumber := 0; var integer v_nbReceivedPackets := 0; var GeoNetworkingInd v_geoNwInd; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_sleep(10.0); // receive first packet if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ?)))) -> value v_geoNwInd { tc_ac.stop; log("*** " & testcasename() & ": Pre-conditions: First GeoUnicast packet received ***"); v_expectedSequenceNumber := v_geoNwInd.msgIn.gnPacket.packet.extendedHeader.geoUnicastHeader.seqNumber + 1; } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoUnicast(mw_shortPosVectorPosition_anyPos(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), v_expectedSequenceNumber) { tc_ac.stop; v_nbReceivedPackets := v_nbReceivedPackets + 1; if(v_nbReceivedPackets >= vc_multipleMessagesCount) { log("*** " & testcasename() & ": PASS: GeoUnicast packets received with correct sequence numbers ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { v_expectedSequenceNumber := v_expectedSequenceNumber + 1; if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; repeat; } } [] a_receiveGeoUnicast(mw_shortPosVectorPosition_anyPos(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ?) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast packet received with incorrect sequence number ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_SQN_BV_02 } // end geoSequenceNumber // 6.2.2.4 group geoLocationService { /** * @desc Test of first LS invocation for unknown Destination nodes *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '6' (LS)
             *                  containing HST field
             *                      set to '0' (LS_REQUEST)
             *                  containing NH field
             *                      set to '0' (UNSPECIFIED)
             *              containing LS_REQUEST Extended Header
             *                  containing Request field
             *                      indicating GN_ADDR of ItsNodeA
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.8.2, 9.2.4 and 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var GN_Address v_gnAddressNodeA; // Test control // Test component configuration f_cf01Up(); v_gnAddressNodeA := f_getPosition(c_compNodeA).gnAddr; // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest( ?, v_gnAddressNodeA.mid, v_longPosVectorIut ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: LS Request received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] a_receiveAnyLsRequest() { tc_ac.stop; log("*** " & testcasename() & ": FAIL: LS Request does not contain GN Address of nodeA ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_01 /** * @desc Test of no LS invocation for unknown Destination nodes when LS procedure is already active *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a first GeoUnicast packet to ItsNodeA and
             *      the IUT having sent a GeoNetworking packet
             *          containing a LS_REQUEST
             *              containing Request field
             *                  containing GN_ADDR
             *                      containing M_ID
             *                          indicating ItsNodeA
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *            the IUT is requested to send a new GeoUnicast packet to ItsNodeA
             *      }
             *      then {
             *          IUT does not send a second LS_REQUEST packet (see note)
             *      }
             *  }
             *  NOTE: at least not before the LS_REQUEST retransmission timer expires
             *  
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.8.2, 9.2.4 and 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var GN_Address v_gnAddressNodeA; // Test control // Test component configuration f_cf01Up(); v_gnAddressNodeA := f_getPosition(c_compNodeA).gnAddr; // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) { tc_ac.stop; //start retransmission timer tc_ac.start(f_getLsRetransmitTimer() - f_getDeltaTimer()); } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_gnAddressNodeA)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } alt { [] a_receiveLsRequest(?, v_gnAddressNodeA.mid, v_longPosVectorIut) { tc_ac.stop; log("*** " & testcasename() & ": Second LS_REQUEST received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": No second LS_REQUEST received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_02 /** * @desc Test of packet buffering into LS buffer during Location service procedure, * including handling of LT fields in the LT packet buffer *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1 and
             *      the IUT having sent a LS_REQUEST packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives the LS_REPLY packet from ItsNodeA
             *      }
             *      then {
             *          the IUT sends the GeoUnicast packet addressed to ItsNodeA
             *              containing GeoUnicast Extended Header
             *                  containing LT field
             *                      indicating value (default LT value – WaitingTime (see note))
             *      }
             *  }
             *  NOTE: Waiting Time == time difference between LS_REQUEST sending and LS_REPLY reception.
             *  
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/03 * @reference EN 302 636-4-1 [1], clauses 7.4.2, 9.3.8.2, 9.2.4 and 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_03() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var GeoNetworkingInd v_geoNetInd; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) -> value v_geoNetInd { tc_ac.stop; //we only check that the lifetime is less than the default lifetime due to //we do not know exactly the time passed at IUT if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) * Pics Selection: none * Config Id: CF01 * Initial conditions: * with { * the IUT being in the "initial state" and * the IUT having no Location Table Entry for ItsNodeA and * the IUT having been requested to send a GeoUnicast packet to ItsNodeA * containing TrafficClass.SCF set to 1 * containing LT field * indicating value LT1 * containing payload field * indicating value PL1 and * the IUT having sent a LS_REQUEST packet and * the IUT having been requested to send a second GeoUnicast packet to ItsNodeA * containing TrafficClass.SCF set to 1 * containing LT field * indicating LT2 * containing payload field * indicating value PL2 * } * Expected behaviour: * ensure that { * when { * the IUT receives the LS_REPLY packet from ItsNodeA and * before expiry of LT1 and LT2 * } * then { * the IUT sends GeoUnicast packet addressed to ItsNodeA * containing payload field * indicating value PL1 and * the IUT sends GeoUnicast packet addressed to ItsNodeA * containing payload field * indicating value PL2 * } * } * * * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/04 * @reference EN 302 636-4-1 [1], clauses 7.4.2, 9.3.8.2, 9.2.4 and 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_04() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var octetstring v_payload1 := char2oct("PAYLOAD_1"); var octetstring v_payload2 := char2oct("PAYLOAD_2"); var boolean v_msg1Received := false; var boolean v_msg2Received := false; var boolean v_firstLsRequestReceived := false; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { if ( v_firstLsRequestReceived == true ) { log("*** " & testcasename() & ": Second LsRequest received ***"); tc_ac.stop; f_sendGeoNetMessage ( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu ( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } else { log("*** " & testcasename() & ": First LsRequest received ***"); v_firstLsRequestReceived := true; if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload2)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; repeat; } } [] tc_ac.timeout{ log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), f_adaptPayload_mw(v_payload1) ) ) { v_msg1Received := true; if ( v_msg2Received ) { log("*** " & testcasename() & ": FAIL: Messages received in incorrect order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": First Message received ***"); repeat; } } [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), f_adaptPayload_mw(v_payload2) ) ) { v_msg2Received := true; if ( v_msg1Received ) { log("*** " & testcasename() & ": PASS: Messages received in correct order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": Second Message received ***"); repeat; } } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected messages not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_04 /** * @desc Test of LS buffer characteristics: discarding upon LT expiration *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send multiple GeoUnicast packets to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating values LTx and
             *      the IUT having sent a LS_REQUEST packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives the LS_REPLY packet from ItsNodeA after expiry of LTs
             *      }
             *      then {
             *          the IUT does not send any packet to ItsNodeA
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/05 * @reference EN 302 636-4-1 [1], clauses 7.4.2, 9.3.8.2, 9.2.4 and 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var octetstring v_payload1 := char2oct("PAYLOAD_1"); var octetstring v_payload2 := char2oct("PAYLOAD_2"); // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, v_payload2)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); //start retransmission timer tc_ac.start(f_getMaxPacketLifeTime() + f_getDeltaTimer()); } [] tc_ac.timeout{ log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body // Awaiting expiration of LT alt { [] tc_ac.timeout { // LT expired } [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { // retransmitted LS_REQUEST repeat; } } f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); // Check for messages send to Tester tc_noac.start; alt { [] geoNetworkingPort.receive (mw_geoNwInd(mw_geoNwPdu(?))){ tc_noac.stop; log("*** " & testcasename() & ": Message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_05 /** * @desc Test of LS Request retransmission if no answer is received *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating value LT1 higher than itsGnLocationServiceTimer and
             *      the IUT having sent a LS_REQUEST packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT does not receive LS_REPLY packet from ItsNodeA and
             *          before expiration of LT1
             *      }
             *      then {
             *          the IUT retransmits the LS_REQUEST packet
             *              after expiry of itsGnLocationServiceTimer
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.3, 9.3.7.1.2 and 9.3.8.2 */ testcase TC_GEONW_PON_LOS_BV_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_maxNbrRetrans := f_getLsMaxRetrans(); var integer v_rtc := 0; var boolean v_retransmitOk := false; timer t_minRetrans := f_getLsRetransmitTimer() - f_getDeltaTimer(); // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetime(v_longPosVectorNodeA.gnAddr, float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); //start retransmission timer t_minRetrans.start; } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body tc_ac.start; alt { [] t_minRetrans.timeout { log("*** " & testcasename() & ": Ready for retransmission ***"); v_retransmitOk := true; repeat; } [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; if(v_retransmitOk == true) { log("*** " & testcasename() & ": LS_REQUEST correctly retransmitted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": LS_REQUEST retransmitted too early ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": No LS_REQUEST retransmitted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_06 /** * @desc Test of LS Request retransmission if no answer is received *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
             *      the IUT having sent a LS_REQUEST packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT does not receive LS_REPLY packet from ItsNodeA and
             *          before expiration of LT1
             *      }
             *      then {
             *          the IUT retransmits the LS_REQUEST packet itsGnLocationServiceMaxRetrans times
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/07 * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.2, 9.3.7.1.3 and 9.3.8.2 */ testcase TC_GEONW_PON_LOS_BV_07() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_maxNbrRetrans := f_getLsMaxRetrans(); var integer v_nbLsReceived := 0; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetime( v_longPosVectorNodeA.gnAddr, float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; v_nbLsReceived := v_nbLsReceived + 1; if(v_nbLsReceived > v_maxNbrRetrans) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { if(v_nbLsReceived == (v_maxNbrRetrans)) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_07 /** * @desc Test of LS Reply generation by destination node *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a LS_REQUEST packet
             *          containing Request field
             *              indicating the IUT's GN_ADDR
             *      }
             *      then {
             *          the IUT replies with a LS_REPLY packet
             *              containing Common Header
             *                  containing NH field
             *                      set to '0' (UNSPECIFIED)
             *                  containing LS_REPLY Extended Header
             *                      containing DEPV field
             *                          indicating same position as the SOPV value of the received LS_REQUEST
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/08 * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.4 and 9.3.5 */ testcase TC_GEONW_PON_LOS_BV_08() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var GN_Address v_iutGnAddress; var UInt16 v_seqNbr := vc_localSeqNumber; var FncRetCode v_ret := e_error; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); v_iutGnAddress := f_getPosition(c_compIut).gnAddr; // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_ret := f_processLocationService(v_longPosVectorNodeA, v_seqNbr, v_iutGnAddress, v_longPosVectorIut); if (v_ret == e_success) { log("*** " & testcasename() & ": LS_REPLY packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": LS_REPLY packet not received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_08 group GEONW_PON_LOS_BV_09 { /** * @desc Test of no LS Reply generation for already answered LS Request packets *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a LS_REQUEST packet generated by ItsNodeB from ItsNodeB
                 *      the IUT having sent a LS_REPLY packet to ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same LS_REQUEST packet from ItsNodeD
                 *      }
                 *      then {
                 *          the IUT does not reply with a LS_REPLY packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/09 * @reference EN 302 636-4-1 [1], clauses 9.3.7.1.4 and 9.3.5 */ testcase TC_GEONW_PON_LOS_BV_09() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_LOS_BV_09_nodeB()); v_nodeD.start(f_GEONW_PON_LOS_BV_09_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_LOS_BV_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BV_09) */ function f_GEONW_PON_LOS_BV_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var FncRetCode v_ret := e_error; // Preamble f_prNeighbour(); v_ret := f_processLocationService( v_longPosVectorNodeB, vc_localSeqNumber, v_longPosVectorIut.gnAddr, v_longPosVectorIut); if (v_ret == e_error) { f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } else { f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsReplyPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: LS_REQUEST has not been discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: LS_REQUEST discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_09_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_LOS_BV_09) */ function f_GEONW_PON_LOS_BV_09_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GN_Address v_iutGnAddress := f_getPosition(c_compIut).gnAddr; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsRequestPacket( v_longPosVectorNodeB, vc_localSeqNumber, v_iutGnAddress ) ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsReplyPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: LS_REQUEST has not been discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: LS_REQUEST discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_09_nodeD } // end GEONW_PON_LOS_BV_09 group GEONW_PON_LOS_BV_10 { /** * @desc Test of LS Request forwarding *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a LS_REQUEST packet from ItsNodeC
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *              containing LS_REQUEST Extended Header
                 *                  containing Request field
                 *                      containing GN_ADDR
                 *                          containing M_ID
                 *                              indicating value differing from the M_ID part of the GN_ADDR of the IUT
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the received LS_REQUEST packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value decreased by 1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/10 * @reference EN 302 636-4-1 [1], clauses 9.3.7.2 */ testcase TC_GEONW_PON_LOS_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_LOS_BV_10_nodeB()); v_nodeC.start(f_GEONW_PON_LOS_BV_10_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_LOS_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BV_10) */ function f_GEONW_PON_LOS_BV_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsRequestPacket( ?, v_longPosVectorNodeB.gnAddr.mid ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted LS Request received with HL field decreased by 1 ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: LS Request was not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_10_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_LOS_BV_10) */ function f_GEONW_PON_LOS_BV_10_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsRequestPacket( f_getPosition(c_compNodeA), vc_localSeqNumber, f_getPosition(c_compNodeB).gnAddr ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_10_nodeC } // end GEONW_PON_LOS_BV_10 group GEONW_PON_LOS_BV_11 { /** * @desc Test of LS Reply forwarding *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a LS_REPLY packet from ItsNodeC addressed to ItsNodeB
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *      }
                 *      then {
                 *          the IUT forwards the received LS_REPLY packet to ItsNodeB
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value decreased by 1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/11 * @reference EN 302 636-4-1 [1], clauses 9.3.7.2 */ testcase TC_GEONW_PON_LOS_BV_11() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_LOS_BV_11_nodeB()); v_nodeC.start(f_GEONW_PON_LOS_BV_11_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_LOS_BV_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_LOS_BV_11) */ function f_GEONW_PON_LOS_BV_11_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwLsReplyPacket( mw_longPosVectorPosition(v_longPosVectorNodeA), mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)) ), -, c_defaultHopLimit - 1 ) ) ) { log("*** " & testcasename() & ": PASS: Forwarded LS Reply received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: LS Reply was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_11_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_LOS_BV_11) */ function f_GEONW_PON_LOS_BV_11_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( f_getPosition(c_compNodeA), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeB)), vc_localSeqNumber ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_LOS_BV_11_nodeC } // end GEONW_PON_LOS_BV_11 /** * @desc Test flushing of the LS buffer, initiated by the processing of a common header from the target destination *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet ItsNodeA
             *          containing LT field
             *              indicating LT1 and
             *      the IUT having sent a LS_REQUEST packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoUnicast packet from ItsNodeA before expiry of LT1
             *      }
             *      then {
             *          the IUT sends the waiting GeoUnicast packet to ItsNodeA
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/12 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4, 9.3.7.1.2 and 7.4.2 */ testcase TC_GEONW_PON_LOS_BV_12() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var UInt16 v_seqNbr := vc_localSeqNumber; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); tc_ac.start; alt { [] a_receiveGeoUnicastWithDestination(mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA))) { tc_ac.stop; log("*** " & testcasename() & ": GeoUnicast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_12 /** * @desc Test of LS buffer characteristics: FIFO type and Lifetime *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating value LT1
             *          containing payload field
             *              indicating value PL1 and
             *      the IUT having sent a LS_REQUEST packet and
             *      the IUT having been requested to send a second GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating LT2 lower than LT1
             *          containing payload field
             *              indicating value PL2
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives the LS_REPLY packet from ItsNodeA
             *              after expiry of LT2
             *              before expiry of LT1
             *      }
             *      then {
             *          the IUT sends GeoUnicast packet addressed to ItsNodeA
             *              containing payload field
             *                  indicating value PL1
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/13 * @reference EN 302 636-4-1 [1], clauses 7.4.2, 9.3.7.1.2 */ testcase TC_GEONW_PON_LOS_BV_13() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_lt1 := f_getLsMaxRetrans()*float2int(f_getLsRetransmitTimer()); var integer v_lt2 := float2int(int2float(v_lt1)/2.0); var octetstring v_payload1 := char2oct("PAYLOAD_1"); var octetstring v_payload2 := char2oct("PAYLOAD_2"); var boolean v_msg1Received := false; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt2*1000, v_payload2)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetimeWithPayload(v_longPosVectorNodeA.gnAddr, v_lt1*1000, v_payload1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: LS Request not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body //Send LS-REPLY after LT2 expiry f_sleepIgnoreDef(int2float(v_lt2)); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { log("*** " & testcasename() & ": INFO: LS Request retransmission ignored ***"); repeat; } [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), f_adaptPayload_mw(v_payload1) ) ) { v_msg1Received := true; repeat; } [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), f_adaptPayload_mw(v_payload2) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: message with elapsed lifetime received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { if(v_msg1Received == true) { log("*** " & testcasename() & ": PASS: message with running lifetime received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: message with running lifetime not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_13 /** * @desc Test that GeoNetworking packets in LS buffer are discarded when LS does not complete *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having been requested to send a GeoUnicast packet to ItsNodeA
             *          containing TrafficClass.SCF set to 1
             *          containing LT field
             *              indicating value LT1 higher than (itsGnLocationServiceTimer * itsGnLocationServiceMaxRetrans) and
             *      the IUT having sent a LS_REQUEST packet itsGnLocationServiceMaxRetrans times
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GUC packet from ItsNodeA
             *              before expiration of LT1
             *      }
             *      then {
             *          the IUT does not send any packet to ItsNodeA (see note)
             *      }
             *  }
             *  NOTE: Stored GeoUnicast packets have been discarded upon LS failure
             *  
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/LOS/BV/14 * @reference EN 302 636-4-1 [1], clauses 7.4.2 */ testcase TC_GEONW_PON_LOS_BV_14() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorIut; var integer v_maxNbrRetrans := f_getLsMaxRetrans(); var integer v_nbLsReceived := 0; var UInt16 v_LT1; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Test adapter configuration // Preamble f_prNeighbour(); v_LT1 := float2int(int2float(v_maxNbrRetrans + 2) * f_getLsRetransmitTimer() * 1000.0); if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithLifetime(v_longPosVectorNodeA.gnAddr,v_LT1)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_wait.start(int2float(v_LT1)); tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Pre-conditions: Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } tc_ac.start; alt { [] a_receiveLsRequest(?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut) { tc_ac.stop; v_nbLsReceived := v_nbLsReceived + 1; if(v_nbLsReceived > v_maxNbrRetrans) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted more than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { if(v_nbLsReceived == (v_maxNbrRetrans)) { //first LS request is not counted as a retransmission log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } else { log("*** " & testcasename() & ": Pre-conditions: LS_REQUEST retransmitted less than itsGnLocationServiceMaxRetrans times ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } } } // Test Body if (tc_wait.running) { f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); tc_wait.stop; tc_noac.start; alt { // no check for ItsNodeA address as no other trigger for messages exists [] geoNetworkingPort.receive { tc_noac.stop; log("*** " & testcasename() & ": Unexpected message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": No message was sent ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } } else { log("*** " & testcasename() & ": LT1 expired ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_LOS_BV_14 } // end geoLocationService // 6.2.2.5 group geoForwardingPacketBuffer { group GEONW_PON_FPB_BV_01 { /** * @desc Test of Source packet buffering into UC forwarding buffer for unreachable Unicast destinations * (absence of a suitable next hop candidate) *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note) and
                 *      the IUT having been requested to send a GeoUnicast packet addressed to ItsNodeA
                 *          containing TrafficClass.SCF set to 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from ItsNodeB
                 *      }
                 *      then {
                 *          the IUT selects the ItsNodeB as the next hop and
                 *          the IUT sends the buffered GeoUnicast packet
                 *      }
                 *  }
                 *  NOTE: Location Table Entry is created by sending any GeoNetworking packet, originated by ItsNodeA, from ItsNodeC to IUT
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/01 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.4.2 */ testcase TC_GEONW_PON_FPB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_01_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_01_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_01) */ function f_GEONW_PON_FPB_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleepIgnoreDef(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] a_receiveAnyLsRequest() { tc_ac.stop; log("*** " & testcasename() & ": INCONC: Received Location Service Request ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_01) */ function f_GEONW_PON_FPB_BV_01_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ))); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body // /!\ This pre-condition has impact on test body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast packet received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_01_nodeC } // end GEONW_PON_FPB_BV_01 group GEONW_PON_FPB_BV_02 { /** * @desc Test of Forwarder packet buffering into UC forwarding buffer for unreachable Unicast destinations * (absence of a suitable next hop candidate) *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having received GeoUnicast packets addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT1
                 *              containing RHL field
                 *                  indicating value greater than 1
                 *          containing GUC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from ItsNodeB
                 *      }
                 *      then {
                 *          the IUT selects the ItsNodeB as the next hop and
                 *          the IUT forwards the buffered GeoUnicast packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value decreased by 1
                 *              containing GUC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, 7.5.3, 9.3.6.3 */ testcase TC_GEONW_PON_FPB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; const UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_02_nodeB(c_sequenceNumberC)); v_nodeC.start(f_GEONW_PON_FPB_BV_02_nodeC(c_sequenceNumberC)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_02) */ function f_GEONW_PON_FPB_BV_02_nodeB(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prDefault(); // NodeB is not yet a neighbour vc_localSeqNumber := p_sequenceNumberC; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), vc_localSeqNumber ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_02) */ function f_GEONW_PON_FPB_BV_02_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_02_nodeC } // end GEONW_PON_FPB_BV_02 group GEONW_PON_FPB_BV_03 { /** * @desc Test of UC forwarding buffer characteristics: FIFO type *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having received a GeoUnicast (GEOUNI1) packet addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating value LT1 and
                 *              containing RHL field
                 *                  indicating value greater than 1
                 *          containing GUC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *      the IUT having received a second GeoUnicast (GEOUNI2) packet addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1 
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT2
                 *              containing RHL field
                 *                  indicating value greater than 1
                 *          containing GUC Extended Header
                 *              containing SN field
                 *                  indicating value SN2
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from ItsNodeB
                 *          before expiry of LT1 and LT2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop and
                 *          the IUT forwards the GEOUNI1 buffered packet
                 *              containing GUC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *          the IUT forwards the GEOUNI2 buffered packet
                 *              containing GUC Extended Header
                 *                  containing SN field
                 *                      indicating value SN2
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/03 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; const UInt16 c_sequenceNumberC := f_getInitialSequenceNumber(); const integer c_messageCount := 2; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_03_nodeB(c_sequenceNumberC, c_messageCount)); v_nodeC.start(f_GEONW_PON_FPB_BV_03_nodeC(c_sequenceNumberC, c_messageCount)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_03) */ function f_GEONW_PON_FPB_BV_03_nodeB(in UInt16 p_sequenceNumberC, in integer p_messageCount) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; var UInt16 v_expectedSequenceNumber := p_sequenceNumberC; var integer v_nbReceivedPackets := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour vc_multipleMessagesCount := p_messageCount; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] a_receiveGeoUnicast( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), v_expectedSequenceNumber) { tc_ac.stop; v_nbReceivedPackets := v_nbReceivedPackets + 1; if(v_nbReceivedPackets >= vc_multipleMessagesCount) { log("*** " & testcasename() & ": PASS: GeoUnicast packets received in correct order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { v_expectedSequenceNumber := v_expectedSequenceNumber + 1; tc_ac.start; repeat; } } [] a_receiveGeoUnicast( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast packet received in incorrect order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_03) */ function f_GEONW_PON_FPB_BV_03_nodeC(in UInt16 p_sequenceNumberC, in integer p_messageCount) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var integer i := 0; // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; vc_multipleMessagesCount := p_messageCount; for(i:=0; i < vc_multipleMessagesCount; i:=i+1) { f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ) ) ) ); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_03_nodeC } // end GEONW_PON_FPB_BV_03 group GEONW_PON_FPB_BV_04 { /** * @desc Test of UC forwarding buffer characteristics: discarding upon LT expiration *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having received a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT1
                 *              containing RHL field
                 *                  indicating value greater than 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from ItsNodeB
                 *          after expiry of LT1
                 *      }
                 *      then {
                 *          the IUT does not forward the buffered GeoUnicast packet addressed to ItsNodeA
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/03 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; const UInt6 c_packetLifetime := 10; // 10s // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_04_nodeB(c_packetLifetime)); v_nodeC.start(f_GEONW_PON_FPB_BV_04_nodeC(c_packetLifetime)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_04) */ function f_GEONW_PON_FPB_BV_04_nodeB(in UInt6 p_packetLifetime) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; var integer v_nbReceivedPackets := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(int2float(p_packetLifetime + 1)); f_startBeingNeighbour(); tc_noac.start; alt { [] a_receiveGeoUnicast( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoUnicast packet received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_04) */ function f_GEONW_PON_FPB_BV_04_nodeC(in UInt6 p_packetLifetime) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeC, f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), m_lifetimeBase1s(p_packetLifetime), c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_04_nodeC } // end GEONW_PON_FPB_BV_04 group GEONW_PON_FPB_BV_06 { /** * @desc Test of Source packet buffering into BC forwarding buffer for no GeoBroadcast recipients *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received Beacon information from ItsNodeD and
                 *      the IUT not having received Beacon information from ItsNodeB and
                 *      the IUT having been requested to send a GeoBroadcast packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
                 *      }
                 *      then {
                 *          the IUT broadcasts the buffered GeoBroadcast packet
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.5, 7.5.3, 9.3.6.3 and 9.3.11.2 */ testcase TC_GEONW_PON_FPB_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_FPB_BV_06_nodeB()); v_nodeD.start(f_GEONW_PON_FPB_BV_06_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_FPB_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_06) */ function f_GEONW_PON_FPB_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prDefault(); if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) -> value v_geoNetInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_06_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_06) */ function f_GEONW_PON_FPB_BV_06_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) -> value v_geoNetInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_06_nodeD } // end GEONW_PON_FPB_BV_06 group GEONW_PON_FPB_BV_07 { /** * @desc Test of BC forwarding buffer characteristics: FIFO type *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received Beacon information from ItsNodeD and
                 *      the IUT not having received Beacon information from ItsNodeB and
                 *      the IUT having been requested to send a GeoBroadcast (GEOBROAD1) packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT1
                 *          containing GBC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *      the IUT having been requested to send a GeoBroadcast (GEOBROAD2) packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT2
                 *          containing GBC Extended Header
                 *              containing SN field
                 *                  indicating value SN2
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from either ItsNodeD or ItsNodeB
                 *          before expiry of LT1 and LT2
                 *      }
                 *      then {
                 *          the IUT broadcasts GEOBROAD1 packet
                 *              containing GBC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *          the IUT broadcasts GEOBROAD2 packet
                 *              containing GBC Extended Header
                 *                  containing SN field
                 *                      indicating value SN2
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/07 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2 */ testcase TC_GEONW_PON_FPB_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; const integer v_messageCount := 2; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_FPB_BV_07_nodeB(v_messageCount)); v_nodeD.start(f_GEONW_PON_FPB_BV_07_nodeD(v_messageCount)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_FPB_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_07) */ function f_GEONW_PON_FPB_BV_07_nodeB(in integer p_messageCount) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; var template (present) UInt16 v_expectedSequenceNumber := ?; var integer v_nbReceivedPackets := 0; var integer i := 0; // Preamble f_prDefault(); vc_multipleMessagesCount := p_messageCount; for(i:=0; i < vc_multipleMessagesCount; i:=i+1) { if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } tc_ac.start(1.0); alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_ac.stop; log("*** " & testcasename() & ": INCONC: GeoBroadcast packet not buffered ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast packet buffered ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } } // Test Body f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), v_expectedSequenceNumber)))) -> value v_geoNetInd { tc_ac.stop; v_nbReceivedPackets := v_nbReceivedPackets + 1; if(v_nbReceivedPackets >= vc_multipleMessagesCount) { log("*** " & testcasename() & ": PASS: GeoBroadcast packets received in correct order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { v_expectedSequenceNumber := v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber + 1; tc_ac.start; repeat; } } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast packet received in incorrect order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_07_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_07) */ function f_GEONW_PON_FPB_BV_07_nodeD(in integer p_messageCount) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; var template (present) UInt16 v_expectedSequenceNumber := ?; var integer v_nbReceivedPackets := 0; var integer i := 0; // Preamble f_prDefault(); vc_multipleMessagesCount := p_messageCount; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), v_expectedSequenceNumber)))) -> value v_geoNetInd { tc_ac.stop; v_nbReceivedPackets := v_nbReceivedPackets + 1; if(v_nbReceivedPackets >= vc_multipleMessagesCount) { log("*** " & testcasename() & ": PASS: GeoBroadcast packets received in correct order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { v_expectedSequenceNumber := v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber + 1; tc_ac.start; repeat; } } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast packet received in incorrect order ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_07_nodeD } // end GEONW_PON_FPB_BV_07 group GEONW_PON_FPB_BV_08 { /** * @desc Test of BC forwarding buffer characteristics: discarding upon LT expiration *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received Beacon information from ItsNodeD and
                 *      the IUT not having received Beacon information from ItsNodeB and
                 *      the IUT having been requested to send a GeoBroadcast (GEOBROAD1) packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT1
                 *      the IUT having been requested to send a GeoBroadcast (GEOBROAD2) packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing LT field
                 *                  indicating LT2
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
                 *          after expiry of LT1 and LT2
                 *      }
                 *      then {
                 *          the IUT does not broadcast any of the buffered GEOBROAD1 and GEOBROAD2
                 *      }
                 *   }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/08 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2 */ testcase TC_GEONW_PON_FPB_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_FPB_BV_08_nodeB()); v_nodeD.start(f_GEONW_PON_FPB_BV_08_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_FPB_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_08) */ function f_GEONW_PON_FPB_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prDefault(); if ( not f_utTriggerEvent(m_generateGeoBroadcastMessageWithLifetime(f_getArea(c_area1), c_lifetime )) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } if ( not f_utTriggerEvent(m_generateGeoBroadcastMessageWithLifetime(f_getArea(c_area1), c_lifetime)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(int2float(c_defaultLifetime + 1)); f_startBeingNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast packet received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_08_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_08) */ function f_GEONW_PON_FPB_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(int2float(c_defaultLifetime + 1)); f_startBeingNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast packet received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_08_nodeD } // end GEONW_PON_FPB_BV_08 group GEONW_PON_FPB_BV_09 { /** * @desc Test of Source packet buffering into UC forwarding buffer for handling of LT fields in absence of * a suitable next hop candidate *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA and
                 *      the IUT having been requested to send a GeoUnicast packet addressed to ItsNodeA
                 *          containing TrafficClass.SCF set to 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from ItsNodeB
                 *      }
                 *      then {
                 *          the IUT selects the ItsNodeB as the next hop and
                 *          the IUT sends the buffered GeoUnicast packet
                 *              containing GUC Extended Header
                 *                  containing LT field
                 *                      indicating (default LT value – WaitingTime(see note))
                 *      }
                 *  }
                 *  NOTE: WaitingTime == time difference between Upper layer packet generation and the neighbour Beacon reception
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/09 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_09() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_09_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_09_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_09) */ function f_GEONW_PON_FPB_BV_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var GeoNetworkingInd v_geoNetInd; // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?)))) -> value v_geoNetInd { tc_ac.stop; //we only check that the lifetime is less than the default lifetime due to //we do not know exactly the time passed at IUT if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) < f_getMaxPacketLifeTime()) { log("*** " & testcasename() & ": PASS: Lifetime was handled properly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Lifetime was not handled properly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_09_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_09) */ function f_GEONW_PON_FPB_BV_09_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prNeighbour(); // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ))); if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_09_nodeC } // end GEONW_PON_FPB_BV_09 group GEONW_PON_FPB_BV_10 { /** * @desc Test of Source packet buffering into BC forwarding buffer for handling of LT fields for no * GeoBroadcast recipients *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received Beacon information from ItsNodeD and
                 *      the IUT not having received Beacon information from ItsNodeB and
                 *      the IUT having been requested to send a GeoBroadcast packet to AREA1
                 *          containing TrafficClass.SCF set to 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a Beacon packet from either ItsNodeB or ItsNodeD
                 *      }
                 *      then {
                 *          the IUT broadcasts the buffered GeoBroadcast packet
                 *              containing GBC Extended Header
                 *                  containing LT field
                 *                      indicating (default LT value - WaitingTime (see note))
                 *      }
                 *  }
                 *  NOTE: WaitingTime == time difference between Upper layer packet generation and the neighbour Beacon reception
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/10 * @reference EN 302 636-4-1 [1], clauses 7.5.3, 9.3.6.3 and 9.3.11.2 */ testcase TC_GEONW_PON_FPB_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_FPB_BV_10_nodeB()); v_nodeD.start(f_GEONW_PON_FPB_BV_10_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_FPB_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_10) */ function f_GEONW_PON_FPB_BV_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var GeoNetworkingInd v_geoNetInd; // Preamble f_prDefault(); if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleep(1.0); f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) -> value v_geoNetInd { tc_ac.stop; //we only check that the lifetime is less than the default lifetime due to //we do not know exactly the time passed at IUT if (f_getLifetimeValue(v_geoNetInd.msgIn.basicHeader.lifeTime) < f_getMaxPacketLifeTime()) { log("*** " & testcasename() & ": PASS: Lifetime was handled properly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Lifetime was not handled properly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_FPB_BV_10_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_FPB_BV_10) */ function f_GEONW_PON_FPB_BV_10_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?)))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_10_nodeD } // end GEONW_PON_FPB_BV_10 group GEONW_PON_FPB_BV_11 { /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note)
                 *  }
                 *  
                 *  MESSAGE : GUC packet addressed to ItsNodeA
                 *  
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/11-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_11_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_01_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_01_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_01) */ function f_GEONW_PON_FPB_BV_11_01_nodeB() runs on ItsGeoNetworking { // Local variablesa var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_01) */ function f_GEONW_PON_FPB_BV_11_01_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); // Make sure IUT has LocE for NodeA by sending unsolicited LS_REPLY f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ))); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoUnicastMessageWithTrafficClass( v_longPosVectorNodeA.gnAddr, valueof(m_trafficClass(e_scfDisabled))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_01_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note)
                 *  }
                 *  
                 *  MESSAGE : GAC packet
                 *                containing GeoBroadcast DestinationArea
                 *                    indicating AREA2
                 *                    
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/11-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_11_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_02_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_02_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_02) */ function f_GEONW_PON_FPB_BV_11_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_02) */ function f_GEONW_PON_FPB_BV_11_02_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoAnycastMessageWithTrafficClass( f_getArea(c_area2), valueof(m_trafficClass(e_scfDisabled))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_02_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note)
                 *  }
                 *  
                 *  MESSAGE : GBC packet
                 *                containing GeoBroadcast DestinationArea
                 *                    indicating AREA2
                 *                    
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/11-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_11_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_03_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_03_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_03) */ function f_GEONW_PON_FPB_BV_11_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_03) */ function f_GEONW_PON_FPB_BV_11_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(m_generateGeoBroadcastMessageWithTrafficClass( f_getArea(c_area2), valueof(m_trafficClass(e_scfDisabled))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note)
                 *  }
                 *  
                 *  MESSAGE : TSB packet
                 *  
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/11-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_11_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_04_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_04) */ function f_GEONW_PON_FPB_BV_11_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition_withDelta(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_04) */ function f_GEONW_PON_FPB_BV_11_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(valueof(m_generateTsbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition_withDelta(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_04_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB and
                 *      the IUT having a Location Table Entry for ItsNodeA (see note)
                 *  }
                 *  
                 *  MESSAGE : SHB packet
                 *  
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/11-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.2 */ testcase TC_GEONW_PON_FPB_BV_11_05() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_11_05_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_11_05_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_11_05) */ function f_GEONW_PON_FPB_BV_11_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_11_05) */ function f_GEONW_PON_FPB_BV_11_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if(not f_utTriggerEvent(valueof(m_generateShbMessageWithTrafficClass(valueof(m_trafficClass(e_scfDisabled)))))) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket( mw_longPosVectorPosition_withDelta(v_longPosVectorIut) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_05_nodeC } // end GEONW_PON_FPB_BV_11 group GEONW_PON_FPB_BV_12 { /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB
                 *  }
                 *    
                 *  MESSAGE : GUC packet addressed to ItsNodeA
                 *  
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *    
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/12-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_12_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_01_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_01_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_12_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_01) */ function f_GEONW_PON_FPB_BV_12_01_nodeB() runs on ItsGeoNetworking { // Local variablesa var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_01) */ function f_GEONW_PON_FPB_BV_12_01_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)), vc_localSeqNumber, -, m_trafficClass(e_scfDisabled) ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( f_longPosVector2ShortPosVector(v_longPosVectorNodeA), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_01_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB
                 *  }
                 *    
                 *  MESSAGE : GAC packet
                 *                containing GeoBroadcast DestinationArea
                 *                    indicating AREA2
                 *  
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/12-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_12_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_02_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_02_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_12_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_02) */ function f_GEONW_PON_FPB_BV_12_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_02) */ function f_GEONW_PON_FPB_BV_12_02_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2), -, m_trafficClass(e_scfDisabled) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_02_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB
                 *  }
                 *    
                 *  MESSAGE : GBC packet
                 *                containing GeoBroadcast DestinationArea
                 *                    indicating AREA2
                 * 
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *   
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/12-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_12_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_03_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_03_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_12_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_03) */ function f_GEONW_PON_FPB_BV_12_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_03) */ function f_GEONW_PON_FPB_BV_12_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2), -, m_trafficClass(e_scfDisabled) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwBroadcastPacket( mw_longPosVectorPosition(v_longPosVectorNodeC), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_11_03_nodeC /** * @desc Test of immediate broadcasting in absence of a suitable next hop candidate when SCF is disabled *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT not having received any Beacon information from ItsNodeB
                 *  }
                 *    
                 *  MESSAGE : TSB packet
                 *    
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a MESSAGE
                 *          containing TrafficClass.SCF set to 0
                 *      }
                 *      then {
                 *          the IUT broadcast the MESSAGE immediately
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/FPB/BV/12-X * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_FPB_BV_12_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(c_compNodeC); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_FPB_BV_12_04_nodeB()); v_nodeC.start(f_GEONW_PON_FPB_BV_12_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_FPB_BV_11_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_FPB_BV_12_04) */ function f_GEONW_PON_FPB_BV_12_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeC) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_FPB_BV_12_04) */ function f_GEONW_PON_FPB_BV_12_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeC, c_defaultHopLimit, m_trafficClass(e_scfDisabled) ), -, c_defaultHopLimit ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeC) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: TSB not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_FPB_BV_12_04_nodeC } // end GEONW_PON_FPB_BV_12 } // end geoForwardingPacketBuffer // 6.2.2.6 group geoGeoNetworkingAddress { /** * @desc Test the initial GeoNetworking address assignment by IUT with auto-address configuration *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT's itsGnLocalAddrConfMethod MIB parameter is set to AUTO (0)
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates a Beacon packet
             *      }
             *      then {
             *          the IUT sends a GeoNetworking message
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '1' (BEACON)
             *                  containing HST field
             *                      set to '0' (UNSPECIFIED)
             *              containing a Beacon Extender Header
             *                  containing SOPV field
             *                      containing GN_ADDR field
             *                          indicating itsGnLocalGnAddr MIB parameter
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GNA/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.2.1.2 and 9.3.6.2 */ testcase TC_GEONW_PON_GNA_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; // Test control if(f_getIutGnLocalAddressConfigurationMethod() != e_initial) { log("*** " & testcasename() & ": PICS_GN_LOCAL_ADDR_CONF_METHOD == e_initial required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prDefault(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( mw_longPosVectorAny(f_getIutGnLocalAddress()) // IUT's SOPV )))) { tc_ac.stop; log("*** " & testcasename() & ": GN address is correct ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( ? // any SOPV )))) { tc_ac.stop; log("*** " & testcasename() & ": GN address is not correct ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_GNA_BV_01 /** * @desc Test the proper functioning of duplicate address detection mechanism *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having sent some Beacon messages
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a Beacon message
             *              containing Beacon Extended Header
             *                  containing SOPV field
             *                      containing GN_ADDR field
             *                          indicating same GN_ADDR as the GN_ADDR field in the last Beacon originated by the IUT
             *      }
             *      then {
             *          the IUT sends subsequent Beacon messages
             *              containing Beacon Extended Header
             *                  containing SOPV field
             *                      containing GN_ADDR field
             *                          indicating different GN_ADDR as the previous used GN_ADDR
             *      }
             *   }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GNA/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.2.1.4 */ testcase TC_GEONW_PON_GNA_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var LongPosVector v_longPosVectorNodeB; var GeoNetworkingInd v_geoNetInd; var GN_Address v_iutGnAddress := valueof(m_dummyGnAddr); // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prDefault(); f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( ? // SO PV )))) -> value v_geoNetInd { v_iutGnAddress := valueof(v_geoNetInd.msgIn.gnPacket.packet.extendedHeader.beaconHeader.srcPosVector.gnAddr); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_longPosVectorNodeB.gnAddr := v_iutGnAddress; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(m_geoNwPdu(m_geoNwBeaconPacket(v_longPosVectorNodeB), -, c_hopLimit1))); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( mw_longPosVectorAny(v_iutGnAddress) // SO PV )))) { log("*** " & testcasename() & ": IUT is still using old GN address. Waiting... ***"); repeat; } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu( mw_geoNwBeaconPacket( ? // SO PV )))) { tc_ac.stop; log("*** " & testcasename() & ": IUT used new GN address ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_GNA_BV_02 } // end geoGeoNetworkingAddress // 6.2.2.7 group geoBeaconing { /** * @desc Test that the IUT transmits Beacons at prescribed periodicity in the absence of other originated * packets *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT generates Beacon packets
             *      }
             *      then {
             *          the IUT sends each Beacon packet
             *              after expiry of itsGnBeaconServiceRetransmitTimer
             *              and before expiry of itsGnBeaconServiceRetransmitTimer + itsGnBeaconServiceMaxJitter
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BEA/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.6.2 */ testcase TC_GEONW_PON_BEA_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorIut; var boolean v_beaconReceived := false; timer t_minRetransTimer := f_getBsRetransmitTimer(); timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter(); // Test control // Test component configuration f_cf01Up(); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); t_maxRetransTimer.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket(?)))) { if (v_beaconReceived == false) { v_beaconReceived := true; t_minRetransTimer.start; t_maxRetransTimer.start; //after the first beacon received, check the retransmission repeat; } if(t_minRetransTimer.running) { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_minRetransTimer.timeout { log("*** " & testcasename() & ": Ready for retransmission ***"); repeat; } [] t_maxRetransTimer.timeout { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_BEA_BV_01 /** * @desc Test that the IUT resets its timer for next Beacon transmission when originating other packets *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a SHB packet
             *      }
             *      then {
             *          the IUT broadcasts a SHB packet and
             *          the IUT sends the next Beacon packet
             *              after expiry of itsGnBeaconServiceRetransmitTimer
             *              and before expiry of itsGnBeaconServiceRetransmitTimer + itsGnBeaconServiceMaxJitter
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BEA/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.2.3 and 9.3.10.2 */ testcase TC_GEONW_PON_BEA_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var boolean v_geoUnicastReceived := false; var boolean v_readyForRetransmission := false; timer t_minRetransTimer := f_getBsRetransmitTimer() - f_getDeltaTimer(); timer t_maxRetransTimer := f_getBsRetransmitTimer() + f_getBsMaxJitter() + f_getDeltaTimer(); // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); // Test adapter configuration f_acTriggerEvent(m_startPassBeaconing(m_beaconHeader(v_longPosVectorIut).beaconHeader)); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwShbPacket))) { tc_ac.stop; t_minRetransTimer.start; t_maxRetransTimer.start; v_geoUnicastReceived := true; repeat; } [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBeaconPacket))) { if(not(v_geoUnicastReceived)) { repeat; } if(not(v_readyForRetransmission)) { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too early) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": Beacon transmitted at prescribed periodicity ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_minRetransTimer.timeout { log("*** " & testcasename() & ": Ready for retransmission ***"); v_readyForRetransmission := true; repeat; } [] t_maxRetransTimer.timeout { log("*** " & testcasename() & ": Beacon not transmitted at prescribed periodicity (too late) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": GeoUnicast not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } f_acTriggerEvent(m_stopPassBeaconing); // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_BEA_BV_02 } // end geoBeaconing // 6.2.2.8 group geoGeoUnicast { /** * @desc Test that the reception of a unicast packet over upper Gn SAP triggers the origination of a * GeoUnicast packet *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeB
             *      }
             *      then {
             *          the IUT sends a GeoNetworking packet
             *              containing a correctly formatted Common Header
             *                  containing HT field
             *                      set to '2' (GEOUNICAST)
             *              containing GeoUnicast Extended Header
             *                  containing DEPV field
             *                      indicating same position as the SOPV value of the Beacon information received
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.8.2, 9.3.6.3 */ testcase TC_GEONW_PON_GUC_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeB.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": DEPV of the received GeoUnicast message correctly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( ?, ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": DEPV of the received GeoUnicast message incorrectly set ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_GUC_BV_01 group GEONW_PON_GUC_BV_02 { /** * @desc Test that a received GeoUnicast packet is routed to the correct next hop neighbour according * to the greedy forwarding rules *
                 * Pics Selection:  PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'GREEDY' 
                 *                  OR PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'UNSPECIFIED'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeC
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *       }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT forwards the GeoUnicast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, Annex D.2 */ testcase TC_GEONW_PON_GUC_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoUnicastForwardingAlgorithm() != e_greedy) and (f_getGeoUnicastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == (e_greedy or e_unspecified) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GUC_BV_02_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_02_nodeC()); v_nodeD.start(f_GEONW_PON_GUC_BV_02_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GUC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(f_getPosition(c_compNodeA)), vc_localSeqNumber ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GUC_BV_02) */ function f_GEONW_PON_GUC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_02_nodeD } // end GEONW_PON_GUC_BV_02 group GEONW_PON_GUC_BV_03 { /** * @desc Test that the protocol header fields (RHL, PV) are correctly updated at each forwarding step *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the IUT having received a GeoUnicast packet (GEOUNI1) originated by ItsNodeA
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet (GEOUNI2) addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *              containing GeoUnicast Extended Header
                 *                  containing DEPV field
                 *                      indicating position different from the SOPV value of GEOUNI1
                 *                  containing TST field
                 *                      indicating older value than the TimeStamp value of GEOUNI1
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT forwards GEOUNI2
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value decreased by 1 from the incoming value
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *              containing GeoUnicast Extended Header
                 *                  containing DEPV field
                 *                      indicating same position as the SOPV value of GEOUNI1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_GUC_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_03_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_03_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_03) */ function f_GEONW_PON_GUC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( v_longPosVectorNodeA, f_longPosVector2ShortPosVector(f_getPosition(c_compIut)), vc_localSeqNumber ) ), f_getIutMacAddress() ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacketWithHl( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ?, c_defaultHopLimit ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( ?, ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Fields not correctly updated ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_03) */ function f_GEONW_PON_GUC_BV_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_obsoleteLongPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); v_obsoleteLongPosVectorNodeA.timestamp := v_obsoleteLongPosVectorNodeA.timestamp - 1000; v_obsoleteLongPosVectorNodeA.latitude := v_obsoleteLongPosVectorNodeA.latitude - 1; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_obsoleteLongPosVectorNodeA), vc_localSeqNumber, c_defaultHopLimit ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_03_nodeC } // end GEONW_PON_GUC_BV_03 group GEONW_PON_GUC_BV_04 { /** * @desc Test that the RHL restriction is correctly handled at the forwarding step *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating 1
                 *      }
                 *      then {
                 *          the IUT does not forward the GeoUnicast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/04 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3 */ testcase TC_GEONW_PON_GUC_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_04_nodeB()); v_nodeC.start(f_GEONW_PON_GUC_BV_04_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_04) */ function f_GEONW_PON_GUC_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ), -, ? ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_04) */ function f_GEONW_PON_GUC_BV_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(v_longPosVectorNodeA), vc_localSeqNumber ), -, 1 ), f_getIutMacAddress() ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_04_nodeC } // end GEONW_PON_GUC_BV_04 /** * @desc Test that a received GeoUnicast packet is passed over the Gn SAP to the correct upper * protocol if the Destination address matches the IUT address *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *    the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoUnicast packet addressed to it
             *      }
             *      then {
             *          the IUT passes the received GeoUnicast packet to the correct Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.8.4 */ testcase TC_GEONW_PON_GUC_BV_05() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeB), f_getIutShortPosVector(), vc_localSeqNumber ) ); f_sendGeoNetMessage(m_geoNwReq_withLinkLayerDestination(v_gnPacket, f_getIutMacAddress())); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_GUC_BV_05 group GEONW_PON_GUC_BV_06 { /** * @desc Test that a received GeoUnicast packet is forwarded at the correct time according to the * contention based forwarding rules *
                 * Pics Selection: PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the distance between IUT and ItsNodeA being
                 *          less than itsGnDefaultMaxCommunicationRange MIB attribute
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the received GeoUnicast packet
                 *              after expiry of calculated CBF delay (see note)
                 *      }
                 *  }
                 *  NOTE: The CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
                 *        itsGnGeoUnicastCbfMinTime, and itsGnGeoUnicastCbfMaxTime MIB attributes, and the distance value
                 *        between IUT and ItsNodeC
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, Annex D.3 */ testcase TC_GEONW_PON_GUC_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var integer v_distance := f_getCbfMaxCommunicationRange() - 10; var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_06_nodeB(v_distance, v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_06_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_06) * @param p_distanceToNodeA Distance between IUT and NodeA * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_06_nodeB(in integer p_distanceToNodeA, in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables timer t_toCbf := (int2float(f_getGeoUnicastCbfMaxTime()) + ( int2float(f_getGeoUnicastCbfMinTime() - f_getGeoUnicastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * int2float(p_distanceToNodeA)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; t_toCbf.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_06) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_06_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_06_nodeC } // end GEONW_PON_GUC_BV_06 group GEONW_PON_GUC_BV_07 { /** * @desc Test that a received GeoUnicast packet forwarding is correctly handling the minimum delay * value according to the contention based forwarding rules *
                 * Pics Selection: PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the distance between IUT and ItsNodeA being
                 *          larger than the itsGnDefaultMaxCommunicationRange MIB attribute
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the received GeoUnicast packet
                 *              after expiry of itsGnGeoUnicastCbfMinTime delay
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/07 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, Annex D.3 */ testcase TC_GEONW_PON_GUC_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var integer v_distance := f_getCbfMaxCommunicationRange() * 2; var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_07_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_07_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_msgSent, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_07) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_07_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables timer t_toCbf := int2float(f_getGeoUnicastCbfMinTime()) / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; t_toCbf.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: IUT re-broadcasted the packet too early ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: Ready for receiving re-broadcasting ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_07) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_07_nodeC(LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); log("*** " & testcasename() & ": INFO: Message sent ***"); f_selfOrClientSyncAndVerdict(c_msgSent, e_success); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_07_nodeC } // end GEONW_PON_GUC_BV_07 group GEONW_PON_GUC_BV_08 { /** * @desc Test that GeoUnicast packet forwarding correctly avoids packet duplication according to the * contention based forwarding rules *
                 * Pics Selection: PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the distance between IUT and ItsNodeA being
                 *          less than the itsGnDefaultMaxCommunicationRange MIB attribute and
                 *      the IUT having received a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating value greater than 1 and
                 *      the IUT having started a CBF timer for this packet (see note)
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet from ItsNodeD
                 *              before expiration of the CBF timer
                 *      }
                 *      then {
                 *          the IUT does not re-broadcast the received GeoUnicast packet
                 *      }
                 *  }
                 *  NOTE:    the CBF delay timer value is calculated from the itsGnDefaultMaxCommunicationRange,
                 *           itsGnGeoUnicastCbfMinTime, and itsGnGeoUnicastCbfMaxTime MIB attributes, and the
                 *           distance value between IUT and ItsNodeC
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/08 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, Annex D.3 */ testcase TC_GEONW_PON_GUC_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var integer v_distance := f_getCbfMaxCommunicationRange() - 10; var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_08_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_08_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_08) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_08_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit - 1 ), f_getIutMacAddress() ) ); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_08) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_08_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body //Note: Sending of the GeoUnicast packet move to test body in contrast to the test purpose due to time critical behaviour f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Forwarded GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_08_nodeC } // end GEONW_PON_GUC_BV_08 group GEONW_PON_GUC_BV_10 { /** * @desc Test that a received GeoUnicast packet is forwarded at the correct time according to the * contention based forwarding rules when the sender is unknown *
                 * Pics Selection: PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeC and
                 *      the distance between IUT and ItsNodeA being
                 *          less than the itsGnDefaultMaxCommunicationRange MIB attribute and
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value greater than 1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the received GeoUnicast packet
                 *              after expiry of CBF_MAX
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GUC/BV/10 * @reference EN 302 636-4-1 [1], clauses 9.3.8.3, Annex D.3 */ testcase TC_GEONW_PON_GUC_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var integer v_distance := f_getCbfMaxCommunicationRange() - 10; var LongPosVector v_longPosVectorIut, v_longPosVectorNodeA; // Test control if (f_getGeoUnicastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOUNICAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf03Up(); // re-compute NodeA's position. v_longPosVectorIut := f_getIutLongPosVector(); v_longPosVectorNodeA := f_computePositionUsingDistance(v_longPosVectorIut, v_distance, 0); v_longPosVectorNodeA.gnAddr := f_getTsGnLocalAddress(c_compNodeA); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GUC_BV_10_nodeB(v_longPosVectorNodeA)); v_nodeC.start(f_GEONW_PON_GUC_BV_10_nodeC(v_longPosVectorNodeA)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GUC_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GUC_BV_10) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_10_nodeB(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_10_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GUC_BV_10) * @param p_longPosVectorNodeA Position vector of NodeA */ function f_GEONW_PON_GUC_BV_10_nodeC(in LongPosVector p_longPosVectorNodeA) runs on ItsGeoNetworking { // Local variables // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu( m_geoNwUnicastPacket( f_getPosition(c_compNodeC), f_longPosVector2ShortPosVector(p_longPosVectorNodeA), vc_localSeqNumber ), -, c_defaultHopLimit ), f_getIutMacAddress() ) ); f_sleepIgnoreDef(int2float(f_getGeoUnicastCbfMaxTime())/2000.0); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(p_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Re-broadcasted GeoUnicast received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoUnicast was not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GUC_BV_10_nodeC } // end GEONW_PON_GUC_BV_10 } // end geoGeoUnicast // 6.2.2.9 group geoGeoBroadcast { group GEONW_PON_GBC_BV_01 { /** * @desc Test that the reception of a broadcast indication over upper Gn SAP triggers the origination of a * GeoBroadcast packet's broadcasting if the IUT is within the Destination Area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *      then {
                 *          the IUT broadcasts immediately the GeoBroadcast packet
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.11.2 */ testcase TC_GEONW_PON_GBC_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_01) */ function f_GEONW_PON_GBC_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_01) */ function f_GEONW_PON_GBC_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_01_nodeD } // end GEONW_PON_GBC_BV_01 group GEONW_PON_GBC_BV_02 { /** * @desc Test that the reception of a broadcast indication over upper Gn SAP triggers the origination of a * GeoBroadcast packet's line forwarding if the IUT is outside the Destination Area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT sends the GeoBroadcast packet (see note)
                 *      }
                 *  }
                 *  NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.11.2, Annex E.2 */ testcase TC_GEONW_PON_GBC_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_02) */ function f_GEONW_PON_GBC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area2))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_02) */ function f_GEONW_PON_GBC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: received GeoBroadcast message ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_02_nodeD } // end GEONW_PON_GBC_BV_02 group GEONW_PON_GBC_BV_03 { /** * @desc Test that a received GeoBroadcast packet is triggering re-broadcasting if received for the first * time within its destination area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts immediately the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex E.2 */ testcase TC_GEONW_PON_GBC_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_03_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_03) */ function f_GEONW_PON_GBC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) ); tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_03) */ function f_GEONW_PON_GBC_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_03_nodeD } // end GEONW_PON_GBC_BV_03 group GEONW_PON_GBC_BV_04 { /** * @desc Test that a received GeoBroadcast packet is not triggering re-broadcasting if received for * the second or more time (duplicate packet detection) *
                 * Pics Selection:  PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'SIMPLE' 
                 *                  OR PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'UNSPECIFIED'
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a GeoBroadcast packet from ItsNodeB
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating value HL1 higher than 1
                 *          containing GBC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1 and
                 *      the IUT having re-broadcast the GeoBroadcast packet
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet from ItsNodeD
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value lower than HL1
                 *              containing GBC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not re-broadcast the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/04 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex A.2 */ testcase TC_GEONW_PON_GBC_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_04_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_04_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_04) */ function f_GEONW_PON_GBC_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket))); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcast( ?, ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_04_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_04) */ function f_GEONW_PON_GBC_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Pre-conditions: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } } // Test Body // send geoBroadcast for second time (same source + same seq Nr + lower RHL) v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_msgInd.msgIn))); v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] a_receiveGeoBroadcast( ?, ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_04_nodeD } // end GEONW_PON_GBC_BV_04 group GEONW_PON_GBC_BV_05 { /** * @desc Test that a received GeoBroadcast packet is triggering line forwarding if received out of its * destination area for the first time *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet generated by ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT forwards the GeoBroadcast packet (see note)
                 *      }
                 *  }
                 *  NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex E.2 */ testcase TC_GEONW_PON_GBC_BV_05() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_05_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_05_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_05_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GBC_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_05) */ function f_GEONW_PON_GBC_BV_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message not forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_05_nodeD } // end GEONW_PON_GBC_BV_05 group GEONW_PON_GBC_BV_06 { /** * @desc Test that a received GeoBroadcast packet is not triggering line forwarding if received out of its * destination area for the second or more time *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *      the IUT having received a GeoBroadcast packet from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating value HL1 higher than 1
                 *          containing GBC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      the IUT having forwarded the received GeoBroadcast packet
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet from ItsNodeD
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value lower than HL1
                 *              containing GBC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not forward the received GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3 */ testcase TC_GEONW_PON_GBC_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumber := f_getInitialSequenceNumber(); // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_06_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_06_nodeC(v_sequenceNumber)); v_nodeD.start(f_GEONW_PON_GBC_BV_06_nodeD(v_sequenceNumber)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GBC_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_06) */ function f_GEONW_PON_GBC_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var template (present) GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GeoBroadcast message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_06) */ function f_GEONW_PON_GBC_BV_06_nodeC(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoBroadcastArea(c_area2) ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_06_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_06) */ function f_GEONW_PON_GBC_BV_06_nodeD(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": INCONC: Pre-conditions: GeoBroadcast message not forwarded to area center ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Pre-conditions: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } } // Test Body // send geoBroadcast for second time (same source + same seq Nr + lower RHL) f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoBroadcastArea(c_area2) ), -, c_defaultHopLimit - 1 ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_06_nodeD } // end GEONW_PON_GBC_BV_06 group GEONW_PON_GBC_BV_07 { /** * @desc Test that the protocol header fields (RHL) are correctly updated during a GeoBroadcast re- * broadcasting step *
                 * Pics Selection:  PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'SIMPLE' 
                 *                  OR PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'UNSPECIFIED'
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value HL1 higher than 1
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *              containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the GeoBroadcast packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value (HL1 -1)
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/07 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3 */ testcase TC_GEONW_PON_GBC_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_07_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_07_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_07) */ function f_GEONW_PON_GBC_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit ), -, c_defaultHopLimit ) ) ); tc_ac.start; alt { [] a_receiveGeoBroadcastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message correctly re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_07_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_07) */ function f_GEONW_PON_GBC_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message correctly re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_07_nodeD } // end GEONW_PON_GBC_BV_07 group GEONW_PON_GBC_BV_08 { /** * @desc Test that the RHL restriction is correctly handled at a GeoBroadcast re-broadcasting step *
                 * Pics Selection:  PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'SIMPLE' 
                 *                  OR PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'UNSPECIFIED'
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT does not re-broadcast the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/08 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3 */ testcase TC_GEONW_PON_GBC_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_08_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_08_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_08) */ function f_GEONW_PON_GBC_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_hopLimit1 ) ) ); tc_noac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeB), ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_08_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_08) */ function f_GEONW_PON_GBC_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition(v_longPosVectorNodeB), ?) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_08_nodeD } // end GEONW_PON_GBC_BV_08 /** * @desc Test that a received GeoBroadcast packet is passed over the Gn SAP to the correct upper * protocol if it is received for the first time within the GeoBroadcast destination area *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoBroadcast packet
             *              containing TrafficClass.SCF set to 1
             *              containing GeoBroadcast DestinationArea
             *                  indicating AREA1
             *      }
             *      then {
             *          the IUT passes the received GeoBroadcast packet to the correct Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/09 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3 */ testcase TC_GEONW_PON_GBC_BV_09() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_GBC_BV_09 group GEONW_PON_GBC_BV_10 { /** * @desc Test that a received GeoBroadcast packet is not passed over the Gn SAP if it is received for the * second or more time *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a GeoBroadcast packet from ItsNodeB
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating HL1
                 *          containing GBC Extended Header
                 *              containing SN field
                 *                  indicating value SN1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1 and
                 *      the IUT having passed the received GeoBroadcast packet to the correct Upper Layer protocol
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet from ItsNodeD
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value lower than HL1
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not pass the received GeoBroadcast packet to any Upper Layer protocol
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/10 * @reference EN 302 636-4-1 [1], clauses 9.3.11.2 */ testcase TC_GEONW_PON_GBC_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_10_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_10_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_10) */ function f_GEONW_PON_GBC_BV_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; var integer i; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket))); // IUT should also rebroadcast the packet. Get ready tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": INFO: GeoBroadcast message rebroadcasted ***"); } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: GeoBroadcast message not rebroadcasted ***"); } } f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); //flush received upper indications vc_utInds := {}; f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } // Test Body v_gnPacket.basicHeader.routerHopLimit := valueof(v_gnPacket.basicHeader.routerHopLimit) / 2; f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_10_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_10) */ function f_GEONW_PON_GBC_BV_10_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (value) GeoNetworkingInd v_msgInd; var integer i; // Preamble f_prNeighbour(); // IUT should also rebroadcast the packet. Get ready tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": INFO: Pre-conditions: GeoBroadcast message rebroadcasted ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INFO: Pre-conditions: GeoBroadcast message not rebroadcasted ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) / 2; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn)); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_10_nodeD } // end GEONW_PON_GBC_BV_10 /** * @desc Test that a received GeoBroadcast packet is not passed over the Gn SAP if it is received for the * first time outside the GeoBroadcast destination area *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having received Beacon information from ItsNodeB
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoBroadcast packet
             *              containing TrafficClass.SCF set to 1
             *              containing GeoBroadcast DestinationArea
             *                  indicating AREA2
             *      }
             *      then {
             *          the IUT does not pass the received GeoBroadcast packet to any Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/11 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3 */ testcase TC_GEONW_PON_GBC_BV_11() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_GBC_BV_11 group GEONW_PON_GBC_BV_12 { /** * @desc Test that the reception of a broadcast indication over upper Gn SAP triggers the origination of a * Simple GeoBroadcast if this method is selected in the MIB *
                 * Pics Selection:  PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'SIMPLE' 
                 *                  OR PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'UNSPECIFIED'
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *      then {
                 *          the IUT broadcasts immediately the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/12 * @reference EN 302 636-4-1 [1], clauses 9.3.11.2, Annex D.2 */ testcase TC_GEONW_PON_GBC_BV_12() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if ((f_getGeoBroadcastForwardingAlgorithm() != e_simple) and (f_getGeoBroadcastForwardingAlgorithm() != e_unspecified)) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == ( e_simple or e_unspecified ) required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_12_nodeB()); v_nodeD.start(f_GEONW_PON_GBC_BV_12_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GBC_BV_12 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_12) */ function f_GEONW_PON_GBC_BV_12_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoBroadcastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_12_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_12) */ function f_GEONW_PON_GBC_BV_12_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoBroadcastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoBroadcastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_12_nodeD } // end GEONW_PON_GBC_BV_12 group GEONW_PON_GBC_BV_19 { /** * @desc Test that a received GeoBroadcast packet is discarded when indicating a too big GeoArea *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing DestinationArea
                 *                  indicating a geoArea bigger than itsGnMaxGeoAreaSize
                 *      }
                 *      then {
                 *          the IUT does not forward the received GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/19 * @reference EN 302 636-4-1 [1], Annex B.3 */ testcase TC_GEONW_PON_GBC_BV_19() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_distanceTooBig; // Test control // Test component configuration f_cf04Up(); v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm)); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_19_nodeB(v_distanceTooBig)); v_nodeC.start(f_GEONW_PON_GBC_BV_19_nodeC(v_distanceTooBig)); v_nodeD.start(f_GEONW_PON_GBC_BV_19_nodeD(v_distanceTooBig)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GBC_BV_19 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_19) */ function f_GEONW_PON_GBC_BV_19_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoBroadcastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_19_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_19) */ function f_GEONW_PON_GBC_BV_19_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_geoArea2GeoBroadcastArea(v_areaTooBig) ) ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_19_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_19) */ function f_GEONW_PON_GBC_BV_19_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_getPosition(c_compNodeB), p_distanceTooBig ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoBroadcastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_19_nodeD } // end GEONW_PON_GBC_BV_19 group GEONW_PON_GBC_BV_20 { /** * @desc Test that a received GeoBroadcast packet is triggering rebroadcast if received out of its * destination area for the first time from an unknown sender *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/20 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex E.2 */ testcase TC_GEONW_PON_GBC_BV_20() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_20_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_20_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_20_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GBC_BV_20 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_20_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_20_nodeD } // end GEONW_PON_GBC_BV_20 group GEONW_PON_GBC_BV_21 { /** * @desc Test that a received GeoBroadcast packet is triggering rebroadcast if received out of its * destination area for the first time from a known sender with PAI=0 *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *          containing SOPV.PAI indicating 0
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GBC/BV/21 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex E.2 */ testcase TC_GEONW_PON_GBC_BV_21() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GBC_BV_21_nodeB()); v_nodeC.start(f_GEONW_PON_GBC_BV_21_nodeC()); v_nodeD.start(f_GEONW_PON_GBC_BV_21_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GBC_BV_21 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GBC_BV_20) */ function f_GEONW_PON_GBC_BV_21_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GBC_BV_21) */ function f_GEONW_PON_GBC_BV_21_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GBC_BV_21) */ function f_GEONW_PON_GBC_BV_21_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble v_longPosVectorNodeD.pai := int2bit(0,1); f_changePositon(c_compNodeD, v_longPosVectorNodeD); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GBC_BV_21_nodeD } // end GEONW_PON_GBC_BV_21 } // end geoGeoBroadcast // 6.2.2.10 group geoTopologicallyScopedBroadcast { group GEONW_PON_TSB_BV_01 { /** * @desc Test that the reception of a TSB indication over upper Gn SAP triggers the origination of a TSB * packet *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a TSB packet
                 *      }
                 *      then {
                 *          the IUT broadcasts a TSB packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.9.2 */ testcase TC_GEONW_PON_TSB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_01) */ function f_GEONW_PON_TSB_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateTsbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_01) */ function f_GEONW_PON_TSB_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket(?, mw_longPosVectorPosition(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_01_nodeD } // end GEONW_PON_TSB_BV_01 group GEONW_PON_TSB_BV_02 { /** * @desc Test that a received TSB packet is triggering re-broadcasting if received for the first time *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a TSB packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1 higher than 1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the TSB packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_02) */ function f_GEONW_PON_TSB_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_02) */ function f_GEONW_PON_TSB_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_02_nodeD } // end GEONW_PON_TSB_BV_02 group GEONW_PON_TSB_BV_03 { /** * @desc Test that a received TSB packet is not triggering re-broadcasting if received for the second or * more time *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received a TSB packet from ItsNodeB
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating HL1 higher than 1
                 *          containing TSB Extended Header
                 *              containing SN field
                 *                  indicating value SN1 and
                 *      the IUT having re-broadcast the TSB packet
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same TSB packet from ItsNodeD
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1 - 1
                 *              containing TSB Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not re-broadcast the TSB packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_03_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_03) */ function f_GEONW_PON_TSB_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (present) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket))); v_gnPacket.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_noac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_03) */ function f_GEONW_PON_TSB_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (value) GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) -1; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn)); tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: The same TSB packet was re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: The same TSB packet was not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_03_nodeD } // end GEONW_PON_TSB_BV_03 group GEONW_PON_TSB_BV_04 { /** * @desc Test that the protocol header fields (RHL) are correctly updated during a TSB re- * broadcasting step *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a TSB packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the TSB packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value (HL1 -1)
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/04 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_04_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_04_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_04) */ function f_GEONW_PON_TSB_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB, c_defaultHopLimit ), -, c_defaultHopLimit ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, ? ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_04_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_04) */ function f_GEONW_PON_TSB_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacketWithHl( ?, mw_longPosVectorPosition(v_longPosVectorNodeB), c_defaultHopLimit ), -, c_defaultHopLimit - 1 ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: TSB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ), -, ? ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: TSB packet received with incorrect HopLimit ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Expected TSB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_04_nodeD } // end GEONW_PON_TSB_BV_04 group GEONW_PON_TSB_BV_05 { /** * @desc Test that the RHL restriction is correctly handled at a TSB re-broadcasting step *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state"
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a TSB packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating 1
                 *      }
                 *      then {
                 *          the IUT does not re-broadcast the TSB packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_05() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_05_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_05_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_05) */ function f_GEONW_PON_TSB_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, 1 ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_05_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_05) */ function f_GEONW_PON_TSB_BV_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: TSB message was re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: TSB message was not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_05_nodeD } // end GEONW_PON_TSB_BV_05 /** * @desc Test that a received TSB packet is passed over the Gn SAP to the correct upper protocol if it is * received for the first time *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *    the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *    when {
             *      the IUT receives a TSB packet
             *    }
             *    then {
             *      the IUT passes the received TSB packet to the correct Upper Layer protocol
             *    }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_06() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prDefault(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } log("*** " & testcasename() & ": TSB packet passed to Upper Layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poDefault(); f_cf01Down(); } // end TC_GEONW_PON_TSB_BV_06 group GEONW_PON_TSB_BV_07 { /** * @desc Test that a received TSB packet is not passed over the Gn SAP if it is received for the second * or more time *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a TSB packet from ItsNodeB
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating HL1 higher than 1
                 *          containing TSB Extended Header
                 *              containing SN field
                 *                  indicating value SN1 and
                 *      the IUT having passed the received TSB packet to the correct Upper Layer protocol
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same TSB packet from ItsNodeD
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1 - 1
                 *              containing TSB Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not pass the received TSB packet to any Upper Layer protocol
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/TSB/BV/07 * @reference EN 302 636-4-1 [1], clauses 9.3.9.3 */ testcase TC_GEONW_PON_TSB_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_TSB_BV_07_nodeB()); v_nodeD.start(f_GEONW_PON_TSB_BV_07_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_TSB_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_TSB_BV_07) */ function f_GEONW_PON_TSB_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwTsbPacket( vc_localSeqNumber, v_longPosVectorNodeB ), -, c_defaultHopLimit ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(valueof(v_gnPacket))); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) { tc_ac.stop; f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted and passed to Upper Layer ***"); f_selfOrClientSyncAndVerdictPreamble(c_tbDone, e_success); } else { log("*** " & testcasename() & ": INCONC: TSB was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictPreamble(c_tbDone, e_error); } } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: Same TSB packet was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: Same TSB packet was not passed to Upper Layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_07_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_TSB_BV_07) */ function f_GEONW_PON_TSB_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var template (value) GeoNetworkingInd v_msgInd; var integer i; var template (value) GeoNetworkingPdu v_gnPacket; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwTsbPacket( ?, mw_longPosVectorPosition(v_longPosVectorNodeB) ) ) ) ) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: TSB correctly rebroadcasted ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: TSB not rebroadcasted ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := valueof(v_msgInd.msgIn.basicHeader.routerHopLimit) - 1; v_gnPacket := v_msgInd.msgIn; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_msgInd.msgIn)); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_TSB_BV_07_nodeD } // end GEONW_PON_TSB_BV_07 } // end geoTopologicallyScopedBroadcast // 6.2.2.11 group geoSingleHopBroadcast { group GEONW_PON_SHB_BV_01 { /** * @desc Test that the reception of a SHB indication over upper Gn SAP triggers the origination of a SHB * packet *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a SHB packet
                 *      }
                 *      then {
                 *          the IUT broadcasts the SHB packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/SHB/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.10.2 */ testcase TC_GEONW_PON_SHB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_SHB_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_SHB_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_SHB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_SHB_BV_01) */ function f_GEONW_PON_SHB_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateShbMessage) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket(mw_longPosVectorPosition_withDelta(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: SHB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_SHB_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_SHB_BV_01) */ function f_GEONW_PON_SHB_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwShbPacket(mw_longPosVectorPosition_withDelta(v_longPosVectorIut)) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": PASS: SHB packet received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected SHB message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_SHB_BV_01_nodeD } // end GEONW_PON_SHB_BV_01 /** * @desc Test that a received SHB packet is passed over the Gn SAP to the correct upper protocol if it is * received for the first time *
             * Pics Selection: none
             * Config Id: CF02
             * Initial conditions:
             *  with {
             *    the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a SHB packet
             *      }
             *      then {
             *          the IUT passes the received SHB packet to the Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/SHB/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.10.3 */ testcase TC_GEONW_PON_SHB_BV_02() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB:= f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwShbPacket(v_longPosVectorNodeB)); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_SHB_BV_02 } // end geoSingleHopBroadcast // 6.2.2.12 group geoGeoAnycast { group GEONW_PON_GAC_BV_01 { /** * @desc Test that the reception of an anycast indication over upper Gn SAP triggers the origination of a * GeoAnycast packet's broadcasting if the IUT is within the Destination Area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoAnycast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *      then {
                 *          the IUT broadcasts the GeoAnycast packet
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/01 * @reference EN 302 636-4-1 [1], clauses 9.3.12.2 */ testcase TC_GEONW_PON_GAC_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_01_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_01_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GAC_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_01) */ function f_GEONW_PON_GAC_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area1))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_01_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_01) */ function f_GEONW_PON_GAC_BV_01_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area1)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_01_nodeD } // end GEONW_PON_GAC_BV_01 group GEONW_PON_GAC_BV_02 { /** * @desc Test that the reception of an anycast indication over upper Gn SAP triggers the origination of a * GeoAnycast packet's line forwarding if the IUT is outside the Destination Area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT is requested to send a GeoAnycast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop and
                 *          the IUT sends the GeoAnycast packet (see note)
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *  }
                 *  NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/02 * @reference EN 302 636-4-1 [1], clauses 9.3.12.2, Annex E.2 */ testcase TC_GEONW_PON_GAC_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_02_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_02_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GAC_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_02) */ function f_GEONW_PON_GAC_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body if ( not f_utTriggerEvent(m_generateGeoAnycastMessage(f_getArea(c_area2))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message received correctly ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_02_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_02) */ function f_GEONW_PON_GAC_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: received GeoAnycast message ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_02_nodeD } // end GEONW_PON_GAC_BV_02 group GEONW_PON_GAC_BV_03 { /** * @desc Test that a received GeoAnycast packet is not triggering forwarding or re-broadcasting if the IUT * is within the Destination Area *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoAnycast packet
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      }
                 *      then {
                 *          IUT does not re-broadcast the received GeoAnycast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/03 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf02Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_03_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_03_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GAC_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_03) */ function f_GEONW_PON_GAC_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ) ) ); tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoAnycastArea(c_area1)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_03_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_03) */ function f_GEONW_PON_GAC_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoAnycastArea(c_area1)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_03_nodeD } // end GEONW_PON_GAC_BV_03 group GEONW_PON_GAC_BV_04 { /** * @desc Test that a received GeoAnycast packet is triggering line forwarding if received out of its * destination area for the first time *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoAnycast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing GeoAnycast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop and
                 *          the IUT forwards the GeoAnycast packet (see note)
                 *      }
                 *  }
                 *  NOTE: Next hop ITS Station being identified by the MAC layer address of ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/04 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3, Annex E.2 */ testcase TC_GEONW_PON_GAC_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_04_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_04_nodeC()); v_nodeD.start(f_GEONW_PON_GAC_BV_04_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GAC_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ) ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_04) */ function f_GEONW_PON_GAC_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message not forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_04_nodeD } // end GEONW_PON_GAC_BV_04 group GEONW_PON_GAC_BV_05 { /** * @desc Test that a received GeoAnycast packet is not triggering line forwarding if received out of its * destination area for the second or more time *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *      the IUT having received Beacon information from ItsNodeD
                 *      the IUT having received a GeoAnycast packet from ItsNodeC
                 *          containing TrafficClass.SCF set to 1 
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating value HL1 higher than 1
                 *          containing GAC Extended Header
                 *              containing SN field
                 *                  indicating value SN1 and
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      the IUT having forwarded the GeoAnycast packet
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoAnycast packet from other neighbour
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value lower than HL1
                 *              containing GAC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not forward the received GeoAnycast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/05 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_05() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumber := f_getInitialSequenceNumber(); // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_05_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_05_nodeC(v_sequenceNumber)); v_nodeD.start(f_GEONW_PON_GAC_BV_05_nodeD(v_sequenceNumber)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GAC_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_05) */ function f_GEONW_PON_GAC_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var template (present) GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) ) ) ) ) -> value v_msgInd { tc_ac.stop; log("*** " & testcasename() & ": PASS: Pre-conditions: GeoAnycast message correctly forwarded to area center ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": INCONC: Pre-conditions: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } } // Test Body v_msgInd.msgIn.basicHeader.routerHopLimit := ?; tc_noac.start; alt { [] geoNetworkingPort.receive(v_msgInd) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message re-forwarded to area center ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_05) */ function f_GEONW_PON_GAC_BV_05_nodeC(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoAnycastArea(c_area2) ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_05) */ function f_GEONW_PON_GAC_BV_05_nodeD(in UInt16 p_sequenceNumber) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) )))) { tc_noac.stop; log("*** " & testcasename() & ": INCONC: Pre-conditions: GeoAnycast message not forwarded to area center ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Pre-conditions: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } } // Test Body // send geoAnycast for second time (same source + same seq Nr + lower RHL) f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, p_sequenceNumber, f_getGeoAnycastArea(c_area2) ), -, c_defaultHopLimit - 1 ) ) ); tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast re-forwarded! (not to area center!) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_05_nodeD } // end GEONW_PON_GAC_BV_05 group GEONW_PON_GAC_BV_06 { /** * @desc Test that the protocol header fields (RHL) are correctly updated during a GeoAnycast * forwarding step *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoAnycast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value HL1 higher than 1
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects the ItsNodeB as the next hop
                 *          the IUT forwards the GeoAnycast packet
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value (HL1 - 1)
                 *              containing Common Header
                 *                  containing MHL field
                 *                      indicating value MHL1
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/06 * @reference EN 302 636-4-1 [1], clauses 9.3.6.3 and 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GAC_BV_06_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_06_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GAC_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_06) */ function f_GEONW_PON_GAC_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] a_receiveGeoAnycastWithAreaWithHopLimit( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2), c_defaultHopLimit - 1, c_defaultHopLimit) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_06) */ function f_GEONW_PON_GAC_BV_06_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoNetworkingInd v_msgInd; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2), c_defaultHopLimit ), -, c_defaultHopLimit ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_06_nodeC } // end GEONW_PON_GAC_BV_06 group GEONW_PON_GAC_BV_07 { /** * @desc Test that the RHL restriction is correctly handled at a GeoAnycast forwarding step *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoAnycast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating 1
                 *              containing GAC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *         the IUT does not forward the GeoAnycast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/07 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; // Test control // Test component configuration f_cf03Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_PON_GAC_BV_07_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_07_nodeC()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_PON_GAC_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_07) */ function f_GEONW_PON_GAC_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] a_receiveGeoAnycastWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2)) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not re-forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_07) */ function f_GEONW_PON_GAC_BV_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ), -, c_hopLimit1 ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_07_nodeC } // end GEONW_PON_GAC_BV_07 /** * @desc Test that a received GeoAnycast packet is passed over the Gn SAP to the correct upper * protocol if it is received for the first time within the GeoAnycast destination area *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoAnycast packet from ItsNodeB
             *              containing TrafficClass.SCF set to 1 
             *              containing GeoBroadcast DestinationArea
             *                  indicating AREA1
             *      }
             *      then {
             *          the IUT passes the received GeoAnycast packet to the correct Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/08 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_08() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } log("*** " & testcasename() & ": GeoAnycast packet passed to Upper Layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_GAC_BV_08 group GEONW_PON_GAC_BV_09 { /** * @desc Test that a received GeoAnycast packet is not passed over the Gn SAP if it is received for * the second or more time *
                 * Pics Selection: none
                 * Config Id: CF02
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received a GeoAnycast packet from ItsNodeD
                 *          containing TrafficClass.SCF set to 1
                 *          containing Basic Header
                 *              containing RHL field
                 *                  indicating HL1
                 *          containing GAC Extended Header
                 *              containing SN field
                 *                  indicating value SN1 and
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1 and
                 *      the IUT having passed the received GeoAnycast packet to the correct Upper Layer protocol
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoAnycast packet from ItsNodeB
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating value lower than HL1
                 *              containing GAC Extended Header
                 *                  containing SN field
                 *                      indicating value SN1
                 *      }
                 *      then {
                 *          the IUT does not pass the received GeoAnycast packet to any Upper Layer protocol
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/09 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_09() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; var template (value) GeoNetworkingPdu v_gnPacket; // Test control // Test component configuration f_cf02Up(c_compNodeB); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_09_nodeB()); v_nodeD.start(f_GEONW_PON_GAC_BV_09_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf02Down(); } // end TC_GEONW_PON_GAC_BV_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_09) */ function f_GEONW_PON_GAC_BV_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Preamble f_prNeighbour(); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": PASS: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); } else { log("*** " & testcasename() & ": INCONC: GN was not transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_error); } // Test Body v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ), -, c_defaultHopLimit / 2 ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_09_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_09) */ function f_GEONW_PON_GAC_BV_09_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoAnycastArea(c_area1) ), -, c_defaultHopLimit ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_09_nodeD } // end GEONW_PON_GAC_BV_09 /** * @desc Test that a received GeoAnycast packet is not passed over the Gn SAP if it is received for the * first time outside the GeoAnycast destination area *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state"
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT receives a GeoAnycast packet from ItsNodeB
             *              containing TrafficClass.SCF set to 1 
             *              containing GeoBroadcast DestinationArea
             *                  indicating AREA2
             *      }
             *      then {
             *          the IUT does not pass the received GeoAnycast packet to any Upper Layer protocol
             *      }
             *  }
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/10 * @reference EN 302 636-4-1 [1], clauses 9.3.12.3 */ testcase TC_GEONW_PON_GAC_BV_10() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeB; var template (value) GeoNetworkingPdu v_gnPacket; var integer i; // Test control // Test component configuration f_cf01Up(); v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Test adapter configuration // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body v_gnPacket := m_geoNwPdu(m_geoNwAnycastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleep(PX_TAC); for(i:=0; i < lengthof(vc_utInds) and not match(vc_utInds[i].rawPayload, v_gnPacket.gnPacket.packet.payload.rawPayload); i:=i+1) { // empty on purpose } if(i < lengthof(vc_utInds)) { log("*** " & testcasename() & ": FAIL: GN was transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GN was NOT transmitted to upper layer ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_PON_GAC_BV_10 group GEONW_PON_GAC_BV_11 { /** * @desc Test that a received GeoAnycast packet is discarded when indicating a too big GeoArea *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GAC packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing DestinationArea
                 *                  indicating a geoArea bigger than itsGnMaxGeoAreaSize
                 *      }
                 *      then {
                 *          the IUT does not forward the received GAC packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/11 * @reference EN 302 636-4-1 [1], Annex B.3 */ testcase TC_GEONW_PON_GAC_BV_11() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_distanceTooBig; // Test control // Test component configuration f_cf04Up(); v_distanceTooBig := float2int(1.1 * f_radiusFromCircularArea(f_getGnMaxAreaSize()*c_squareKm)); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_11_nodeB(v_distanceTooBig)); v_nodeC.start(f_GEONW_PON_GAC_BV_11_nodeC(v_distanceTooBig)); v_nodeD.start(f_GEONW_PON_GAC_BV_11_nodeD(v_distanceTooBig)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GAC_BV_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_11) */ function f_GEONW_PON_GAC_BV_11_nodeB(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoAnycastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_11_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_11) */ function f_GEONW_PON_GAC_BV_11_nodeC(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_geoArea2GeoAnycastArea(v_areaTooBig) ) ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_11_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_11) */ function f_GEONW_PON_GAC_BV_11_nodeD(in UInt16 p_distanceTooBig) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var GeoArea v_areaTooBig; // Preamble f_prNeighbour(); v_areaTooBig := f_computeCircularArea( f_computePosition(f_getPosition(c_compNodeB), 1000, 0), p_distanceTooBig ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_geoArea2GeoAnycastArea(v_areaTooBig) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoAnycast message forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoAnycast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_11_nodeD } // end GEONW_PON_GAC_BV_11 group GEONW_PON_GAC_BV_12 { /** * @desc Test that a received GeoAnycast packet is triggering rebroadcast if received out of its * destination area for the first time from an unknown sender *
                 * Pics Selection: none
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoAnycast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1 
                 *              containing GeoAnycast DestinationArea
                 *                  indicating AREA2
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the GeoAnycast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/GAC/BV/12 * @reference EN 302 636-4-1 [1], clauses 9.3.11.3, Annex E.2 */ testcase TC_GEONW_PON_GAC_BV_12() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_GAC_BV_12_nodeB()); v_nodeC.start(f_GEONW_PON_GAC_BV_12_nodeC()); v_nodeD.start(f_GEONW_PON_GAC_BV_12_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_GAC_BV_12 /** * @desc Behavior function for NodeB (TC_GEONW_PON_GAC_BV_12) */ function f_GEONW_PON_GAC_BV_12_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_12_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_GAC_BV_12) */ function f_GEONW_PON_GAC_BV_12_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_12_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_GAC_BV_12) */ function f_GEONW_PON_GAC_BV_12_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwAnycastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoAnycastArea(c_area2) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwAnycastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoAnycastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoAnycast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoAnycast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_GAC_BV_12_nodeD } // end GEONW_PON_GAC_BV_12 } // end geoGeoAnycast // 6.2.2.13 group geoGeoBroadcastCbfAlgorithm { group GEONW_PON_BCA_BV_01 { /** * @desc Test that a received GeoBroadcast packet is discarded if received twice or more *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *      the IUT having received a GBC packet from ItsNodeC
                 *          containing TrafficClass.SCF set to 1 
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      the IUT having saved the packet into CBF buffer
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet from ItsNodeD
                 *      }
                 *      then {
                 *          the IUT removes the GeoBroadcast packet from the CBF buffer
                 *          the IUT discards the new received GeoBroadcast packet
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/01 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_01_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_01_nodeC(v_sequenceNumberC)); v_nodeD.start(f_GEONW_PON_BCA_BV_01_nodeD(v_sequenceNumberC)); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeC(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumberC, f_getGeoBroadcastArea(c_area1) ) ) ) ); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_01) */ function f_GEONW_PON_BCA_BV_01_nodeD(in UInt16 p_sequenceNumberC) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, p_sequenceNumberC, f_getGeoBroadcastArea(c_area1) ) ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_01_nodeD } // end GEONW_PON_BCA_BV_01 group GEONW_PON_BCA_BV_02 { /** * @desc Test that a received GeoBroadcast packet is triggering contention if received for the first time * when inside of the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet into the CBF buffer and
                 *          the IUT starts the contention timer and
                 *          the IUT broadcasts the received GeoBroadcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/02 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_02_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_02_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_02_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeC, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) ); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_02) */ function f_GEONW_PON_BCA_BV_02_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_02_nodeD } // end GEONW_PON_BCA_BV_02 group GEONW_PON_BCA_BV_03 { /** * @desc Test that a received GeoBroadcast packet from outside of the destination area is triggering line * forwarding if received for the first time when IUT is outside of the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received Beacon information from ItsNodeC
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as next hop ITS station and
                 *          the IUT forwards the GeoBroadcast packet (see note)
                 *      }
                 *  }
                 *  
                 *  NOTE: Next hop ITS Statoin being identified by the MAC layer address of ItsNodeB
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/03 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_03_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_03_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_03_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd_withLinkLayerDestination(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )), f_getTsGnLocalAddress(c_compNodeB).mid )) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message was broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_03) */ function f_GEONW_PON_BCA_BV_03_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message was broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: Message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_03_nodeD } // end GEONW_PON_BCA_BV_03 group GEONW_PON_BCA_BV_04 { /** * @desc Test that a received GeoBroadcast packet from inside of the destination area is discarded if * received for the first time when IUT is outside of the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT discards the received GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/04 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_04_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_04_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_04_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_04) */ function f_GEONW_PON_BCA_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast received and not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_04_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_04) */ function f_GEONW_PON_BCA_BV_04_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast received and not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_04_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_04) */ function f_GEONW_PON_BCA_BV_04_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeD, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: GeoBroadcast received and not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: GeoBroadcast message discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_04_nodeD } // end GEONW_PON_BCA_BV_04 group GEONW_PON_BCA_BV_05 { /** * @desc Test that a received GeoBroadcast packet is triggering contention if received for the first time * when IUT is inside of the destination area from an unknown sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet into the CBF buffer and
                 *          the IUT starts the contention timer set to CBF_MAX and
                 *          the IUT broadcasts the received GeoBroedcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/05 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_05() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_05_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_05_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_05_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_05 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_05_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_05_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_05) */ function f_GEONW_PON_BCA_BV_05_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) ); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_05_nodeD } // end GEONW_PON_BCA_BV_05 group GEONW_PON_BCA_BV_06 { /** * @desc Test that a received GeoBroadcast packet from outside of the destination area is triggering line * forwarding if received for the first time when IUT is outside of the destination area from an * unknown sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT broadcasts the GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/06 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_06_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_06_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_06_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_06_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_noac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_06_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_06) */ function f_GEONW_PON_BCA_BV_06_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_noac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not re-broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_06_nodeD } // end GEONW_PON_BCA_BV_06 group GEONW_PON_BCA_BV_07 { /** * @desc Test that a received GeoBroadcast packet is rebroadcasted if received for the first time * when IUT is outside of the destination area from a known sender having an uncertain position (PAI == 0). *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 * with {
                 *    the IUT being in the "initial state" and
                 *    the IUT having received Beacon information from ItsNodeB and
                 *    the IUT having received Beacon information from ItsNodeD
                 *        containing Beacon ExtendedHeader
                 *            containing SOPV field
                 *                containing PAI
                 *                    set to ‘0’
                 * }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT broadcasts the GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/07 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_07_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_07_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_07_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble v_longPosVectorNodeC.pai := int2bit(0,1); f_changePositon(c_compNodeC, v_longPosVectorNodeC); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeA, vc_localSeqNumber, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_07) */ function f_GEONW_PON_BCA_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_07_nodeD } // end GEONW_PON_BCA_BV_07 group GEONW_PON_BCA_BV_08 { /** * @desc Test that a received GeoBroadcast packet is triggering contention if received for the first time * when IUT is inside of the destination area from an unknown sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'CBF'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD
                 *        containing Beacon ExtendedHeader
                 *            containing SOPV field
                 *                containing PAI
                 *                    set to ‘0’
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet into the CBF buffer and
                 *          the IUT starts the contention timer set to CBF_MAX and
                 *          the IUT broadcasts the received GeoBroedcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BCA/BV/08 * @reference EN 302 636-4-1 [1], Annex E.3 */ testcase TC_GEONW_PON_BCA_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_cbf) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_cbf required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BCA_BV_08_nodeB()); v_nodeC.start(f_GEONW_PON_BCA_BV_08_nodeC()); v_nodeD.start(f_GEONW_PON_BCA_BV_08_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BCA_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not broadcasted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BCA_BV_08_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BCA_BV_08) */ function f_GEONW_PON_BCA_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble v_longPosVectorNodeD.pai := int2bit(0,1); f_changePositon(c_compNodeD, v_longPosVectorNodeD); f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwBroadcastPacket( v_longPosVectorNodeC, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ) ) ); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poDefault(); } // end f_GEONW_PON_BCA_BV_08_nodeD } // end GEONW_PON_BCA_BV_08 } // end geoGeoBroadcastCbfAlgorithm // 6.2.2.13 group geoGeoBroadcastAdvAlgorithm { group GEONW_PON_BAA_BV_01 { /** * @desc Test that a received GeoBroadcast packet is discarded if received more than MAX_COUNTER * times when IUT is inside of the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF06
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeF and
                 *      the IUT having received a GeoBroadcast packet GBC1 from ItsNodeF
                 *          containing TrafficClass.SCF set to 1
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      the IUT having saved the packet into CBF buffer
                 *      the IUT having received MAX_COUNTER - 1 times the GBC1 packet
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet GBC1
                 *      }
                 *      then {
                 *          the IUT removes GBC1 from the CBF buffer
                 *          the IUT discards the new received GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/01 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeF; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf06Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeF := f_getComponent(c_compNodeF); v_nodeB.start(f_GEONW_PON_BAA_BV_01_nodeB()); v_nodeF.start(f_GEONW_PON_BAA_BV_01_nodeF()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end TC_GEONW_PON_BAA_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_01) */ function f_GEONW_PON_BAA_BV_01_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_01_nodeB /** * @desc Behavior function for NodeF (TC_GEONW_PON_BAA_BV_01) */ function f_GEONW_PON_BAA_BV_01_nodeF() runs on ItsGeoNetworking { // Local variables var integer i; var template (value) GeoNetworkingPdu v_gnPacket; var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); v_gnPacket := m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, vc_localSeqNumber, f_getGeoBroadcastArea(c_area1) ) ); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body for(i:=1; i < f_getAdvancedGbcForwardingMaxCounter(); i:=i+1) { f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(v_gnPacket)); f_sleepIgnoreDef(0.5); } tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_01_nodeF } // end GEONW_PON_BAA_BV_01 group GEONW_PON_BAA_BV_02 { /** * @desc Test that a received GeoBroadcast packet is discarded if received more than 1 times when IUT * is inside of the destination area and inside the sectorial area of the GeoBroadcast packet Sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF05
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeE and
                 *      the IUT having received a GeoBroadcast packet GBC1 from ItsNodeB
                 *          containing TrafficClass.SCF set to 1
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      the IUT having saved the packet into CBF buffer
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet GBC1 from ItsNodeE
                 *          the IUT is inside the sectorial area of ItsNodeB
                 *      }
                 *      then {
                 *          the IUT removes GBC1 from the CBF buffer
                 *          the IUT discards the new received GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/02 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_02_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_02_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end TC_GEONW_PON_BAA_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_02) */ function f_GEONW_PON_BAA_BV_02_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_02_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_02) */ function f_GEONW_PON_BAA_BV_02_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); tc_noac.start; alt { [] geoNetworkingPort.receive (mw_geoNwInd(mw_geoNwPdu(?))){ tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_02_nodeE } // end GEONW_PON_BAA_BV_02 group GEONW_PON_BAA_BV_03 { /** * @desc Test that a received GeoBroadcast packet is triggering contention if received more than 1 times when the IUT * is inside of the destination area and outside the sectorial area of the GeoBroadcast packet Sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF06
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeF and
                 *      the IUT having received a GeoBroadcast packet GBC1 from ItsNodeB
                 *          containing TrafficClass.SCF set to 1
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      the IUT having saved the packet into CBF buffer
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet GBC1 from ItsNodeF
                 *          the IUT is outside the sectorial area of ItsNodeB
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet GBC1 from ItsNodeF and
                 *          the IUT starts the contention timer and
                 *          the IUT broadcasts the received GeoBroadcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 *  
                 *  Note: In this configuration IUT is outside sectorial area of ItsNodeB to the angle FSR
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/03 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_03() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeF; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf06Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeF := f_getComponent(c_compNodeF); v_nodeB.start(f_GEONW_PON_BAA_BV_03_nodeB()); v_nodeF.start(f_GEONW_PON_BAA_BV_03_nodeF()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end TC_GEONW_PON_BAA_BV_03 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_03) */ function f_GEONW_PON_BAA_BV_03_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_03_nodeB /** * @desc Behavior function for NodeF (TC_GEONW_PON_BAA_BV_03) */ function f_GEONW_PON_BAA_BV_03_nodeF() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorNodeF := f_getPosition(c_compNodeF); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeF, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_03_nodeF } // end GEONW_PON_BAA_BV_03 group GEONW_PON_BAA_BV_04 { /** * @desc Test that a received GeoBroadcast packet with Unicast MAC destination is triggering line * forwarding if received for the first time when IUT is inside the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF05
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeE and
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeE
                 *              addressed to IUT's link-layer address
                 *              containing TrafficClass.SCF set to 1 
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT forwards the GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/04 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_04() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_04_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_04_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end TC_GEONW_PON_BAA_BV_04 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_04) */ function f_GEONW_PON_BAA_BV_04_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeA), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_04_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_04) */ function f_GEONW_PON_BAA_BV_04_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_withLinkLayerDestination( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeA, 0, f_getGeoBroadcastArea(c_area1) ) ), f_getIutMacAddress() ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_04_nodeE } // end GEONW_PON_BAA_BV_04 group GEONW_PON_BAA_BV_06 { /** * @desc Test that a received GeoBroadcast packet with Broadcast destination is triggering contention if * received for the first time when IUT is inside the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF05
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeE
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeE
                 *              addressed to broadcast link-layer address
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT calculates and starts the contention timer and
                 *          the IUT broadcasts the received GeoBroadcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/06 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_06() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_06_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_06_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end TC_GEONW_PON_BAA_BV_06 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_06) */ function f_GEONW_PON_BAA_BV_06_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeE, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeE), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_06) */ function f_GEONW_PON_BAA_BV_06_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeE := f_getPosition(c_compNodeE); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeE, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeE, 0, f_getGeoBroadcastArea(c_area1) ) ) ) ); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeE), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeE } // end GEONW_PON_BAA_BV_06 group GEONW_PON_BAA_BV_07 { /** * @desc Test that a received GeoBroadcast packet from outside the destination area is triggering line * forwarding if received for the first time when IUT is outside the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeC
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT selects ItsNodeB as the next hop ITS station and
                 *          the IUT forwards the GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/07 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_07() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_07_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BV_07_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BV_07_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BAA_BV_07 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_07_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ) ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_07_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_07) */ function f_GEONW_PON_BAA_BV_07_nodeD() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_07_nodeD } // end GEONW_PON_BAA_BV_07 group GEONW_PON_BAA_BV_08 { /** * @desc Test that a received GeoBroadcast packet with from inside the destination area is discarded if * received for the first time when IUT is outside the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the IUT having received Beacon information from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT discards the received GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/08 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_08() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_08_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BV_08_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BV_08_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BAA_BV_08 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_08) */ function f_GEONW_PON_BAA_BV_08_nodeB() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_08_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_08) */ function f_GEONW_PON_BAA_BV_08_nodeC() runs on ItsGeoNetworking { // Local variables // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_noac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(?))) { tc_noac.stop; log("*** " & testcasename() & ": FAIL: Message not discarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_noac.timeout { log("*** " & testcasename() & ": PASS: No message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_08_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_08) */ function f_GEONW_PON_BAA_BV_08_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeD := f_getPosition(c_compNodeD); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeD, 0, f_getGeoBroadcastArea(c_area2) ) ) ) ); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_08_nodeD } // end GEONW_PON_BAA_BV_08 group GEONW_PON_BAA_BV_09 { /** * @desc Test that a received GeoBroadcast packet with Broadcast MAC destination is triggering * contention if received for the first time from an unknown sender when IUT is inside the * destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF05
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT not having received any message from ItsNodeE
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet from ItsNodeE
                 *              addressed to link-layer broadcast address
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA1
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet into the CBF buffer and
                 *          the IUT starts the contention timer set to CBF_MAX and
                 *          the IUT broadcasts the received GeoBroadcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/09 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_09() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeE; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf05Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeE := f_getComponent(c_compNodeE); v_nodeB.start(f_GEONW_PON_BAA_BV_09_nodeB()); v_nodeE.start(f_GEONW_PON_BAA_BV_09_nodeE()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf05Down(); } // end TC_GEONW_PON_BAA_BV_09 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_09) */ function f_GEONW_PON_BAA_BV_09_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_06_nodeB /** * @desc Behavior function for NodeE (TC_GEONW_PON_BAA_BV_09) */ function f_GEONW_PON_BAA_BV_09_nodeE() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); timer t_toCbf := int2float(f_getGeoBroadcastCbfMaxTime()) * 0.95 / 1000.0; // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) ) ); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_09_nodeE } // end GEONW_PON_BAA_BV_09 group GEONW_PON_BAA_BV_10 { /** * @desc Test that a received GeoBroadcast packet is triggering re-broadcast if received from unknown * sender for the first time when IUT is outside the destination area *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF04
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeC and
                 *      the IUT not having received any message from ItsNodeD
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet generated by ItsNodeC from ItsNodeD
                 *              containing TrafficClass.SCF set to 1
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast DestinationArea
                 *                      indicating AREA2
                 *      }
                 *      then {
                 *          the IUT re-broadcasts the GeoBroadcast packet
                 *      }
                 *  }
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/10 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_10() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf04Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_10_nodeB()); v_nodeC.start(f_GEONW_PON_BAA_BV_10_nodeC()); v_nodeD.start(f_GEONW_PON_BAA_BV_10_nodeD()); // Synchronization f_serverSync3ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf04Down(); } // end TC_GEONW_PON_BAA_BV_10 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_10_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeC() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNonNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ) ) ) ); tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_10_nodeC /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_10) */ function f_GEONW_PON_BAA_BV_10_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeC), ?, f_getGeoBroadcastArea(c_area2) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: packet correctly forwarded ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: Expected message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_10_nodeD } // end GEONW_PON_BAA_BV_10 group GEONW_PON_BAA_BV_11 { /** * @desc Test that a received GeoBroadcast packet is triggering contention if received more than 1 times when IUT * is inside the destination area and outside the sectorial area of the GeoBroadcast packet Sender *
                 * Pics Selection: PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == 'ADVANCED'
                 * Config Id: CF07
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having received Beacon information from ItsNodeB and
                 *      the IUT having received Beacon information from ItsNodeD and
                 *      the IUT having received a GeoBroadcast packet GBC1 from ItsNodeB
                 *          containing TrafficClass.SCF set to 1
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast DestinationArea
                 *                  indicating AREA1
                 *      the IUT having saved packet into the CBF buffer
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives the same GeoBroadcast packet GBC1 from ItsNodeD
                 *          the IUT is outside the sectorial area of ItsNodeB
                 *      }
                 *      then {
                 *          the IUT saves the GeoBroadcast packet into the CBF buffer and
                 *          the IUT starts the contention timer and
                 *          the IUT broadcasts the received GeoBroadcast packet
                 *              after expiry of the contention timer
                 *      }
                 *  }
                 * 
                 * Note: In this configuration IUT is outside sectorial area of ItsNodeB because of dist_R > dist_F 
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/PON/BAA/BV/11 * @reference EN 302 636-4-1 [1], Annex E.4 */ testcase TC_GEONW_PON_BAA_BV_11() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeD; // Test control if (f_getGeoBroadcastForwardingAlgorithm() != e_advanced) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_FORWARDING_ALGORITHM == e_advanced required for executing the TC ***"); setverdict(inconc); stop; } if (f_getGeoBroadcastCbfMinTime() < 300) { log("*** " & testcasename() & ": PICS_GN_GEOBROADCAST_CBF_MIN_TIME >= 300 required for executing the TC ***"); setverdict(inconc); stop; } // Test component configuration f_cf07Up(); // Preamble // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeD := f_getComponent(c_compNodeD); v_nodeB.start(f_GEONW_PON_BAA_BV_11_nodeB()); v_nodeD.start(f_GEONW_PON_BAA_BV_11_nodeD()); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf06Down(); } // end TC_GEONW_PON_BAA_BV_11 /** * @desc Behavior function for NodeB (TC_GEONW_PON_BAA_BV_11) */ function f_GEONW_PON_BAA_BV_11_nodeB() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); // Preamble f_prNeighbour(); f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_11_nodeB /** * @desc Behavior function for NodeD (TC_GEONW_PON_BAA_BV_11) */ function f_GEONW_PON_BAA_BV_11_nodeD() runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeB := f_getPosition(c_compNodeB); var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); timer t_toCbf := (int2float(f_getGeoBroadcastCbfMaxTime()) + ( int2float(f_getGeoBroadcastCbfMinTime() - f_getGeoBroadcastCbfMaxTime()) / int2float(f_getCbfMaxCommunicationRange()) ) * f_distance(v_longPosVectorNodeB, v_longPosVectorIut)) * 0.95 / 1000.0; // Preamble f_prNeighbour(); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast( m_geoNwPdu(m_geoNwBroadcastPacket( v_longPosVectorNodeB, 0, f_getGeoBroadcastArea(c_area1) ) ) )); t_toCbf.start; tc_ac.start; alt { [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoNwBroadcastPacketWithArea( mw_longPosVectorPosition(v_longPosVectorNodeB), ?, f_getGeoBroadcastArea(c_area1) )))) { tc_ac.stop; if(t_toCbf.running) { t_toCbf.stop; log("*** " & testcasename() & ": FAIL: GBC retransmitted before CBF timer expiration ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } else { log("*** " & testcasename() & ": PASS: GeoBroadcast message received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } } [] t_toCbf.timeout { log("*** " & testcasename() & ": INFO: CBF timer elapsed ***"); repeat; } [] tc_ac.timeout { log("*** " & testcasename() & ": FAIL: GeoBroadcast message not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); } // end f_GEONW_PON_BAA_BV_11_nodeD } // end GEONW_PON_BAA_BV_11 } // end geoGeoBroadcastCbfAlgorithm } // end geoProtocolOperation // 6.2.3 Capacities group geoCapacities { // 6.2.3.1 group geoCapLocationService { /** * @desc Test of LS buffer capacity according to its GnLocationServicePacketBufferSize parameter and * the overflow handling procedure *
             * Pics Selection: none
             * Config Id: CF01
             * Initial conditions:
             *  with {
             *      the IUT being in the "initial state" and
             *      the IUT having no Location Table Entry for ItsNodeA and
             *      the IUT having received Beacon information from ItsNodeB and
             *      the IUT having been requested to send multiple GeoUnicast packets to ItsNodeA
             *          containing TrafficClass.SCF set to 1 and
             *      the IUT having sent a LS_REQUEST packet and
             *      the IUT not having received a LS_REPLY packet
             *  }
             * Expected behaviour:
             *  ensure that {
             *      when {
             *          the IUT is requested to send a GeoUnicast packet to ItsNodeA
             *              containing TrafficClass.SCF set to 1 and
             *          the location service buffer capacity exceeded (see note 1)
             *      }
             *      then {
             *          the IUT removes the older packet(s) in the location service buffer and,
             *          the IUT inserts the new received packet at the end of the location service buffer (see note 2)
             *      }
             *  }
             *  NOTE 1: The amount of stored data exceeds Location Service buffer capacity defined by the 
             *          itsGnLocationServicePacketBufferSize MIB parameter
             *  NOTE 2: Buffered packets will be delivered upon reception of LS_REPLY message
             *  
             * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/CAP/LOS/BV/01 * @reference EN 302 636-4-1 [1], clauses 7.4.2 */ testcase TC_GEONW_CAP_LOS_BV_01() runs on ItsGeoNetworking system ItsGeoNetworkingSystem { // Local variables var LongPosVector v_longPosVectorNodeA; var LongPosVector v_longPosVectorNodeB; var LongPosVector v_longPosVectorIut; var GeoNetworkingInd v_msg; var integer v_packetSize := 0; var integer v_index := 0; var integer v_nbrOfPackets := 0; // Test control // Test component configuration f_cf01Up(); // Test adapter configuration // Preamble v_longPosVectorNodeA := f_getPosition(c_compNodeA); v_longPosVectorNodeB := f_getPosition(c_compNodeB); v_longPosVectorIut := f_getPosition(c_compIut); f_prNeighbour(); // Trigger message to NodeB in order to get an estimation of packet size if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeB.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(0, 2))))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeB)), ? ) ) ) ) -> value v_msg { var GeoNetworkingReq v_req; tc_ac.stop; //if we use directly v_msg(GeoNetworkingInd) for encvalue the encoder must also be able to provide //encoding of "incoming messages"... v_req.msgOut := v_msg.msgIn; v_packetSize := lengthof(bit2oct(encvalue(v_req.msgOut))); } } // implicitely trigger LS_REQUEST if ( not f_utTriggerEvent(m_generateGeoUnicastMessage(v_longPosVectorNodeA.gnAddr)) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_timeout); } tc_ac.start; alt { [] a_receiveLsRequest( ?, v_longPosVectorNodeA.gnAddr.mid, v_longPosVectorIut ) { } } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body // Fill the LS buffer + one more message to remove an older message v_nbrOfPackets := f_getLsPacketBufferSize() / v_packetSize + 1; log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***"); for (v_index:=1; v_index <= v_nbrOfPackets; v_index:=v_index+1) { if ( not f_utTriggerEvent(m_generateGeoUnicastMessageWithPayload(v_longPosVectorNodeA.gnAddr, char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2))))) ) { log("*** " & testcasename() & ": INCONC: Trigger failed ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_timeout); } } f_sleepIgnoreDef(0.5); f_sendGeoNetMessage( m_geoNwReq_linkLayerBroadcast( m_geoNwPdu( m_geoNwLsReplyPacket( v_longPosVectorNodeB, f_longPosVector2ShortPosVector(v_longPosVectorIut), vc_localSeqNumber ) ) ) ); // packet 1 shall be dropped v_index := 2; tc_ac.start; alt { [] geoNetworkingPort.receive( f_receiveGeoNetMessageWithPayload( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ), f_adaptPayload_mw(char2oct("PAYLOAD_" & oct2str(int2oct(v_index, 2)))) ) ) { if (v_index < v_nbrOfPackets) { v_index := v_index + 1; repeat; } tc_ac.stop; log("*** " & testcasename() & ": Older message was removed, new message was inserted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } [] tc_ac.timeout { log("*** " & testcasename() & ": Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } // Postamble f_poNeighbour(); f_cf01Down(); } // end TC_GEONW_CAP_LOS_BV_01 } // end geoCapLocationService // 6.2.3.2 group geoCapForwardingPacketBuffer { group GEONW_CAP_FPB_BV_01 { /** * @desc Test of UC forwarding buffer capacity according to itsGnUcForwardingPacketBufferSize * parameter and the overflow handling procedure *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having no Location Table Entry for ItsNodeB and
                 *      the IUT having received multiple GeoUnicast packets addressed to ItsNodeA from ItsNodeC
                 *          containing TrafficClass.SCF set to 1
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoUnicast packet addressed to ItsNodeA from ItsNodeC
                 *              containing TrafficClass.SCF set to 1 
                 *              containing Basic Header
                 *                  containing RHL field
                 *                      indicating HL1 higher than 1
                 *          the UC forwarding packet buffer capacity exceeded (see note 1)
                 *      }
                 *      then {
                 *          the IUT removes the older packet(s) in the UC forwarding packet buffer and,
                 *          the IUT inserts the new received GeoUnicast packet at the end of the UC forwarding packet buffer (see note 2)
                 *      }
                 *  }
                 *  NOTE 1: The amount of stored data exceeds UC forwarding packet capacity defined by the
                 *          itsGnUcForwardingPacketBufferSize MIB parameter
                 *  NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/CAP/FPB/BV/01 * @reference EN 302 636-4-1 [1], clauses 7.5.3 */ testcase TC_GEONW_CAP_FPB_BV_01() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var template (value) GeoNetworkingPdu v_geoNetworkingMsg; var integer v_packetSize := 0; var integer v_nbrOfPackets := 0; var integer v_payloadSize := f_min(1400, f_getUcForwardingPacketBufferSize() / 10 ); var octetstring v_payload; const integer c_nbrOfDiscardedMessages := 1; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); // Test control // Test component configuration f_cf03Up(); // Preamble // Prepare GeoUnicast message v_payload := int2oct(0, v_payloadSize); v_geoNetworkingMsg := m_geoNwPdu( m_geoNwUnicastPacket( m_dummyLongPosVector, f_longPosVector2ShortPosVector(valueof(m_dummyLongPosVector)), 0) ); v_geoNetworkingMsg.gnPacket.packet.payload := f_adaptPayload_m(v_payload); v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg))); // Fill the UC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages v_nbrOfPackets := f_getUcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages + 1; log("*** " & testcasename() & ": " & int2str(v_nbrOfPackets) & " ***"); // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_CAP_FPB_BV_01_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages)); v_nodeC.start(f_GEONW_CAP_FPB_BV_01_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_CAP_FPB_BV_01 /** * @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_01) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets sent by other component * @param p_nbrOfDiscardedMessages Number of packets that should be discarded */ function f_GEONW_CAP_FPB_BV_01_nodeB( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in integer p_nbrOfDiscardedMessages ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages + 1; var integer v_nbReceivedMessages := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_startBeingNeighbour(); tc_ac.start; alt { [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), v_expectedSeqNumber ) ) ) ) { v_nbReceivedMessages := v_nbReceivedMessages + 1; v_expectedSeqNumber := v_expectedSeqNumber + 1; repeat; // repeat in any case => IUT may send more messages ! } [] geoNetworkingPort.receive( mw_geoNwInd( mw_geoNwPdu( mw_geoNwUnicastPacket( mw_shortPosVectorPosition(f_longPosVector2ShortPosVector(v_longPosVectorNodeA)), ? ) ) ) ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) { log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_01_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_01) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets to be send * @param p_geoNetworkingMsg Pdu to be sent (template) */ function f_GEONW_CAP_FPB_BV_01_nodeC( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in template (value) GeoNetworkingPdu p_geoNetworkingMsg ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeA := f_getPosition(c_compNodeA); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var integer i := 0; // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.srcPosVector := v_longPosVectorNodeC; p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.dstPosVector := f_longPosVector2ShortPosVector(v_longPosVectorNodeA); for (i:=0; i < p_nbrOfPackets; i:=i+1) { p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoUnicastHeader.seqNumber := vc_localSeqNumber; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg)); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_01_nodeC } // end GEONW_CAP_FPB_BV_01 group GEONW_CAP_FPB_BV_02 { /** * @desc Test of BC forwarding buffer capacity according to itsGnBcForwardingPacketBufferSize * parameter and the overflow handling procedure *
                 * Pics Selection: none
                 * Config Id: CF03
                 * Initial conditions:
                 *  with {
                 *      the IUT being in the "initial state" and
                 *      the IUT having no Location Table Entry for ItsNodeB
                 *      the IUT having received multiple GeoBroadcast packets
                 *          containing TrafficClass.SCF set to 1
                 *          containing GBC Extended Header
                 *              containing GeoBroadcast Destination Area
                 *                  indicating AREA2
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives a GeoBroadcast packet
                 *              containing TrafficClass.SCF set to 1 
                 *              containing GBC Extended Header
                 *                  containing GeoBroadcast Destination Area
                 *                      indicating AREA2 and
                 *          the BC forwarding packet buffer capacity exceeded (see note 1)
                 *      }
                 *      then {
                 *          the IUT removes the older packet(s) in the BC forwarding packet buffer and,
                 *          the IUT inserts the new received GeoBroadcast packet at the end of the BC forwarding packet buffer (see note 2)
                 *      }
                 *  }
                 *  NOTE 1: The amount of stored data exceeds BC forwarding buffer capacity defined by the
                 *          itsGnBcForwardingPacketBufferSize MIB parameter
                 *  NOTE 2: Buffered packets will be delivered upon reception of Beacon message from ItsNodeB
                 *  
                 * 
* * @see ETSI TS 102 871-2 v2.1.1 TP/GEONW/CAP/FPB/BV/02 * @reference EN 302 636-4-1 [1], clauses 7.5.3 */ testcase TC_GEONW_CAP_FPB_BV_02() runs on ItsMtc system ItsGeoNetworkingSystem { // Local variables var ItsGeoNetworking v_nodeB; var ItsGeoNetworking v_nodeC; var template (value) GeoNetworkingPdu v_geoNetworkingMsg; var integer v_packetSize := 0; var integer v_nbrOfPackets := 0; const integer c_nbrOfDiscardedMessages := 1; var UInt16 v_sequenceNumberC := f_getInitialSequenceNumber(); // Test control // Test component configuration f_cf03Up(); // Preamble // Prepare GeoUnicast message v_geoNetworkingMsg := m_geoNwPdu(m_geoNwBroadcastPacket( m_dummyLongPosVector, 0, m_dummyGeoBroadcastArea)); v_packetSize := lengthof(bit2oct(encvalue(v_geoNetworkingMsg))); // Fill the BC forwarding buffer + c_nbrOfDiscardedMessages more message to remove older messages v_nbrOfPackets := f_getBcForwardingPacketBufferSize() / v_packetSize + c_nbrOfDiscardedMessages; // Start components v_nodeB := f_getComponent(c_compNodeB); v_nodeC := f_getComponent(c_compNodeC); v_nodeB.start(f_GEONW_CAP_FPB_BV_02_nodeB(v_sequenceNumberC, v_nbrOfPackets, c_nbrOfDiscardedMessages)); v_nodeC.start(f_GEONW_CAP_FPB_BV_02_nodeC(v_sequenceNumberC, v_nbrOfPackets, v_geoNetworkingMsg)); // Synchronization f_serverSync2ClientsAndStop({c_prDone, c_tbDone}); // Cleanup f_cf03Down(); } // end TC_GEONW_CAP_FPB_BV_02 /** * @desc Behavior function for NodeB (TC_GEONW_CAP_FPB_BV_02) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets sent by other component * @param p_nbrOfDiscardedMessages Number of packets that should be discarded */ function f_GEONW_CAP_FPB_BV_02_nodeB( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in integer p_nbrOfDiscardedMessages ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorIut := f_getPosition(c_compIut); var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var UInt16 v_expectedSeqNumber := p_sequenceNumberC + p_nbrOfDiscardedMessages; var integer v_nbReceivedMessages := 0; // Preamble f_prDefault(); // NodeB is not yet a neighbour f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_startBeingNeighbour(); tc_ac.start; alt { [] a_receiveGeoBroadcast( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), v_expectedSeqNumber ) { v_nbReceivedMessages := v_nbReceivedMessages + 1; v_expectedSeqNumber := v_expectedSeqNumber + 1; repeat; // repeat in any case => IUT may send more messages ! } [] a_receiveGeoBroadcast( mw_longPosVectorPosition_withDelta(v_longPosVectorIut), ? ) { tc_ac.stop; log("*** " & testcasename() & ": FAIL: Unexpected message received (Bad sequence number) ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } [] tc_ac.timeout { if(v_nbReceivedMessages == (p_nbrOfPackets - p_nbrOfDiscardedMessages)) { log("*** " & testcasename() & ": PASS: Older messages wer removed, new messages were inserted ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); } else { log("*** " & testcasename() & ": FAIL: Expected amount of messages were not received ***"); f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); } } } // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_02_nodeB /** * @desc Behavior function for NodeC (TC_GEONW_CAP_FPB_BV_02) * @param p_sequenceNumberC Initial sequence number of NodeC * @param p_nbrOfPackets Number of packets to be send * @param p_geoNetworkingMsg Pdu to be sent (template) */ function f_GEONW_CAP_FPB_BV_02_nodeC( in UInt16 p_sequenceNumberC, in integer p_nbrOfPackets, in template (value) GeoNetworkingPdu p_geoNetworkingMsg ) runs on ItsGeoNetworking { // Local variables var LongPosVector v_longPosVectorNodeC := f_getPosition(c_compNodeC); var integer i := 0; // Preamble f_prNeighbour(); vc_localSeqNumber := p_sequenceNumberC; p_geoNetworkingMsg.gnPacket.packet := m_geoNwBroadcastPacket( v_longPosVectorNodeC, 0, f_getGeoBroadcastArea(c_area2) ); for (i:=0; i < p_nbrOfPackets; i:=i+1) { p_geoNetworkingMsg.gnPacket.packet.extendedHeader.geoBroadcastHeader.seqNumber := vc_localSeqNumber; f_sendGeoNetMessage(m_geoNwReq_linkLayerBroadcast(p_geoNetworkingMsg)); } f_selfOrClientSyncAndVerdictPreamble(c_prDone, e_success); // Test Body f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); // Postamble f_poNeighbour(); } // end f_GEONW_CAP_FPB_BV_02_nodeC } // end GEONW_CAP_FPB_BV_02 } // end geoCapForwardingPacketBuffer } // end geoCapacities } // end ItsGeoNetworking_TestCases