blob: f738377008bcf3734a36f6e31665f0f5c32e39f3 [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;
21 std::array<uint8_t, PLDM_DF_OPEN_REQ_BYTES> requestMsg = {0x00, 0x01, 0x00,
22 0x04};
23
24 const struct pldm_file_df_open_req req_data = {file_identifier,
25 file_attribute};
26
27 PLDM_MSG_DEFINE_P(requestPtr, PLDM_DF_OPEN_REQ_BYTES);
28 auto rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr,
29 PLDM_DF_OPEN_REQ_BYTES);
30
31 ASSERT_EQ(rc, 0);
32 EXPECT_EQ(
33 0, memcmp(requestPtr->payload, requestMsg.data(), sizeof(requestMsg)));
34}
35#endif
36
37#ifdef LIBPLDM_API_TESTING
38TEST(EncodeDfOpenReq, BadTestUnAllocatedPtrParams)
39{
40 uint8_t instance_id = 0;
41 uint16_t file_identifier = 0x0100;
42 bitfield16_t file_attribute;
43 file_attribute.value = 0x0400;
44 int rc;
45
46 const struct pldm_file_df_open_req req_data = {file_identifier,
47 file_attribute};
48
49 PLDM_MSG_DEFINE_P(requestPtr, PLDM_DF_OPEN_REQ_BYTES);
50 rc = encode_pldm_file_df_open_req(instance_id, &req_data, nullptr,
51 PLDM_DF_OPEN_REQ_BYTES);
52 EXPECT_EQ(rc, -EINVAL);
53
54 rc = encode_pldm_file_df_open_req(instance_id, nullptr, requestPtr,
55 PLDM_DF_OPEN_REQ_BYTES);
56 EXPECT_EQ(rc, -EINVAL);
57}
58#endif
59
60#ifdef LIBPLDM_API_TESTING
61TEST(EncodeDfOpenReq, BadTestInvalidExpectedOutputMsgLength)
62{
63 uint8_t instance_id = 0;
64 uint16_t file_identifier = 0x0100;
65 bitfield16_t file_attribute;
66 file_attribute.value = 0x0400;
67 int rc;
68
69 const struct pldm_file_df_open_req req_data = {file_identifier,
70 file_attribute};
71
72 PLDM_MSG_DEFINE_P(requestPtr, PLDM_DF_OPEN_REQ_BYTES);
73 rc = encode_pldm_file_df_open_req(instance_id, &req_data, requestPtr, 1);
74 EXPECT_EQ(rc, -EOVERFLOW);
75}
76#endif
77
78#ifdef LIBPLDM_API_TESTING
79TEST(DecodeDfOpenResp, GoodTest)
80{
81 uint8_t completion_code = PLDM_SUCCESS;
82 uint16_t file_descriptor = 20;
83
84 struct pldm_file_df_open_resp resp_data = {};
85
86 PLDM_MSGBUF_DEFINE_P(buf);
87 int rc;
88
89 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
90
91 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
92
93 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
94 ASSERT_EQ(rc, 0);
95
96 pldm_msgbuf_insert_uint8(buf, completion_code);
97 pldm_msgbuf_insert_uint16(buf, file_descriptor);
98
99 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
100
101 rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, &resp_data);
102
103 ASSERT_EQ(rc, 0);
104 EXPECT_EQ(resp_data.completion_code, completion_code);
105 EXPECT_EQ(resp_data.file_descriptor, file_descriptor);
106}
107#endif
108
109#ifdef LIBPLDM_API_TESTING
110TEST(DecodeDfOpenResp, BadTestUnAllocatedPtrParams)
111{
112 uint8_t completion_code = PLDM_SUCCESS;
113 uint16_t file_descriptor = 20;
114
115 struct pldm_file_df_open_resp resp_data = {};
116
117 PLDM_MSGBUF_DEFINE_P(buf);
118 int rc;
119
120 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
121
122 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
123
124 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
125 ASSERT_EQ(rc, 0);
126
127 pldm_msgbuf_insert_uint8(buf, completion_code);
128 pldm_msgbuf_insert_uint16(buf, file_descriptor);
129
130 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
131
132 rc = decode_pldm_file_df_open_resp(nullptr, payload_length, &resp_data);
133 EXPECT_EQ(rc, -EINVAL);
134
135 rc = decode_pldm_file_df_open_resp(responseMsg, payload_length, nullptr);
136 EXPECT_EQ(rc, -EINVAL);
137}
138#endif
139
140#ifdef LIBPLDM_API_TESTING
141TEST(DecodeDfOpenResp, BadTestInvalidExpectedInputMsgLength)
142{
143 uint8_t completion_code = PLDM_SUCCESS;
144 uint16_t file_descriptor = 20;
145
146 struct pldm_file_df_open_resp resp_data = {};
147
148 PLDM_MSGBUF_DEFINE_P(buf);
149 int rc;
150
151 static constexpr const size_t payload_length = PLDM_DF_OPEN_RESP_BYTES;
152
153 PLDM_MSG_DEFINE_P(responseMsg, payload_length);
154
155 rc = pldm_msgbuf_init_errno(buf, 0, responseMsg->payload, payload_length);
156 ASSERT_EQ(rc, 0);
157
158 pldm_msgbuf_insert_uint8(buf, completion_code);
159 pldm_msgbuf_insert_uint16(buf, file_descriptor);
160
161 ASSERT_EQ(pldm_msgbuf_complete_consumed(buf), 0);
162
163 rc = decode_pldm_file_df_open_resp(responseMsg, 0, &resp_data);
164 EXPECT_EQ(rc, -EOVERFLOW);
165}
166#endif