LCOV - code coverage report
Current view: top level - unit_test/test_spdm_requester - set_key_pair_info.c (source / functions) Coverage Total Hit
Test: coverage.info Lines: 95.8 % 95 91
Test Date: 2025-06-29 08:09:00 Functions: 100.0 % 6 6

            Line data    Source code
       1              : /**
       2              :  *  Copyright Notice:
       3              :  *  Copyright 2024 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              : #include "internal/libspdm_secured_message_lib.h"
      10              : 
      11              : #if LIBSPDM_ENABLE_CAPABILITY_SET_KEY_PAIR_INFO_CAP
      12              : 
      13            3 : libspdm_return_t libspdm_requester_set_key_pair_info_test_send_message(
      14              :     void *spdm_context, size_t request_size, const void *request,
      15              :     uint64_t timeout)
      16              : {
      17              :     libspdm_test_context_t *spdm_test_context;
      18              : 
      19            3 :     spdm_test_context = libspdm_get_test_context();
      20            3 :     switch (spdm_test_context->case_id) {
      21            3 :     case 0x1:
      22              :     case 0x2:
      23              :     case 0x3:
      24            3 :         return LIBSPDM_STATUS_SUCCESS;
      25            0 :     default:
      26            0 :         return LIBSPDM_STATUS_SEND_FAIL;
      27              :     }
      28              : }
      29              : 
      30            3 : libspdm_return_t libspdm_requester_set_key_pair_info_test_receive_message(
      31              :     void *spdm_context, size_t *response_size,
      32              :     void **response, uint64_t timeout)
      33              : {
      34              :     libspdm_test_context_t *spdm_test_context;
      35              : 
      36            3 :     spdm_test_context = libspdm_get_test_context();
      37            3 :     switch (spdm_test_context->case_id) {
      38              : 
      39            1 :     case 0x1: {
      40              :         spdm_key_pair_info_response_t *spdm_response;
      41              :         size_t spdm_response_size;
      42              :         size_t transport_header_size;
      43              : 
      44            1 :         transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE;
      45            1 :         spdm_response = (void *)((uint8_t *)*response + transport_header_size);
      46            1 :         spdm_response_size = sizeof(spdm_key_pair_info_response_t);
      47              : 
      48            1 :         spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_13;
      49            1 :         spdm_response->header.request_response_code = SPDM_SET_KEY_PAIR_INFO_ACK;
      50            1 :         spdm_response->header.param1 = 0;
      51            1 :         spdm_response->header.param2 = 0;
      52              : 
      53            1 :         libspdm_transport_test_encode_message(spdm_context, NULL, false,
      54              :                                               false, spdm_response_size,
      55              :                                               spdm_response, response_size,
      56              :                                               response);
      57              :     }
      58            1 :         return LIBSPDM_STATUS_SUCCESS;
      59            1 :     case 0x2: {
      60              :         spdm_key_pair_info_response_t *spdm_response;
      61              :         size_t spdm_response_size;
      62              :         size_t transport_header_size;
      63              : 
      64            1 :         transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE;
      65            1 :         spdm_response = (void *)((uint8_t *)*response + transport_header_size);
      66            1 :         spdm_response_size = sizeof(spdm_key_pair_info_response_t);
      67              : 
      68            1 :         spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_12;
      69            1 :         spdm_response->header.request_response_code = SPDM_SET_KEY_PAIR_INFO_ACK;
      70            1 :         spdm_response->header.param1 = 0;
      71            1 :         spdm_response->header.param2 = 0;
      72              : 
      73            1 :         libspdm_transport_test_encode_message(spdm_context, NULL, false,
      74              :                                               false, spdm_response_size,
      75              :                                               spdm_response, response_size,
      76              :                                               response);
      77              :     }
      78            1 :         return LIBSPDM_STATUS_SUCCESS;
      79              : 
      80            1 :     case 0x3: {
      81              :         spdm_key_pair_info_response_t *spdm_response;
      82              :         size_t spdm_response_size;
      83              :         size_t transport_header_size;
      84              : 
      85            1 :         transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE;
      86            1 :         spdm_response = (void *)((uint8_t *)*response + transport_header_size);
      87            1 :         spdm_response_size = sizeof(spdm_key_pair_info_response_t);
      88              : 
      89            1 :         spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_13;
      90            1 :         spdm_response->header.request_response_code = SPDM_KEY_PAIR_INFO;
      91            1 :         spdm_response->header.param1 = 0;
      92            1 :         spdm_response->header.param2 = 0;
      93              : 
      94            1 :         libspdm_transport_test_encode_message(spdm_context, NULL, false,
      95              :                                               false, spdm_response_size,
      96              :                                               spdm_response, response_size,
      97              :                                               response);
      98              :     }
      99            1 :         return LIBSPDM_STATUS_SUCCESS;
     100              : 
     101            0 :     default:
     102            0 :         return LIBSPDM_STATUS_RECEIVE_FAIL;
     103              :     }
     104              : }
     105              : 
     106              : /**
     107              :  * Test 1: Successful response to set key pair info
     108              :  * Expected Behavior: get a RETURN_SUCCESS return code
     109              :  **/
     110            1 : void libspdm_test_requester_set_key_pair_info_case1(void **state)
     111              : {
     112              :     libspdm_return_t status;
     113              :     libspdm_test_context_t *spdm_test_context;
     114              :     libspdm_context_t *spdm_context;
     115              : 
     116              :     uint8_t key_pair_id;
     117              :     uint8_t operation;
     118              :     uint16_t desired_key_usage;
     119              :     uint32_t desired_asym_algo;
     120              :     uint8_t desired_assoc_cert_slot_mask;
     121              : 
     122            1 :     spdm_test_context = *state;
     123            1 :     spdm_context = spdm_test_context->spdm_context;
     124            1 :     spdm_test_context->case_id = 0x1;
     125            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
     126              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     127              : 
     128            1 :     spdm_context->connection_info.connection_state =
     129              :         LIBSPDM_CONNECTION_STATE_NEGOTIATED;
     130            1 :     spdm_context->connection_info.capability.flags |=
     131              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_KEY_PAIR_INFO_CAP;
     132              : 
     133            1 :     key_pair_id = 1;
     134            1 :     operation = SPDM_SET_KEY_PAIR_INFO_ERASE_OPERATION;
     135            1 :     desired_key_usage = 0;
     136            1 :     desired_asym_algo = 0;
     137            1 :     desired_assoc_cert_slot_mask = 0;
     138            1 :     status = libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
     139              :                                        operation, desired_key_usage, desired_asym_algo,
     140              :                                        desired_assoc_cert_slot_mask);
     141              : 
     142            1 :     assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
     143              : 
     144              :     /*wrong desired_assoc_cert_slot_mask when operation is erase*/
     145            1 :     desired_assoc_cert_slot_mask = 1;
     146            1 :     status = libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
     147              :                                        operation, desired_key_usage, desired_asym_algo,
     148              :                                        desired_assoc_cert_slot_mask);
     149              : 
     150            1 :     assert_int_equal(status, LIBSPDM_STATUS_INVALID_PARAMETER);
     151            1 : }
     152              : 
     153              : /**
     154              :  * Test 2: Fail case, The response version is incorrect .
     155              :  * Expected Behavior: returns a status of LIBSPDM_STATUS_INVALID_MSG_FIELD.
     156              :  **/
     157            1 : void libspdm_test_requester_set_key_pair_info_case2(void **state)
     158              : {
     159              :     libspdm_return_t status;
     160              :     libspdm_test_context_t *spdm_test_context;
     161              :     libspdm_context_t *spdm_context;
     162              : 
     163              :     uint8_t key_pair_id;
     164              :     uint8_t operation;
     165              :     uint16_t desired_key_usage;
     166              :     uint32_t desired_asym_algo;
     167              :     uint8_t desired_assoc_cert_slot_mask;
     168              : 
     169            1 :     spdm_test_context = *state;
     170            1 :     spdm_context = spdm_test_context->spdm_context;
     171            1 :     spdm_test_context->case_id = 0x2;
     172            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
     173              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     174              : 
     175            1 :     spdm_context->connection_info.connection_state =
     176              :         LIBSPDM_CONNECTION_STATE_NEGOTIATED;
     177            1 :     spdm_context->connection_info.capability.flags |=
     178              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_KEY_PAIR_INFO_CAP;
     179              : 
     180            1 :     key_pair_id = 1;
     181            1 :     operation = SPDM_SET_KEY_PAIR_INFO_ERASE_OPERATION;
     182            1 :     desired_key_usage = 0;
     183            1 :     desired_asym_algo = 0;
     184            1 :     desired_assoc_cert_slot_mask = 0;
     185            1 :     status = libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
     186              :                                        operation, desired_key_usage, desired_asym_algo,
     187              :                                        desired_assoc_cert_slot_mask);
     188              : 
     189            1 :     assert_int_equal(status, LIBSPDM_STATUS_INVALID_MSG_FIELD);
     190            1 : }
     191              : 
     192              : /**
     193              :  * Test 3: Fail case, The response code is incorrect
     194              :  * Expected Behavior: returns a status of LIBSPDM_STATUS_INVALID_MSG_FIELD.
     195              :  **/
     196            1 : void libspdm_test_requester_set_key_pair_info_case3(void **state)
     197              : {
     198              :     libspdm_return_t status;
     199              :     libspdm_test_context_t *spdm_test_context;
     200              :     libspdm_context_t *spdm_context;
     201              : 
     202              :     uint8_t key_pair_id;
     203              :     uint8_t operation;
     204              :     uint16_t desired_key_usage;
     205              :     uint32_t desired_asym_algo;
     206              :     uint8_t desired_assoc_cert_slot_mask;
     207              : 
     208            1 :     spdm_test_context = *state;
     209            1 :     spdm_context = spdm_test_context->spdm_context;
     210            1 :     spdm_test_context->case_id = 0x3;
     211            1 :     spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
     212              :                                             SPDM_VERSION_NUMBER_SHIFT_BIT;
     213              : 
     214            1 :     spdm_context->connection_info.connection_state =
     215              :         LIBSPDM_CONNECTION_STATE_NEGOTIATED;
     216            1 :     spdm_context->connection_info.capability.flags |=
     217              :         SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_SET_KEY_PAIR_INFO_CAP;
     218              : 
     219            1 :     key_pair_id = 1;
     220            1 :     operation = SPDM_SET_KEY_PAIR_INFO_ERASE_OPERATION;
     221            1 :     desired_key_usage = 0;
     222            1 :     desired_asym_algo = 0;
     223            1 :     desired_assoc_cert_slot_mask = 0;
     224            1 :     status = libspdm_set_key_pair_info(spdm_context, NULL, key_pair_id,
     225              :                                        operation, desired_key_usage, desired_asym_algo,
     226              :                                        desired_assoc_cert_slot_mask);
     227              : 
     228            1 :     assert_int_equal(status, LIBSPDM_STATUS_INVALID_MSG_FIELD);
     229            1 : }
     230              : 
     231            1 : int libspdm_requester_set_key_pair_info_test_main(void)
     232              : {
     233            1 :     const struct CMUnitTest spdm_requester_set_key_pair_info_tests[] = {
     234              :         /* Successful response to set key pair info, key_pair_id is 1*/
     235              :         cmocka_unit_test(libspdm_test_requester_set_key_pair_info_case1),
     236              :         /* The response version is incorrect */
     237              :         cmocka_unit_test(libspdm_test_requester_set_key_pair_info_case2),
     238              :         /* The response code is incorrect */
     239              :         cmocka_unit_test(libspdm_test_requester_set_key_pair_info_case3),
     240              :     };
     241              : 
     242            1 :     libspdm_test_context_t test_context = {
     243              :         LIBSPDM_TEST_CONTEXT_VERSION,
     244              :         true,
     245              :         libspdm_requester_set_key_pair_info_test_send_message,
     246              :         libspdm_requester_set_key_pair_info_test_receive_message,
     247              :     };
     248              : 
     249            1 :     libspdm_setup_test_context(&test_context);
     250              : 
     251            1 :     return cmocka_run_group_tests(spdm_requester_set_key_pair_info_tests,
     252              :                                   libspdm_unit_test_group_setup,
     253              :                                   libspdm_unit_test_group_teardown);
     254              : }
     255              : 
     256              : #endif /*LIBSPDM_ENABLE_CAPABILITY_SET_KEY_PAIR_INFO_CAP*/
        

Generated by: LCOV version 2.0-1