11/**
22 * Copyright Notice:
3- * Copyright 2023-2024 DMTF. All rights reserved.
3+ * Copyright 2023-2025 DMTF. All rights reserved.
44 * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md
55 **/
66
@@ -31,7 +31,15 @@ typedef struct {
3131} libspdm_vendor_response_test ;
3232#pragma pack()
3333
34- libspdm_return_t libspdm_vendor_response_func_err_test (
34+ static void set_standard_state (libspdm_context_t * spdm_context )
35+ {
36+ spdm_context -> connection_info .version = SPDM_MESSAGE_VERSION_10 <<
37+ SPDM_VERSION_NUMBER_SHIFT_BIT ;
38+ spdm_context -> connection_info .connection_state = LIBSPDM_CONNECTION_STATE_NEGOTIATED ;
39+ spdm_context -> response_state = LIBSPDM_RESPONSE_STATE_NORMAL ;
40+ }
41+
42+ static libspdm_return_t libspdm_vendor_response_func_err_test (
3543 void * spdm_context ,
3644 uint16_t req_standard_id ,
3745 uint8_t req_vendor_id_len ,
@@ -119,10 +127,61 @@ static void libspdm_test_responder_vendor_cmds_err_case1(void **state)
119127 response .data_len = (uint16_t )response_len ;
120128}
121129
130+ /**
131+ * Test 2: Responder does not support VDMs.
132+ * Expected behavior: Responder replies with UnsupportedRequest.
133+ **/
134+ static void libspdm_test_responder_vendor_cmds_err_case2 (void * * state )
135+ {
136+ libspdm_return_t status ;
137+ libspdm_test_context_t * spdm_test_context ;
138+ libspdm_context_t * spdm_context ;
139+ libspdm_vendor_request_test request ;
140+ uint8_t response_buffer [LIBSPDM_MAX_SPDM_MSG_SIZE ] = {0 };
141+ size_t response_size ;
142+ spdm_error_response_t * response ;
143+
144+ spdm_test_context = * state ;
145+ spdm_context = spdm_test_context -> spdm_context ;
146+ spdm_test_context -> case_id = 0x2 ;
147+
148+ set_standard_state (spdm_context );
149+
150+ status = libspdm_register_vendor_callback_func (spdm_context , NULL );
151+ status = libspdm_register_vendor_get_id_callback_func (spdm_context , NULL );
152+
153+ request .header .spdm_version = SPDM_MESSAGE_VERSION_10 ;
154+ request .header .request_response_code = SPDM_VENDOR_DEFINED_REQUEST ;
155+ request .header .param1 = 0 ;
156+ request .header .param2 = 0 ;
157+ request .standard_id = SPDM_REGISTRY_ID_IANA ;
158+ request .vendor_id_len = 4 ;
159+ request .vendor_id [0 ] = 33 ;
160+ request .data_len = 2 ;
161+ request .data [0 ] = 0 ;
162+ request .data [1 ] = 1 ;
163+
164+ response_size = sizeof (response_buffer );
165+
166+ status = libspdm_get_vendor_defined_response (spdm_context , sizeof (request ),
167+ & request , & response_size , & response_buffer );
168+
169+ assert_int_equal (status , LIBSPDM_STATUS_SUCCESS );
170+ assert_int_equal (response_size , sizeof (spdm_error_response_t ));
171+
172+ response = (spdm_error_response_t * )response_buffer ;
173+
174+ assert_int_equal (response -> header .spdm_version , SPDM_MESSAGE_VERSION_10 );
175+ assert_int_equal (response -> header .request_response_code , SPDM_ERROR );
176+ assert_int_equal (response -> header .param1 , SPDM_ERROR_CODE_UNSUPPORTED_REQUEST );
177+ assert_int_equal (response -> header .param2 , SPDM_VENDOR_DEFINED_REQUEST );
178+ }
179+
122180int libspdm_responder_vendor_cmds_error_test_main (void )
123181{
124182 const struct CMUnitTest spdm_responder_vendor_cmds_tests [] = {
125183 cmocka_unit_test (libspdm_test_responder_vendor_cmds_err_case1 ),
184+ cmocka_unit_test (libspdm_test_responder_vendor_cmds_err_case2 ),
126185 };
127186
128187 libspdm_test_context_t test_context = {
@@ -137,5 +196,4 @@ int libspdm_responder_vendor_cmds_error_test_main(void)
137196 libspdm_unit_test_group_teardown );
138197}
139198
140-
141199#endif /* LIBSPDM_ENABLE_VENDOR_DEFINED_MESSAGES */
0 commit comments