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/platform-mc/test/terminus_manager_test.cpp b/platform-mc/test/terminus_manager_test.cpp
index 6eb2439..52abfc8 100644
--- a/platform-mc/test/terminus_manager_test.cpp
+++ b/platform-mc/test/terminus_manager_test.cpp
@@ -142,20 +142,19 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{
0x00, 0x02, 0x02, 0x00, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp0.data()), sizeof(getTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg,
+ sizeof(getTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{
0x00, 0x02, 0x01, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp0.data()), sizeof(setTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg,
+ sizeof(setTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
std::array<uint8_t, sizeof(pldm_msg_hdr) + getPldmTypesRespLen>
getPldmTypesResp0{0x00, 0x02, 0x04, 0x00, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmTypesResp0.data()),
- sizeof(getPldmTypesResp0));
+ new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
pldm::MctpInfos mctpInfos{};
@@ -169,15 +168,14 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp1{
0x00, 0x02, 0x02, 0x00, 0x01};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp1.data()), sizeof(getTidResp1));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp1.data()) pldm_msg,
+ sizeof(getTidResp1));
+ EXPECT_EQ(rc, PLDM_SUCCESS);
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg,
+ sizeof(setTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp0.data()), sizeof(setTidResp0));
- EXPECT_EQ(rc, PLDM_SUCCESS);
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmTypesResp0.data()),
- sizeof(getPldmTypesResp0));
+ new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
mockTerminusManager.discoverMctpTerminus(mctpInfos);
@@ -201,7 +199,7 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{
0x00, 0x02, 0x02, 0x00, PLDM_TID_RESERVED};
auto rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp0.data()), sizeof(getTidResp0));
+ new (getTidResp0.data()) pldm_msg, sizeof(getTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
pldm::MctpInfos mctpInfos{};
@@ -215,11 +213,11 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp1{
0x00, 0x02, 0x01, PLDM_ERROR};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp1.data()), sizeof(getTidResp1));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp1.data()) pldm_msg,
+ sizeof(getTidResp1));
EXPECT_EQ(rc, PLDM_SUCCESS);
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp1.data()), sizeof(setTidResp1));
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp1.data()) pldm_msg,
+ sizeof(setTidResp1));
EXPECT_EQ(rc, PLDM_SUCCESS);
mockTerminusManager.removeMctpTerminus(mctpInfos);
EXPECT_EQ(0, termini.size());
@@ -233,16 +231,15 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getPldmTypesRespLen>
getPldmTypesResp2{0x00, 0x02, 0x04, PLDM_ERROR, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp2.data()), sizeof(getTidResp2));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp2.data()) pldm_msg,
+ sizeof(getTidResp2));
EXPECT_EQ(rc, PLDM_SUCCESS);
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp2.data()), sizeof(setTidResp2));
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp2.data()) pldm_msg,
+ sizeof(setTidResp2));
EXPECT_EQ(rc, PLDM_SUCCESS);
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmTypesResp2.data()),
- sizeof(getPldmTypesResp2));
+ new (getPldmTypesResp2.data()) pldm_msg, sizeof(getPldmTypesResp2));
EXPECT_EQ(rc, PLDM_SUCCESS);
mockTerminusManager.removeMctpTerminus(mctpInfos);
EXPECT_EQ(0, termini.size());
@@ -260,14 +257,14 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{
0x00, 0x02, 0x02, 0x00, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp0.data()), sizeof(getTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg,
+ sizeof(getTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{
0x00, 0x02, 0x01, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp0.data()), sizeof(setTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg,
+ sizeof(setTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
uint8_t supportedType1Byte =
@@ -278,8 +275,7 @@
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmTypesResp0.data()),
- sizeof(getPldmTypesResp0));
+ new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
pldm::MctpInfos mctpInfos{};
@@ -315,14 +311,14 @@
std::array<uint8_t, sizeof(pldm_msg_hdr) + getTidRespLen> getTidResp0{
0x00, 0x02, 0x02, 0x00, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getTidResp0.data()), sizeof(getTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (getTidResp0.data()) pldm_msg,
+ sizeof(getTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
std::array<uint8_t, sizeof(pldm_msg_hdr) + setTidRespLen> setTidResp0{
0x00, 0x02, 0x01, 0x00};
- rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(setTidResp0.data()), sizeof(setTidResp0));
+ rc = mockTerminusManager.enqueueResponse(new (setTidResp0.data()) pldm_msg,
+ sizeof(setTidResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
uint8_t byte0 = (1 << (PLDM_BASE % 8)) + (1 << (PLDM_PLATFORM % 8)) +
@@ -331,8 +327,7 @@
getPldmTypesResp0{0x00, 0x02, 0x04, 0x00, byte0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmTypesResp0.data()),
- sizeof(getPldmTypesResp0));
+ new (getPldmTypesResp0.data()) pldm_msg, sizeof(getPldmTypesResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
/* Response GetPLDMVersion BASE, CC=0 */
@@ -358,7 +353,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmCommandBaseResp0.data()),
+ new (getPldmCommandBaseResp0.data()) pldm_msg,
sizeof(getPldmCommandBaseResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
@@ -406,7 +401,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmCommandPlatResp0.data()),
+ new (getPldmCommandPlatResp0.data()) pldm_msg,
sizeof(getPldmCommandPlatResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
@@ -435,7 +430,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmCommandBiosResp0.data()),
+ new (getPldmCommandBiosResp0.data()) pldm_msg,
sizeof(getPldmCommandBiosResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);
@@ -465,7 +460,7 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
rc = mockTerminusManager.enqueueResponse(
- reinterpret_cast<pldm_msg*>(getPldmCommandFruResp0.data()),
+ new (getPldmCommandFruResp0.data()) pldm_msg,
sizeof(getPldmCommandFruResp0));
EXPECT_EQ(rc, PLDM_SUCCESS);