LCOV - code coverage report
Current view: top level - unit_test/test_spdm_responder - event_ack.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.7 % 237 234
Test Date: 2026-02-22 08:11:49 Functions: 100.0 % 7 7

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

Generated by: LCOV version 2.0-1