Commit 1c274654 authored by Yann Garcia's avatar Yann Garcia
Browse files

Implement TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01

parent b36425a0
Loading
Loading
Loading
Loading
+261 −42
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ module ItsMbr_TestCases {

            // Postamble
            f_cfHttpDown();
          } // End of function f_TC_MRS_ITSS_SEC_BV_01_mbr
          } // End of function f_TC_MRS_ITSS_SEC_BV_01_ma

        } // End of group f_TC_MRS_ITSS_SEC_BV_01

@@ -557,7 +557,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_01_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_01_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_01

@@ -723,7 +723,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_02_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_02_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_02

@@ -889,7 +889,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_03_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_03_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_03

@@ -1055,7 +1055,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_04_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_04_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_04

@@ -1221,7 +1221,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_05_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_05_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_05

@@ -1387,7 +1387,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_06_mbr
        } // End of function f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_06_ma

      } // End of group f_TC_MRS_ITSS_SEC_MESSAGES_CLASS1_CAM_BV_06

@@ -1396,7 +1396,7 @@ module ItsMbr_TestCases {
  } // End of group security

  // Clause 5.3.1	CA messages
  group ca_messagess1 {
  group ca_messagess {

    // Clause 5.3.1.1	General
    group general {
@@ -1566,7 +1566,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_BV_01_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_BV_01_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_BV_01

@@ -1737,7 +1737,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_01_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_01_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_01

@@ -1903,7 +1903,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_02_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_02_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_02

@@ -2069,7 +2069,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_03_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_03_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_03

@@ -2235,7 +2235,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_04_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_04_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS1_CAM_BV_04

@@ -2425,7 +2425,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_01_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_01_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_01

@@ -2611,7 +2611,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_02_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_02_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_02

@@ -2797,7 +2797,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_04_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_04_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_04

@@ -2979,7 +2979,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_05_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_05_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_05

@@ -3165,7 +3165,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_01_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_01_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_01

@@ -3351,7 +3351,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_02_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_02_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_02

@@ -3537,7 +3537,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_03_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_03_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_03

@@ -3723,28 +3723,10 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_04_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_04_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_04



















      /**
       * @desc Check that the IUT generates an invalid static changed value in consecutive CAMs MR Message when requested (Class 2) - obs-Static-Change: VehicleWidth
       */
@@ -3927,7 +3909,7 @@ module ItsMbr_TestCases {

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_05_mbr
        } // End of function f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_05_ma

      } // End of group f_TC_MRS_ITSS_MESSAGES_CLASS2_CAM_BV_10_05

@@ -3935,4 +3917,241 @@ module ItsMbr_TestCases {

  } // End of group ca_messages

  group multiple_messages {

    group class1 {

      /**
       * @desc Check that the IUT generates a single MR message containing observations on receiving CAM messages with different class 1 inconsistencies
       */
      testcase TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01() runs on ItsMtc system ItsMbrItssSystem {
        // Local variables
        var ItsMbrItss v_itss;
        var ItsMbrHttp v_ma;

        // Test control
        if (not PICS_IUT_ITS_S or not PICS_DETECTOR_CAM_SECURITY) {
          log("*** " & testcasename() & ": PICS_IUT_ITS_S and PICS_DETECTOR_CAM_SECURITY required for executing the TC ***");
          setverdict(inconc);
          stop;
        }

        // Test component configuration
        f_cfMtcUp01(v_itss, v_ma);

        // Start components
        v_itss.start(f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_itss());
        v_ma.start(f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_ma());

        // Synchronization
        f_serverSync2ClientsAndStop({c_prDone, c_tbDone});

        // Cleanup
        f_cfMtcDown01(v_itss, v_ma);

      } // End of testcase TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01

      group f_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01 {

        function f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_itss() runs on ItsMbrItss system ItsMbrItssSystem {
          // Local variables
          var LongPosVector v_longPosVectorIut;
          var GeoNetworkingPduList v_inconsistantMessages := {};

          // Test component configuration
          f_cfUp_itss();
          v_longPosVectorIut := f_getPosition(c_compIut);

          // Test adapter configuration

          // Preamble
          // Initial state: CAM shall be emitted
          f_prNeighbour();
          geoNetworkingPort.clear;
          tc_ac.start;
          alt {
            [] geoNetworkingPort.receive(
                                         mw_geoNwInd(
                                                     mw_geoNwSecPdu(
                                                                    mw_etsiTs103097Data_signed(
                                                                                               mw_signedData(
                                                                                                             -, 
                                                                                                             mw_toBeSignedData(
                                                                                                                               mw_signedDataPayload,
                                                                                                                               mw_headerInfo_cam
                                                                                               ))), 
                                                                    mw_geoNwShbPacket
                                         ))) {
              tc_ac.stop;
              log("*** " & testcasename() & "INFO: CA message received ***");
              f_sendUtMbrTrigger(c_CamTgt_SpeedCommon, c_ObsSpeed_ValueTooLarge_DriveDirectionReverse);
              f_selfOrClientSyncAndVerdict(c_prDone, e_success);
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & ": INCONC: No CA message received ***");
              f_selfOrClientSyncAndVerdict(c_prDone, e_error);
            }
          } // End of 'alt' statement

          // Test Body
          // Send CA message with multiple inconsistent speed value
          for (var integer i := 0; i < PX_REPEAT_INCONSISTENT_MESSAGE; i := i + 1) {
            v_inconsistantMessages[lengthof(v_inconsistantMessages)] := f_prepare_inconsistent_cam(-, -, true);
          } // End of 'for' statement
          for (var integer i := 0; i < PX_REPEAT_INCONSISTENT_MESSAGE; i := i + 1) {
            v_inconsistantMessages[lengthof(v_inconsistantMessages)] := f_prepare_inconsistent_cam(-, -, -, true);
          } // End of 'for' statement
          log("InfoPort: ", InfoPortData: { data := v_inconsistantMessages });
          log("InfoPort: length: ", lengthof(v_inconsistantMessages));
          infoPort.send(InfoPortData: { data := v_inconsistantMessages });
          for (var integer i := 0; i < lengthof(v_inconsistantMessages); i := i + 1) {
            log("Send inconsistent message #", i, ": ", valueof(m_geoNwReq_linkLayerBroadcast(v_inconsistantMessages[i])));
            f_sendGeoNetMessage(valueof(m_geoNwReq_linkLayerBroadcast(v_inconsistantMessages[i])));
            f_sleepIgnoreDef(PX_REPEAT_CONSISTENT_MESSAGE_TIMEOUT);
          } // End of 'for' statement
          log("*** " & testcasename() & ": PASS: MR triggered ***");
          f_selfOrClientSyncAndVerdict(c_tbDone, e_success);

          // Postamble
          f_poNeighbour();
          f_cfDown_itss();
        } // End of function f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_itss

        function f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_ma() runs on ItsMbrHttp system ItsMbrItssSystem {
          // Local variable
          var InfoPortData v_info_port_data;
          var boolean      v_start_awaiting := false;
          var integer      v_mbr_counter := 0;
          var HttpMessage  v_request;

          // Test component configuration
          f_cfHttpUp(cc_taCert_A, PICS_IUT_MA_CERTIFICATE_ID);

          // Test adapter configuration

          // Preamble
          f_selfOrClientSyncAndVerdict(c_prDone, e_success);

          // Test Body
          tc_ac.start;
          alt {
            [PICS_IUT_SEND_GROUPED_MBRS == false and v_start_awaiting == true] 
              httpPort.receive(
                               mw_http_request(
                                               mw_http_request_post(
                                                                    PICS_HTTP_POST_URI_MBR,
                                                                    -,
                                                                    mw_http_message_body_binary(
                                                                                                mw_binary_body_ieee1609dot2_data(
                                                                                                                                 mw_mrRequestMessage(
                                                                                                                                                     mw_encryptedData(
                                                                                                                                                                      { *, mw_recipientInfo_certRecipInfo(mw_pKRecipientInfo(vc_maHashedId8)), * },
                                                                                                                                                                      mw_symmetricCiphertext_aes128ccm
                               ))))))) -> value v_request {
              var HttpMessage v_response;
              var integer v_result;
              var EtsiTs103759Data v_etsiTs103759_data;
              var boolean v_match1, v_match2;

              tc_ac.stop;

              // Verify IUT response
              f_verify_http_mbr_request_from_iut_itss(v_request.request, v_request.request.header, v_etsiTs103759_data, v_response, v_result);
              // Send response
              if (isvalue(v_response)) {
                httpPort.send(v_response);
              } else { // Send HTTP error 500
                f_send_500_Internal_Error(v_request.request.header);
              }
              if (v_result != 0) {
                log("*** " & testcasename() & ": FAIL: Failed to verify MR ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
              }
              // Validate MR content
              log("Validate MR content #1: ", match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_speed(m_mb_obs_cam_speed_change_too_large, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[0].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[0].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE) }, {}))));
              v_match1 := match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_speed(m_mb_obs_cam_speed_change_too_large, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[0].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[0].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE) }, {})));
              log("Validate MR content #2: ", match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_speed(m_mb_obs_cam_speed_drive_direction_reverse, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[1].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[1].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE) }, {}))));
              v_match2 := match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_speed(m_mb_obs_cam_speed_drive_direction_reverse, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[1].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[1].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE) }, {})));
              if (not(v_match1) and not(v_match2)) {
                log("*** " & testcasename() & ": FAIL: MR content mismatch ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
              } else {
                v_mbr_counter := v_mbr_counter + 1;
                if (v_mbr_counter < lengthof(v_info_port_data.data)) {
                  log("Number of MBR received: ", v_mbr_counter, "/ ", lengthof(v_info_port_data.data)); // Two invalid inconsistent CA messages sent
                  tc_ac.start;
                  repeat;
                } else {
                  log("*** " & testcasename() & ": PASS: MR received ***");
                  f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                }
              }
            }
            [PICS_IUT_SEND_GROUPED_MBRS == true and v_start_awaiting == true] 
              httpPort.receive(
                               mw_http_request(
                                               mw_http_request_post(
                                                                    PICS_HTTP_POST_URI_MBR,
                                                                    -,
                                                                    mw_http_message_body_binary(
                                                                                                mw_binary_body_ieee1609dot2_data(
                                                                                                                                 mw_mrRequestMessage(
                                                                                                                                                     mw_encryptedData(
                                                                                                                                                                      { *, mw_recipientInfo_certRecipInfo(mw_pKRecipientInfo(vc_maHashedId8)), * },
                                                                                                                                                                      mw_symmetricCiphertext_aes128ccm
                               ))))))) -> value v_request {
              var HttpMessage v_response;
              var integer v_result;
              var EtsiTs103759Data v_etsiTs103759_data;

              tc_ac.stop;

              // Verify IUT response
              f_verify_http_mbr_request_from_iut_itss(v_request.request, v_request.request.header, v_etsiTs103759_data, v_response, v_result);
              // Send response
              if (isvalue(v_response)) {
                httpPort.send(v_response);
              } else { // Send HTTP error 500
                f_send_500_Internal_Error(v_request.request.header);
              }
              if (v_result != 0) {
                log("*** " & testcasename() & ": FAIL: Failed to verify MR ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
              }
              // Validate MR content
              log("Validate MR content: ", match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_security(m_mb_obs_cam_security_message_id_inc_with_header_info, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[0].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[0].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE - 1) }, {}))));
              if (not(match(v_etsiTs103759_data.report, mw_cam_specific_report(mw_asr_cam_report_security(m_mb_obs_cam_security_message_id_inc_with_header_info, { mw_v2x_pdu_stream(c_ObsPdu_etsiGn, substr(v_info_port_data.data[0].gnPacket.packet.payload, 4/*BTP layer*/, lengthof(v_info_port_data.data[0].gnPacket.packet.payload) - 4), PX_REPEAT_INCONSISTENT_MESSAGE - 1) }, {}))))) {
                log("*** " & testcasename() & ": FAIL: MR content mismatch ***");
                f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
              } else {
                if (lengthof(v_etsiTs103759_data.report.content.asrCam.observations) != lengthof(v_info_port_data.data)) {
                  log("*** " & testcasename() & ": FAIL: Wrong number of observations reported ***");
                  f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                } else {
                  log("*** " & testcasename() & ": PASS: MR received ***");
                  f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                }
              }
            }
            [] infoPort.receive(InfoPortData:?) -> value v_info_port_data {
              log("*** " & testcasename() & ": INFO: Received inconsistent messages sent ***");
              v_start_awaiting := true;
              repeat;
            }
            [] tc_ac.timeout {
              log("*** " & testcasename() & ": INCONC: Expected message not received ***");
              f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
            }
          } // End of 'alt' statement

          // Postamble
          f_cfHttpDown();
        } // End of function f_TC_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01_ma

      } // End of group f_MRS_ITSS_MULTIPLE_MESSAGES_CAM_01

    } // End of group class1

  } // End of group multiple_messages

} // End of module ItsMbr_TestCases
+14 −0
Original line number Diff line number Diff line
module LibItsMbr_Pics {

  /**
   * @desc Is the IUT the OBU entity 
   */
  modulepar boolean PICS_IUT_ITS_S := true;

  /**
   * @desc Is the IUT the MA entity 
   */
  modulepar boolean PICS_IUT_MA := true;

  modulepar boolean PICS_DETECTOR_CAM_SPEED := true;
@@ -16,6 +22,14 @@ module LibItsMbr_Pics {

  modulepar boolean PICS_DETECTOR_CAM_STATIC := true;

  /**
   * @desc Set to true if the IUT sends multiple defaults in the same MB report 
   */
  modulepar boolean PICS_IUT_SEND_GROUPED_MBRS := false;
  
  /**
   * @desc URL to send MB report to the MA 
   */
  modulepar charstring PICS_HTTP_POST_URI_MBR := "/misbehavior-report";

  /**