LCOV - code coverage report
Current view: top level - unit_test/spdm_unit_test_common - common.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 98.7 % 77 76
Test Date: 2025-06-29 08:09:00 Functions: 100.0 % 10 10

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2021-2022 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              : 
       9              : static libspdm_test_context_t *m_spdm_test_context;
      10              : 
      11              : static uint8_t m_send_receive_buffer[LIBSPDM_MAX_SENDER_RECEIVER_BUFFER_SIZE];
      12              : 
      13              : static bool m_sender_buffer_acquired = false;
      14              : static bool m_receiver_buffer_acquired = false;
      15              : 
      16              : static bool m_error_acquire_sender_buffer = false;
      17              : static bool m_error_acquire_receiver_buffer = false;
      18              : 
      19              : #if (LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP) && (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && \
      20              :     (LIBSPDM_SEND_GET_CERTIFICATE_SUPPORT)
      21              : static uint8_t m_cert_chain_buffer[SPDM_MAX_CERTIFICATE_CHAIN_SIZE];
      22              : #endif
      23              : 
      24         2575 : libspdm_return_t spdm_device_acquire_sender_buffer (
      25              :     void *context, void **msg_buf_ptr)
      26              : {
      27         2575 :     LIBSPDM_ASSERT (!m_sender_buffer_acquired && !m_receiver_buffer_acquired);
      28         2575 :     if (m_error_acquire_sender_buffer) {
      29            6 :         return LIBSPDM_STATUS_ACQUIRE_FAIL;
      30              :     } else {
      31         2569 :         *msg_buf_ptr = m_send_receive_buffer;
      32         2569 :         libspdm_zero_mem (m_send_receive_buffer, sizeof(m_send_receive_buffer));
      33         2569 :         m_sender_buffer_acquired = true;
      34              : 
      35         2569 :         return LIBSPDM_STATUS_SUCCESS;
      36              :     }
      37              : }
      38              : 
      39         2569 : void spdm_device_release_sender_buffer (void *context, const void *msg_buf_ptr)
      40              : {
      41         2569 :     LIBSPDM_ASSERT (m_sender_buffer_acquired && !m_receiver_buffer_acquired);
      42         2569 :     LIBSPDM_ASSERT (msg_buf_ptr == m_send_receive_buffer);
      43              : 
      44         2569 :     m_sender_buffer_acquired = false;
      45         2569 : }
      46              : 
      47         2532 : libspdm_return_t spdm_device_acquire_receiver_buffer (
      48              :     void *context, void **msg_buf_ptr)
      49              : {
      50         2532 :     LIBSPDM_ASSERT (!m_sender_buffer_acquired && !m_receiver_buffer_acquired);
      51              : 
      52         2532 :     if (m_error_acquire_receiver_buffer) {
      53            6 :         return LIBSPDM_STATUS_ACQUIRE_FAIL;
      54              :     } else {
      55         2526 :         *msg_buf_ptr = m_send_receive_buffer;
      56         2526 :         libspdm_zero_mem (m_send_receive_buffer, sizeof(m_send_receive_buffer));
      57         2526 :         m_receiver_buffer_acquired = true;
      58              : 
      59         2526 :         return LIBSPDM_STATUS_SUCCESS;
      60              :     }
      61              : }
      62              : 
      63         2526 : void spdm_device_release_receiver_buffer (void *context, const void *msg_buf_ptr)
      64              : {
      65         2526 :     LIBSPDM_ASSERT (!m_sender_buffer_acquired && m_receiver_buffer_acquired);
      66         2526 :     LIBSPDM_ASSERT (msg_buf_ptr == m_send_receive_buffer);
      67              : 
      68         2526 :     m_receiver_buffer_acquired = false;
      69         2526 : }
      70              : 
      71       136302 : libspdm_test_context_t *libspdm_get_test_context(void)
      72              : {
      73       136302 :     return m_spdm_test_context;
      74              : }
      75              : 
      76           85 : void libspdm_setup_test_context(libspdm_test_context_t *spdm_test_context)
      77              : {
      78           85 :     m_spdm_test_context = spdm_test_context;
      79           85 : }
      80              : 
      81           99 : int libspdm_unit_test_group_setup(void **state)
      82              : {
      83              :     libspdm_test_context_t *spdm_test_context;
      84              :     void *spdm_context;
      85              : 
      86           99 :     spdm_test_context = m_spdm_test_context;
      87           99 :     spdm_test_context->spdm_context = (void *)malloc(libspdm_get_context_size());
      88           99 :     if (spdm_test_context->spdm_context == NULL) {
      89            0 :         return -1;
      90              :     }
      91           99 :     spdm_context = spdm_test_context->spdm_context;
      92           99 :     spdm_test_context->case_id = 0xFFFFFFFF;
      93              : 
      94           99 :     libspdm_init_context(spdm_context);
      95              : 
      96           99 :     libspdm_register_device_io_func(spdm_context,
      97              :                                     spdm_test_context->send_message,
      98              :                                     spdm_test_context->receive_message);
      99           99 :     libspdm_register_transport_layer_func(spdm_context,
     100              :                                           LIBSPDM_MAX_SPDM_MSG_SIZE,
     101              :                                           LIBSPDM_TEST_TRANSPORT_HEADER_SIZE,
     102              :                                           LIBSPDM_TEST_TRANSPORT_TAIL_SIZE,
     103              :                                           libspdm_transport_test_encode_message,
     104              :                                           libspdm_transport_test_decode_message);
     105           99 :     libspdm_register_device_buffer_func(spdm_context,
     106              :                                         LIBSPDM_MAX_SENDER_RECEIVER_BUFFER_SIZE,
     107              :                                         LIBSPDM_MAX_SENDER_RECEIVER_BUFFER_SIZE,
     108              :                                         spdm_device_acquire_sender_buffer,
     109              :                                         spdm_device_release_sender_buffer,
     110              :                                         spdm_device_acquire_receiver_buffer,
     111              :                                         spdm_device_release_receiver_buffer);
     112              : 
     113           99 :     spdm_test_context->scratch_buffer_size =
     114           99 :         libspdm_get_sizeof_required_scratch_buffer(spdm_context);
     115           99 :     spdm_test_context->scratch_buffer = (void *)malloc(spdm_test_context->scratch_buffer_size);
     116           99 :     libspdm_set_scratch_buffer (spdm_context,
     117              :                                 spdm_test_context->scratch_buffer,
     118              :                                 spdm_test_context->scratch_buffer_size);
     119              : 
     120           99 :     m_error_acquire_sender_buffer = false;
     121           99 :     m_error_acquire_receiver_buffer = false;
     122              : 
     123              :     #if (LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP) && (LIBSPDM_ENABLE_CAPABILITY_ENCAP_CAP) && \
     124              :     (LIBSPDM_SEND_GET_CERTIFICATE_SUPPORT)
     125           99 :     libspdm_register_cert_chain_buffer(
     126              :         spdm_context, m_cert_chain_buffer, sizeof(m_cert_chain_buffer));
     127              :     #endif /* (LIBSPDM_ENABLE_CAPABILITY_MUT_AUTH_CAP) && (...) */
     128              : 
     129           99 :     *state = spdm_test_context;
     130              : 
     131           99 :     return 0;
     132              : }
     133              : 
     134           86 : int libspdm_unit_test_group_teardown(void **state)
     135              : {
     136              :     libspdm_test_context_t *spdm_test_context;
     137              : 
     138           86 :     LIBSPDM_ASSERT (!m_sender_buffer_acquired && !m_receiver_buffer_acquired);
     139              : 
     140           86 :     spdm_test_context = *state;
     141           86 :     free(spdm_test_context->spdm_context);
     142           86 :     free(spdm_test_context->scratch_buffer);
     143           86 :     spdm_test_context->spdm_context = NULL;
     144           86 :     spdm_test_context->case_id = 0xFFFFFFFF;
     145              : 
     146           86 :     return 0;
     147              : }
     148              : 
     149           12 : void libspdm_force_error (libspdm_error_target_t target)
     150              : {
     151           12 :     switch (target) {
     152            6 :     case LIBSPDM_ERR_ACQUIRE_SENDER_BUFFER:
     153            6 :         m_error_acquire_sender_buffer = true;
     154            6 :         break;
     155            6 :     case LIBSPDM_ERR_ACQUIRE_RECEIVER_BUFFER:
     156            6 :         m_error_acquire_receiver_buffer = true;
     157            6 :         break;
     158              :     }
     159           12 : }
     160              : 
     161           12 : void libspdm_release_error (libspdm_error_target_t target)
     162              : {
     163           12 :     switch (target) {
     164            6 :     case LIBSPDM_ERR_ACQUIRE_SENDER_BUFFER:
     165            6 :         m_error_acquire_sender_buffer = false;
     166            6 :         break;
     167            6 :     case LIBSPDM_ERR_ACQUIRE_RECEIVER_BUFFER:
     168            6 :         m_error_acquire_receiver_buffer = false;
     169            6 :         break;
     170              :     }
     171           12 : }
        

Generated by: LCOV version 2.0-1