Commit 67fe47fc authored by garciay's avatar garciay
Browse files

Start validation of TD_AUTO_IOT_DENM_RWW_BV_01

parent d6f50550
Loading
Loading
Loading
Loading
+80 −0
Original line number Diff line number Diff line
@@ -6,12 +6,21 @@ module ItsAutoInterop_Functions {
    import from LibCommon_VerdictControl all;
    import from LibCommon_Sync all;
    
    // LibIts
    import from ITS_Container language "ASN.1:1997" all;
    import from DENM_PDU_Descriptions language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
    import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
    import from IEEE1609dot2 language "ASN.1:1997" all;
    import from EtsiTs103097Module language "ASN.1:1997" all;
    
    // LibItsCommon
    import from LibItsCommon_TypesAndValues all;
    import from LibItsCommon_Templates all;
    import from LibItsCommon_Functions all;
    import from LibItsCommon_Pixits all;
    import from LibItsCommon_TestSystem all;
    import from LibItsCommon_ASN1_NamedNumbers all;
    
    // LibItsGeoNetworking
    import from LibItsGeoNetworking_TypesAndValues all;
@@ -20,6 +29,9 @@ module ItsAutoInterop_Functions {
    import from LibItsGeoNetworking_Functions all;
    import from LibItsGeoNetworking_TestSystem all;
    
    // LibItsBtp
    import from LibItsBtp_TypesAndValues all;
    
    // LibItsSecurity
    import from LibItsSecurity_TypesAndValues all;
    import from LibItsSecurity_Templates all;
@@ -416,6 +428,74 @@ module ItsAutoInterop_Functions {
        
    } // End of group postambles
    
    group checkFunctions {
        
        function f_payload_template(
                                    in BtpPortId p_dst_port, 
                                    in BtpPortId p_src_port, 
                                    in ItsPduHeader.messageID p_messageID, 
                                    in integer p_stationID
        ) return template octetstring {
            /*var template (present) Oct2 v_t1 := int2oct(p_dst_port, 2);
            var template (present) Oct2 v_t2 := int2oct(p_src_port, 2);
            var template (present) Oct1 v_t3 := int2oct(LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_protocolVersion_currentVersion_, 1);
            var template (present) Oct1 v_t4 := int2oct(p_messageID, 1);
            var template (present) Oct4 v_t5 := int2oct(p_stationID, 4);
            var template (present) octetstring v_t6 := ? length (5 .. 65535);
            var template (present) octetstring v_out := v_t1 & v_t2 & v_t3 & v_t4 & v_t5 & v_t6;*/
            var octetstring v_t1 := int2oct(p_dst_port, 2) & int2oct(p_src_port, 2) & int2oct(LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_protocolVersion_currentVersion_, 1) & int2oct(p_messageID, 1) & int2oct(p_stationID, 4);
            var template octetstring v_out := v_t1; // FIXME How to sepcify an octetstring template such as '07D200'O followed by one or more bytes
            return v_out;
        }
        
        function f_check_payload_cam(
                                      in GeoNetworkingInd v_gnInd,
                                      template (present) CAM p_cam
        ) return boolean {
            var bitstring v_btp_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 0, 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
            var bitstring v_cam_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 4, lengthof(v_gnInd.msgIn.gnPacket.packet.payload) - 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
            var CAM v_decoded_cam;
            
            // TODO Check BTP
            
            // Check Btp paylod
            if (decvalue(v_cam_payload, v_decoded_cam) == 0) {
                if (match(valueof(v_decoded_cam), p_cam) == true) {
                    return true;
                }
            }
            
            return false;
        } // End of function f_check_payload_cam
        
        function f_check_payload_denm(
                                      in GeoNetworkingInd v_gnInd,
                                      template (present) DENM p_denm
        ) return boolean {
            var bitstring v_btp_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload,0, 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
            var bitstring v_denm_payload := oct2bit(substr(v_gnInd.msgIn.gnPacket.packet.payload, 4, lengthof(v_gnInd.msgIn.gnPacket.packet.payload) - 4)); // FIXMEM Skip BTP, check if it is acceptable in an ATS
            var DENM v_decoded_denm;

            // TODO Check BTP
            
            // Check Btp paylod
            log(">>> f_check_payload_denm");
            if (decvalue(v_denm_payload, v_decoded_denm) == 0) {
              log("f_check_payload_denm: checking ", v_decoded_denm);
                if (match(valueof(v_decoded_denm), p_denm) == true) {
                  log("<<< f_check_payload_denm: true");
                  return true;
                }
            } else {
              log("f_check_payload_denm: decvalue failed: ", bit2oct(v_denm_payload));
            }
            
            log("<<< f_check_payload_denm: false");
            return false;
        } // End of function f_check_payload_denm
        
    } // End of group checkFunctions
    
    group autoInteropPosition {
        
        /**
+2 −2
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@ module ItsAutoInterop_Templates {
        ) := {
            msg                     := valueof(p_geoNetworkingInd.msgIn),
            macDestinationAddress   := valueof(p_geoNetworkingInd.macDestinationAddress),
            ssp                     := valueof(p_geoNetworkingInd.ssp),
            its_aid                 := valueof(p_geoNetworkingInd.its_aid)
            ssp                     := omit,
            its_aid                 := omit
        } // End of template m_forward_geoNetworkingInd
        
        /**
+115 −44
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ module ItsAutoInterop_TestCases {
    import from IEEE1609dot2BaseTypes language "ASN.1:1997" all;
    import from IEEE1609dot2 language "ASN.1:1997" all;
    import from EtsiTs103097Module language "ASN.1:1997" all;
    
    import from DENM_PDU_Descriptions language "ASN.1:1997" all; // TODO To be removed
    
    // LibItsCommon
    import from LibItsCommon_TestSystem all;
@@ -1405,6 +1405,7 @@ module ItsAutoInterop_TestCases {
            
            // Local variables
            var GeoNetworkingInd v_gnInd;
            var integer v_states := 0;
            
            // Test component configuration
            f_cfPtcUp(p_eut);
@@ -1412,16 +1413,28 @@ module ItsAutoInterop_TestCases {
            // Preamble
            f_prDefault();
            // Wait for DENM1
            tc_wait.start;
            tc_ac.start;
            alt {
                [] geoNetworkingPort.receive(
                [v_states == 0] geoNetworkingPort.receive(
                    mw_geoNwInd(
                        mw_geoNwPdu(
                            mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
                                ?,
                                ?,
                                e_btpB,
                                '07D2000101000027BB?'O /*mw_denm_stationId(
                                ?/*f_payload_template(
                                                   PICS_DENM_BTP_DESTINATION_PORT, 
                                                   PICS_DENM_BTP_SOURCE_PORT, 
                                                   LibItsCommon_ASN1_NamedNumbers.ItsPduHeader_messageID_denm_, 
                                                   10171
                                                   )*/
                  )))) -> value v_gnInd { // Receive a DEN message
                    tc_ac.stop;
                    // Check DENM paylod
                    if (f_check_payload_denm(
                        v_gnInd, 
                        mw_denm_stationId(
                                          PX_EUT_DESC[p_eut_id].stationId,
                                          mw_denm(
                                              mw_denmMgmtCon_with_relevances(
@@ -1438,24 +1451,26 @@ module ItsAutoInterop_TestCases {
                                              mw_situation(
                                                  LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_, 
                                                  ?
                )))*/)))) -> value v_gnInd { // Receive a DEN message
                    tc_ac.stop;
                      
                    )))) == true) {
                      v_states := v_states + 1;
                      // Re-send DEN message to the other EUTs
                      eutGeoNetworkingPort.send(
                                                m_forward_geoNetworkingInd(
                                                                           v_gnInd
                                                                           ));
                    }
                    tc_ac.start;
                    repeat;
                }
               [] geoNetworkingPort.receive(
               [v_states == 1] geoNetworkingPort.receive(
                    mw_geoNwInd(
                        mw_geoNwPdu(
                            mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
                                ?,
                                ?,
                                e_btpB,
                                '07D2000101000027BB?'O /*mw_denm_stationId(
                                ?/*'07D200000101000027BB?'O*/ /*mw_denm_stationId(
                                    PX_EUT_DESC[p_eut_id].stationId,
                                    mw_denm(
                                        mw_denmMgmtCon_with_relevances(
@@ -1474,22 +1489,46 @@ module ItsAutoInterop_TestCases {
                                            ?
                )))*/)))) -> value v_gnInd { // Receive a DEN message
                    tc_ac.stop;
                    // Check DENM paylod
                    if (f_check_payload_denm(
                        v_gnInd, 
                        mw_denm_stationId(
                                          PX_EUT_DESC[p_eut_id].stationId,
                                          mw_denm(
                                              mw_denmMgmtCon_with_relevances(
                                                  ?, 
                                                  LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  mw_referencePosition(PICS_Z1_D2_EP)
                                              ),
                                              mw_situation(
                                                  LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_, 
                                                  ?
                      
                    )))) == true) {
                      v_states := v_states + 1;
                      // Re-send DEN message to the other EUTs
                      eutGeoNetworkingPort.send(
                                                m_forward_geoNetworkingInd(
                                                                           v_gnInd
                                                                           ));
                    }
                    tc_ac.start;
                    repeat;
                }
               [] geoNetworkingPort.receive(
               [v_states == 2] geoNetworkingPort.receive(
                    mw_geoNwInd(
                        mw_geoNwPdu(
                            mw_geoNwBroadcastPacketWithNextHeaderAndPayload(
                                ?,
                                ?,
                                e_btpB,
                                '07D2000101000027BB?'O /*mw_denm_stationId(
                                ?/*'07D200000101000027BB?'O*/ /*mw_denm_stationId(
                                    PX_EUT_DESC[p_eut_id].stationId,
                                    mw_denm(
                                        mw_denmMgmtCon_with_relevances(
@@ -1508,6 +1547,28 @@ module ItsAutoInterop_TestCases {
                                            ?
                )))*/)))) -> value v_gnInd { // Receive a DEN message
                    tc_ac.stop;
                    // Check DENM paylod
                    if (f_check_payload_denm(
                        v_gnInd, 
                        mw_denm_stationId(
                                          PX_EUT_DESC[p_eut_id].stationId,
                                          mw_denm(
                                              mw_denmMgmtCon_with_relevances(
                                                  ?, 
                                                  LibItsCommon_ASN1_NamedNumbers.StationType_roadSideUnit_,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  -,
                                                  mw_referencePosition(PICS_Z1_D3_EP)
                                              ),
                                              mw_situation(
                                                  LibItsCommon_ASN1_NamedNumbers.CauseCodeType_roadworks_, 
                                                  ?
                      
                    )))) == true) {
                      // Re-send DEN message to the other EUTs
                      eutGeoNetworkingPort.send(
                                                m_forward_geoNetworkingInd(
@@ -1515,9 +1576,15 @@ module ItsAutoInterop_TestCases {
                                                                           ));
                      log("*** " & testcasename() & ": PASS: The three expected DEN messages were received ***");
                      f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                      tc_wait.stop;
                    } else {
                      tc_ac.start;
                      repeat;
                    }
                }
                [] tc_ac.timeout {
                    log("*** " & testcasename() & ": INCONC: The three expected DEN messages were not received in time ***");
                    tc_wait.stop;
                    f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                }
            } // End of 'alt' statement
@@ -1555,6 +1622,7 @@ module ItsAutoInterop_TestCases {
            f_prDefault();
            // Wait for EUT_1 DEN messages
            v_counter := 0;
            tc_wait.start;
            tc_ac.start;
            alt {
                [] eutGeoNetworkingPort.receive(
@@ -1583,10 +1651,13 @@ module ItsAutoInterop_TestCases {
                )))*/)))) -> value v_eutGeoNw { // Receive a DEN message
                    tc_ac.stop;
                    v_counter := v_counter + 1;
                    log("v_counter = ", v_counter);
                    if (v_counter < 3) {
                      tc_ac.start;
                      repeat;
                    } else {
                      log("*** " & testcasename() & ": INFO: EUT2 (vehicle) receives RWW DENMs D1, D2 and D3 ***");
                      tc_wait.stop;
                      f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                    }
                }