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: 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_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 |= SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MAC_CAP;
      81            4 :     spdm_context->connection_info.capability.flags |=
      82              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_KEY_EX_CAP;
      83            4 :     spdm_context->connection_info.capability.flags |=
      84              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCAP_CAP;
      85              : 
      86            4 :     spdm_context->local_context.capability.flags |=
      87              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ENCRYPT_CAP;
      88            4 :     spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MAC_CAP;
      89            4 :     spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_REQUEST_FLAGS_KEY_EX_CAP;
      90            4 :     spdm_context->local_context.capability.flags |= SPDM_GET_CAPABILITIES_REQUEST_FLAGS_ENCAP_CAP;
      91              : 
      92            4 :     spdm_context->connection_info.algorithm.base_hash_algo = m_libspdm_use_hash_algo;
      93            4 :     spdm_context->connection_info.algorithm.base_asym_algo = m_libspdm_use_asym_algo;
      94            4 :     spdm_context->connection_info.algorithm.dhe_named_group = m_libspdm_use_dhe_algo;
      95            4 :     spdm_context->connection_info.algorithm.aead_cipher_suite = m_libspdm_use_aead_algo;
      96              : 
      97            4 :     spdm_context->latest_session_id = m_session_id;
      98            4 :     spdm_context->last_spdm_request_session_id_valid = true;
      99            4 :     spdm_context->last_spdm_request_session_id = m_session_id;
     100            4 :     session_info = &spdm_context->session_info[0];
     101            4 :     libspdm_session_info_init(spdm_context, session_info, m_session_id,
     102              :                               SECURED_SPDM_VERSION_11 << SPDM_VERSION_NUMBER_SHIFT_BIT, true);
     103            4 :     libspdm_secured_message_set_session_state(
     104              :         session_info->secured_message_context,
     105              :         LIBSPDM_SESSION_STATE_ESTABLISHED);
     106              : 
     107            4 :     libspdm_register_event_callback(spdm_context, process_event);
     108            4 : }
     109              : 
     110              : /* Send exactly one event. */
     111            1 : static void req_encap_event_ack_case1(void **state)
     112              : {
     113              :     libspdm_return_t status;
     114              :     libspdm_test_context_t *spdm_test_context;
     115              :     libspdm_context_t *spdm_context;
     116              :     spdm_send_event_request_t *send_event;
     117              :     size_t request_size;
     118              :     spdm_event_ack_response_t *event_ack;
     119            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     120              :     uint8_t event_data_size;
     121              :     spdm_dmtf_event_type_event_lost_t event_lost;
     122              : 
     123            1 :     spdm_test_context = *state;
     124            1 :     spdm_context = spdm_test_context->spdm_context;
     125            1 :     spdm_test_context->case_id = 0x01;
     126              : 
     127            1 :     set_standard_state(spdm_context);
     128              : 
     129            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     130              : 
     131            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     132            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     133            1 :     send_event->header.param1 = 0;
     134            1 :     send_event->header.param2 = 0;
     135            1 :     send_event->event_count = 1;
     136              : 
     137            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     138            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     139              : 
     140            1 :     generate_dmtf_event_data(send_event + 1, &event_data_size, 0x11223344,
     141              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     142              : 
     143            1 :     m_event_counter = 0;
     144            1 :     m_expected_event[0].event_instance_id = 0x11223344;
     145            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     146            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     147            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     148            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     149            1 :     memcpy(m_expected_event[0].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     150              : 
     151            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size;
     152              : 
     153            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     154              :                                                   request_size,
     155              :                                                   m_spdm_request_buffer,
     156              :                                                   &response_size,
     157              :                                                   m_spdm_response_buffer);
     158              : 
     159            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     160              : 
     161            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     162              : 
     163            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     164            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     165            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     166            1 :     assert_int_equal(event_ack->header.param1, 0);
     167            1 :     assert_int_equal(event_ack->header.param2, 0);
     168              : 
     169            1 :     assert_int_equal(m_event_counter, 1);
     170            1 : }
     171              : 
     172              : /* Send two events with in-order event instance IDs. */
     173            1 : static void req_encap_event_ack_case2(void **state)
     174              : {
     175              :     libspdm_return_t status;
     176              :     libspdm_test_context_t *spdm_test_context;
     177              :     libspdm_context_t *spdm_context;
     178              :     spdm_send_event_request_t *send_event;
     179              :     size_t request_size;
     180              :     spdm_event_ack_response_t *event_ack;
     181            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     182              :     uint8_t event_data_size[2];
     183              :     spdm_dmtf_event_type_event_lost_t event_lost;
     184              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     185              :     uint8_t *ptr;
     186              : 
     187            1 :     spdm_test_context = *state;
     188            1 :     spdm_context = spdm_test_context->spdm_context;
     189            1 :     spdm_test_context->case_id = 0x02;
     190              : 
     191            1 :     set_standard_state(spdm_context);
     192              : 
     193            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     194              : 
     195            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     196            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     197            1 :     send_event->header.param1 = 0;
     198            1 :     send_event->header.param2 = 0;
     199            1 :     send_event->event_count = 2;
     200              : 
     201            1 :     certificate_changed.certificate_changed = 5;
     202              : 
     203            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     204            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     205              : 
     206            1 :     ptr = (uint8_t *)(send_event + 1);
     207              : 
     208            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223343,
     209              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     210            1 :     ptr += event_data_size[0];
     211              : 
     212            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223344,
     213              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     214            1 :     ptr += event_data_size[1];
     215              : 
     216            1 :     m_event_counter = 0;
     217              : 
     218            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     219            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     220            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     221            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     222            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     223            1 :     memcpy(m_expected_event[0].event_detail, &certificate_changed,
     224              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     225              : 
     226            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     227            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     228            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     229            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     230            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     231            1 :     memcpy(m_expected_event[1].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     232              : 
     233            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1];
     234              : 
     235            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     236              :                                                   request_size,
     237              :                                                   m_spdm_request_buffer,
     238              :                                                   &response_size,
     239              :                                                   m_spdm_response_buffer);
     240              : 
     241            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     242              : 
     243            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     244              : 
     245            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     246            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     247            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     248            1 :     assert_int_equal(event_ack->header.param1, 0);
     249            1 :     assert_int_equal(event_ack->header.param2, 0);
     250              : 
     251            1 :     assert_int_equal(m_event_counter, 2);
     252            1 : }
     253              : 
     254              : /* Send two events with out-of-order event instance IDs. */
     255            1 : static void req_encap_event_ack_case3(void **state)
     256              : {
     257              :     libspdm_return_t status;
     258              :     libspdm_test_context_t *spdm_test_context;
     259              :     libspdm_context_t *spdm_context;
     260              :     spdm_send_event_request_t *send_event;
     261              :     size_t request_size;
     262              :     spdm_event_ack_response_t *event_ack;
     263            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     264              :     uint8_t event_data_size[2];
     265              :     spdm_dmtf_event_type_event_lost_t event_lost;
     266              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     267              :     uint8_t *ptr;
     268              : 
     269            1 :     spdm_test_context = *state;
     270            1 :     spdm_context = spdm_test_context->spdm_context;
     271            1 :     spdm_test_context->case_id = 0x03;
     272              : 
     273            1 :     set_standard_state(spdm_context);
     274              : 
     275            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     276              : 
     277            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     278            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     279            1 :     send_event->header.param1 = 0;
     280            1 :     send_event->header.param2 = 0;
     281            1 :     send_event->event_count = 2;
     282              : 
     283            1 :     certificate_changed.certificate_changed = 5;
     284              : 
     285            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     286            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     287              : 
     288            1 :     ptr = (uint8_t *)(send_event + 1);
     289              : 
     290            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223344,
     291              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     292            1 :     ptr += event_data_size[0];
     293              : 
     294            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223343,
     295              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     296            1 :     ptr += event_data_size[1];
     297              : 
     298            1 :     m_event_counter = 0;
     299              : 
     300            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     301            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     302            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     303            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     304            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     305            1 :     memcpy(m_expected_event[0].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     306              : 
     307            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     308            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     309            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     310            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     311            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     312            1 :     memcpy(m_expected_event[1].event_detail, &certificate_changed,
     313              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     314              : 
     315            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1];
     316              : 
     317            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     318              :                                                   request_size,
     319              :                                                   m_spdm_request_buffer,
     320              :                                                   &response_size,
     321              :                                                   m_spdm_response_buffer);
     322              : 
     323            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     324              : 
     325            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     326              : 
     327            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     328            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     329            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     330            1 :     assert_int_equal(event_ack->header.param1, 0);
     331            1 :     assert_int_equal(event_ack->header.param2, 0);
     332              : 
     333            1 :     assert_int_equal(m_event_counter, 2);
     334            1 : }
     335              : 
     336              : /* Send four events with in-order event instance IDs. */
     337            1 : static void req_encap_event_ack_case4(void **state)
     338              : {
     339              :     libspdm_return_t status;
     340              :     libspdm_test_context_t *spdm_test_context;
     341              :     libspdm_context_t *spdm_context;
     342              :     spdm_send_event_request_t *send_event;
     343              :     size_t request_size;
     344              :     spdm_event_ack_response_t *event_ack;
     345            1 :     size_t response_size =  sizeof(m_spdm_response_buffer);
     346              :     uint8_t event_data_size[4];
     347              :     spdm_dmtf_event_type_event_lost_t event_lost;
     348              :     spdm_dmtf_event_type_certificate_changed_t certificate_changed;
     349              :     spdm_dmtf_event_type_measurement_changed_t measurement_changed;
     350              :     spdm_dmtf_event_type_measurement_pre_update_t measurement_pre_update;
     351              :     uint8_t *ptr;
     352              :     uint32_t index;
     353              : 
     354            1 :     spdm_test_context = *state;
     355            1 :     spdm_context = spdm_test_context->spdm_context;
     356            1 :     spdm_test_context->case_id = 0x04;
     357              : 
     358            1 :     set_standard_state(spdm_context);
     359              : 
     360            1 :     send_event = (spdm_send_event_request_t *)m_spdm_request_buffer;
     361              : 
     362            1 :     send_event->header.spdm_version = SPDM_MESSAGE_VERSION_13;
     363            1 :     send_event->header.request_response_code = SPDM_SEND_EVENT;
     364            1 :     send_event->header.param1 = 0;
     365            1 :     send_event->header.param2 = 0;
     366            1 :     send_event->event_count = 4;
     367              : 
     368            1 :     ptr = (uint8_t *)(send_event + 1);
     369              : 
     370            1 :     certificate_changed.certificate_changed = 5;
     371            1 :     generate_dmtf_event_data(ptr, &event_data_size[0], 0x11223343,
     372              :                              SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED, &certificate_changed);
     373            1 :     ptr += event_data_size[0];
     374              : 
     375            1 :     event_lost.last_acked_event_inst_id = 0xffeeddcc;
     376            1 :     event_lost.last_lost_event_inst_id = 0x55667788;
     377            1 :     generate_dmtf_event_data(ptr, &event_data_size[1], 0x11223344,
     378              :                              SPDM_DMTF_EVENT_TYPE_EVENT_LOST, &event_lost);
     379            1 :     ptr += event_data_size[1];
     380              : 
     381           33 :     for (index = 0; index < SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE; index++) {
     382           32 :         measurement_changed.changed_measurements[index] = (uint8_t)index;
     383              :     }
     384            1 :     generate_dmtf_event_data(ptr, &event_data_size[2], 0x11223345,
     385              :                              SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED, &measurement_changed);
     386            1 :     ptr += event_data_size[2];
     387              : 
     388           33 :     for (index = 0; index < SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE; index++) {
     389           32 :         measurement_pre_update.pre_update_measurement_changes[index] = (uint8_t)(2 * index);
     390              :     }
     391            1 :     generate_dmtf_event_data(ptr, &event_data_size[3], 0x11223346,
     392              :                              SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE, &measurement_pre_update);
     393            1 :     ptr += event_data_size[3];
     394              : 
     395            1 :     m_event_counter = 0;
     396              : 
     397            1 :     m_expected_event[0].event_instance_id = 0x11223343;
     398            1 :     m_expected_event[0].svh_id = SPDM_REGISTRY_ID_DMTF;
     399            1 :     m_expected_event[0].svh_vendor_id_len = 0;
     400            1 :     m_expected_event[0].event_type_id = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED;
     401            1 :     m_expected_event[0].event_detail_len = SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE;
     402            1 :     memcpy(m_expected_event[0].event_detail, &certificate_changed,
     403              :            SPDM_DMTF_EVENT_TYPE_CERTIFICATE_CHANGED_SIZE);
     404              : 
     405            1 :     m_expected_event[1].event_instance_id = 0x11223344;
     406            1 :     m_expected_event[1].svh_id = SPDM_REGISTRY_ID_DMTF;
     407            1 :     m_expected_event[1].svh_vendor_id_len = 0;
     408            1 :     m_expected_event[1].event_type_id = SPDM_DMTF_EVENT_TYPE_EVENT_LOST;
     409            1 :     m_expected_event[1].event_detail_len = SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE;
     410            1 :     memcpy(m_expected_event[1].event_detail, &event_lost, SPDM_DMTF_EVENT_TYPE_EVENT_LOST_SIZE);
     411              : 
     412            1 :     m_expected_event[2].event_instance_id = 0x11223345;
     413            1 :     m_expected_event[2].svh_id = SPDM_REGISTRY_ID_DMTF;
     414            1 :     m_expected_event[2].svh_vendor_id_len = 0;
     415            1 :     m_expected_event[2].event_type_id = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED;
     416            1 :     m_expected_event[2].event_detail_len = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE;
     417            1 :     memcpy(m_expected_event[2].event_detail, &measurement_changed,
     418              :            SPDM_DMTF_EVENT_TYPE_MEASUREMENT_CHANGED_SIZE);
     419              : 
     420            1 :     m_expected_event[3].event_instance_id = 0x11223346;
     421            1 :     m_expected_event[3].svh_id = SPDM_REGISTRY_ID_DMTF;
     422            1 :     m_expected_event[3].svh_vendor_id_len = 0;
     423            1 :     m_expected_event[3].event_type_id = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE;
     424            1 :     m_expected_event[3].event_detail_len = SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE;
     425            1 :     memcpy(m_expected_event[3].event_detail, &measurement_pre_update,
     426              :            SPDM_DMTF_EVENT_TYPE_MEASUREMENT_PRE_UPDATE_SIZE);
     427              : 
     428            1 :     request_size = sizeof(spdm_send_event_request_t) + event_data_size[0] + event_data_size[1] +
     429            1 :                    event_data_size[2] + event_data_size[3];
     430              : 
     431            1 :     status = libspdm_get_encap_response_event_ack(spdm_context,
     432              :                                                   request_size,
     433              :                                                   m_spdm_request_buffer,
     434              :                                                   &response_size,
     435              :                                                   m_spdm_response_buffer);
     436              : 
     437            1 :     event_ack = (spdm_event_ack_response_t *)m_spdm_response_buffer;
     438              : 
     439            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     440              : 
     441            1 :     assert_int_equal(response_size, sizeof(spdm_event_ack_response_t));
     442            1 :     assert_int_equal(event_ack->header.spdm_version, SPDM_MESSAGE_VERSION_13);
     443            1 :     assert_int_equal(event_ack->header.request_response_code, SPDM_EVENT_ACK);
     444            1 :     assert_int_equal(event_ack->header.param1, 0);
     445            1 :     assert_int_equal(event_ack->header.param2, 0);
     446              : 
     447            1 :     assert_int_equal(m_event_counter, 4);
     448            1 : }
     449              : 
     450            1 : int libspdm_req_encap_event_ack_test(void)
     451              : {
     452            1 :     const struct CMUnitTest test_cases[] = {
     453              :         cmocka_unit_test(req_encap_event_ack_case1),
     454              :         cmocka_unit_test(req_encap_event_ack_case2),
     455              :         cmocka_unit_test(req_encap_event_ack_case3),
     456              :         cmocka_unit_test(req_encap_event_ack_case4)
     457              :     };
     458              : 
     459            1 :     libspdm_test_context_t test_context = {
     460              :         LIBSPDM_TEST_CONTEXT_VERSION,
     461              :         false,
     462              :     };
     463              : 
     464            1 :     libspdm_setup_test_context(&test_context);
     465              : 
     466            1 :     return cmocka_run_group_tests(test_cases,
     467              :                                   libspdm_unit_test_group_setup,
     468              :                                   libspdm_unit_test_group_teardown);
     469              : }
     470              : 
     471              : #endif /* (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && (LIBSPDM_EVENT_RECIPIENT_SUPPORT) */
        

Generated by: LCOV version 2.0-1