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_platform_test.cpp b/libpldmresponder/test/libpldmresponder_platform_test.cpp
index 4fbd81b..28859e0 100644
--- a/libpldmresponder/test/libpldmresponder_platform_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_platform_test.cpp
@@ -28,11 +28,10 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
+    struct pldm_get_pdr_req* request = new (req->payload) pldm_get_pdr_req;
     request->request_count = 100;
 
     MockdBusHandler mockedUtils;
@@ -48,15 +47,15 @@
     Repo repo(pdrRepo);
     ASSERT_EQ(repo.empty(), false);
     auto response = handler.getPDR(req, requestPayloadLength);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+    auto responsePtr = new (response.data()) pldm_msg;
 
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
+    struct pldm_get_pdr_resp* resp = new (responsePtr->payload)
+        pldm_get_pdr_resp;
     ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
     ASSERT_EQ(2, resp->next_record_handle);
     ASSERT_EQ(true, resp->response_count != 0);
 
-    pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(resp->record_data);
+    pldm_pdr_hdr* hdr = new (resp->record_data) pldm_pdr_hdr;
     ASSERT_EQ(hdr->record_handle, 1);
     ASSERT_EQ(hdr->version, 1);
 
@@ -67,11 +66,10 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
+    struct pldm_get_pdr_req* request = new (req->payload) pldm_get_pdr_req;
     request->request_count = 1;
 
     MockdBusHandler mockedUtils;
@@ -87,9 +85,9 @@
     Repo repo(pdrRepo);
     ASSERT_EQ(repo.empty(), false);
     auto response = handler.getPDR(req, requestPayloadLength);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
+    auto responsePtr = new (response.data()) pldm_msg;
+    struct pldm_get_pdr_resp* resp = new (responsePtr->payload)
+        pldm_get_pdr_resp;
     ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
     ASSERT_EQ(1, resp->response_count);
     pldm_pdr_destroy(pdrRepo);
@@ -99,11 +97,10 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
+    struct pldm_get_pdr_req* request = new (req->payload) pldm_get_pdr_req;
     request->record_handle = 100000;
     request->request_count = 1;
 
@@ -120,7 +117,7 @@
     Repo repo(pdrRepo);
     ASSERT_EQ(repo.empty(), false);
     auto response = handler.getPDR(req, requestPayloadLength);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+    auto responsePtr = new (response.data()) pldm_msg;
 
     ASSERT_EQ(responsePtr->payload[0], PLDM_PLATFORM_INVALID_RECORD_HANDLE);
 
@@ -131,11 +128,10 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
+    struct pldm_get_pdr_req* request = new (req->payload) pldm_get_pdr_req;
     request->record_handle = 1;
 
     MockdBusHandler mockedUtils;
@@ -151,9 +147,9 @@
     Repo repo(pdrRepo);
     ASSERT_EQ(repo.empty(), false);
     auto response = handler.getPDR(req, requestPayloadLength);
-    auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
-    struct pldm_get_pdr_resp* resp =
-        reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
+    auto responsePtr = new (response.data()) pldm_msg;
+    struct pldm_get_pdr_resp* resp = new (responsePtr->payload)
+        pldm_get_pdr_resp;
     ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
     ASSERT_EQ(2, resp->next_record_handle);
 
@@ -164,11 +160,10 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
-    struct pldm_get_pdr_req* request =
-        reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
+    struct pldm_get_pdr_req* request = new (req->payload) pldm_get_pdr_req;
     request->request_count = 100;
 
     MockdBusHandler mockedUtils;
@@ -193,19 +188,19 @@
     {
         request->record_handle = handle;
         auto response = handler.getPDR(req, requestPayloadLength);
-        auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
-        struct pldm_get_pdr_resp* resp =
-            reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
+        auto responsePtr = new (response.data()) pldm_msg;
+        struct pldm_get_pdr_resp* resp = new (responsePtr->payload)
+            pldm_get_pdr_resp;
         ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
 
         handle = resp->next_record_handle; // point to the next pdr in case
                                            // current is not what we want
 
-        pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(resp->record_data);
+        pldm_pdr_hdr* hdr = new (resp->record_data) pldm_pdr_hdr;
         if (hdr->type == PLDM_STATE_EFFECTER_PDR)
         {
-            pldm_state_effecter_pdr* pdr =
-                reinterpret_cast<pldm_state_effecter_pdr*>(resp->record_data);
+            pldm_state_effecter_pdr* pdr = new (resp->record_data)
+                pldm_state_effecter_pdr;
             if (pdr->entity_type == 100)
             {
                 found = true;
@@ -227,7 +222,7 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
     MockdBusHandler mockedUtils;
@@ -248,8 +243,7 @@
     pdr_utils::PdrEntry e;
     auto record1 = pdr::getRecordByHandle(outRepo, 2, e);
     ASSERT_NE(record1, nullptr);
-    pldm_state_effecter_pdr* pdr =
-        reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
+    pldm_state_effecter_pdr* pdr = new (e.data) pldm_state_effecter_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
 
     std::vector<set_effecter_state_field> stateField;
@@ -275,7 +269,7 @@
 {
     std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_PDR_REQ_BYTES>
         requestPayload{};
-    auto req = reinterpret_cast<pldm_msg*>(requestPayload.data());
+    auto req = new (requestPayload.data()) pldm_msg;
     size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
 
     MockdBusHandler mockedUtils;
@@ -296,8 +290,7 @@
     pdr_utils::PdrEntry e;
     auto record1 = pdr::getRecordByHandle(outRepo, 2, e);
     ASSERT_NE(record1, nullptr);
-    pldm_state_effecter_pdr* pdr =
-        reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
+    pldm_state_effecter_pdr* pdr = new (e.data) pldm_state_effecter_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_STATE_EFFECTER_PDR);
 
     std::vector<set_effecter_state_field> stateField;
@@ -342,8 +335,8 @@
     auto record4 = pdr::getRecordByHandle(numericEffecterPDRs, 4, e);
     ASSERT_NE(record4, nullptr);
 
-    pldm_numeric_effecter_value_pdr* pdr =
-        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    pldm_numeric_effecter_value_pdr* pdr = new (e.data)
+        pldm_numeric_effecter_value_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
 
     uint16_t effecterId = 3;
@@ -386,8 +379,8 @@
     auto record4 = pdr::getRecordByHandle(numericEffecterPDRs, 4, e);
     ASSERT_NE(record4, nullptr);
 
-    pldm_numeric_effecter_value_pdr* pdr =
-        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    pldm_numeric_effecter_value_pdr* pdr = new (e.data)
+        pldm_numeric_effecter_value_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
 
     uint16_t effecterId = 3;
@@ -423,8 +416,8 @@
     auto record4 = pdr::getRecordByHandle(numericEffecterPDRs, 4, e);
     ASSERT_NE(record4, nullptr);
 
-    pldm_numeric_effecter_value_pdr* pdr =
-        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    pldm_numeric_effecter_value_pdr* pdr = new (e.data)
+        pldm_numeric_effecter_value_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
 
     uint16_t effecterId = 3;
@@ -456,7 +449,7 @@
         getEffecterDataSize(effecterDataSize);
 
     Response response(responsePayloadLength + sizeof(pldm_msg_hdr));
-    auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
+    auto responsePtr = new (response.data()) pldm_msg;
 
     rc = platform_numeric_effecter::getNumericEffecterValueHandler(
         propertyType, dbusValue, effecterDataSize, responsePtr,
@@ -465,8 +458,7 @@
     ASSERT_EQ(rc, 0);
 
     struct pldm_get_numeric_effecter_value_resp* resp =
-        reinterpret_cast<struct pldm_get_numeric_effecter_value_resp*>(
-            responsePtr->payload);
+        new (responsePtr->payload) pldm_get_numeric_effecter_value_resp;
     ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
     uint32_t valPresent;
     memcpy(&valPresent, &resp->pending_and_present_values[4],
@@ -499,8 +491,8 @@
     auto record4 = pdr::getRecordByHandle(numericEffecterPDRs, 4, e);
     ASSERT_NE(record4, nullptr);
 
-    pldm_numeric_effecter_value_pdr* pdr =
-        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    pldm_numeric_effecter_value_pdr* pdr = new (e.data)
+        pldm_numeric_effecter_value_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
 
     uint16_t effecterId = 4;
@@ -799,8 +791,7 @@
     pdr_utils::PdrEntry e;
     auto record = pdr::getRecordByHandle(outRepo, 2, e);
     ASSERT_NE(record, nullptr);
-    pldm_state_sensor_pdr* pdr =
-        reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
+    pldm_state_sensor_pdr* pdr = new (e.data) pldm_state_sensor_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
 
     std::vector<get_sensor_state_field> stateField;
@@ -849,8 +840,7 @@
     pdr_utils::PdrEntry e;
     auto record = pdr::getRecordByHandle(outRepo, 2, e);
     ASSERT_NE(record, nullptr);
-    pldm_state_sensor_pdr* pdr =
-        reinterpret_cast<pldm_state_sensor_pdr*>(e.data);
+    pldm_state_sensor_pdr* pdr = new (e.data) pldm_state_sensor_pdr;
     EXPECT_EQ(pdr->hdr.type, PLDM_STATE_SENSOR_PDR);
 
     std::vector<get_sensor_state_field> stateField;