diff mbox series

[v2,3/9] core/pldm/test : pldm file I/O write file Self test

Message ID 20220507063602.66309-4-abhishek@linux.ibm.com
State Superseded
Headers show
Series PLDM implementation self test | expand

Commit Message

Abhishek Singh Tomar May 7, 2022, 6:35 a.m. UTC
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 <abhishek@linux.ibm.com>
---
 core/pldm/test/test_pldm-fileio.c | 71 +++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

Comments

Christophe Lombard May 10, 2022, 3:26 p.m. UTC | #1
Le 07/05/2022 à 08:35, Abhishek Singh Tomar a écrit :
> 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<abhishek@linux.ibm.com>
> ---
>   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);
> +
> +		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) {

OPAL and PLDM return codes are mixed.

> +		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");

The error message is not really explicite.

> +		return ret;
> +	}
> +
> +
>   	return PLDM_SUCCESS;
>   }
>
diff mbox series

Patch

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);
+
+		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) {
+		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");
+		return ret;
+	}
+
+
 	return PLDM_SUCCESS;
 }