diff mbox series

[v3,7/9] core/pldm/test : Implement pldm platform restart and power off request test

Message ID 20220518074304.42497-8-abhishek@linux.ibm.com
State New
Headers show
Series Implement PLDM self test | expand

Commit Message

Abhishek Singh Tomar May 18, 2022, 7:43 a.m. UTC
The patch contains test for platform restart and platform
power off requests using PLDM Platform command
PLDM_SET_STATE_EFFECTER_STATES

Signed-off-by: Abhishek Singh Tomar <abhishek@linux.ibm.com>
---
 core/pldm/test/test-pldm-platform.c | 88 +++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)
diff mbox series

Patch

diff --git a/core/pldm/test/test-pldm-platform.c b/core/pldm/test/test-pldm-platform.c
index 8c852ad7..8b2e583a 100644
--- a/core/pldm/test/test-pldm-platform.c
+++ b/core/pldm/test/test-pldm-platform.c
@@ -189,6 +189,10 @@  int pldm_test_reply_request_platform(void *request_msg, size_t request_len,
 	uint32_t record_hndl;
 	uint8_t format_version, tid, event_class;
 	size_t event_data_offset;
+	uint16_t effecter_id;
+	uint8_t comp_effecter_count;
+	set_effecter_state_field field;
+
 
 /* check pldm command received and reply with appropriate pldm response message */
 	switch (((struct pldm_msg *)request_msg)->hdr.command) {
@@ -269,6 +273,45 @@  int pldm_test_reply_request_platform(void *request_msg, size_t request_len,
 
 		return PLDM_SUCCESS;
 
+	case PLDM_SET_STATE_EFFECTER_STATES:
+		payload_len = request_len - sizeof(struct pldm_msg_hdr);
+		rc = decode_set_state_effecter_states_req(request_msg, payload_len, &effecter_id,
+				&comp_effecter_count, &field);
+		if (rc != PLDM_SUCCESS)
+			return OPAL_PARAMETER;
+
+		/*
+		 * Test if request received from same effecter id passed
+		 * and also check field struct same as expected
+		 */
+		if (
+				(
+				 effecter_id == effecter_test_1.effecter_id &&
+				 field.effecter_state ==
+				 possible_states_effecter_1_test.states->byte &&
+				 field.set_request == PLDM_REQUEST_SET &&
+				 field.effecter_state == PLDM_SW_TERM_GRACEFUL_RESTART_REQUESTED
+				 ) ||
+				(
+				 effecter_id == effecter_test_2.effecter_id &&
+				 field.effecter_state ==
+				 possible_states_effecter_2_test.states->byte &&
+				 field.set_request == PLDM_REQUEST_SET &&
+				 field.effecter_state ==
+				 PLDM_STATE_SET_SYS_POWER_STATE_OFF_SOFT_GRACEFUL
+				 )
+				) {
+			/*
+			 * BMC doesn't answer for these specific effecter states
+			 * (PLDM_SW_TERM_GRACEFUL_RESTART and PLDM_STATE_SET_SYS_POWER_STATE_OFF)
+			 * hence *response len = 0
+			 */
+			*response_len = 0;
+			return OPAL_SUCCESS;
+		} else
+			return OPAL_PARAMETER;
+		return OPAL_SUCCESS;
+
 	default:
 		return OPAL_PARAMETER;
 
@@ -283,6 +326,32 @@  int main(void)
 {
 	int rc;
 
+	/*
+	 * Attempt to call pldm_platform_restart()
+	 * before pldm_platform_init() return error
+	 * OPAL_HARDWARE
+	 */
+	rc = pldm_platform_restart();
+	if (rc != OPAL_HARDWARE) {
+		printf("PLDM_TEST failed : pldm_platform_restart",
+				" called before pldm_platform_init",
+				" expected=%d received=%d\n", OPAL_HARDWARE, rc);
+		return OPAL_PARAMETER;
+	}
+
+	/*
+	 * Attempt to call pldm_platform_power_off()
+	 * before pldm_platform_init() return error
+	 * OPAL_HARDWARE
+	 */
+	rc = pldm_platform_power_off();
+	if (rc != OPAL_HARDWARE) {
+		printf("PLDM_TEST failed : pldm_platform_power_off",
+				" called before pldm_platform_init",
+				" expected=%d received=%d\n", OPAL_HARDWARE, rc);
+		return OPAL_PARAMETER;
+	}
+
 
 	/* Inittialize pldm platform */
 	rc = pldm_platform_init();
@@ -291,6 +360,25 @@  int main(void)
 		return rc;
 	}
 
+	/*
+	 * Attempt to call pldm_platform_restart()
+	 * after pldm_platform_init() return PLDM_SUCCESS
+	 */
+	rc = pldm_platform_restart();
+	if (rc != PLDM_SUCCESS) {
+		printf("PLDM_TEST failed : pldm_platform_restart ends with %d\n", rc);
+		return rc;
+	}
+
+	/*
+	 * Attempt to call pldm_platform_power_off()
+	 * after pldm_platform_init() return PLDM_SUCCESS
+	 */
+	rc = pldm_platform_power_off();
+	if (rc != PLDM_SUCCESS) {
+		printf("PLDM_TEST failed : pldm_platform_power_off ends with %d\n", rc);
+		return rc;
+	}
 
 	return PLDM_SUCCESS;
 }