blob: cf5b11d3f1b742e83ed6206b51d627eb7e97b249 [file] [log] [blame]
Chau Lycf26f2a2025-03-18 10:39:03 +00001#include <libpldm/file.h>
2#include <libpldm/pldm_types.h>
3
4#include <array>
5#include <cstdint>
6#include <cstring>
7#include <vector>
8
9#include "msgbuf.h"
10
11#include <gmock/gmock.h>
12#include <gtest/gtest.h>
13
14#ifdef LIBPLDM_API_TESTING
15TEST(EncodeDfOpenReq, GoodTest)
16{
17 uint8_t instance_id = 0;
18 uint16_t file_identifier = 0x0100;
19 bitfield16_t file_attribute;
20 file_attribute.value = 0x0400;
Chau Ly530d1a32025-08-15 05:14:15 +000021
22 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
23 std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x01, 0x00, 0x04};
Chau Lycf26f2a2025-03-18 10:39:03 +000024
25 const struct pldm_file_df_open_req req_data = {file_identifier,
26 file_attribute};
27
Chau Ly530d1a32025-08-15 05:14:15 +000028 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
29 size_t payload_length = requestMsgLength;
Chau Lycf26f2a2025-03-18 10:39:03 +000030 auto rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +000031 &payload_length);
Chau Lycf26f2a2025-03-18 10:39:03 +000032
33 ASSERT_EQ(rc, 0);
34 EXPECT_EQ(
35 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
Chau Ly530d1a32025-08-15 05:14:15 +000036 EXPECT_EQ(payload_length, requestMsgLength);
Chau Lycf26f2a2025-03-18 10:39:03 +000037}
38#endif
39
40#ifdef LIBPLDM_API_TESTING
41TEST(EncodeDfOpenReq, BadTestUnAllocatedPtrParams)
42{
43 uint8_t instance_id = 0;
44 uint16_t file_identifier = 0x0100;
45 bitfield16_t file_attribute;
46 file_attribute.value = 0x0400;
47 int rc;
48
Chau Ly530d1a32025-08-15 05:14:15 +000049 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
50
Chau Lycf26f2a2025-03-18 10:39:03 +000051 const struct pldm_file_df_open_req req_data = {file_identifier,
52 file_attribute};
53
Chau Ly530d1a32025-08-15 05:14:15 +000054 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
55 size_t payload_length = requestMsgLength;
Chau Lycf26f2a2025-03-18 10:39:03 +000056 rc = encode_pldm_file_df_open_req(instance_id, &req_data, nullptr,
Chau Ly530d1a32025-08-15 05:14:15 +000057 &payload_length);
Chau Lycf26f2a2025-03-18 10:39:03 +000058 EXPECT_EQ(rc, -EINVAL);
59
60 rc = encode_pldm_file_df_open_req(instance_id, nullptr, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +000061 &payload_length);
Chau Lycf26f2a2025-03-18 10:39:03 +000062 EXPECT_EQ(rc, -EINVAL);
63}
64#endif
65
66#ifdef LIBPLDM_API_TESTING
67TEST(EncodeDfOpenReq, BadTestInvalidExpectedOutputMsgLength)
68{
69 uint8_t instance_id = 0;
70 uint16_t file_identifier = 0x0100;
71 bitfield16_t file_attribute;
72 file_attribute.value = 0x0400;
73 int rc;
74
Chau Ly530d1a32025-08-15 05:14:15 +000075 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
76
Chau Lycf26f2a2025-03-18 10:39:03 +000077 const struct pldm_file_df_open_req req_data = {file_identifier,
78 file_attribute};
79
Chau Ly530d1a32025-08-15 05:14:15 +000080 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
81 size_t payload_length = 1;
82 rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr,
83 &payload_length);
Chau Lycf26f2a2025-03-18 10:39:03 +000084 EXPECT_EQ(rc, -EOVERFLOW);
85}
86#endif
87
88#ifdef LIBPLDM_API_TESTING
89TEST(DecodeDfOpenResp, GoodTest)
90{
91 uint8_t completion_code = PLDM_SUCCESS;
92 uint16_t file_descriptor = 20;
93
94 struct pldm_file_df_open_resp resp_data = {};
95
96 PLDM_MSGBUF_DEFINE_P(buf);
97 int rc;
98
99 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
100
101 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
102
103 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
104 ASSERT_EQ(rc, 0);
105
106 pldm_msgbuf_insert_uint8(buf, completion_code);
107 pldm_msgbuf_insert_uint16(buf, file_descriptor);
108
109 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
110
111 rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, &resp_data);
112
113 ASSERT_EQ(rc, 0);
114 EXPECT_EQ(resp_data.completion_code, completion_code);
115 EXPECT_EQ(resp_data.file_descriptor, file_descriptor);
116}
117#endif
118
119#ifdef LIBPLDM_API_TESTING
120TEST(DecodeDfOpenResp, BadTestUnAllocatedPtrParams)
121{
122 uint8_t completion_code = PLDM_SUCCESS;
123 uint16_t file_descriptor = 20;
124
125 struct pldm_file_df_open_resp resp_data = {};
126
127 PLDM_MSGBUF_DEFINE_P(buf);
128 int rc;
129
130 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
131
132 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
133
134 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
135 ASSERT_EQ(rc, 0);
136
137 pldm_msgbuf_insert_uint8(buf, completion_code);
138 pldm_msgbuf_insert_uint16(buf, file_descriptor);
139
140 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
141
142 rc = decode_pldm_file_df_open_resp(nullptr, payload_length, &resp_data);
143 EXPECT_EQ(rc, -EINVAL);
144
145 rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, nullptr);
146 EXPECT_EQ(rc, -EINVAL);
147}
148#endif
149
150#ifdef LIBPLDM_API_TESTING
151TEST(DecodeDfOpenResp, BadTestInvalidExpectedInputMsgLength)
152{
153 uint8_t completion_code = PLDM_SUCCESS;
154 uint16_t file_descriptor = 20;
155
156 struct pldm_file_df_open_resp resp_data = {};
157
158 PLDM_MSGBUF_DEFINE_P(buf);
159 int rc;
160
161 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
162
163 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
164
165 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
166 ASSERT_EQ(rc, 0);
167
168 pldm_msgbuf_insert_uint8(buf, completion_code);
169 pldm_msgbuf_insert_uint16(buf, file_descriptor);
170
171 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
172
173 rc = decode_pldm_file_df_open_resp(responseMsg, 0, &resp_data);
174 EXPECT_EQ(rc, -EOVERFLOW);
175}
176#endif
Chau Ly7286ca62025-03-26 05:47:18 +0000177
178#ifdef LIBPLDM_API_TESTING
179TEST(EncodeDfCloseReq, GoodTest)
180{
181 uint8_t instance_id = 0;
182 uint16_t file_descriptor = 0x0200;
183 bitfield16_t df_close_options;
184 df_close_options.value = 0x0100;
Chau Ly530d1a32025-08-15 05:14:15 +0000185
186 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
187 std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x02, 0x00, 0x01};
Chau Ly7286ca62025-03-26 05:47:18 +0000188
189 const struct pldm_file_df_close_req req_data = {file_descriptor,
190 df_close_options};
191
Chau Ly530d1a32025-08-15 05:14:15 +0000192 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
193 size_t payload_length = requestMsgLength;
Chau Ly7286ca62025-03-26 05:47:18 +0000194 auto rc = encode_pldm_file_df_close_req(instance_id, &req_data, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +0000195 &payload_length);
Chau Ly7286ca62025-03-26 05:47:18 +0000196
197 ASSERT_EQ(rc, 0);
198 EXPECT_EQ(
199 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
Chau Ly530d1a32025-08-15 05:14:15 +0000200 EXPECT_EQ(payload_length, requestMsgLength);
Chau Ly7286ca62025-03-26 05:47:18 +0000201}
202#endif
203
204#ifdef LIBPLDM_API_TESTING
205TEST(EncodeDfCloseReq, BadTestUnAllocatedPtrParams)
206{
207 uint8_t instance_id = 0;
208 uint16_t file_descriptor = 0x0200;
209 bitfield16_t df_close_options;
210 df_close_options.value = 0x0100;
211 int rc;
212
Chau Ly530d1a32025-08-15 05:14:15 +0000213 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
214
Chau Ly7286ca62025-03-26 05:47:18 +0000215 const struct pldm_file_df_close_req req_data = {file_descriptor,
216 df_close_options};
217
Chau Ly530d1a32025-08-15 05:14:15 +0000218 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
219 size_t payload_length = requestMsgLength;
Chau Ly7286ca62025-03-26 05:47:18 +0000220 rc = encode_pldm_file_df_close_req(instance_id, &req_data, nullptr,
Chau Ly530d1a32025-08-15 05:14:15 +0000221 &payload_length);
Chau Ly7286ca62025-03-26 05:47:18 +0000222 EXPECT_EQ(rc, -EINVAL);
223
224 rc = encode_pldm_file_df_close_req(instance_id, nullptr, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +0000225 &payload_length);
Chau Ly7286ca62025-03-26 05:47:18 +0000226 EXPECT_EQ(rc, -EINVAL);
227}
228#endif
229
230#ifdef LIBPLDM_API_TESTING
231TEST(EncodeDfCloseReq, BadTestInvalidExpectedOutputMsgLength)
232{
233 uint8_t instance_id = 0;
234 uint16_t file_descriptor = 0x0200;
235 bitfield16_t df_close_options;
236 df_close_options.value = 0x0100;
237 int rc;
238
Chau Ly530d1a32025-08-15 05:14:15 +0000239 static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
240
Chau Ly7286ca62025-03-26 05:47:18 +0000241 const struct pldm_file_df_close_req req_data = {file_descriptor,
242 df_close_options};
243
Chau Ly530d1a32025-08-15 05:14:15 +0000244 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
245 size_t payload_length = 1;
246 rc = encode_pldm_file_df_close_req(instance_id, &req_data, requestPtr,
247 &payload_length);
Chau Ly7286ca62025-03-26 05:47:18 +0000248 EXPECT_EQ(rc, -EOVERFLOW);
249}
250#endif
251
252#ifdef LIBPLDM_API_TESTING
253TEST(DecodeDfCloseResp, GoodTest)
254{
255 uint8_t completion_code = PLDM_SUCCESS;
256
257 struct pldm_file_df_close_resp resp_data = {};
258
259 PLDM_MSGBUF_DEFINE_P(buf);
260 int rc;
261
262 static constexpr const size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
263
264 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
265
266 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
267 ASSERT_EQ(rc, 0);
268
269 pldm_msgbuf_insert_uint8(buf, completion_code);
270
271 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
272
273 rc =
274 decode_pldm_file_df_close_resp(responseMsg, payload_length, &resp_data);
275
276 ASSERT_EQ(rc, 0);
277 EXPECT_EQ(resp_data.completion_code, completion_code);
278}
279#endif
280
281#ifdef LIBPLDM_API_TESTING
282TEST(DecodeDfCloseResp, BadTestUnAllocatedPtrParams)
283{
284 uint8_t completion_code = PLDM_SUCCESS;
285
286 struct pldm_file_df_close_resp resp_data = {};
287
288 PLDM_MSGBUF_DEFINE_P(buf);
289 int rc;
290
291 static constexpr const size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
292
293 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
294
295 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
296 ASSERT_EQ(rc, 0);
297
298 pldm_msgbuf_insert_uint8(buf, completion_code);
299
300 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
301
302 rc = decode_pldm_file_df_close_resp(nullptr, payload_length, &resp_data);
303 EXPECT_EQ(rc, -EINVAL);
304
305 rc = decode_pldm_file_df_close_resp(responseMsg, payload_length, nullptr);
306 EXPECT_EQ(rc, -EINVAL);
307}
308#endif
Chau Ly58273fb2025-03-26 08:26:49 +0000309
310#ifdef LIBPLDM_API_TESTING
311TEST(EncodeDfHeartbeatReq, GoodTest)
312{
313 uint8_t instance_id = 0;
314 uint16_t file_descriptor = 0x0200;
315 uint32_t requester_max_interval = 0x88130000; // 5000 ms
Chau Ly530d1a32025-08-15 05:14:15 +0000316
317 static constexpr const size_t requestMsgLength =
318 PLDM_DF_HEARTBEAT_REQ_BYTES;
319 std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x02, 0x00,
320 0x00, 0x13, 0x88};
Chau Ly58273fb2025-03-26 08:26:49 +0000321
322 const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
323 requester_max_interval};
324
Chau Ly530d1a32025-08-15 05:14:15 +0000325 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
326 size_t payload_length = requestMsgLength;
327 auto rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data,
328 requestPtr, &payload_length);
Chau Ly58273fb2025-03-26 08:26:49 +0000329
330 ASSERT_EQ(rc, 0);
331 EXPECT_EQ(
332 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
Chau Ly530d1a32025-08-15 05:14:15 +0000333 EXPECT_EQ(payload_length, requestMsgLength);
Chau Ly58273fb2025-03-26 08:26:49 +0000334}
335#endif
336
337#ifdef LIBPLDM_API_TESTING
338TEST(EncodeDfHeartbeatReq, BadTestUnAllocatedPtrParams)
339{
340 uint8_t instance_id = 0;
341 uint16_t file_descriptor = 0x0200;
342 uint32_t requester_max_interval = 0x88130000; // 5000 ms
343 int rc;
344
Chau Ly530d1a32025-08-15 05:14:15 +0000345 static constexpr const size_t requestMsgLength =
346 PLDM_DF_HEARTBEAT_REQ_BYTES;
347
Chau Ly58273fb2025-03-26 08:26:49 +0000348 const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
349 requester_max_interval};
350
Chau Ly530d1a32025-08-15 05:14:15 +0000351 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
352 size_t payload_length = requestMsgLength;
Chau Ly58273fb2025-03-26 08:26:49 +0000353 rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data, nullptr,
Chau Ly530d1a32025-08-15 05:14:15 +0000354 &payload_length);
Chau Ly58273fb2025-03-26 08:26:49 +0000355 EXPECT_EQ(rc, -EINVAL);
356
357 rc = encode_pldm_file_df_heartbeat_req(instance_id, nullptr, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +0000358 &payload_length);
Chau Ly58273fb2025-03-26 08:26:49 +0000359 EXPECT_EQ(rc, -EINVAL);
360}
361#endif
362
363#ifdef LIBPLDM_API_TESTING
364TEST(EncodeDfHeartbeatReq, BadTestInvalidExpectedOutputMsgLength)
365{
366 uint8_t instance_id = 0;
367 uint16_t file_descriptor = 0x0200;
368 uint32_t requester_max_interval = 0x88130000; // 5000 ms
369 int rc;
370
Chau Ly530d1a32025-08-15 05:14:15 +0000371 static constexpr const size_t requestMsgLength =
372 PLDM_DF_HEARTBEAT_REQ_BYTES;
373
Chau Ly58273fb2025-03-26 08:26:49 +0000374 const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
375 requester_max_interval};
376
Chau Ly530d1a32025-08-15 05:14:15 +0000377 PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
378 size_t payload_length = 1;
Chau Ly58273fb2025-03-26 08:26:49 +0000379 rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data, requestPtr,
Chau Ly530d1a32025-08-15 05:14:15 +0000380 &payload_length);
Chau Ly58273fb2025-03-26 08:26:49 +0000381 EXPECT_EQ(rc, -EOVERFLOW);
382}
383#endif
384
385#ifdef LIBPLDM_API_TESTING
386TEST(DecodeDfHeartbeatResp, GoodTest)
387{
388 uint8_t completion_code = PLDM_SUCCESS;
389 uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
390
391 struct pldm_file_df_heartbeat_resp resp_data = {};
392
393 PLDM_MSGBUF_DEFINE_P(buf);
394 int rc;
395
396 static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
397
398 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
399
400 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
401 ASSERT_EQ(rc, 0);
402
403 pldm_msgbuf_insert_uint8(buf, completion_code);
404 pldm_msgbuf_insert_uint32(buf, responder_max_interval);
405
406 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
407
408 rc = decode_pldm_file_df_heartbeat_resp(responseMsg, payload_length,
409 &resp_data);
410
411 ASSERT_EQ(rc, 0);
412 EXPECT_EQ(resp_data.completion_code, completion_code);
413 EXPECT_EQ(resp_data.responder_max_interval, responder_max_interval);
414}
415#endif
416
417#ifdef LIBPLDM_API_TESTING
418TEST(DecodeDfHeartbeatResp, BadTestUnAllocatedPtrParams)
419{
420 uint8_t completion_code = PLDM_SUCCESS;
421 uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
422
423 struct pldm_file_df_heartbeat_resp resp_data = {};
424
425 PLDM_MSGBUF_DEFINE_P(buf);
426 int rc;
427
428 static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
429
430 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
431
432 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
433 ASSERT_EQ(rc, 0);
434
435 pldm_msgbuf_insert_uint8(buf, completion_code);
436 pldm_msgbuf_insert_uint32(buf, responder_max_interval);
437
438 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
439
440 rc =
441 decode_pldm_file_df_heartbeat_resp(nullptr, payload_length, &resp_data);
442 EXPECT_EQ(rc, -EINVAL);
443
444 rc = decode_pldm_file_df_heartbeat_resp(responseMsg, payload_length,
445 nullptr);
446 EXPECT_EQ(rc, -EINVAL);
447}
448#endif
449
450#ifdef LIBPLDM_API_TESTING
451TEST(DecodeDfHeartbeatResp, BadTestInvalidExpectedInputMsgLength)
452{
453 uint8_t completion_code = PLDM_SUCCESS;
454 uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
455
456 struct pldm_file_df_heartbeat_resp resp_data = {};
457
458 PLDM_MSGBUF_DEFINE_P(buf);
459 int rc;
460
461 static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
462
463 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
464
465 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
466 ASSERT_EQ(rc, 0);
467
468 pldm_msgbuf_insert_uint8(buf, completion_code);
469 pldm_msgbuf_insert_uint32(buf, responder_max_interval);
470
471 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
472
473 rc = decode_pldm_file_df_heartbeat_resp(responseMsg, 0, &resp_data);
474 EXPECT_EQ(rc, -EOVERFLOW);
475}
476#endif
John Chung76c9b192025-07-09 22:35:36 -0500477
478#ifdef LIBPLDM_API_TESTING
479TEST(EncodeDfOpenResp, GoodTest)
480{
481 uint8_t instance_id = 0;
482 uint8_t completion_code = PLDM_SUCCESS;
483 uint16_t file_descriptor = 0x0100;
484 size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
485 std::array<uint8_t, PLDM_DF_OPEN_RESP_BYTES> responseMsg = {0x00, 0x00,
486 0x01};
487
488 const struct pldm_file_df_open_resp resp_data = {completion_code,
489 file_descriptor};
490
491 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
492 auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
493 responsePtr, &payload_length);
494
495 ASSERT_EQ(rc, 0);
496 EXPECT_EQ(0, memcmp(responsePtr->payload, responseMsg.data(),
497 sizeof(responseMsg)));
498 EXPECT_EQ(payload_length, PLDM_DF_OPEN_RESP_BYTES);
499}
500#endif
501
502#ifdef LIBPLDM_API_TESTING
503TEST(EncodeDfOpenResp, BadTestUnAllocatedPtrParams)
504{
505 uint8_t instance_id = 0;
506 uint8_t completion_code = PLDM_SUCCESS;
507 uint16_t file_descriptor = 0x0100;
508 int rc;
509 size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
510 const struct pldm_file_df_open_resp resp_data = {completion_code,
511 file_descriptor};
512
513 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
514 rc = encode_pldm_file_df_open_resp(instance_id, &resp_data, nullptr,
515 &payload_length);
516 EXPECT_EQ(rc, -EINVAL);
517
518 rc = encode_pldm_file_df_open_req(instance_id, nullptr, responsePtr,
Chau Ly530d1a32025-08-15 05:14:15 +0000519 &payload_length);
John Chung76c9b192025-07-09 22:35:36 -0500520 EXPECT_EQ(rc, -EINVAL);
521}
522#endif
523
524#ifdef LIBPLDM_API_TESTING
525TEST(EncodeDfOpenResp, BadTestInvalidExpectedOutputMsgLength)
526{
527 uint8_t instance_id = 0;
528 uint8_t completion_code = PLDM_SUCCESS;
529 uint16_t file_descriptor = 0x0100;
530 size_t payload_length;
531
532 const struct pldm_file_df_open_resp resp_data = {completion_code,
533 file_descriptor};
534
535 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
536 payload_length = 1;
537 auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
538 responsePtr, &payload_length);
539 EXPECT_EQ(rc, -EOVERFLOW);
540}
541#endif
542
543#ifdef LIBPLDM_API_TESTING
544TEST(EncodeDfOpenResp, GoodTestCompletionCode)
545{
546 uint8_t instance_id = 0;
547 uint8_t completion_code = PLDM_FILE_CC_INVALID_FILE_DESCRIPTOR;
548 uint16_t file_descriptor = 0x0100;
549 size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
550
551 const struct pldm_file_df_open_resp resp_data = {completion_code,
552 file_descriptor};
553
554 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
555 auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
556 responsePtr, &payload_length);
557 EXPECT_EQ(rc, 0);
558 EXPECT_EQ(payload_length, 1); // Completion code only
559}
560#endif
561
562#ifdef LIBPLDM_API_TESTING
563TEST(DecodeDfOpenReq, GoodTest)
564{
565 uint16_t file_identifier = 0x0100;
566 bitfield16_t file_attribute;
567 file_attribute.value = 0x0400;
568
569 struct pldm_file_df_open_req req_data = {};
570
571 PLDM_MSGBUF_DEFINE_P(buf);
572 int rc;
573
574 static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
575
576 PLDM_MSG_DEFINE_P(requestMsg, payload_length);
577
578 rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
579 ASSERT_EQ(rc, 0);
580
581 pldm_msgbuf_insert_uint16(buf, file_identifier);
582 pldm_msgbuf_insert_uint16(buf, file_attribute.value);
583
584 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
585
586 rc = decode_pldm_file_df_open_req(requestMsg, payload_length, &req_data);
587
588 ASSERT_EQ(rc, 0);
589 EXPECT_EQ(req_data.file_identifier, file_identifier);
590 EXPECT_EQ(req_data.file_attribute.value, file_attribute.value);
591}
592#endif
593
594#ifdef LIBPLDM_API_TESTING
595TEST(DecodeDfOpenReq, BadTestUnAllocatedPtrParams)
596{
597 uint16_t file_identifier = 0x0100;
598 bitfield16_t file_attribute;
599 file_attribute.value = 0x0400;
600
601 struct pldm_file_df_open_req req_data = {};
602
603 PLDM_MSGBUF_DEFINE_P(buf);
604 int rc;
605
606 static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
607
608 PLDM_MSG_DEFINE_P(requestMsg, payload_length);
609
610 rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
611 ASSERT_EQ(rc, 0);
612
613 pldm_msgbuf_insert_uint16(buf, file_identifier);
614 pldm_msgbuf_insert_uint16(buf, file_attribute.value);
615
616 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
617
618 rc = decode_pldm_file_df_open_req(nullptr, payload_length, &req_data);
619 EXPECT_EQ(rc, -EINVAL);
620
621 rc = decode_pldm_file_df_open_req(requestMsg, payload_length, nullptr);
622 EXPECT_EQ(rc, -EINVAL);
623}
624#endif
625
626#ifdef LIBPLDM_API_TESTING
627TEST(DecodeDfOpenReq, BadTestInvalidExpectedInputMsgLength)
628{
629 uint16_t file_identifier = 0x0100;
630 bitfield16_t file_attribute;
631 file_attribute.value = 0x0400;
632
633 struct pldm_file_df_open_req req_data = {};
634
635 PLDM_MSGBUF_DEFINE_P(buf);
636 int rc;
637
638 static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
639
640 PLDM_MSG_DEFINE_P(requestMsg, payload_length);
641
642 rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
643 ASSERT_EQ(rc, 0);
644
645 pldm_msgbuf_insert_uint16(buf, file_identifier);
646 pldm_msgbuf_insert_uint16(buf, file_attribute.value);
647
648 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
649
650 rc = decode_pldm_file_df_open_req(requestMsg, 0, &req_data);
651 EXPECT_EQ(rc, -EOVERFLOW);
652}
653#endif
654
655#ifdef LIBPLDM_API_TESTING
656TEST(EncodeDfCloseResp, GoodTest)
657{
658 uint8_t instance_id = 0;
659 size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
660 std::array<uint8_t, PLDM_DF_CLOSE_RESP_BYTES> responseMsg = {PLDM_SUCCESS};
661
662 const struct pldm_file_df_close_resp resp_data = {PLDM_SUCCESS};
663
664 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_CLOSE_RESP_BYTES);
665
666 auto rc = encode_pldm_file_df_close_resp(instance_id, &resp_data,
667 responsePtr, &payload_length);
668
669 ASSERT_EQ(rc, 0);
670 EXPECT_EQ(0, memcmp(responsePtr->payload, responseMsg.data(),
671 sizeof(responseMsg)));
672}
673#endif
674
675#ifdef LIBPLDM_API_TESTING
676TEST(EncodeDfCloseResp, BadTestUnAllocatedPtrParams)
677{
678 uint8_t instance_id = 0;
679 size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
680 const struct pldm_file_df_close_resp resp_data = {PLDM_SUCCESS};
681 int rc;
682
683 PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_CLOSE_RESP_BYTES);
684
685 rc = encode_pldm_file_df_close_resp(instance_id, &resp_data, nullptr,
686 &payload_length);
687 EXPECT_EQ(rc, -EINVAL);
688
689 rc = encode_pldm_file_df_close_resp(instance_id, nullptr, responsePtr,
690 &payload_length);
691 EXPECT_EQ(rc, -EINVAL);
692}
693#endif
694
695#ifdef LIBPLDM_API_TESTING
696TEST(DecodeDfCloseReq, GoodTest)
697{
698 uint16_t file_descriptor = 0x1000;
699 bitfield16_t df_close_options;
700 df_close_options.value = 0x4000;
701
702 struct pldm_file_df_close_req req_data = {};
703
704 PLDM_MSGBUF_DEFINE_P(buf);
705 int rc;
706
707 static constexpr const size_t payload_length = PLDM_DF_CLOSE_REQ_BYTES;
708
709 PLDM_MSG_DEFINE_P(requestMsg, payload_length);
710
711 rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
712 ASSERT_EQ(rc, 0);
713
714 pldm_msgbuf_insert_uint16(buf, file_descriptor);
715 pldm_msgbuf_insert_uint16(buf, df_close_options.value);
716
717 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
718
719 rc = decode_pldm_file_df_close_req(requestMsg, payload_length, &req_data);
720
721 ASSERT_EQ(rc, 0);
722 EXPECT_EQ(req_data.file_descriptor, file_descriptor);
723 EXPECT_EQ(req_data.df_close_options.value, df_close_options.value);
724}
725#endif
726
727#ifdef LIBPLDM_API_TESTING
728TEST(DecodeDfCloseReq, BadTestUnAllocatedPtrParams)
729{
730 uint16_t file_descriptor = 0x1000;
731 bitfield16_t df_close_options;
732 df_close_options.value = 0x4000;
733
734 struct pldm_file_df_close_req req_data = {};
735
736 PLDM_MSGBUF_DEFINE_P(buf);
737 int rc;
738
739 static constexpr const size_t payload_length = PLDM_DF_CLOSE_REQ_BYTES;
740
741 PLDM_MSG_DEFINE_P(requestMsg, payload_length);
742
743 rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
744 ASSERT_EQ(rc, 0);
745
746 pldm_msgbuf_insert_uint16(buf, file_descriptor);
747 pldm_msgbuf_insert_uint16(buf, df_close_options.value);
748
749 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
750
751 rc = decode_pldm_file_df_close_req(nullptr, payload_length, &req_data);
752 EXPECT_EQ(rc, -EINVAL);
753
754 rc = decode_pldm_file_df_close_req(requestMsg, payload_length, nullptr);
755 EXPECT_EQ(rc, -EINVAL);
756}
757#endif