1*7a8d932bSJohn Chung #include "msgbuf.hpp"
2*7a8d932bSJohn Chung
3*7a8d932bSJohn Chung #include <libpldm/base.h>
4cf26f2a3SChau Ly #include <libpldm/file.h>
5cf26f2a3SChau Ly #include <libpldm/pldm_types.h>
6cf26f2a3SChau Ly
7cf26f2a3SChau Ly #include <array>
8cf26f2a3SChau Ly #include <cstdint>
9cf26f2a3SChau Ly #include <cstring>
10cf26f2a3SChau Ly
11cf26f2a3SChau Ly #include <gmock/gmock.h>
12cf26f2a3SChau Ly #include <gtest/gtest.h>
13cf26f2a3SChau Ly
14cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenReq,GoodTest)15cf26f2a3SChau Ly TEST(EncodeDfOpenReq, GoodTest)
16cf26f2a3SChau Ly {
17cf26f2a3SChau Ly uint8_t instance_id = 0;
18cf26f2a3SChau Ly uint16_t file_identifier = 0x0100;
19cf26f2a3SChau Ly bitfield16_t file_attribute;
20cf26f2a3SChau Ly file_attribute.value = 0x0400;
21530d1a3aSChau Ly
22530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
23530d1a3aSChau Ly std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x01, 0x00, 0x04};
24cf26f2a3SChau Ly
25cf26f2a3SChau Ly const struct pldm_file_df_open_req req_data = {file_identifier,
26cf26f2a3SChau Ly file_attribute};
27cf26f2a3SChau Ly
28530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
29530d1a3aSChau Ly size_t payload_length = requestMsgLength;
30cf26f2a3SChau Ly auto rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr,
31530d1a3aSChau Ly &payload_length);
32cf26f2a3SChau Ly
33cf26f2a3SChau Ly ASSERT_EQ(rc, 0);
34cf26f2a3SChau Ly EXPECT_EQ(
35cf26f2a3SChau Ly 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
36530d1a3aSChau Ly EXPECT_EQ(payload_length, requestMsgLength);
37cf26f2a3SChau Ly }
38cf26f2a3SChau Ly #endif
39cf26f2a3SChau Ly
40cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenReq,BadTestUnAllocatedPtrParams)41cf26f2a3SChau Ly TEST(EncodeDfOpenReq, BadTestUnAllocatedPtrParams)
42cf26f2a3SChau Ly {
43cf26f2a3SChau Ly uint8_t instance_id = 0;
44cf26f2a3SChau Ly uint16_t file_identifier = 0x0100;
45cf26f2a3SChau Ly bitfield16_t file_attribute;
46cf26f2a3SChau Ly file_attribute.value = 0x0400;
47cf26f2a3SChau Ly int rc;
48cf26f2a3SChau Ly
49530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
50530d1a3aSChau Ly
51cf26f2a3SChau Ly const struct pldm_file_df_open_req req_data = {file_identifier,
52cf26f2a3SChau Ly file_attribute};
53cf26f2a3SChau Ly
54530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
55530d1a3aSChau Ly size_t payload_length = requestMsgLength;
56cf26f2a3SChau Ly rc = encode_pldm_file_df_open_req(instance_id, &req_data, nullptr,
57530d1a3aSChau Ly &payload_length);
58cf26f2a3SChau Ly EXPECT_EQ(rc, -EINVAL);
59cf26f2a3SChau Ly
60cf26f2a3SChau Ly rc = encode_pldm_file_df_open_req(instance_id, nullptr, requestPtr,
61530d1a3aSChau Ly &payload_length);
62cf26f2a3SChau Ly EXPECT_EQ(rc, -EINVAL);
63cf26f2a3SChau Ly }
64cf26f2a3SChau Ly #endif
65cf26f2a3SChau Ly
66cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenReq,BadTestInvalidExpectedOutputMsgLength)67cf26f2a3SChau Ly TEST(EncodeDfOpenReq, BadTestInvalidExpectedOutputMsgLength)
68cf26f2a3SChau Ly {
69cf26f2a3SChau Ly uint8_t instance_id = 0;
70cf26f2a3SChau Ly uint16_t file_identifier = 0x0100;
71cf26f2a3SChau Ly bitfield16_t file_attribute;
72cf26f2a3SChau Ly file_attribute.value = 0x0400;
73cf26f2a3SChau Ly int rc;
74cf26f2a3SChau Ly
75530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
76530d1a3aSChau Ly
77cf26f2a3SChau Ly const struct pldm_file_df_open_req req_data = {file_identifier,
78cf26f2a3SChau Ly file_attribute};
79cf26f2a3SChau Ly
80530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
81530d1a3aSChau Ly size_t payload_length = 1;
82530d1a3aSChau Ly rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr,
83530d1a3aSChau Ly &payload_length);
84cf26f2a3SChau Ly EXPECT_EQ(rc, -EOVERFLOW);
85cf26f2a3SChau Ly }
86cf26f2a3SChau Ly #endif
87cf26f2a3SChau Ly
88cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenResp,GoodTest)89cf26f2a3SChau Ly TEST(DecodeDfOpenResp, GoodTest)
90cf26f2a3SChau Ly {
91cf26f2a3SChau Ly uint8_t completion_code = PLDM_SUCCESS;
92cf26f2a3SChau Ly uint16_t file_descriptor = 20;
93cf26f2a3SChau Ly
94cf26f2a3SChau Ly struct pldm_file_df_open_resp resp_data = {};
95cf26f2a3SChau Ly
96*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
97cf26f2a3SChau Ly int rc;
98cf26f2a3SChau Ly
99cf26f2a3SChau Ly static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
100cf26f2a3SChau Ly
101cf26f2a3SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
102cf26f2a3SChau Ly
103cf26f2a3SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
104cf26f2a3SChau Ly ASSERT_EQ(rc, 0);
105cf26f2a3SChau Ly
106cf26f2a3SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
107cf26f2a3SChau Ly pldm_msgbuf_insert_uint16(buf, file_descriptor);
108cf26f2a3SChau Ly
109cf26f2a3SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
110cf26f2a3SChau Ly
111cf26f2a3SChau Ly rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, &resp_data);
112cf26f2a3SChau Ly
113cf26f2a3SChau Ly ASSERT_EQ(rc, 0);
114cf26f2a3SChau Ly EXPECT_EQ(resp_data.completion_code, completion_code);
115cf26f2a3SChau Ly EXPECT_EQ(resp_data.file_descriptor, file_descriptor);
116cf26f2a3SChau Ly }
117cf26f2a3SChau Ly #endif
118cf26f2a3SChau Ly
119cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenResp,BadTestUnAllocatedPtrParams)120cf26f2a3SChau Ly TEST(DecodeDfOpenResp, BadTestUnAllocatedPtrParams)
121cf26f2a3SChau Ly {
122cf26f2a3SChau Ly uint8_t completion_code = PLDM_SUCCESS;
123cf26f2a3SChau Ly uint16_t file_descriptor = 20;
124cf26f2a3SChau Ly
125cf26f2a3SChau Ly struct pldm_file_df_open_resp resp_data = {};
126cf26f2a3SChau Ly
127*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
128cf26f2a3SChau Ly int rc;
129cf26f2a3SChau Ly
130cf26f2a3SChau Ly static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
131cf26f2a3SChau Ly
132cf26f2a3SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
133cf26f2a3SChau Ly
134cf26f2a3SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
135cf26f2a3SChau Ly ASSERT_EQ(rc, 0);
136cf26f2a3SChau Ly
137cf26f2a3SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
138cf26f2a3SChau Ly pldm_msgbuf_insert_uint16(buf, file_descriptor);
139cf26f2a3SChau Ly
140cf26f2a3SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
141cf26f2a3SChau Ly
142cf26f2a3SChau Ly rc = decode_pldm_file_df_open_resp(nullptr, payload_length, &resp_data);
143cf26f2a3SChau Ly EXPECT_EQ(rc, -EINVAL);
144cf26f2a3SChau Ly
145cf26f2a3SChau Ly rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, nullptr);
146cf26f2a3SChau Ly EXPECT_EQ(rc, -EINVAL);
147cf26f2a3SChau Ly }
148cf26f2a3SChau Ly #endif
149cf26f2a3SChau Ly
150cf26f2a3SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenResp,BadTestInvalidExpectedInputMsgLength)151cf26f2a3SChau Ly TEST(DecodeDfOpenResp, BadTestInvalidExpectedInputMsgLength)
152cf26f2a3SChau Ly {
153cf26f2a3SChau Ly uint8_t completion_code = PLDM_SUCCESS;
154cf26f2a3SChau Ly uint16_t file_descriptor = 20;
155cf26f2a3SChau Ly
156cf26f2a3SChau Ly struct pldm_file_df_open_resp resp_data = {};
157cf26f2a3SChau Ly
158*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
159cf26f2a3SChau Ly int rc;
160cf26f2a3SChau Ly
161cf26f2a3SChau Ly static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
162cf26f2a3SChau Ly
163cf26f2a3SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
164cf26f2a3SChau Ly
165cf26f2a3SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
166cf26f2a3SChau Ly ASSERT_EQ(rc, 0);
167cf26f2a3SChau Ly
168cf26f2a3SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
169cf26f2a3SChau Ly pldm_msgbuf_insert_uint16(buf, file_descriptor);
170cf26f2a3SChau Ly
171cf26f2a3SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
172cf26f2a3SChau Ly
173cf26f2a3SChau Ly rc = decode_pldm_file_df_open_resp(responseMsg, 0, &resp_data);
174cf26f2a3SChau Ly EXPECT_EQ(rc, -EOVERFLOW);
175cf26f2a3SChau Ly }
176cf26f2a3SChau Ly #endif
1777286ca64SChau Ly
1787286ca64SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfCloseReq,GoodTest)1797286ca64SChau Ly TEST(EncodeDfCloseReq, GoodTest)
1807286ca64SChau Ly {
1817286ca64SChau Ly uint8_t instance_id = 0;
1827286ca64SChau Ly uint16_t file_descriptor = 0x0200;
1837286ca64SChau Ly bitfield16_t df_close_options;
1847286ca64SChau Ly df_close_options.value = 0x0100;
185530d1a3aSChau Ly
186530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
187530d1a3aSChau Ly std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x02, 0x00, 0x01};
1887286ca64SChau Ly
1897286ca64SChau Ly const struct pldm_file_df_close_req req_data = {file_descriptor,
1907286ca64SChau Ly df_close_options};
1917286ca64SChau Ly
192530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
193530d1a3aSChau Ly size_t payload_length = requestMsgLength;
1947286ca64SChau Ly auto rc = encode_pldm_file_df_close_req(instance_id, &req_data, requestPtr,
195530d1a3aSChau Ly &payload_length);
1967286ca64SChau Ly
1977286ca64SChau Ly ASSERT_EQ(rc, 0);
1987286ca64SChau Ly EXPECT_EQ(
1997286ca64SChau Ly 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
200530d1a3aSChau Ly EXPECT_EQ(payload_length, requestMsgLength);
2017286ca64SChau Ly }
2027286ca64SChau Ly #endif
2037286ca64SChau Ly
2047286ca64SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfCloseReq,BadTestUnAllocatedPtrParams)2057286ca64SChau Ly TEST(EncodeDfCloseReq, BadTestUnAllocatedPtrParams)
2067286ca64SChau Ly {
2077286ca64SChau Ly uint8_t instance_id = 0;
2087286ca64SChau Ly uint16_t file_descriptor = 0x0200;
2097286ca64SChau Ly bitfield16_t df_close_options;
2107286ca64SChau Ly df_close_options.value = 0x0100;
2117286ca64SChau Ly int rc;
2127286ca64SChau Ly
213530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
214530d1a3aSChau Ly
2157286ca64SChau Ly const struct pldm_file_df_close_req req_data = {file_descriptor,
2167286ca64SChau Ly df_close_options};
2177286ca64SChau Ly
218530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
219530d1a3aSChau Ly size_t payload_length = requestMsgLength;
2207286ca64SChau Ly rc = encode_pldm_file_df_close_req(instance_id, &req_data, nullptr,
221530d1a3aSChau Ly &payload_length);
2227286ca64SChau Ly EXPECT_EQ(rc, -EINVAL);
2237286ca64SChau Ly
2247286ca64SChau Ly rc = encode_pldm_file_df_close_req(instance_id, nullptr, requestPtr,
225530d1a3aSChau Ly &payload_length);
2267286ca64SChau Ly EXPECT_EQ(rc, -EINVAL);
2277286ca64SChau Ly }
2287286ca64SChau Ly #endif
2297286ca64SChau Ly
2307286ca64SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfCloseReq,BadTestInvalidExpectedOutputMsgLength)2317286ca64SChau Ly TEST(EncodeDfCloseReq, BadTestInvalidExpectedOutputMsgLength)
2327286ca64SChau Ly {
2337286ca64SChau Ly uint8_t instance_id = 0;
2347286ca64SChau Ly uint16_t file_descriptor = 0x0200;
2357286ca64SChau Ly bitfield16_t df_close_options;
2367286ca64SChau Ly df_close_options.value = 0x0100;
2377286ca64SChau Ly int rc;
2387286ca64SChau Ly
239530d1a3aSChau Ly static constexpr const size_t requestMsgLength = PLDM_DF_OPEN_REQ_BYTES;
240530d1a3aSChau Ly
2417286ca64SChau Ly const struct pldm_file_df_close_req req_data = {file_descriptor,
2427286ca64SChau Ly df_close_options};
2437286ca64SChau Ly
244530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
245530d1a3aSChau Ly size_t payload_length = 1;
246530d1a3aSChau Ly rc = encode_pldm_file_df_close_req(instance_id, &req_data, requestPtr,
247530d1a3aSChau Ly &payload_length);
2487286ca64SChau Ly EXPECT_EQ(rc, -EOVERFLOW);
2497286ca64SChau Ly }
2507286ca64SChau Ly #endif
2517286ca64SChau Ly
2527286ca64SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfCloseResp,GoodTest)2537286ca64SChau Ly TEST(DecodeDfCloseResp, GoodTest)
2547286ca64SChau Ly {
2557286ca64SChau Ly uint8_t completion_code = PLDM_SUCCESS;
2567286ca64SChau Ly
2577286ca64SChau Ly struct pldm_file_df_close_resp resp_data = {};
2587286ca64SChau Ly
259*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
2607286ca64SChau Ly int rc;
2617286ca64SChau Ly
2627286ca64SChau Ly static constexpr const size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
2637286ca64SChau Ly
2647286ca64SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
2657286ca64SChau Ly
2667286ca64SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
2677286ca64SChau Ly ASSERT_EQ(rc, 0);
2687286ca64SChau Ly
2697286ca64SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
2707286ca64SChau Ly
2717286ca64SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
2727286ca64SChau Ly
2737286ca64SChau Ly rc =
2747286ca64SChau Ly decode_pldm_file_df_close_resp(responseMsg, payload_length, &resp_data);
2757286ca64SChau Ly
2767286ca64SChau Ly ASSERT_EQ(rc, 0);
2777286ca64SChau Ly EXPECT_EQ(resp_data.completion_code, completion_code);
2787286ca64SChau Ly }
2797286ca64SChau Ly #endif
2807286ca64SChau Ly
2817286ca64SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfCloseResp,BadTestUnAllocatedPtrParams)2827286ca64SChau Ly TEST(DecodeDfCloseResp, BadTestUnAllocatedPtrParams)
2837286ca64SChau Ly {
2847286ca64SChau Ly uint8_t completion_code = PLDM_SUCCESS;
2857286ca64SChau Ly
2867286ca64SChau Ly struct pldm_file_df_close_resp resp_data = {};
2877286ca64SChau Ly
288*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
2897286ca64SChau Ly int rc;
2907286ca64SChau Ly
2917286ca64SChau Ly static constexpr const size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
2927286ca64SChau Ly
2937286ca64SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
2947286ca64SChau Ly
2957286ca64SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
2967286ca64SChau Ly ASSERT_EQ(rc, 0);
2977286ca64SChau Ly
2987286ca64SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
2997286ca64SChau Ly
3007286ca64SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
3017286ca64SChau Ly
3027286ca64SChau Ly rc = decode_pldm_file_df_close_resp(nullptr, payload_length, &resp_data);
3037286ca64SChau Ly EXPECT_EQ(rc, -EINVAL);
3047286ca64SChau Ly
3057286ca64SChau Ly rc = decode_pldm_file_df_close_resp(responseMsg, payload_length, nullptr);
3067286ca64SChau Ly EXPECT_EQ(rc, -EINVAL);
3077286ca64SChau Ly }
3087286ca64SChau Ly #endif
30958273fb7SChau Ly
31058273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfHeartbeatReq,GoodTest)31158273fb7SChau Ly TEST(EncodeDfHeartbeatReq, GoodTest)
31258273fb7SChau Ly {
31358273fb7SChau Ly uint8_t instance_id = 0;
31458273fb7SChau Ly uint16_t file_descriptor = 0x0200;
31558273fb7SChau Ly uint32_t requester_max_interval = 0x88130000; // 5000 ms
316530d1a3aSChau Ly
317530d1a3aSChau Ly static constexpr const size_t requestMsgLength =
318530d1a3aSChau Ly PLDM_DF_HEARTBEAT_REQ_BYTES;
319530d1a3aSChau Ly std::array<uint8_t, requestMsgLength> requestMsg = {0x00, 0x02, 0x00,
320530d1a3aSChau Ly 0x00, 0x13, 0x88};
32158273fb7SChau Ly
32258273fb7SChau Ly const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
32358273fb7SChau Ly requester_max_interval};
32458273fb7SChau Ly
325530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
326530d1a3aSChau Ly size_t payload_length = requestMsgLength;
327530d1a3aSChau Ly auto rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data,
328530d1a3aSChau Ly requestPtr, &payload_length);
32958273fb7SChau Ly
33058273fb7SChau Ly ASSERT_EQ(rc, 0);
33158273fb7SChau Ly EXPECT_EQ(
33258273fb7SChau Ly 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
333530d1a3aSChau Ly EXPECT_EQ(payload_length, requestMsgLength);
33458273fb7SChau Ly }
33558273fb7SChau Ly #endif
33658273fb7SChau Ly
33758273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfHeartbeatReq,BadTestUnAllocatedPtrParams)33858273fb7SChau Ly TEST(EncodeDfHeartbeatReq, BadTestUnAllocatedPtrParams)
33958273fb7SChau Ly {
34058273fb7SChau Ly uint8_t instance_id = 0;
34158273fb7SChau Ly uint16_t file_descriptor = 0x0200;
34258273fb7SChau Ly uint32_t requester_max_interval = 0x88130000; // 5000 ms
34358273fb7SChau Ly int rc;
34458273fb7SChau Ly
345530d1a3aSChau Ly static constexpr const size_t requestMsgLength =
346530d1a3aSChau Ly PLDM_DF_HEARTBEAT_REQ_BYTES;
347530d1a3aSChau Ly
34858273fb7SChau Ly const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
34958273fb7SChau Ly requester_max_interval};
35058273fb7SChau Ly
351530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
352530d1a3aSChau Ly size_t payload_length = requestMsgLength;
35358273fb7SChau Ly rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data, nullptr,
354530d1a3aSChau Ly &payload_length);
35558273fb7SChau Ly EXPECT_EQ(rc, -EINVAL);
35658273fb7SChau Ly
35758273fb7SChau Ly rc = encode_pldm_file_df_heartbeat_req(instance_id, nullptr, requestPtr,
358530d1a3aSChau Ly &payload_length);
35958273fb7SChau Ly EXPECT_EQ(rc, -EINVAL);
36058273fb7SChau Ly }
36158273fb7SChau Ly #endif
36258273fb7SChau Ly
36358273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfHeartbeatReq,BadTestInvalidExpectedOutputMsgLength)36458273fb7SChau Ly TEST(EncodeDfHeartbeatReq, BadTestInvalidExpectedOutputMsgLength)
36558273fb7SChau Ly {
36658273fb7SChau Ly uint8_t instance_id = 0;
36758273fb7SChau Ly uint16_t file_descriptor = 0x0200;
36858273fb7SChau Ly uint32_t requester_max_interval = 0x88130000; // 5000 ms
36958273fb7SChau Ly int rc;
37058273fb7SChau Ly
371530d1a3aSChau Ly static constexpr const size_t requestMsgLength =
372530d1a3aSChau Ly PLDM_DF_HEARTBEAT_REQ_BYTES;
373530d1a3aSChau Ly
37458273fb7SChau Ly const struct pldm_file_df_heartbeat_req req_data = {file_descriptor,
37558273fb7SChau Ly requester_max_interval};
37658273fb7SChau Ly
377530d1a3aSChau Ly PLDM_MSG_DEFINE_P(requestPtr, requestMsgLength);
378530d1a3aSChau Ly size_t payload_length = 1;
37958273fb7SChau Ly rc = encode_pldm_file_df_heartbeat_req(instance_id, &req_data, requestPtr,
380530d1a3aSChau Ly &payload_length);
38158273fb7SChau Ly EXPECT_EQ(rc, -EOVERFLOW);
38258273fb7SChau Ly }
38358273fb7SChau Ly #endif
38458273fb7SChau Ly
38558273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfHeartbeatResp,GoodTest)38658273fb7SChau Ly TEST(DecodeDfHeartbeatResp, GoodTest)
38758273fb7SChau Ly {
38858273fb7SChau Ly uint8_t completion_code = PLDM_SUCCESS;
38958273fb7SChau Ly uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
39058273fb7SChau Ly
39158273fb7SChau Ly struct pldm_file_df_heartbeat_resp resp_data = {};
39258273fb7SChau Ly
393*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
39458273fb7SChau Ly int rc;
39558273fb7SChau Ly
39658273fb7SChau Ly static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
39758273fb7SChau Ly
39858273fb7SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
39958273fb7SChau Ly
40058273fb7SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
40158273fb7SChau Ly ASSERT_EQ(rc, 0);
40258273fb7SChau Ly
40358273fb7SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
40458273fb7SChau Ly pldm_msgbuf_insert_uint32(buf, responder_max_interval);
40558273fb7SChau Ly
40658273fb7SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
40758273fb7SChau Ly
40858273fb7SChau Ly rc = decode_pldm_file_df_heartbeat_resp(responseMsg, payload_length,
40958273fb7SChau Ly &resp_data);
41058273fb7SChau Ly
41158273fb7SChau Ly ASSERT_EQ(rc, 0);
41258273fb7SChau Ly EXPECT_EQ(resp_data.completion_code, completion_code);
41358273fb7SChau Ly EXPECT_EQ(resp_data.responder_max_interval, responder_max_interval);
41458273fb7SChau Ly }
41558273fb7SChau Ly #endif
41658273fb7SChau Ly
41758273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfHeartbeatResp,BadTestUnAllocatedPtrParams)41858273fb7SChau Ly TEST(DecodeDfHeartbeatResp, BadTestUnAllocatedPtrParams)
41958273fb7SChau Ly {
42058273fb7SChau Ly uint8_t completion_code = PLDM_SUCCESS;
42158273fb7SChau Ly uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
42258273fb7SChau Ly
42358273fb7SChau Ly struct pldm_file_df_heartbeat_resp resp_data = {};
42458273fb7SChau Ly
425*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
42658273fb7SChau Ly int rc;
42758273fb7SChau Ly
42858273fb7SChau Ly static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
42958273fb7SChau Ly
43058273fb7SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
43158273fb7SChau Ly
43258273fb7SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
43358273fb7SChau Ly ASSERT_EQ(rc, 0);
43458273fb7SChau Ly
43558273fb7SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
43658273fb7SChau Ly pldm_msgbuf_insert_uint32(buf, responder_max_interval);
43758273fb7SChau Ly
43858273fb7SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
43958273fb7SChau Ly
44058273fb7SChau Ly rc =
44158273fb7SChau Ly decode_pldm_file_df_heartbeat_resp(nullptr, payload_length, &resp_data);
44258273fb7SChau Ly EXPECT_EQ(rc, -EINVAL);
44358273fb7SChau Ly
44458273fb7SChau Ly rc = decode_pldm_file_df_heartbeat_resp(responseMsg, payload_length,
44558273fb7SChau Ly nullptr);
44658273fb7SChau Ly EXPECT_EQ(rc, -EINVAL);
44758273fb7SChau Ly }
44858273fb7SChau Ly #endif
44958273fb7SChau Ly
45058273fb7SChau Ly #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfHeartbeatResp,BadTestInvalidExpectedInputMsgLength)45158273fb7SChau Ly TEST(DecodeDfHeartbeatResp, BadTestInvalidExpectedInputMsgLength)
45258273fb7SChau Ly {
45358273fb7SChau Ly uint8_t completion_code = PLDM_SUCCESS;
45458273fb7SChau Ly uint32_t responder_max_interval = 0xa00f0000; // 4000 ms
45558273fb7SChau Ly
45658273fb7SChau Ly struct pldm_file_df_heartbeat_resp resp_data = {};
45758273fb7SChau Ly
458*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
45958273fb7SChau Ly int rc;
46058273fb7SChau Ly
46158273fb7SChau Ly static constexpr const size_t payload_length = PLDM_DF_HEARTBEAT_RESP_BYTES;
46258273fb7SChau Ly
46358273fb7SChau Ly PLDM_MSG_DEFINE_P(responseMsg, payload_length);
46458273fb7SChau Ly
46558273fb7SChau Ly rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
46658273fb7SChau Ly ASSERT_EQ(rc, 0);
46758273fb7SChau Ly
46858273fb7SChau Ly pldm_msgbuf_insert_uint8(buf, completion_code);
46958273fb7SChau Ly pldm_msgbuf_insert_uint32(buf, responder_max_interval);
47058273fb7SChau Ly
47158273fb7SChau Ly ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
47258273fb7SChau Ly
47358273fb7SChau Ly rc = decode_pldm_file_df_heartbeat_resp(responseMsg, 0, &resp_data);
47458273fb7SChau Ly EXPECT_EQ(rc, -EOVERFLOW);
47558273fb7SChau Ly }
47658273fb7SChau Ly #endif
47776c9b192SJohn Chung
47876c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenResp,GoodTest)47976c9b192SJohn Chung TEST(EncodeDfOpenResp, GoodTest)
48076c9b192SJohn Chung {
48176c9b192SJohn Chung uint8_t instance_id = 0;
48276c9b192SJohn Chung uint8_t completion_code = PLDM_SUCCESS;
48376c9b192SJohn Chung uint16_t file_descriptor = 0x0100;
48476c9b192SJohn Chung size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
48576c9b192SJohn Chung std::array<uint8_t, PLDM_DF_OPEN_RESP_BYTES> responseMsg = {0x00, 0x00,
48676c9b192SJohn Chung 0x01};
48776c9b192SJohn Chung
48876c9b192SJohn Chung const struct pldm_file_df_open_resp resp_data = {completion_code,
48976c9b192SJohn Chung file_descriptor};
49076c9b192SJohn Chung
49176c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
49276c9b192SJohn Chung auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
49376c9b192SJohn Chung responsePtr, &payload_length);
49476c9b192SJohn Chung
49576c9b192SJohn Chung ASSERT_EQ(rc, 0);
49676c9b192SJohn Chung EXPECT_EQ(0, memcmp(responsePtr->payload, responseMsg.data(),
49776c9b192SJohn Chung sizeof(responseMsg)));
49876c9b192SJohn Chung EXPECT_EQ(payload_length, PLDM_DF_OPEN_RESP_BYTES);
49976c9b192SJohn Chung }
50076c9b192SJohn Chung #endif
50176c9b192SJohn Chung
50276c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenResp,BadTestUnAllocatedPtrParams)50376c9b192SJohn Chung TEST(EncodeDfOpenResp, BadTestUnAllocatedPtrParams)
50476c9b192SJohn Chung {
50576c9b192SJohn Chung uint8_t instance_id = 0;
50676c9b192SJohn Chung uint8_t completion_code = PLDM_SUCCESS;
50776c9b192SJohn Chung uint16_t file_descriptor = 0x0100;
50876c9b192SJohn Chung int rc;
50976c9b192SJohn Chung size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
51076c9b192SJohn Chung const struct pldm_file_df_open_resp resp_data = {completion_code,
51176c9b192SJohn Chung file_descriptor};
51276c9b192SJohn Chung
51376c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
51476c9b192SJohn Chung rc = encode_pldm_file_df_open_resp(instance_id, &resp_data, nullptr,
51576c9b192SJohn Chung &payload_length);
51676c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
51776c9b192SJohn Chung
51876c9b192SJohn Chung rc = encode_pldm_file_df_open_req(instance_id, nullptr, responsePtr,
519530d1a3aSChau Ly &payload_length);
52076c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
52176c9b192SJohn Chung }
52276c9b192SJohn Chung #endif
52376c9b192SJohn Chung
52476c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenResp,BadTestInvalidExpectedOutputMsgLength)52576c9b192SJohn Chung TEST(EncodeDfOpenResp, BadTestInvalidExpectedOutputMsgLength)
52676c9b192SJohn Chung {
52776c9b192SJohn Chung uint8_t instance_id = 0;
52876c9b192SJohn Chung uint8_t completion_code = PLDM_SUCCESS;
52976c9b192SJohn Chung uint16_t file_descriptor = 0x0100;
53076c9b192SJohn Chung size_t payload_length;
53176c9b192SJohn Chung
53276c9b192SJohn Chung const struct pldm_file_df_open_resp resp_data = {completion_code,
53376c9b192SJohn Chung file_descriptor};
53476c9b192SJohn Chung
53576c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
53676c9b192SJohn Chung payload_length = 1;
53776c9b192SJohn Chung auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
53876c9b192SJohn Chung responsePtr, &payload_length);
53976c9b192SJohn Chung EXPECT_EQ(rc, -EOVERFLOW);
54076c9b192SJohn Chung }
54176c9b192SJohn Chung #endif
54276c9b192SJohn Chung
54376c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfOpenResp,GoodTestCompletionCode)54476c9b192SJohn Chung TEST(EncodeDfOpenResp, GoodTestCompletionCode)
54576c9b192SJohn Chung {
54676c9b192SJohn Chung uint8_t instance_id = 0;
54776c9b192SJohn Chung uint8_t completion_code = PLDM_FILE_CC_INVALID_FILE_DESCRIPTOR;
54876c9b192SJohn Chung uint16_t file_descriptor = 0x0100;
54976c9b192SJohn Chung size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
55076c9b192SJohn Chung
55176c9b192SJohn Chung const struct pldm_file_df_open_resp resp_data = {completion_code,
55276c9b192SJohn Chung file_descriptor};
55376c9b192SJohn Chung
55476c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_OPEN_RESP_BYTES);
55576c9b192SJohn Chung auto rc = encode_pldm_file_df_open_resp(instance_id, &resp_data,
55676c9b192SJohn Chung responsePtr, &payload_length);
55776c9b192SJohn Chung EXPECT_EQ(rc, 0);
55894f7fd64SAndrew Jeffery EXPECT_EQ(payload_length, 1ul); // Completion code only
55976c9b192SJohn Chung }
56076c9b192SJohn Chung #endif
56176c9b192SJohn Chung
56276c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenReq,GoodTest)56376c9b192SJohn Chung TEST(DecodeDfOpenReq, GoodTest)
56476c9b192SJohn Chung {
56576c9b192SJohn Chung uint16_t file_identifier = 0x0100;
56676c9b192SJohn Chung bitfield16_t file_attribute;
56776c9b192SJohn Chung file_attribute.value = 0x0400;
56876c9b192SJohn Chung
56976c9b192SJohn Chung struct pldm_file_df_open_req req_data = {};
57076c9b192SJohn Chung
571*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
57276c9b192SJohn Chung int rc;
57376c9b192SJohn Chung
57476c9b192SJohn Chung static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
57576c9b192SJohn Chung
57676c9b192SJohn Chung PLDM_MSG_DEFINE_P(requestMsg, payload_length);
57776c9b192SJohn Chung
57876c9b192SJohn Chung rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
57976c9b192SJohn Chung ASSERT_EQ(rc, 0);
58076c9b192SJohn Chung
58176c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_identifier);
58276c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_attribute.value);
58376c9b192SJohn Chung
58476c9b192SJohn Chung ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
58576c9b192SJohn Chung
58676c9b192SJohn Chung rc = decode_pldm_file_df_open_req(requestMsg, payload_length, &req_data);
58776c9b192SJohn Chung
58876c9b192SJohn Chung ASSERT_EQ(rc, 0);
58976c9b192SJohn Chung EXPECT_EQ(req_data.file_identifier, file_identifier);
59076c9b192SJohn Chung EXPECT_EQ(req_data.file_attribute.value, file_attribute.value);
59176c9b192SJohn Chung }
59276c9b192SJohn Chung #endif
59376c9b192SJohn Chung
59476c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenReq,BadTestUnAllocatedPtrParams)59576c9b192SJohn Chung TEST(DecodeDfOpenReq, BadTestUnAllocatedPtrParams)
59676c9b192SJohn Chung {
59776c9b192SJohn Chung uint16_t file_identifier = 0x0100;
59876c9b192SJohn Chung bitfield16_t file_attribute;
59976c9b192SJohn Chung file_attribute.value = 0x0400;
60076c9b192SJohn Chung
60176c9b192SJohn Chung struct pldm_file_df_open_req req_data = {};
60276c9b192SJohn Chung
603*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
60476c9b192SJohn Chung int rc;
60576c9b192SJohn Chung
60676c9b192SJohn Chung static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
60776c9b192SJohn Chung
60876c9b192SJohn Chung PLDM_MSG_DEFINE_P(requestMsg, payload_length);
60976c9b192SJohn Chung
61076c9b192SJohn Chung rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
61176c9b192SJohn Chung ASSERT_EQ(rc, 0);
61276c9b192SJohn Chung
61376c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_identifier);
61476c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_attribute.value);
61576c9b192SJohn Chung
61676c9b192SJohn Chung ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
61776c9b192SJohn Chung
61876c9b192SJohn Chung rc = decode_pldm_file_df_open_req(nullptr, payload_length, &req_data);
61976c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
62076c9b192SJohn Chung
62176c9b192SJohn Chung rc = decode_pldm_file_df_open_req(requestMsg, payload_length, nullptr);
62276c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
62376c9b192SJohn Chung }
62476c9b192SJohn Chung #endif
62576c9b192SJohn Chung
62676c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfOpenReq,BadTestInvalidExpectedInputMsgLength)62776c9b192SJohn Chung TEST(DecodeDfOpenReq, BadTestInvalidExpectedInputMsgLength)
62876c9b192SJohn Chung {
62976c9b192SJohn Chung uint16_t file_identifier = 0x0100;
63076c9b192SJohn Chung bitfield16_t file_attribute;
63176c9b192SJohn Chung file_attribute.value = 0x0400;
63276c9b192SJohn Chung
63376c9b192SJohn Chung struct pldm_file_df_open_req req_data = {};
63476c9b192SJohn Chung
635*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
63676c9b192SJohn Chung int rc;
63776c9b192SJohn Chung
63876c9b192SJohn Chung static constexpr const size_t payload_length = PLDM_DF_OPEN_REQ_BYTES;
63976c9b192SJohn Chung
64076c9b192SJohn Chung PLDM_MSG_DEFINE_P(requestMsg, payload_length);
64176c9b192SJohn Chung
64276c9b192SJohn Chung rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
64376c9b192SJohn Chung ASSERT_EQ(rc, 0);
64476c9b192SJohn Chung
64576c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_identifier);
64676c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_attribute.value);
64776c9b192SJohn Chung
64876c9b192SJohn Chung ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
64976c9b192SJohn Chung
65076c9b192SJohn Chung rc = decode_pldm_file_df_open_req(requestMsg, 0, &req_data);
65176c9b192SJohn Chung EXPECT_EQ(rc, -EOVERFLOW);
65276c9b192SJohn Chung }
65376c9b192SJohn Chung #endif
65476c9b192SJohn Chung
65576c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfCloseResp,GoodTest)65676c9b192SJohn Chung TEST(EncodeDfCloseResp, GoodTest)
65776c9b192SJohn Chung {
65876c9b192SJohn Chung uint8_t instance_id = 0;
65976c9b192SJohn Chung size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
66076c9b192SJohn Chung std::array<uint8_t, PLDM_DF_CLOSE_RESP_BYTES> responseMsg = {PLDM_SUCCESS};
66176c9b192SJohn Chung
66276c9b192SJohn Chung const struct pldm_file_df_close_resp resp_data = {PLDM_SUCCESS};
66376c9b192SJohn Chung
66476c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_CLOSE_RESP_BYTES);
66576c9b192SJohn Chung
66676c9b192SJohn Chung auto rc = encode_pldm_file_df_close_resp(instance_id, &resp_data,
66776c9b192SJohn Chung responsePtr, &payload_length);
66876c9b192SJohn Chung
66976c9b192SJohn Chung ASSERT_EQ(rc, 0);
67076c9b192SJohn Chung EXPECT_EQ(0, memcmp(responsePtr->payload, responseMsg.data(),
67176c9b192SJohn Chung sizeof(responseMsg)));
67276c9b192SJohn Chung }
67376c9b192SJohn Chung #endif
67476c9b192SJohn Chung
67576c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(EncodeDfCloseResp,BadTestUnAllocatedPtrParams)67676c9b192SJohn Chung TEST(EncodeDfCloseResp, BadTestUnAllocatedPtrParams)
67776c9b192SJohn Chung {
67876c9b192SJohn Chung uint8_t instance_id = 0;
67976c9b192SJohn Chung size_t payload_length = PLDM_DF_CLOSE_RESP_BYTES;
68076c9b192SJohn Chung const struct pldm_file_df_close_resp resp_data = {PLDM_SUCCESS};
68176c9b192SJohn Chung int rc;
68276c9b192SJohn Chung
68376c9b192SJohn Chung PLDM_MSG_DEFINE_P(responsePtr, PLDM_DF_CLOSE_RESP_BYTES);
68476c9b192SJohn Chung
68576c9b192SJohn Chung rc = encode_pldm_file_df_close_resp(instance_id, &resp_data, nullptr,
68676c9b192SJohn Chung &payload_length);
68776c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
68876c9b192SJohn Chung
68976c9b192SJohn Chung rc = encode_pldm_file_df_close_resp(instance_id, nullptr, responsePtr,
69076c9b192SJohn Chung &payload_length);
69176c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
69276c9b192SJohn Chung }
69376c9b192SJohn Chung #endif
69476c9b192SJohn Chung
69576c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfCloseReq,GoodTest)69676c9b192SJohn Chung TEST(DecodeDfCloseReq, GoodTest)
69776c9b192SJohn Chung {
69876c9b192SJohn Chung uint16_t file_descriptor = 0x1000;
69976c9b192SJohn Chung bitfield16_t df_close_options;
70076c9b192SJohn Chung df_close_options.value = 0x4000;
70176c9b192SJohn Chung
70276c9b192SJohn Chung struct pldm_file_df_close_req req_data = {};
70376c9b192SJohn Chung
704*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
70576c9b192SJohn Chung int rc;
70676c9b192SJohn Chung
70776c9b192SJohn Chung static constexpr const size_t payload_length = PLDM_DF_CLOSE_REQ_BYTES;
70876c9b192SJohn Chung
70976c9b192SJohn Chung PLDM_MSG_DEFINE_P(requestMsg, payload_length);
71076c9b192SJohn Chung
71176c9b192SJohn Chung rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
71276c9b192SJohn Chung ASSERT_EQ(rc, 0);
71376c9b192SJohn Chung
71476c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_descriptor);
71576c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, df_close_options.value);
71676c9b192SJohn Chung
71776c9b192SJohn Chung ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
71876c9b192SJohn Chung
71976c9b192SJohn Chung rc = decode_pldm_file_df_close_req(requestMsg, payload_length, &req_data);
72076c9b192SJohn Chung
72176c9b192SJohn Chung ASSERT_EQ(rc, 0);
72276c9b192SJohn Chung EXPECT_EQ(req_data.file_descriptor, file_descriptor);
72376c9b192SJohn Chung EXPECT_EQ(req_data.df_close_options.value, df_close_options.value);
72476c9b192SJohn Chung }
72576c9b192SJohn Chung #endif
72676c9b192SJohn Chung
72776c9b192SJohn Chung #ifdef LIBPLDM_API_TESTING
TEST(DecodeDfCloseReq,BadTestUnAllocatedPtrParams)72876c9b192SJohn Chung TEST(DecodeDfCloseReq, BadTestUnAllocatedPtrParams)
72976c9b192SJohn Chung {
73076c9b192SJohn Chung uint16_t file_descriptor = 0x1000;
73176c9b192SJohn Chung bitfield16_t df_close_options;
73276c9b192SJohn Chung df_close_options.value = 0x4000;
73376c9b192SJohn Chung
73476c9b192SJohn Chung struct pldm_file_df_close_req req_data = {};
73576c9b192SJohn Chung
736*7a8d932bSJohn Chung PLDM_MSGBUF_RW_DEFINE_P(buf);
73776c9b192SJohn Chung int rc;
73876c9b192SJohn Chung
73976c9b192SJohn Chung static constexpr const size_t payload_length = PLDM_DF_CLOSE_REQ_BYTES;
74076c9b192SJohn Chung
74176c9b192SJohn Chung PLDM_MSG_DEFINE_P(requestMsg, payload_length);
74276c9b192SJohn Chung
74376c9b192SJohn Chung rc = pldm_msgbuf_init_errno(buf, 0, requestMsg->payload, payload_length);
74476c9b192SJohn Chung ASSERT_EQ(rc, 0);
74576c9b192SJohn Chung
74676c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, file_descriptor);
74776c9b192SJohn Chung pldm_msgbuf_insert_uint16(buf, df_close_options.value);
74876c9b192SJohn Chung
74976c9b192SJohn Chung ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
75076c9b192SJohn Chung
75176c9b192SJohn Chung rc = decode_pldm_file_df_close_req(nullptr, payload_length, &req_data);
75276c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
75376c9b192SJohn Chung
75476c9b192SJohn Chung rc = decode_pldm_file_df_close_req(requestMsg, payload_length, nullptr);
75576c9b192SJohn Chung EXPECT_EQ(rc, -EINVAL);
75676c9b192SJohn Chung }
75776c9b192SJohn Chung #endif
758