<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<br>
<br>
<div class="moz-cite-prefix">Le 07/05/2022 à 08:35, Abhishek Singh
Tomar a écrit :<br>
</div>
<blockquote type="cite"
cite="mid:20220507063602.66309-4-abhishek@linux.ibm.com">
<pre class="moz-quote-pre" wrap="">The patch contains self test for PLDM file I/O write message.
This patch test codeflow for PLDM command PLDM_WRITE_FILE.
Signed-off-by: Abhishek Singh Tomar <a class="moz-txt-link-rfc2396E" href="mailto:abhishek@linux.ibm.com"><abhishek@linux.ibm.com></a>
---
core/pldm/test/test_pldm-fileio.c | 71 +++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/core/pldm/test/test_pldm-fileio.c b/core/pldm/test/test_pldm-fileio.c
index 722a8bf6..10011740 100644
--- a/core/pldm/test/test_pldm-fileio.c
+++ b/core/pldm/test/test_pldm-fileio.c
@@ -103,13 +103,20 @@ int pldm_test_reply_request(void *request_msg, size_t request_len,
int pldm_test_reply_request_file_io(void *request_msg, size_t request_len,
void **response_msg, size_t *response_len)
{
+ int size = 0;
int ret;
+ void *payload_data;
int payload_len = 0;
+ uint32_t offset; //!< Offset to file where write starts
+ uint32_t length;
+ uint32_t file_handle; //!< Handle to file
+ size_t file_data_offset = 0;
uint32_t transfer_handle;
uint8_t transfer_opflag;
uint8_t table_type;
uint8_t *file_attr_table;
uint32_t table_size;
+ struct pldm_write_file_req file_req;
/* check command received and reply with appropriate pldm response message */
@@ -140,6 +147,51 @@ int pldm_test_reply_request_file_io(void *request_msg, size_t request_len,
free(file_attr_table);
break;
+ case PLDM_WRITE_FILE:
+
+ payload_len = request_len - sizeof(struct pldm_msg_hdr);
+
+
+ ret = decode_write_file_req(request_msg, payload_len, &file_handle,
+ &offset, &length, &file_data_offset);
+ if (ret != PLDM_SUCCESS)
+ return ret;
+
+ /*
+ * TEST if file handle received is same as that we send while making
+ * call to pldm request (i.e. TEST_FILE_IO_HANDLE).
+ * then PLDM message are recieved without any distortion in path.
+ */
+ if (file_handle != TEST_FILE_IO_HANDLE)
+ return PLDM_ERROR_INVALID_DATA;
+
+ payload_data = ((struct pldm_msg *)request_msg)->payload
+ + sizeof(file_req.file_handle)
+ + sizeof(file_req.offset)
+ + sizeof(file_req.length);
+
+ memcpy(pldm_file_io_buff, payload_data, length);
+
+ /*
+ * TEST if file buff received is same as that we send while making
+ * call to pldm request (i.e TEST_FILE_IO_BUF1).
+ * Then PLDM message are transferred without distortion in path.
+ */
+ if (strncmp(TEST_FILE_IO_BUF1, (char *)payload_data, length) != 0) {
+ perror("TEST :: String not matched");
+ return PLDM_ERROR_INVALID_DATA;
+ }
+ *response_len = sizeof(struct pldm_msg_hdr) +
+ sizeof(struct pldm_write_file_resp);
+ *response_msg = malloc(*response_len);
+</pre>
</blockquote>
<blockquote type="cite"
cite="mid:20220507063602.66309-4-abhishek@linux.ibm.com">
<pre class="moz-quote-pre" wrap="">
+ ret = encode_write_file_resp(
+ ((struct pldm_msg *)request_msg)->hdr.instance_id,
+ PLDM_SUCCESS, size, *response_msg);
+ if (ret != PLDM_SUCCESS)
+ return ret;
+
+ break;
default:
return PLDM_ERROR_INVALID_DATA;
@@ -156,11 +208,21 @@ int pldm_test_reply_request_file_io(void *request_msg, size_t request_len,
int main(void)
{
size_t ret;
+ char buf_write[TEST_FILE_IO_LENGTH] = TEST_FILE_IO_BUF1;
+ uint64_t size = strlen(buf_write);
/* Initialize test buffer for represent file with 0 */
bzero(pldm_file_io_buff, TEST_FILE_IO_LENGTH);
+ /* Attempt to write using pldm file io before init should return error OPAL_PARAMTER */
+ ret = pldm_file_io_write_file(TEST_FILE_IO_HANDLE, TEST_FILE_IO_BUF1, 0, size);
+ if (ret != OPAL_PARAMETER) {</pre>
</blockquote>
<font size="2"><br>
OPAL and PLDM return codes are mixed.</font><br>
<br>
<blockquote type="cite"
cite="mid:20220507063602.66309-4-abhishek@linux.ibm.com">
<pre class="moz-quote-pre" wrap="">
+ perror("pldm_file_io_write_file");
+ return ret;
+ }
+
+
/* Init PLDM File IO */
ret = pldm_file_io_init();
if (ret != PLDM_SUCCESS) {
@@ -168,6 +230,15 @@ int main(void)
return ret;
}
+ /* Attempt to write using pldm file io should return PLDM SUCCESS after init */
+ ret = pldm_file_io_write_file(TEST_FILE_IO_HANDLE, TEST_FILE_IO_BUF1,
+ 0, size);
+ if (ret != PLDM_SUCCESS) {
+ perror("pldm_file_io_write_file");</pre>
</blockquote>
<font size="2"><br>
The error message is not really explicite.</font><br>
<br>
<blockquote type="cite"
cite="mid:20220507063602.66309-4-abhishek@linux.ibm.com">
<pre class="moz-quote-pre" wrap="">
+ return ret;
+ }
+
+
return PLDM_SUCCESS;
}
</pre>
</blockquote>
<br>
</body>
</html>