Skip to content

Commit c5f9ca7

Browse files
Xiaohanjllljyao1
Xiaohanjlll
authored andcommitted
Add unit test for SPDM 1.3 capabilities
Signed-off-by: Xiaohanjlll <[email protected]>
1 parent f7fb1da commit c5f9ca7

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

unit_test/test_spdm_requester/get_capabilities.c

+61
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,15 @@
4848
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_ALIAS_CERT_CAP | \
4949
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_CHAL_CAP)
5050

51+
#define LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13 \
52+
(LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_11 | \
53+
LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_12 | \
54+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_EP_INFO_CAP_NO_SIG | \
55+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MEL_CAP | \
56+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_EVENT_CAP | \
57+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_MULTI_KEY_CAP_ONLY | \
58+
SPDM_GET_CAPABILITIES_RESPONSE_FLAGS_GET_KEY_PAIR_INFO_CAP)
59+
5160
static size_t m_libspdm_local_buffer_size;
5261
static uint8_t m_libspdm_local_buffer[LIBSPDM_MAX_MESSAGE_VCA_BUFFER_SIZE];
5362

@@ -134,6 +143,8 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_send_message(
134143
return LIBSPDM_STATUS_SUCCESS;
135144
case 0x22:
136145
return LIBSPDM_STATUS_SUCCESS;
146+
case 0x23:
147+
return LIBSPDM_STATUS_SUCCESS;
137148
default:
138149
return LIBSPDM_STATUS_SEND_FAIL;
139150
}
@@ -973,6 +984,30 @@ static libspdm_return_t libspdm_requester_get_capabilities_test_receive_message(
973984
spdm_response->data_transfer_size = LIBSPDM_DATA_TRANSFER_SIZE;
974985
spdm_response->max_spdm_msg_size = LIBSPDM_MAX_SPDM_MSG_SIZE;
975986

987+
libspdm_transport_test_encode_message(spdm_context, NULL, false,
988+
false, spdm_response_size,
989+
spdm_response,
990+
response_size, response);
991+
}
992+
return LIBSPDM_STATUS_SUCCESS;
993+
case 0x23: {
994+
spdm_capabilities_response_t *spdm_response;
995+
size_t spdm_response_size;
996+
size_t transport_header_size;
997+
998+
spdm_response_size = sizeof(spdm_capabilities_response_t);
999+
transport_header_size = LIBSPDM_TEST_TRANSPORT_HEADER_SIZE;
1000+
spdm_response = (void *)((uint8_t *)*response + transport_header_size);
1001+
1002+
libspdm_zero_mem(spdm_response, spdm_response_size);
1003+
spdm_response->header.spdm_version = SPDM_MESSAGE_VERSION_13;
1004+
spdm_response->header.request_response_code = SPDM_CAPABILITIES;
1005+
spdm_response->header.param1 = 0;
1006+
spdm_response->header.param2 = 0;
1007+
spdm_response->ct_exponent = 0;
1008+
spdm_response->flags = LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13;
1009+
spdm_response->data_transfer_size = LIBSPDM_DATA_TRANSFER_SIZE;
1010+
spdm_response->max_spdm_msg_size = LIBSPDM_MAX_SPDM_MSG_SIZE;
9761011
libspdm_transport_test_encode_message(spdm_context, NULL, false,
9771012
false, spdm_response_size,
9781013
spdm_response,
@@ -1357,6 +1392,31 @@ static void libspdm_test_requester_get_capabilities_case33(void **state)
13571392
* }
13581393
*/
13591394

1395+
static void libspdm_test_requester_get_capabilities_case35(void **state)
1396+
{
1397+
libspdm_return_t status;
1398+
libspdm_test_context_t *spdm_test_context;
1399+
libspdm_context_t *spdm_context;
1400+
1401+
spdm_test_context = *state;
1402+
spdm_context = spdm_test_context->spdm_context;
1403+
spdm_test_context->case_id = 0x23;
1404+
spdm_context->connection_info.version = SPDM_MESSAGE_VERSION_13 <<
1405+
SPDM_VERSION_NUMBER_SHIFT_BIT;
1406+
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION;
1407+
spdm_context->local_context.capability.ct_exponent = 0;
1408+
1409+
status = libspdm_get_capabilities(spdm_context);
1410+
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
1411+
assert_int_equal(spdm_context->connection_info.capability.max_spdm_msg_size,
1412+
LIBSPDM_MAX_SPDM_MSG_SIZE);
1413+
assert_int_equal(spdm_context->connection_info.capability.data_transfer_size,
1414+
LIBSPDM_DATA_TRANSFER_SIZE);
1415+
assert_int_equal(spdm_context->connection_info.capability.ct_exponent, 0);
1416+
assert_int_equal(spdm_context->connection_info.capability.flags,
1417+
LIBSPDM_DEFAULT_CAPABILITY_RESPONSE_FLAG_VERSION_13);
1418+
}
1419+
13601420
static libspdm_test_context_t m_libspdm_requester_get_capabilities_test_context = {
13611421
LIBSPDM_TEST_CONTEXT_VERSION,
13621422
true,
@@ -1401,6 +1461,7 @@ int libspdm_requester_get_capabilities_test_main(void)
14011461
cmocka_unit_test(libspdm_test_requester_get_capabilities_case32),
14021462
cmocka_unit_test(libspdm_test_requester_get_capabilities_case33),
14031463
/* cmocka_unit_test(libspdm_test_requester_get_capabilities_case34), */
1464+
cmocka_unit_test(libspdm_test_requester_get_capabilities_case35),
14041465
};
14051466

14061467
libspdm_setup_test_context(

unit_test/test_spdm_responder/capabilities.c

+48
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,21 @@ spdm_get_capabilities_request_t m_libspdm_get_capabilities_request26 = {
452452
};
453453
size_t m_libspdm_get_capabilities_request26_size = sizeof(m_libspdm_get_capabilities_request26);
454454

455+
456+
spdm_get_capabilities_request_t m_libspdm_get_capabilities_request27 = {
457+
{
458+
SPDM_MESSAGE_VERSION_13,
459+
SPDM_GET_CAPABILITIES,
460+
},
461+
0x00, /*reserved*/
462+
0x01, /*ct_exponent*/
463+
0x0000, /*reserved, 2 bytes*/
464+
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_ONLY,
465+
LIBSPDM_DATA_TRANSFER_SIZE,
466+
LIBSPDM_MAX_SPDM_MSG_SIZE,
467+
};
468+
size_t m_libspdm_get_capabilities_request27_size = sizeof(m_libspdm_get_capabilities_request27);
469+
455470
void libspdm_test_responder_capabilities_case1(void **state)
456471
{
457472
libspdm_return_t status;
@@ -1177,6 +1192,37 @@ void libspdm_test_responder_capabilities_case26(void **state)
11771192
assert_int_equal(spdm_response->header.param2, 0);
11781193
}
11791194

1195+
void libspdm_test_responder_capabilities_case27(void **state)
1196+
{
1197+
libspdm_return_t status;
1198+
libspdm_test_context_t *spdm_test_context;
1199+
libspdm_context_t *spdm_context;
1200+
size_t response_size;
1201+
uint8_t response[LIBSPDM_MAX_SPDM_MSG_SIZE];
1202+
spdm_capabilities_response_t *spdm_response;
1203+
1204+
spdm_test_context = *state;
1205+
spdm_context = spdm_test_context->spdm_context;
1206+
spdm_test_context->case_id = 0x1B;
1207+
spdm_context->connection_info.connection_state = LIBSPDM_CONNECTION_STATE_AFTER_VERSION;
1208+
1209+
response_size = sizeof(response);
1210+
status = libspdm_get_response_capabilities(
1211+
spdm_context, m_libspdm_get_capabilities_request27_size,
1212+
&m_libspdm_get_capabilities_request27, &response_size, response);
1213+
1214+
assert_int_equal(status, LIBSPDM_STATUS_SUCCESS);
1215+
assert_int_equal(response_size, sizeof(spdm_capabilities_response_t));
1216+
spdm_response = (void *)response;
1217+
assert_int_equal(spdm_response->header.spdm_version, SPDM_MESSAGE_VERSION_13);
1218+
assert_int_equal(spdm_response->header.request_response_code,
1219+
SPDM_CAPABILITIES);
1220+
assert_int_equal(spdm_response->data_transfer_size, LIBSPDM_DATA_TRANSFER_SIZE);
1221+
assert_int_equal(spdm_response->max_spdm_msg_size, LIBSPDM_MAX_SPDM_MSG_SIZE);
1222+
assert_int_equal(spdm_context->connection_info.capability.flags,
1223+
SPDM_GET_CAPABILITIES_REQUEST_FLAGS_MULTI_KEY_CAP_ONLY);
1224+
}
1225+
11801226
libspdm_test_context_t m_libspdm_responder_capabilities_test_context = {
11811227
LIBSPDM_TEST_CONTEXT_VERSION,
11821228
false,
@@ -1235,6 +1281,8 @@ int libspdm_responder_capabilities_test_main(void)
12351281
cmocka_unit_test(libspdm_test_responder_capabilities_case25),
12361282
/* MaxSPDMmsgSize is less than DataTransferSize, then should result in error. */
12371283
cmocka_unit_test(libspdm_test_responder_capabilities_case26),
1284+
/* Success Case , capability supports MULTI_KEY_CAP */
1285+
cmocka_unit_test(libspdm_test_responder_capabilities_case27),
12381286
};
12391287

12401288
libspdm_setup_test_context(&m_libspdm_responder_capabilities_test_context);

0 commit comments

Comments
 (0)