Manojkiran Eda | 9a8e497 | 2022-11-28 16:38:21 +0530 | [diff] [blame] | 1 | #include <endian.h> |
Andrew Jeffery | b0c1d20 | 2023-11-07 22:08:44 +1030 | [diff] [blame] | 2 | #include <libpldm/base.h> |
Pavithra Barithaya | a7989cd | 2023-10-30 08:52:28 -0500 | [diff] [blame] | 3 | #include <libpldm/oem/ibm/host.h> |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 4 | |
| 5 | #include <array> |
Manojkiran Eda | 9a8e497 | 2022-11-28 16:38:21 +0530 | [diff] [blame] | 6 | #include <cstdint> |
Andrew Jeffery | 5a70607 | 2023-04-05 19:45:31 +0930 | [diff] [blame] | 7 | #include <cstring> |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 8 | #include <new> |
Manojkiran Eda | 9a8e497 | 2022-11-28 16:38:21 +0530 | [diff] [blame] | 9 | #include <vector> |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 10 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 11 | #include <gmock/gmock.h> |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 12 | #include <gtest/gtest.h> |
| 13 | |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 14 | TEST(GetAlertStatus, testGoodEncodeRequest) |
| 15 | { |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 16 | PLDM_MSG_DEFINE_P(request, PLDM_GET_ALERT_STATUS_REQ_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 17 | |
| 18 | uint8_t versionId = 0x0; |
| 19 | |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 20 | auto rc = encode_get_alert_status_req(0, versionId, request, |
| 21 | PLDM_GET_ALERT_STATUS_REQ_BYTES); |
| 22 | EXPECT_EQ(rc, PLDM_SUCCESS); |
| 23 | EXPECT_EQ(versionId, request->payload[0]); |
| 24 | } |
| 25 | |
| 26 | TEST(GetAlertStatus, testBadEncodeRequest) |
| 27 | { |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 28 | PLDM_MSG_DEFINE_P(request, PLDM_GET_ALERT_STATUS_REQ_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 29 | auto rc = encode_get_alert_status_req(0, 0x0, request, |
| 30 | PLDM_GET_ALERT_STATUS_REQ_BYTES + 1); |
| 31 | EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); |
| 32 | } |
| 33 | |
| 34 | TEST(GetAlertStatus, testGoodDecodeResponse) |
| 35 | { |
| 36 | uint8_t completionCode = PLDM_SUCCESS; |
Pavithra Barithaya | dc7d3b5 | 2024-02-06 23:46:49 -0600 | [diff] [blame] | 37 | uint32_t rack_entry = 0xff000030; |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 38 | uint32_t pri_cec_node = 0x00008030; |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 39 | |
| 40 | PLDM_MSG_DEFINE_P(response, PLDM_GET_ALERT_STATUS_RESP_BYTES); |
| 41 | auto* resp = new (response->payload) pldm_get_alert_status_resp; |
| 42 | resp->completion_code = completionCode; |
| 43 | resp->rack_entry = htole32(rack_entry); |
| 44 | resp->pri_cec_node = htole32(pri_cec_node); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 45 | |
| 46 | uint8_t retCompletionCode = 0; |
| 47 | uint32_t retRack_entry = 0; |
| 48 | uint32_t retPri_cec_node = 0; |
| 49 | |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 50 | auto rc = decode_get_alert_status_resp( |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 51 | response, PLDM_GET_ALERT_STATUS_RESP_BYTES, &retCompletionCode, |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 52 | &retRack_entry, &retPri_cec_node); |
| 53 | EXPECT_EQ(rc, PLDM_SUCCESS); |
| 54 | EXPECT_EQ(retCompletionCode, completionCode); |
| 55 | EXPECT_EQ(retRack_entry, rack_entry); |
| 56 | EXPECT_EQ(retPri_cec_node, pri_cec_node); |
| 57 | } |
| 58 | |
| 59 | TEST(GetAlertStatus, testBadDecodeResponse) |
| 60 | { |
| 61 | auto rc = decode_get_alert_status_resp(NULL, 0, NULL, NULL, NULL); |
| 62 | EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA); |
| 63 | |
| 64 | uint8_t completionCode = PLDM_SUCCESS; |
Pavithra Barithaya | dc7d3b5 | 2024-02-06 23:46:49 -0600 | [diff] [blame] | 65 | uint32_t rack_entry = 0xff000030; |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 66 | uint32_t pri_cec_node = 0x00008030; |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 67 | |
| 68 | PLDM_MSG_DEFINE_P(response, PLDM_GET_ALERT_STATUS_RESP_BYTES); |
| 69 | auto* resp = new (response->payload) pldm_get_alert_status_resp; |
| 70 | resp->completion_code = completionCode; |
| 71 | resp->rack_entry = htole32(rack_entry); |
| 72 | resp->pri_cec_node = htole32(pri_cec_node); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 73 | |
| 74 | uint8_t retCompletionCode = 0; |
| 75 | uint32_t retRack_entry = 0; |
| 76 | uint32_t retPri_cec_node = 0; |
| 77 | |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 78 | rc = decode_get_alert_status_resp( |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 79 | response, PLDM_GET_ALERT_STATUS_RESP_BYTES + 1, &retCompletionCode, |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 80 | &retRack_entry, &retPri_cec_node); |
| 81 | EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); |
| 82 | } |
| 83 | |
| 84 | TEST(GetAlertStatus, testGoodEncodeResponse) |
| 85 | { |
Pavithra Barithaya | dc7d3b5 | 2024-02-06 23:46:49 -0600 | [diff] [blame] | 86 | uint32_t rack_entry = 0xff000030; |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 87 | uint32_t pri_cec_node = 0x00008030; |
| 88 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 89 | PLDM_MSG_DEFINE_P(response, PLDM_GET_ALERT_STATUS_RESP_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 90 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 91 | auto rc = encode_get_alert_status_resp(0, PLDM_SUCCESS, rack_entry, |
| 92 | pri_cec_node, response, |
| 93 | PLDM_GET_ALERT_STATUS_RESP_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 94 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 95 | ASSERT_EQ(rc, PLDM_SUCCESS); |
| 96 | EXPECT_THAT(response_buf, testing::ElementsAreArray( |
| 97 | {0x00, 0x3f, 0xf0, 0x00, 0x30, 0x00, 0x00, |
| 98 | 0xff, 0x30, 0x80, 0x00, 0x00})); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 99 | } |
| 100 | |
| 101 | TEST(GetAlertStatus, testBadEncodeResponse) |
| 102 | { |
Pavithra Barithaya | dc7d3b5 | 2024-02-06 23:46:49 -0600 | [diff] [blame] | 103 | uint32_t rack_entry = 0xff000030; |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 104 | uint32_t pri_cec_node = 0x00008030; |
| 105 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 106 | PLDM_MSG_DEFINE_P(response, PLDM_GET_ALERT_STATUS_RESP_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 107 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 108 | auto rc = encode_get_alert_status_resp( |
| 109 | 0, PLDM_SUCCESS, rack_entry, pri_cec_node, response, |
| 110 | PLDM_GET_ALERT_STATUS_RESP_BYTES + 1); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 111 | |
| 112 | EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA); |
| 113 | } |
| 114 | |
| 115 | TEST(GetAlertStatus, testGoodDecodeRequest) |
| 116 | { |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 117 | uint8_t versionId = 0x0; |
| 118 | uint8_t retVersionId; |
| 119 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 120 | PLDM_MSG_DEFINE_P(req, PLDM_GET_ALERT_STATUS_REQ_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 121 | req->payload[0] = versionId; |
| 122 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 123 | auto rc = decode_get_alert_status_req(req, PLDM_GET_ALERT_STATUS_REQ_BYTES, |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 124 | &retVersionId); |
| 125 | |
| 126 | EXPECT_EQ(rc, PLDM_SUCCESS); |
| 127 | EXPECT_EQ(retVersionId, versionId); |
| 128 | } |
| 129 | |
| 130 | TEST(GetAlertStatus, testBadDecodeRequest) |
| 131 | { |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 132 | uint8_t versionId = 0x0; |
| 133 | uint8_t retVersionId; |
| 134 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 135 | PLDM_MSG_DEFINE_P(req, PLDM_GET_ALERT_STATUS_REQ_BYTES); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 136 | req->payload[0] = versionId; |
| 137 | |
Andrew Jeffery | 7a3c14e | 2024-09-09 12:23:27 +0930 | [diff] [blame] | 138 | auto rc = decode_get_alert_status_req( |
| 139 | req, PLDM_GET_ALERT_STATUS_REQ_BYTES + 1, &retVersionId); |
Andrew Jeffery | 9c76679 | 2022-08-10 23:12:49 +0930 | [diff] [blame] | 140 | |
| 141 | EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH); |
| 142 | } |