msgbuf: Add copy API
pldm_msgbuf_copy API allows copy of data from one msg buffer
to another. This was done earlier with a pldm_msgbuf_extract()
followed by pldm_msgbuf_insert().
Change-Id: I159792f726916761894aefb0a8795f1f0dc84114
Signed-off-by: Varsha Kaverappa <vkaverap@in.ibm.com>
diff --git a/tests/msgbuf.cpp b/tests/msgbuf.cpp
index fecf514..cfe7914 100644
--- a/tests/msgbuf.cpp
+++ b/tests/msgbuf.cpp
@@ -944,3 +944,56 @@
EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
}
+
+TEST(msgbuf, pldm_msgbuf_copy_good)
+{
+ struct pldm_msgbuf _src;
+ struct pldm_msgbuf* src = &_src;
+ uint16_t buf[1] = {htole16(0x5aa5)};
+
+ ASSERT_EQ(pldm_msgbuf_init(src, sizeof(buf), buf, sizeof(buf)),
+ PLDM_SUCCESS);
+
+ struct pldm_msgbuf _dst;
+ struct pldm_msgbuf* dst = &_dst;
+ uint16_t checkVal = 0;
+ uint8_t buf1[sizeof(buf)] = {};
+
+ ASSERT_EQ(pldm_msgbuf_init(dst, sizeof(buf1), buf1, sizeof(buf1)),
+ PLDM_SUCCESS);
+ EXPECT_EQ(pldm_msgbuf_copy(dst, src, buf[0], name), PLDM_SUCCESS);
+
+ ASSERT_EQ(pldm_msgbuf_init(dst, sizeof(buf1), buf1, sizeof(buf1)),
+ PLDM_SUCCESS);
+ EXPECT_EQ(pldm_msgbuf_extract_uint16(dst, &checkVal), PLDM_SUCCESS);
+
+ EXPECT_EQ(buf[0], checkVal);
+ EXPECT_EQ(pldm_msgbuf_destroy(src), PLDM_SUCCESS);
+ EXPECT_EQ(pldm_msgbuf_destroy(dst), PLDM_SUCCESS);
+}
+
+TEST(msgbuf, pldm_msgbuf_copy_bad)
+{
+ struct pldm_msgbuf _src;
+ struct pldm_msgbuf* src = &_src;
+ struct pldm_msgbuf _dst;
+ struct pldm_msgbuf* dst = &_dst;
+ uint8_t buf[1] = {sizeof(uint8_t)};
+ uint8_t buf1[1] = {sizeof(uint16_t)};
+ uint16_t value = 8;
+
+ EXPECT_EQ(pldm_msgbuf_copy(dst, NULL, buf[0], name),
+ PLDM_ERROR_INVALID_DATA);
+ EXPECT_EQ(pldm_msgbuf_copy(NULL, src, buf[0], name),
+ PLDM_ERROR_INVALID_DATA);
+
+ ASSERT_EQ(pldm_msgbuf_init(src, 0, buf, sizeof(buf)), PLDM_SUCCESS);
+ ASSERT_EQ(pldm_msgbuf_init(dst, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
+ EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
+ PLDM_ERROR_INVALID_LENGTH);
+
+ ASSERT_EQ(pldm_msgbuf_init(src, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
+ ASSERT_EQ(pldm_msgbuf_init(dst, 0, buf, sizeof(buf)), PLDM_SUCCESS);
+ EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
+ PLDM_ERROR_INVALID_LENGTH);
+}