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

Generated by: LCOV version 2.0-1