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 : }
|