Skip to content

Commit

Permalink
Merge test_spdm_vendor_cmds into test_spdm_requester or test_spdm_res…
Browse files Browse the repository at this point in the history
…ponder

Signed-off-by: Xiao <[email protected]>
  • Loading branch information
Xiao authored and jyao1 committed May 10, 2024
1 parent 347dd25 commit ceb8802
Show file tree
Hide file tree
Showing 11 changed files with 357 additions and 244 deletions.
1 change: 0 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,6 @@ else()
ADD_SUBDIRECTORY(unit_test/test_spdm_crypt)
ADD_SUBDIRECTORY(unit_test/test_spdm_fips)
ADD_SUBDIRECTORY(unit_test/test_spdm_secured_message)
ADD_SUBDIRECTORY(unit_test/test_spdm_vendor_cmds)
endif()

if((NOT TOOLCHAIN STREQUAL "ARM_DS2022") AND (NOT TOOLCHAIN STREQUAL "RISCV_XPACK"))
Expand Down
2 changes: 2 additions & 0 deletions unit_test/test_spdm_requester/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,15 @@ SET(src_test_spdm_requester
get_csr.c
chunk_get.c
chunk_send.c
vendor_request.c
error_test/get_version_err.c
error_test/get_capabilities_err.c
error_test/negotiate_algorithms_err.c
error_test/get_digests_err.c
error_test/key_exchange_err.c
error_test/get_measurements_err.c
error_test/get_event_types_err.c
error_test/vendor_request_err.c
${LIBSPDM_DIR}/unit_test/spdm_unit_test_common/common.c
${LIBSPDM_DIR}/unit_test/spdm_unit_test_common/algo.c
${LIBSPDM_DIR}/unit_test/spdm_unit_test_common/support.c
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/**
* Copyright 2023 DMTF. All rights reserved.
* Copyright Notice:
* Copyright 2023-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -92,8 +93,6 @@ static libspdm_return_t libspdm_requester_vendor_cmds_err_test_send_message(
m_libspdm_local_buffer_size += request_size;
}
return LIBSPDM_STATUS_SUCCESS;
case 0x2:
return LIBSPDM_STATUS_SUCCESS;
default:
return LIBSPDM_STATUS_SEND_FAIL;
}
Expand Down Expand Up @@ -217,66 +216,6 @@ static void libspdm_test_requester_vendor_cmds_err_case1(void **state)
printf("case 1 %d\n", response.data[0]);
}

/**
* Test 2: Sending a vendor defined request with one parameter NULL
* Expected behavior: client returns a status of LIBSPDM_STATUS_INVALID_PARAMETER
**/
static void libspdm_test_requester_vendor_cmds_err_case2(void **state)
{
libspdm_return_t status;
libspdm_test_context_t *spdm_test_context;
libspdm_context_t *spdm_context;
uint8_t request_buffer[255] = {0};
libspdm_vendor_request_test request;
libspdm_vendor_response_test response = {0};
response.vendor_id_len = sizeof(response.vendor_id);
response.data_len = sizeof(response.data);
size_t response_len = 0;

spdm_test_context = *state;
spdm_context = spdm_test_context->spdm_context;
spdm_test_context->case_id = 0x1;
spdm_context->connection_info.algorithm.base_hash_algo =
SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_256;
request.header.spdm_version = SPDM_MESSAGE_VERSION_10;
spdm_context->connection_info.version = request.header.spdm_version <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state =
LIBSPDM_CONNECTION_STATE_NEGOTIATED;
spdm_context->local_context.is_requester = true;

status = libspdm_register_vendor_callback_func(spdm_context,
libspdm_vendor_response_func_err_test);
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);

request.standard_id = 6;
request.vendor_id_len = 2;
request.vendor_id[0] = 0xAA;
request.vendor_id[1] = 0xAA;
request.data_len = sizeof(request.data);
libspdm_set_mem(request.data, sizeof(request.data), 0xAA);

response_len = sizeof(response);

/* copy header of request structure to buffer */
libspdm_copy_mem(request_buffer, 255, &request,
sizeof(request.header) + 3 + request.vendor_id_len);
/* copy the request data to the correct offset in the request_buffer */
libspdm_copy_mem(request_buffer + sizeof(request.header) + 3 + request.vendor_id_len,
request.data_len + 2, &request.data_len, request.data_len + 2);

/* requires correctly encoded spdm vendor request message */
status = libspdm_get_vendor_defined_response(spdm_context, sizeof(request),
request_buffer, &response_len, NULL);

assert_int_equal(status, LIBSPDM_STATUS_INVALID_PARAMETER);
assert_int_equal(
spdm_context->connection_info.version >> SPDM_VERSION_NUMBER_SHIFT_BIT,
SPDM_MESSAGE_VERSION_10);

response.data_len = (uint16_t)response_len;
}

libspdm_test_context_t m_libspdm_requester_vendor_cmds_err_test_context = {
LIBSPDM_TEST_CONTEXT_VERSION,
true,
Expand All @@ -288,7 +227,6 @@ int libspdm_requester_vendor_cmds_error_test_main(void)
{
const struct CMUnitTest spdm_requester_vendor_cmds_tests[] = {
cmocka_unit_test(libspdm_test_requester_vendor_cmds_err_case1),
cmocka_unit_test(libspdm_test_requester_vendor_cmds_err_case2)
};

libspdm_setup_test_context(&m_libspdm_requester_vendor_cmds_err_test_context);
Expand Down
14 changes: 14 additions & 0 deletions unit_test/test_spdm_requester/test_spdm_requester.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ int libspdm_requester_get_event_types_test_main(void);
int libspdm_requester_get_event_types_error_test_main(void);
#endif /* LIBSPDM_EVENT_RECIPIENT_SUPPORT */

#if LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES
int libspdm_requester_vendor_cmds_test_main(void);
int libspdm_requester_vendor_cmds_error_test_main(void);
#endif /* LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES */

int main(void)
{
int return_value = 0;
Expand Down Expand Up @@ -217,5 +222,14 @@ int main(void)
}
#endif /* LIBSPDM_EVENT_RECIPIENT_SUPPORT */

#if LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES
if (libspdm_requester_vendor_cmds_test_main() != 0) {
return_value = 1;
}
if (libspdm_requester_vendor_cmds_error_test_main() != 0) {
return_value = 1;
}
#endif /* LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES */

return return_value;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/**
* Copyright 2023 DMTF. All rights reserved.
* Copyright Notice:
* Copyright 2023-2024 DMTF. All rights reserved.
* License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
**/

Expand Down Expand Up @@ -102,8 +103,6 @@ static libspdm_return_t libspdm_requester_vendor_cmds_test_send_message(
m_libspdm_local_buffer_size += request_size;
}
return LIBSPDM_STATUS_SUCCESS;
case 0x2:
return LIBSPDM_STATUS_SUCCESS;
default:
return LIBSPDM_STATUS_SEND_FAIL;
}
Expand Down Expand Up @@ -220,80 +219,6 @@ static void libspdm_test_requester_vendor_cmds_case1(void **state)
printf("case 1 %d\n", response.data[0]);
}

/**
* Test 2: Sending a vendor defined request using the internal response handler
* Expected behavior: client returns a status of LIBSPDM_STATUS_SUCCESS and expected response
**/
static void libspdm_test_requester_vendor_cmds_case2(void **state)
{
libspdm_return_t status;
libspdm_test_context_t *spdm_test_context;
libspdm_context_t *spdm_context;
uint8_t request_buffer[255] = {0};
uint8_t response_buffer[255] = {0};
libspdm_vendor_request_test request = {0};
libspdm_vendor_response_test response = {0};
size_t response_len = 0;
response.vendor_id_len = sizeof(response.vendor_id);
response.data_len = sizeof(response.data);

spdm_test_context = *state;
spdm_context = spdm_test_context->spdm_context;
spdm_test_context->case_id = 0x1;
spdm_context->connection_info.algorithm.base_hash_algo =
SPDM_ALGORITHMS_BASE_HASH_ALGO_TPM_ALG_SHA_256;
request.header.spdm_version = SPDM_MESSAGE_VERSION_10;
spdm_context->connection_info.version = request.header.spdm_version <<
SPDM_VERSION_NUMBER_SHIFT_BIT;
spdm_context->connection_info.connection_state =
LIBSPDM_CONNECTION_STATE_NEGOTIATED;
spdm_context->local_context.is_requester = true;

status = libspdm_register_vendor_get_id_callback_func(spdm_context,
libspdm_vendor_get_id_func_test);
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
status = libspdm_register_vendor_callback_func(spdm_context,
libspdm_vendor_response_func_test);
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);

request.standard_id = 6;
request.vendor_id_len = 2;
request.vendor_id[0] = 0xAA;
request.vendor_id[1] = 0xAA;
request.data_len = sizeof(request.data);
libspdm_set_mem(request.data, sizeof(request.data), 0xAA);

response_len = sizeof(response);

/* copy header of request structure to buffer */
libspdm_copy_mem(request_buffer, 255, &request,
sizeof(request.header) + 3 + request.vendor_id_len);
/* copy the request data to the correct offset in the request_buffer */
libspdm_copy_mem(request_buffer + sizeof(request.header) + 3 + request.vendor_id_len,
request.data_len + 2, &request.data_len, request.data_len + 2);

/* requires correctly encoded spdm vendor request message */
status = libspdm_get_vendor_defined_response(spdm_context, sizeof(request),
request_buffer, &response_len, response_buffer);

/* copy to response data structure in the same way as for request */
response.vendor_id_len = response_buffer[sizeof(response.header) + 2];
response.data_len =
*((uint16_t*)(response_buffer + sizeof(response.header) + 3 + response.vendor_id_len));
/* copy header of response structure from buffer */
libspdm_copy_mem(&response, sizeof(response), response_buffer,
sizeof(response.header) + 3 + response.vendor_id_len);
/* copy the response data from the correct offset in the response_buffer */
libspdm_copy_mem(&response.data, response.data_len,
response_buffer + sizeof(response.header) + 3 + response.vendor_id_len + 2,
response.data_len);

assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
assert_int_equal(
spdm_context->connection_info.version >> SPDM_VERSION_NUMBER_SHIFT_BIT,
SPDM_MESSAGE_VERSION_10);
}

libspdm_test_context_t m_libspdm_requester_vendor_cmds_test_context = {
LIBSPDM_TEST_CONTEXT_VERSION,
true,
Expand All @@ -305,7 +230,6 @@ int libspdm_requester_vendor_cmds_test_main(void)
{
const struct CMUnitTest spdm_requester_vendor_cmds_tests[] = {
cmocka_unit_test(libspdm_test_requester_vendor_cmds_case1),
cmocka_unit_test(libspdm_test_requester_vendor_cmds_case2)
};

libspdm_setup_test_context(&m_libspdm_requester_vendor_cmds_test_context);
Expand All @@ -315,5 +239,4 @@ int libspdm_requester_vendor_cmds_test_main(void)
libspdm_unit_test_group_teardown);
}


#endif /* LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES */
2 changes: 2 additions & 0 deletions unit_test/test_spdm_responder/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@ SET(src_test_spdm_responder
heartbeat.c
key_update.c
end_session.c
vendor_response.c
encap_get_certificate.c
encap_get_digests.c
encap_key_update.c
encap_challenge.c
encap_response.c
supported_event_types.c
error_test/supported_event_types_err.c
error_test/vendor_response_err.c
set_certificate_rsp.c
csr.c
receive_send.c
Expand Down
Loading

0 comments on commit ceb8802

Please sign in to comment.