| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 1 | #include <string.h> | 
|  | 2 |  | 
|  | 3 | #include <array> | 
|  | 4 |  | 
|  | 5 | #include "libpldm/base.h" | 
|  | 6 | #include "libpldm/file_io.h" | 
|  | 7 |  | 
|  | 8 | #include <gtest/gtest.h> | 
|  | 9 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 10 | TEST(ReadWriteFileMemory, testGoodDecodeRequest) | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 11 | { | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 12 | std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES> requestMsg{}; | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 13 |  | 
|  | 14 | // Random value for fileHandle, offset, length, address | 
|  | 15 | uint32_t fileHandle = 0x12345678; | 
|  | 16 | uint32_t offset = 0x87654321; | 
|  | 17 | uint32_t length = 0x13245768; | 
|  | 18 | uint64_t address = 0x124356879ACBDE0F; | 
|  | 19 |  | 
|  | 20 | memcpy(requestMsg.data(), &fileHandle, sizeof(fileHandle)); | 
|  | 21 | memcpy(requestMsg.data() + sizeof(fileHandle), &offset, sizeof(offset)); | 
|  | 22 | memcpy(requestMsg.data() + sizeof(fileHandle) + sizeof(offset), &length, | 
|  | 23 | sizeof(length)); | 
|  | 24 | memcpy(requestMsg.data() + sizeof(fileHandle) + sizeof(offset) + | 
|  | 25 | sizeof(length), | 
|  | 26 | &address, sizeof(address)); | 
|  | 27 |  | 
|  | 28 | uint32_t retFileHandle = 0; | 
|  | 29 | uint32_t retOffset = 0; | 
|  | 30 | uint32_t retLength = 0; | 
|  | 31 | uint64_t retAddress = 0; | 
|  | 32 |  | 
|  | 33 | // Invoke decode the read file memory request | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 34 | auto rc = decode_rw_file_memory_req(requestMsg.data(), requestMsg.size(), | 
|  | 35 | &retFileHandle, &retOffset, &retLength, | 
|  | 36 | &retAddress); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 37 |  | 
|  | 38 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 39 | ASSERT_EQ(fileHandle, retFileHandle); | 
|  | 40 | ASSERT_EQ(offset, retOffset); | 
|  | 41 | ASSERT_EQ(length, retLength); | 
|  | 42 | ASSERT_EQ(address, retAddress); | 
|  | 43 | } | 
|  | 44 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 45 | TEST(ReadWriteFileMemory, testBadDecodeRequest) | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 46 | { | 
|  | 47 | uint32_t fileHandle = 0; | 
|  | 48 | uint32_t offset = 0; | 
|  | 49 | uint32_t length = 0; | 
|  | 50 | uint64_t address = 0; | 
|  | 51 |  | 
|  | 52 | // Request payload message is missing | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 53 | auto rc = decode_rw_file_memory_req(NULL, 0, &fileHandle, &offset, &length, | 
|  | 54 | &address); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 55 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 56 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 57 | std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES> requestMsg{}; | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 58 |  | 
|  | 59 | // Address is NULL | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 60 | rc = decode_rw_file_memory_req(requestMsg.data(), requestMsg.size(), | 
|  | 61 | &fileHandle, &offset, &length, NULL); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 62 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 63 |  | 
|  | 64 | // Payload length is invalid | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 65 | rc = decode_rw_file_memory_req(requestMsg.data(), 0, &fileHandle, &offset, | 
|  | 66 | &length, &address); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 67 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); | 
|  | 68 | } | 
|  | 69 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 70 | TEST(ReadWriteFileMemory, testGoodEncodeResponse) | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 71 | { | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 72 | std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_RESP_BYTES> | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 73 | responseMsg{}; | 
|  | 74 | uint32_t length = 0xFF00EE11; | 
|  | 75 | pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data()); | 
|  | 76 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 77 | // ReadFileIntoMemory | 
|  | 78 | auto rc = encode_rw_file_memory_resp(0, PLDM_READ_FILE_INTO_MEMORY, | 
|  | 79 | PLDM_SUCCESS, length, response); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 80 |  | 
|  | 81 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 82 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 83 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 84 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 85 | ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_INTO_MEMORY); | 
|  | 86 | ASSERT_EQ(response->payload[0], PLDM_SUCCESS); | 
|  | 87 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]), | 
|  | 88 | &length, sizeof(length))); | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 89 |  | 
|  | 90 | // WriteFileFromMemory | 
|  | 91 | rc = encode_rw_file_memory_resp(0, PLDM_WRITE_FILE_FROM_MEMORY, | 
|  | 92 | PLDM_SUCCESS, length, response); | 
|  | 93 |  | 
|  | 94 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 95 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 96 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 97 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 98 | ASSERT_EQ(response->hdr.command, PLDM_WRITE_FILE_FROM_MEMORY); | 
|  | 99 | ASSERT_EQ(response->payload[0], PLDM_SUCCESS); | 
|  | 100 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]), | 
|  | 101 | &length, sizeof(length))); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 102 | } | 
|  | 103 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 104 | TEST(ReadWriteFileMemory, testBadEncodeResponse) | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 105 | { | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 106 | std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_RESP_BYTES> | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 107 | responseMsg{}; | 
|  | 108 | uint32_t length = 0; | 
|  | 109 | pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data()); | 
|  | 110 |  | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 111 | // ReadFileIntoMemory | 
|  | 112 | auto rc = encode_rw_file_memory_resp(0, PLDM_READ_FILE_INTO_MEMORY, | 
|  | 113 | PLDM_ERROR, length, response); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 114 |  | 
|  | 115 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 116 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 117 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 118 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 119 | ASSERT_EQ(response->hdr.command, PLDM_READ_FILE_INTO_MEMORY); | 
|  | 120 | ASSERT_EQ(response->payload[0], PLDM_ERROR); | 
| Eddie James | 3b02e27 | 2019-04-22 20:13:55 +0000 | [diff] [blame] | 121 |  | 
|  | 122 | // WriteFileFromMemory | 
|  | 123 | rc = encode_rw_file_memory_resp(0, PLDM_WRITE_FILE_FROM_MEMORY, PLDM_ERROR, | 
|  | 124 | length, response); | 
|  | 125 |  | 
|  | 126 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 127 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 128 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 129 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 130 | ASSERT_EQ(response->hdr.command, PLDM_WRITE_FILE_FROM_MEMORY); | 
|  | 131 | ASSERT_EQ(response->payload[0], PLDM_ERROR); | 
| Tom Joseph | 7dae777 | 2019-04-10 14:44:44 +0530 | [diff] [blame] | 132 | } | 
| Tom Joseph | 61325fa | 2019-06-04 15:22:22 +0530 | [diff] [blame] | 133 |  | 
| Priyanga | f4736d4 | 2019-05-02 14:48:04 +0530 | [diff] [blame^] | 134 | TEST(ReadWriteFileIntoMemory, testGoodDecodeResponse) | 
|  | 135 | { | 
|  | 136 | std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES> responseMsg{}; | 
|  | 137 | // Random value for length | 
|  | 138 | uint32_t length = 0xFF00EE12; | 
|  | 139 | uint8_t completionCode = 0; | 
|  | 140 |  | 
|  | 141 | memcpy(responseMsg.data(), &completionCode, sizeof(completionCode)); | 
|  | 142 | memcpy(responseMsg.data() + sizeof(completionCode), &length, | 
|  | 143 | sizeof(length)); | 
|  | 144 |  | 
|  | 145 | uint8_t retCompletionCode = 0; | 
|  | 146 | uint32_t retLength = 0; | 
|  | 147 |  | 
|  | 148 | // Invoke decode the read file memory response | 
|  | 149 | auto rc = decode_rw_file_memory_resp(responseMsg.data(), responseMsg.size(), | 
|  | 150 | &retCompletionCode, &retLength); | 
|  | 151 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 152 | ASSERT_EQ(completionCode, retCompletionCode); | 
|  | 153 | ASSERT_EQ(length, retLength); | 
|  | 154 | } | 
|  | 155 |  | 
|  | 156 | TEST(ReadWriteFileIntoMemory, testBadDecodeResponse) | 
|  | 157 | { | 
|  | 158 | uint32_t length = 0; | 
|  | 159 | uint8_t completionCode = 0; | 
|  | 160 |  | 
|  | 161 | // Request payload message is missing | 
|  | 162 | auto rc = decode_rw_file_memory_resp(NULL, 0, &completionCode, &length); | 
|  | 163 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 164 |  | 
|  | 165 | std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES> responseMsg{}; | 
|  | 166 |  | 
|  | 167 | // Payload length is invalid | 
|  | 168 | rc = decode_rw_file_memory_resp(responseMsg.data(), 0, &completionCode, | 
|  | 169 | &length); | 
|  | 170 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); | 
|  | 171 | } | 
|  | 172 |  | 
|  | 173 | TEST(ReadWriteFileIntoMemory, testGoodEncodeRequest) | 
|  | 174 | { | 
|  | 175 | std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_RW_FILE_MEM_REQ_BYTES> | 
|  | 176 | requestMsg{}; | 
|  | 177 |  | 
|  | 178 | uint32_t fileHandle = 0x12345678; | 
|  | 179 | uint32_t offset = 0x87654321; | 
|  | 180 | uint32_t length = 0x13245768; | 
|  | 181 | uint64_t address = 0x124356879ACBDE0F; | 
|  | 182 |  | 
|  | 183 | pldm_msg* request = reinterpret_cast<pldm_msg*>(requestMsg.data()); | 
|  | 184 |  | 
|  | 185 | auto rc = | 
|  | 186 | encode_rw_file_memory_req(0, PLDM_READ_FILE_INTO_MEMORY, fileHandle, | 
|  | 187 | offset, length, address, request); | 
|  | 188 |  | 
|  | 189 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 190 | ASSERT_EQ(request->hdr.request, PLDM_REQUEST); | 
|  | 191 | ASSERT_EQ(request->hdr.instance_id, 0); | 
|  | 192 | ASSERT_EQ(request->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 193 | ASSERT_EQ(request->hdr.command, PLDM_READ_FILE_INTO_MEMORY); | 
|  | 194 |  | 
|  | 195 | ASSERT_EQ(0, memcmp(request->payload, &fileHandle, sizeof(fileHandle))); | 
|  | 196 |  | 
|  | 197 | ASSERT_EQ(0, memcmp(request->payload + sizeof(fileHandle), &offset, | 
|  | 198 | sizeof(offset))); | 
|  | 199 | ASSERT_EQ(0, memcmp(request->payload + sizeof(fileHandle) + sizeof(offset), | 
|  | 200 | &length, sizeof(length))); | 
|  | 201 | ASSERT_EQ(0, memcmp(request->payload + sizeof(fileHandle) + sizeof(offset) + | 
|  | 202 | sizeof(length), | 
|  | 203 | &address, sizeof(address))); | 
|  | 204 | } | 
|  | 205 |  | 
|  | 206 | TEST(ReadWriteFileIntoMemory, testBadEncodeRequest) | 
|  | 207 | { | 
|  | 208 | uint32_t fileHandle = 0; | 
|  | 209 | uint32_t offset = 0; | 
|  | 210 | uint32_t length = 0; | 
|  | 211 | uint64_t address = 0; | 
|  | 212 |  | 
|  | 213 | auto rc = | 
|  | 214 | encode_rw_file_memory_req(0, PLDM_READ_FILE_INTO_MEMORY, fileHandle, | 
|  | 215 | offset, length, address, NULL); | 
|  | 216 |  | 
|  | 217 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 218 | } | 
|  | 219 |  | 
| Tom Joseph | 61325fa | 2019-06-04 15:22:22 +0530 | [diff] [blame] | 220 | TEST(GetFileTable, GoodDecodeRequest) | 
|  | 221 | { | 
|  | 222 | std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES> requestMsg{}; | 
|  | 223 |  | 
|  | 224 | // Random value for DataTransferHandle, TransferOperationFlag, TableType | 
|  | 225 | uint32_t transferHandle = 0x12345678; | 
|  | 226 | uint8_t transferOpFlag = 1; | 
|  | 227 | uint8_t tableType = 1; | 
|  | 228 |  | 
|  | 229 | memcpy(requestMsg.data(), &transferHandle, sizeof(transferHandle)); | 
|  | 230 | memcpy(requestMsg.data() + sizeof(transferHandle), &transferOpFlag, | 
|  | 231 | sizeof(transferOpFlag)); | 
|  | 232 | memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(transferOpFlag), | 
|  | 233 | &tableType, sizeof(tableType)); | 
|  | 234 |  | 
|  | 235 | uint32_t retTransferHandle = 0; | 
|  | 236 | uint8_t retTransferOpFlag = 0; | 
|  | 237 | uint8_t retTableType = 0; | 
|  | 238 |  | 
|  | 239 | // Invoke decode get file table request | 
|  | 240 | auto rc = decode_get_file_table_req(requestMsg.data(), requestMsg.size(), | 
|  | 241 | &retTransferHandle, &retTransferOpFlag, | 
|  | 242 | &retTableType); | 
|  | 243 |  | 
|  | 244 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 245 | ASSERT_EQ(transferHandle, retTransferHandle); | 
|  | 246 | ASSERT_EQ(transferOpFlag, retTransferOpFlag); | 
|  | 247 | ASSERT_EQ(tableType, retTableType); | 
|  | 248 | } | 
|  | 249 |  | 
|  | 250 | TEST(GetFileTable, BadDecodeRequest) | 
|  | 251 | { | 
|  | 252 | uint32_t transferHandle = 0; | 
|  | 253 | uint8_t transferOpFlag = 0; | 
|  | 254 | uint8_t tableType = 0; | 
|  | 255 |  | 
|  | 256 | // Request payload message is missing | 
|  | 257 | auto rc = decode_get_file_table_req(nullptr, 0, &transferHandle, | 
|  | 258 | &transferOpFlag, &tableType); | 
|  | 259 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 260 |  | 
|  | 261 | std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES> requestMsg{}; | 
|  | 262 |  | 
|  | 263 | // TableType is NULL | 
|  | 264 | rc = decode_get_file_table_req(requestMsg.data(), requestMsg.size(), | 
|  | 265 | &transferHandle, &transferOpFlag, nullptr); | 
|  | 266 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA); | 
|  | 267 |  | 
|  | 268 | // Payload length is invalid | 
|  | 269 | rc = decode_get_file_table_req(requestMsg.data(), 0, &transferHandle, | 
|  | 270 | &transferOpFlag, &tableType); | 
|  | 271 | ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); | 
|  | 272 | } | 
|  | 273 |  | 
|  | 274 | TEST(GetFileTable, GoodEncodeResponse) | 
|  | 275 | { | 
|  | 276 | // Random value for NextDataTransferHandle and TransferFlag | 
|  | 277 | uint8_t completionCode = 0; | 
|  | 278 | uint32_t nextTransferHandle = 0x87654321; | 
|  | 279 | uint8_t transferFlag = 5; | 
|  | 280 | // Mock file table contents of size 5 | 
|  | 281 | std::array<uint8_t, 5> fileTable = {1, 2, 3, 4, 5}; | 
|  | 282 | constexpr size_t responseSize = sizeof(completionCode) + | 
|  | 283 | sizeof(nextTransferHandle) + | 
|  | 284 | sizeof(transferFlag) + fileTable.size(); | 
|  | 285 |  | 
|  | 286 | std::array<uint8_t, sizeof(pldm_msg_hdr) + responseSize> responseMsg{}; | 
|  | 287 | pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data()); | 
|  | 288 |  | 
|  | 289 | // GetFileTable | 
|  | 290 | auto rc = encode_get_file_table_resp(0, PLDM_SUCCESS, nextTransferHandle, | 
|  | 291 | transferFlag, fileTable.data(), | 
|  | 292 | fileTable.size(), response); | 
|  | 293 |  | 
|  | 294 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 295 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 296 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 297 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 298 | ASSERT_EQ(response->hdr.command, PLDM_GET_FILE_TABLE); | 
|  | 299 | ASSERT_EQ(response->payload[0], PLDM_SUCCESS); | 
|  | 300 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]), | 
|  | 301 | &nextTransferHandle, sizeof(nextTransferHandle))); | 
|  | 302 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) + | 
|  | 303 | sizeof(nextTransferHandle), | 
|  | 304 | &transferFlag, sizeof(transferFlag))); | 
|  | 305 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) + | 
|  | 306 | sizeof(nextTransferHandle), | 
|  | 307 | &transferFlag, sizeof(transferFlag))); | 
|  | 308 | ASSERT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) + | 
|  | 309 | sizeof(nextTransferHandle) + sizeof(transferFlag), | 
|  | 310 | fileTable.data(), fileTable.size())); | 
|  | 311 | } | 
|  | 312 |  | 
|  | 313 | TEST(GetFileTable, BadEncodeResponse) | 
|  | 314 | { | 
|  | 315 | uint8_t completionCode = 0; | 
|  | 316 | uint32_t nextTransferHandle = 0; | 
|  | 317 | uint8_t transferFlag = 0; | 
|  | 318 | constexpr size_t responseSize = sizeof(completionCode) + | 
|  | 319 | sizeof(nextTransferHandle) + | 
|  | 320 | sizeof(transferFlag); | 
|  | 321 |  | 
|  | 322 | std::array<uint8_t, sizeof(pldm_msg_hdr) + responseSize> responseMsg{}; | 
|  | 323 | pldm_msg* response = reinterpret_cast<pldm_msg*>(responseMsg.data()); | 
|  | 324 |  | 
|  | 325 | // GetFileTable | 
|  | 326 | auto rc = encode_get_file_table_resp(0, PLDM_ERROR, nextTransferHandle, | 
|  | 327 | transferFlag, nullptr, 0, response); | 
|  | 328 |  | 
|  | 329 | ASSERT_EQ(rc, PLDM_SUCCESS); | 
|  | 330 | ASSERT_EQ(response->hdr.request, PLDM_RESPONSE); | 
|  | 331 | ASSERT_EQ(response->hdr.instance_id, 0); | 
|  | 332 | ASSERT_EQ(response->hdr.type, PLDM_IBM_OEM_TYPE); | 
|  | 333 | ASSERT_EQ(response->hdr.command, PLDM_GET_FILE_TABLE); | 
|  | 334 | ASSERT_EQ(response->payload[0], PLDM_ERROR); | 
|  | 335 | } |