LCOV - code coverage report
Current view: top level - unit_test/test_spdm_requester - encap_event_ack.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.7 % 237 234
Test Date: 2025-10-12 08:10:56 Functions: 100.0 % 7 7

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2025 DMTF. All rights reserved.
       4              :  *  License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
       5              :  **/
       6              : 
       7              : #include "spdm_unit_test.h"
       8              : #include "internal/libspdm_requester_lib.h"
       9              : 
      10              : #if (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && (LIBSPDM_EVENT_RECIPIENT_SUPPORT)
      11              : 
      12              : static uint8_t m_spdm_request_buffer[0x1000];
      13              : static uint8_t m_spdm_response_buffer[0x1000];
      14              : 
      15              : static const uint32_t m_session_id = 0xffffffff;
      16              : 
      17              : typedef struct {
      18              :     uint32_t event_instance_id;
      19              :     uint8_t svh_id;
      20              :     uint8_t svh_vendor_id_len;
      21              :     uint8_t svh_vendor_id[4];
      22              :     uint16_t event_type_id;
      23              :     uint16_t event_detail_len;
      24              :     uint8_t event_detail[100];
      25              : } expected_event_t;
      26              : 
      27              : static expected_event_t m_expected_event[4];
      28              : static uint32_t m_event_counter;
      29              : 
      30            9 : static libspdm_return_t process_event(void *spdm_context,
      31              :                                       uint32_t session_id,
      32              :                                       uint32_t event_instance_id,
      33              :                                       uint8_t svh_id,
      34              :                                       uint8_t svh_vendor_id_len,
      35              :                                       const void *svh_vendor_id,
      36              :                                       uint16_t event_type_id,
      37              :                                       uint16_t event_detail_len,
      38              :                                       const void *event_detail)
      39              : {
      40            9 :     printf("Event Received\n");
      41            9 :     printf("Event Instance ID = [0x%x]\n", event_instance_id);
      42            9 :     printf("SVH ID = [0x%x], SVH VendorIDLen = [0x%x]\n", svh_id, svh_vendor_id_len);
      43            9 :     if (svh_vendor_id_len != 0) {
      44            0 :         printf("SVH VendorID\n");
      45            0 :         libspdm_dump_hex(svh_vendor_id, svh_vendor_id_len);
      46            0 :         printf("\n");
      47              :     }
      48            9 :     printf("EventTypeID = [0x%x], EventDetailLen = [0x%x]\n", event_type_id, event_detail_len);
      49            9 :     printf("Event Detail\n");
      50            9 :     libspdm_dump_hex(event_detail, event_detail_len);
      51              : 
      52            9 :     assert_int_equal(session_id, m_session_id);
      53            9 :     assert_int_equal(event_instance_id, m_expected_event[m_event_counter].event_instance_id);
      54            9 :     assert_int_equal(event_type_id, m_expected_event[m_event_counter].event_type_id);
      55            9 :     assert_int_equal(svh_id, m_expected_event[m_event_counter].svh_id);
      56            9 :     assert_int_equal(svh_vendor_id_len, m_expected_event[m_event_counter].svh_vendor_id_len);
      57            9 :     if (svh_vendor_id_len == 0) {
      58            9 :         assert_ptr_equal(svh_vendor_id, NULL);
      59              :     }
      60            9 :     assert_int_equal(event_detail_len, m_expected_event[m_event_counter].event_detail_len);
      61            9 :     assert_memory_equal(m_expected_event[m_event_counter].event_detail, event_detail,
      62              :                         event_detail_len);
      63            9 :     m_event_counter++;
      64              : 
      65            9 :     return LIBSPDM_STATUS_SUCCESS;
      66              : }
      67              : 
      68            4 : static void set_standard_state(libspdm_context_t *spdm_context)
      69              : {
      70              :     libspdm_session_info_t *session_info;
      71              : 
      72            4 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
      73              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
      74            4 :     spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_NEGOTIATED;
      75              : 
      76            4 :     spdm_context->connection_info.capability.flags |=
      77              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_EVENT_CAP;
      78            4 :     spdm_context->connection_info.capability.flags |=
      79              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP;
      80            4 :     spdm_context->connection_info.capability.flags |=
      81              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MAC_CAP;
      82            4 :     spdm_context->connection_info.capability.flags |=
      83              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP;
      84            4 :     spdm_context->connection_info.capability.flags |=
      85              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCAP_CAP;
      86              : 
      87            4 :     spdm_context->local_context.capability.flags |=
      88              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP;
      89            4 :     spdm_context->local_context.capability.flags |=
      90              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MAC_CAP;
      91            4 :     spdm_context->local_context.capability.flags |=
      92              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP;
      93            4 :     spdm_context->local_context.capability.flags |=
      94              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCAP_CAP;
      95              : 
      96            4 :     spdm_context->connection_info.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
      97            4 :     spdm_context->connection_info.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
      98            4 :     spdm_context->connection_info.algorithm.dhe_named_group = m_libspdm_use_dhe_algo;
      99            4 :     spdm_context->connection_info.algorithm.aead_cipher_suite = m_libspdm_use_aead_algo;
     100              : 
     101            4 :     spdm_context->latest_session_id = m_session_id;
     102            4 :     spdm_context->last_spdm_request_session_id_valid = true;
     103            4 :     spdm_context->last_spdm_request_session_id = m_session_id;
     104            4 :     session_info = &spdm_context->session_info[0];
     105            4 :     libspdm_session_info_init(spdm_context, session_info, m_session_id,
     106              :                               SECURED_SPDM_VERSION_11 << SPDM_VERSION_NUMBER_SHIFT_BIT, true);
     107            4 :     libspdm_secured_message_set_session_state(
     108              :         session_info->secured_message_context,
     109              :         LIBSPDM_SESSION_STATE_ESTABLISHED);
     110              : 
     111            4 :     libspdm_register_event_callback(spdm_context, process_event);
     112            4 : }
     113              : 
     114              : /* Send exactly one event. */
     115            1 : static void req_encap_event_ack_case1(void **state)
     116              : {
     117              :     libspdm_return_t status;
     118              :     libspdm_test_context_t *spdm_test_context;
     119              :     libspdm_context_t *spdm_context;
     120              :     spdm_send_event_request_t *send_event;
     121              :     size_t request_size;
     122              :     spdm_event_ack_response_t *event_ack;
     123            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     124              :     uint8_t event_data_size;
     125              :     spdm_dmtf_event_type_event_lost_t event_lost;
     126              : 
     127            1 :     spdm_test_context = *state;
     128            1 :     spdm_context = spdm_test_context->spdm_context;
     129            1 :     spdm_test_context->case_id = 0x01;
     130              : 
     131            1 :     set_standard_state(spdm_context);
     132              : 
     133            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     134              : 
     135            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     136            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     137            1 :     send_event->header.param1 = 0;
     138            1 :     send_event->header.param2 = 0;
     139            1 :     send_event->event_count = 1;
     140              : 
     141            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     142            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     143              : 
     144            1 :     generate_dmtf_event_data(send_event + 1, &event_data_size, 0x11223344,
     145              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     146              : 
     147            1 :     m_event_counter = 0;
     148            1 :     m_expected_event[0].event_instance_id = 0x11223344;
     149            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     150            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     151            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     152            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     153            1 :     memcpy(m_expected_event[0].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     154              : 
     155            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size;
     156              : 
     157            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     158              :                                                   request_size,
     159              :                                                   m_spdm_request_buffer,
     160              :                                                   &response_size,
     161              :                                                   m_spdm_response_buffer);
     162              : 
     163            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     164              : 
     165            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     166              : 
     167            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     168            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     169            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     170            1 :     assert_int_equal(event_ack->header.param1, 0);
     171            1 :     assert_int_equal(event_ack->header.param2, 0);
     172              : 
     173            1 :     assert_int_equal(m_event_counter, 1);
     174            1 : }
     175              : 
     176              : /* Send two events with in-order event instance IDs. */
     177            1 : static void req_encap_event_ack_case2(void **state)
     178              : {
     179              :     libspdm_return_t status;
     180              :     libspdm_test_context_t *spdm_test_context;
     181              :     libspdm_context_t *spdm_context;
     182              :     spdm_send_event_request_t *send_event;
     183              :     size_t request_size;
     184              :     spdm_event_ack_response_t *event_ack;
     185            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     186              :     uint8_t event_data_size[2];
     187              :     spdm_dmtf_event_type_event_lost_t event_lost;
     188              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     189              :     uint8_t *ptr;
     190              : 
     191            1 :     spdm_test_context = *state;
     192            1 :     spdm_context = spdm_test_context->spdm_context;
     193            1 :     spdm_test_context->case_id = 0x02;
     194              : 
     195            1 :     set_standard_state(spdm_context);
     196              : 
     197            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     198              : 
     199            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     200            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     201            1 :     send_event->header.param1 = 0;
     202            1 :     send_event->header.param2 = 0;
     203            1 :     send_event->event_count = 2;
     204              : 
     205            1 :     certificate_changed.certificate_changed = 5;
     206              : 
     207            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     208            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     209              : 
     210            1 :     ptr = (uint8_t *)(send_event + 1);
     211              : 
     212            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223343,
     213              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     214            1 :     ptr += event_data_size[0];
     215              : 
     216            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223344,
     217              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     218            1 :     ptr += event_data_size[1];
     219              : 
     220            1 :     m_event_counter = 0;
     221              : 
     222            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     223            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     224            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     225            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     226            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     227            1 :     memcpy(m_expected_event[0].event_detail, &certificate_changed,
     228              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     229              : 
     230            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     231            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     232            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     233            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     234            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     235            1 :     memcpy(m_expected_event[1].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     236              : 
     237            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1];
     238              : 
     239            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     240              :                                                   request_size,
     241              :                                                   m_spdm_request_buffer,
     242              :                                                   &response_size,
     243              :                                                   m_spdm_response_buffer);
     244              : 
     245            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     246              : 
     247            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     248              : 
     249            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     250            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     251            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     252            1 :     assert_int_equal(event_ack->header.param1, 0);
     253            1 :     assert_int_equal(event_ack->header.param2, 0);
     254              : 
     255            1 :     assert_int_equal(m_event_counter, 2);
     256            1 : }
     257              : 
     258              : /* Send two events with out-of-order event instance IDs. */
     259            1 : static void req_encap_event_ack_case3(void **state)
     260              : {
     261              :     libspdm_return_t status;
     262              :     libspdm_test_context_t *spdm_test_context;
     263              :     libspdm_context_t *spdm_context;
     264              :     spdm_send_event_request_t *send_event;
     265              :     size_t request_size;
     266              :     spdm_event_ack_response_t *event_ack;
     267            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     268              :     uint8_t event_data_size[2];
     269              :     spdm_dmtf_event_type_event_lost_t event_lost;
     270              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     271              :     uint8_t *ptr;
     272              : 
     273            1 :     spdm_test_context = *state;
     274            1 :     spdm_context = spdm_test_context->spdm_context;
     275            1 :     spdm_test_context->case_id = 0x03;
     276              : 
     277            1 :     set_standard_state(spdm_context);
     278              : 
     279            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     280              : 
     281            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     282            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     283            1 :     send_event->header.param1 = 0;
     284            1 :     send_event->header.param2 = 0;
     285            1 :     send_event->event_count = 2;
     286              : 
     287            1 :     certificate_changed.certificate_changed = 5;
     288              : 
     289            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     290            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     291              : 
     292            1 :     ptr = (uint8_t *)(send_event + 1);
     293              : 
     294            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223344,
     295              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     296            1 :     ptr += event_data_size[0];
     297              : 
     298            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223343,
     299              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     300            1 :     ptr += event_data_size[1];
     301              : 
     302            1 :     m_event_counter = 0;
     303              : 
     304            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     305            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     306            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     307            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     308            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     309            1 :     memcpy(m_expected_event[0].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     310              : 
     311            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     312            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     313            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     314            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     315            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     316            1 :     memcpy(m_expected_event[1].event_detail, &certificate_changed,
     317              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     318              : 
     319            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1];
     320              : 
     321            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     322              :                                                   request_size,
     323              :                                                   m_spdm_request_buffer,
     324              :                                                   &response_size,
     325              :                                                   m_spdm_response_buffer);
     326              : 
     327            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     328              : 
     329            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     330              : 
     331            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     332            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     333            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     334            1 :     assert_int_equal(event_ack->header.param1, 0);
     335            1 :     assert_int_equal(event_ack->header.param2, 0);
     336              : 
     337            1 :     assert_int_equal(m_event_counter, 2);
     338            1 : }
     339              : 
     340              : /* Send four events with in-order event instance IDs. */
     341            1 : static void req_encap_event_ack_case4(void **state)
     342              : {
     343              :     libspdm_return_t status;
     344              :     libspdm_test_context_t *spdm_test_context;
     345              :     libspdm_context_t *spdm_context;
     346              :     spdm_send_event_request_t *send_event;
     347              :     size_t request_size;
     348              :     spdm_event_ack_response_t *event_ack;
     349            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     350              :     uint8_t event_data_size[4];
     351              :     spdm_dmtf_event_type_event_lost_t event_lost;
     352              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     353              :     spdm_dmtf_event_type_measurement_changed_t measurement_changed;
     354              :     spdm_dmtf_event_type_measurement_pre_update_t measurement_pre_update;
     355              :     uint8_t *ptr;
     356              :     uint32_t index;
     357              : 
     358            1 :     spdm_test_context = *state;
     359            1 :     spdm_context = spdm_test_context->spdm_context;
     360            1 :     spdm_test_context->case_id = 0x04;
     361              : 
     362            1 :     set_standard_state(spdm_context);
     363              : 
     364            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     365              : 
     366            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     367            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     368            1 :     send_event->header.param1 = 0;
     369            1 :     send_event->header.param2 = 0;
     370            1 :     send_event->event_count = 4;
     371              : 
     372            1 :     ptr = (uint8_t *)(send_event + 1);
     373              : 
     374            1 :     certificate_changed.certificate_changed = 5;
     375            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223343,
     376              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     377            1 :     ptr += event_data_size[0];
     378              : 
     379            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     380            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     381            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223344,
     382              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     383            1 :     ptr += event_data_size[1];
     384              : 
     385           33 :     for (index = 0; index < SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE; index++) {
     386           32 :         measurement_changed.changed_measurements[index] = (uint8_t)index;
     387              :     }
     388            1 :     generate_dmtf_event_data(ptr, &event_data_size[2], 0x11223345,
     389              :                              SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED, &measurement_changed);
     390            1 :     ptr += event_data_size[2];
     391              : 
     392           33 :     for (index = 0; index < SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE; index++) {
     393           32 :         measurement_pre_update.pre_update_measurement_changes[index] = (uint8_t)(2 * index);
     394              :     }
     395            1 :     generate_dmtf_event_data(ptr, &event_data_size[3], 0x11223346,
     396              :                              SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE, &measurement_pre_update);
     397            1 :     ptr += event_data_size[3];
     398              : 
     399            1 :     m_event_counter = 0;
     400              : 
     401            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     402            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     403            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     404            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     405            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     406            1 :     memcpy(m_expected_event[0].event_detail, &certificate_changed,
     407              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     408              : 
     409            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     410            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     411            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     412            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     413            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     414            1 :     memcpy(m_expected_event[1].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     415              : 
     416            1 :     m_expected_event[2].event_instance_id = 0x11223345;
     417            1 :     m_expected_event[2].svh_id = SPDM_REGISTRY_ID_DMTF;
     418            1 :     m_expected_event[2].svh_vendor_id_len = 0;
     419            1 :     m_expected_event[2].event_type_id = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED;
     420            1 :     m_expected_event[2].event_detail_len = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE;
     421            1 :     memcpy(m_expected_event[2].event_detail, &measurement_changed,
     422              :            SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE);
     423              : 
     424            1 :     m_expected_event[3].event_instance_id = 0x11223346;
     425            1 :     m_expected_event[3].svh_id = SPDM_REGISTRY_ID_DMTF;
     426            1 :     m_expected_event[3].svh_vendor_id_len = 0;
     427            1 :     m_expected_event[3].event_type_id = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE;
     428            1 :     m_expected_event[3].event_detail_len = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE;
     429            1 :     memcpy(m_expected_event[3].event_detail, &measurement_pre_update,
     430              :            SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE);
     431              : 
     432            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1] +
     433            1 :                    event_data_size[2] + event_data_size[3];
     434              : 
     435            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     436              :                                                   request_size,
     437              :                                                   m_spdm_request_buffer,
     438              :                                                   &response_size,
     439              :                                                   m_spdm_response_buffer);
     440              : 
     441            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     442              : 
     443            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     444              : 
     445            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     446            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     447            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     448            1 :     assert_int_equal(event_ack->header.param1, 0);
     449            1 :     assert_int_equal(event_ack->header.param2, 0);
     450              : 
     451            1 :     assert_int_equal(m_event_counter, 4);
     452            1 : }
     453              : 
     454            1 : int libspdm_req_encap_event_ack_test(void)
     455              : {
     456            1 :     const struct CMUnitTest test_cases[] = {
     457              :         cmocka_unit_test(req_encap_event_ack_case1),
     458              :         cmocka_unit_test(req_encap_event_ack_case2),
     459              :         cmocka_unit_test(req_encap_event_ack_case3),
     460              :         cmocka_unit_test(req_encap_event_ack_case4)
     461              :     };
     462              : 
     463            1 :     libspdm_test_context_t test_context = {
     464              :         LIBSPDM_TEST_CONTEXT_VERSION,
     465              :         false,
     466              :     };
     467              : 
     468            1 :     libspdm_setup_test_context(&test_context);
     469              : 
     470            1 :     return cmocka_run_group_tests(test_cases,
     471              :                                   libspdm_unit_test_group_setup,
     472              :                                   libspdm_unit_test_group_teardown);
     473              : }
     474              : 
     475              : #endif /* (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && (LIBSPDM_EVENT_RECIPIENT_SUPPORT) */
        

Generated by: LCOV version 2.0-1