tests: Migrate to placement_new from reinterpret casting
reinterpret_cast is prohibited by the C++ core guidelines because
it takes the behavior outside the language definition and gives
problems with type safety. Placement-new on the other-hand allows
to control the object storage while still properly instantiating
an object,keeping the behavior inside the C++ language
specification.
Change-Id: Ifab9ea58b932db11d7af0b9def119bed1bfdc44d
Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
diff --git a/libpldmresponder/test/libpldmresponder_base_test.cpp b/libpldmresponder/test/libpldmresponder_base_test.cpp
index 539d2cf..f169dff 100644
--- a/libpldmresponder/test/libpldmresponder_base_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_base_test.cpp
@@ -25,13 +25,13 @@
TEST_F(TestBaseCommands, testPLDMTypesGoodRequest)
{
std::array<uint8_t, sizeof(pldm_msg_hdr)> requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
// payload length will be 0 in this case
size_t requestPayloadLength = 0;
base::Handler handler(event);
auto response = handler.getPLDMTypes(request, requestPayloadLength);
// Need to support OEM type.
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
uint8_t* payload_ptr = responsePtr->payload;
ASSERT_EQ(payload_ptr[0], 0);
ASSERT_EQ(payload_ptr[1], 29); // 0b11101 see DSP0240 table11
@@ -43,11 +43,11 @@
// Need to support OEM type commands.
std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
base::Handler handler(event);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
uint8_t* payload_ptr = responsePtr->payload;
ASSERT_EQ(payload_ptr[0], 0);
ASSERT_EQ(payload_ptr[1], 60); // 60 = 0b111100
@@ -58,13 +58,13 @@
{
std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
request->payload[0] = 0xFF;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
base::Handler handler(event);
auto response = handler.getPLDMCommands(request, requestPayloadLength);
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
uint8_t* payload_ptr = responsePtr->payload;
ASSERT_EQ(payload_ptr[0], PLDM_ERROR_INVALID_PLDM_TYPE);
}
@@ -73,7 +73,7 @@
{
std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
uint8_t pldmType = PLDM_BASE;
@@ -89,7 +89,7 @@
base::Handler handler(event);
auto response = handler.getPLDMVersion(request, requestPayloadLength);
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
ASSERT_EQ(responsePtr->payload[0], 0);
ASSERT_EQ(0, memcmp(responsePtr->payload + sizeof(responsePtr->payload[0]),
@@ -106,7 +106,7 @@
{
std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
uint8_t pldmType = 7;
@@ -120,11 +120,11 @@
base::Handler handler(event);
auto response = handler.getPLDMVersion(request, requestPayloadLength - 1);
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
- request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ request = new (requestPayload.data()) pldm_msg;
requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
rc = encode_get_version_req(0, transferHandle, flag, pldmType, request);
@@ -132,7 +132,7 @@
ASSERT_EQ(0, rc);
response = handler.getPLDMVersion(request, requestPayloadLength);
- responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ responsePtr = new (response.data()) pldm_msg;
ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_PLDM_TYPE);
}
@@ -140,14 +140,14 @@
TEST_F(TestBaseCommands, testGetTIDGoodRequest)
{
std::array<uint8_t, sizeof(pldm_msg_hdr)> requestPayload{};
- auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
+ auto request = new (requestPayload.data()) pldm_msg;
size_t requestPayloadLength = 0;
base::Handler handler(event);
handler.setOemPlatformHandler(nullptr);
auto response = handler.getTID(request, requestPayloadLength);
- auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+ auto responsePtr = new (response.data()) pldm_msg;
uint8_t* payload = responsePtr->payload;
ASSERT_EQ(payload[0], 0);