diff --git a/test/bono.vpd b/test/bono.vpd
deleted file mode 100644
index afc1b8e..0000000
--- a/test/bono.vpd
+++ /dev/null
Binary files differ
diff --git a/test/ipz_parser/parser.cpp b/test/ipz_parser/parser.cpp
deleted file mode 100644
index 0a36ad7..0000000
--- a/test/ipz_parser/parser.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-#include "ipz_parser.hpp"
-
-#include <const.hpp>
-#include <defines.hpp>
-#include <impl.hpp>
-#include <store.hpp>
-
-#include <cassert>
-#include <fstream>
-#include <iterator>
-
-#include <gtest/gtest.h>
-
-using namespace openpower::vpd;
-using namespace openpower::vpd::constants;
-
-constexpr uint32_t vpdOffset = 0;
-
-TEST(IpzVpdParserApp, vpdGoodPath)
-{
-    // Create a vpd
-    Binary vpd = {
-        0x00, 0x0f, 0x17, 0xba, 0x42, 0xca, 0x82, 0xd7, 0x7b, 0x77, 0x1e, 0x84,
-        0x28, 0x00, 0x52, 0x54, 0x04, 0x56, 0x48, 0x44, 0x52, 0x56, 0x44, 0x02,
-        0x30, 0x31, 0x50, 0x54, 0x0e, 0x56, 0x54, 0x4f, 0x43, 0xd5, 0x00, 0x37,
-        0x00, 0x4c, 0x00, 0x97, 0x05, 0x13, 0x00, 0x50, 0x46, 0x08, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x48, 0x00, 0x52, 0x54,
-        0x04, 0x56, 0x54, 0x4f, 0x43, 0x50, 0x54, 0x0e, 0x56, 0x49, 0x4e, 0x49,
-        0xd5, 0x00, 0x52, 0x00, 0x90, 0x00, 0x73, 0x05, 0x24, 0x00, 0x84, 0x8c,
-        0x00, 0x52, 0x54, 0x04, 0x56, 0x49, 0x4e, 0x49, 0x44, 0x52, 0x10, 0x41,
-        0x50, 0x53, 0x53, 0x20, 0x26, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x20, 0x43,
-        0x41, 0x52, 0x44, 0x43, 0x45, 0x01, 0x31, 0x56, 0x5a, 0x02, 0x30, 0x31,
-        0x46, 0x4e, 0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x30, 0x50, 0x4e,
-        0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x31, 0x53, 0x4e, 0x0c, 0x59,
-        0x4c, 0x33, 0x30, 0x42, 0x47, 0x37, 0x43, 0x46, 0x30, 0x33, 0x50, 0x43,
-        0x43, 0x04, 0x36, 0x42, 0x36, 0x36, 0x50, 0x52, 0x08, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x45, 0x04, 0x30, 0x30, 0x30, 0x31,
-        0x43, 0x54, 0x04, 0x40, 0xb8, 0x02, 0x03, 0x48, 0x57, 0x02, 0x00, 0x01,
-        0x42, 0x33, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x34, 0x01,
-        0x00, 0x42, 0x37, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x02, 0x00, 0x00, 0x78, 0x84, 0xdc,
-        0x00, 0x52, 0x54, 0x04};
-
-    // call app for this vpd
-    parser::Impl p(std::move(vpd), std::string{}, systemVpdFilePath, vpdOffset);
-    Store vpdStore = p.run();
-
-    static const std::string record = "VINI";
-    static const std::string keyword = "DR";
-
-    // TODO 2: Move this as an utility to store.hpp
-    std::string dataFound;
-    Parsed st_bin = vpdStore.getVpdMap();
-
-    auto kw = st_bin.find(record);
-    if (st_bin.end() != kw)
-    {
-        auto value = (kw->second).find(keyword);
-        if ((kw->second).end() != value)
-        {
-            dataFound = value->second;
-        }
-    }
-
-    ASSERT_EQ(dataFound, "APSS & TPM  CARD");
-}
-
-TEST(IpzVpdParserApp, vpdBadPathEmptyVPD)
-{
-    Binary vpd = {};
-
-    // VPD is empty
-    parser::Impl p(std::move(vpd), std::string{}, systemVpdFilePath, vpdOffset);
-
-    // Expecting a throw here
-    EXPECT_THROW(p.run(), std::runtime_error);
-}
-
-TEST(IpzVpdParserApp, vpdBadPathMissingHeader)
-{
-    Binary vpd = {
-        0x00, 0x0f, 0x17, 0xba, 0x42, 0xca, 0x82, 0xd7, 0x7b, 0x77, 0x1e, 0x84,
-        0x28, 0x00, 0x52, 0x54, 0x04, 0x56, 0x48, 0x44, 0x52, 0x56, 0x44, 0x02,
-        0x30, 0x31, 0x50, 0x54, 0x0e, 0x56, 0x54, 0x4f, 0x43, 0xd5, 0x00, 0x37,
-        0x00, 0x4c, 0x00, 0x97, 0x05, 0x13, 0x00, 0x50, 0x46, 0x08, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x48, 0x00, 0x52, 0x54,
-        0x04, 0x56, 0x54, 0x4f, 0x43, 0x50, 0x54, 0x0e, 0x56, 0x49, 0x4e, 0x49,
-        0xd5, 0x00, 0x52, 0x00, 0x90, 0x00, 0x73, 0x05, 0x24, 0x00, 0x84, 0x8c,
-        0x00, 0x52, 0x54, 0x04, 0x56, 0x49, 0x4e, 0x49, 0x44, 0x52, 0x10, 0x41,
-        0x50, 0x53, 0x53, 0x20, 0x26, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x20, 0x43,
-        0x41, 0x52, 0x44, 0x43, 0x45, 0x01, 0x31, 0x56, 0x5a, 0x02, 0x30, 0x31,
-        0x46, 0x4e, 0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x30, 0x50, 0x4e,
-        0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x31, 0x53, 0x4e, 0x0c, 0x59,
-        0x4c, 0x33, 0x30, 0x42, 0x47, 0x37, 0x43, 0x46, 0x30, 0x33, 0x50, 0x43,
-        0x43, 0x04, 0x36, 0x42, 0x36, 0x36, 0x50, 0x52, 0x08, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x45, 0x04, 0x30, 0x30, 0x30, 0x31,
-        0x43, 0x54, 0x04, 0x40, 0xb8, 0x02, 0x03, 0x48, 0x57, 0x02, 0x00, 0x01,
-        0x42, 0x33, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x34, 0x01,
-        0x00, 0x42, 0x37, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x02, 0x00, 0x00, 0x78, 0x84, 0xdc,
-        0x00, 0x52, 0x54, 0x04};
-
-    // corrupt the VHDR
-    vpd[17] = 0x00;
-
-    parser::Impl p(std::move(vpd), std::string{}, systemVpdFilePath, vpdOffset);
-
-    // Expecting a throw here
-    EXPECT_THROW(p.run(), std::runtime_error);
-}
-
-TEST(IpzVpdParserApp, vpdBadPathMissingVTOC)
-{
-    Binary vpd = {
-        0x00, 0x0f, 0x17, 0xba, 0x42, 0xca, 0x82, 0xd7, 0x7b, 0x77, 0x1e, 0x84,
-        0x28, 0x00, 0x52, 0x54, 0x04, 0x56, 0x48, 0x44, 0x52, 0x56, 0x44, 0x02,
-        0x30, 0x31, 0x50, 0x54, 0x0e, 0x56, 0x54, 0x4f, 0x43, 0xd5, 0x00, 0x37,
-        0x00, 0x4c, 0x00, 0x97, 0x05, 0x13, 0x00, 0x50, 0x46, 0x08, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x48, 0x00, 0x52, 0x54,
-        0x04, 0x56, 0x54, 0x4f, 0x43, 0x50, 0x54, 0x0e, 0x56, 0x49, 0x4e, 0x49,
-        0xd5, 0x00, 0x52, 0x00, 0x90, 0x00, 0x73, 0x05, 0x24, 0x00, 0x84, 0x8c,
-        0x00, 0x52, 0x54, 0x04, 0x56, 0x49, 0x4e, 0x49, 0x44, 0x52, 0x10, 0x41,
-        0x50, 0x53, 0x53, 0x20, 0x26, 0x20, 0x54, 0x50, 0x4d, 0x20, 0x20, 0x43,
-        0x41, 0x52, 0x44, 0x43, 0x45, 0x01, 0x31, 0x56, 0x5a, 0x02, 0x30, 0x31,
-        0x46, 0x4e, 0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x30, 0x50, 0x4e,
-        0x07, 0x30, 0x31, 0x44, 0x48, 0x32, 0x30, 0x31, 0x53, 0x4e, 0x0c, 0x59,
-        0x4c, 0x33, 0x30, 0x42, 0x47, 0x37, 0x43, 0x46, 0x30, 0x33, 0x50, 0x43,
-        0x43, 0x04, 0x36, 0x42, 0x36, 0x36, 0x50, 0x52, 0x08, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x45, 0x04, 0x30, 0x30, 0x30, 0x31,
-        0x43, 0x54, 0x04, 0x40, 0xb8, 0x02, 0x03, 0x48, 0x57, 0x02, 0x00, 0x01,
-        0x42, 0x33, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x34, 0x01,
-        0x00, 0x42, 0x37, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x02, 0x00, 0x00, 0x78, 0x84, 0xdc,
-        0x00, 0x52, 0x54, 0x04};
-
-    // corrupt the VTOC
-    vpd[61] = 0x00;
-
-    parser::Impl p(std::move(vpd), std::string{}, systemVpdFilePath, vpdOffset);
-
-    // Expecting a throw here
-    EXPECT_THROW(p.run(), std::runtime_error);
-}
-
-int main(int argc, char** argv)
-{
-    ::testing::InitGoogleTest(&argc, argv);
-
-    return RUN_ALL_TESTS();
-}
diff --git a/test/keyword_vpd_parser_test/kw_vpd_test.cpp b/test/keyword_vpd_parser_test/kw_vpd_test.cpp
deleted file mode 100644
index dc05358..0000000
--- a/test/keyword_vpd_parser_test/kw_vpd_test.cpp
+++ /dev/null
@@ -1,213 +0,0 @@
-#include "keyword_vpd_parser.hpp"
-#include "store.hpp"
-#include "types.hpp"
-
-#include <exception>
-#include <fstream>
-
-#include <gtest/gtest.h>
-
-using namespace vpd::keyword::parser;
-using namespace openpower::vpd;
-using namespace openpower::vpd::inventory;
-using namespace std;
-
-class KeywordVpdParserTest : public ::testing::Test
-{
-  protected:
-    Binary keywordVpdVector;
-    Binary bonoKwVpdVector;
-
-    KeywordVpdParserTest()
-    {
-        // Open the kw VPD file in binary mode
-        std::ifstream kwVpdFile("vpd.dat", std::ios::binary);
-
-        // Read the content of the binary file into a vector
-        keywordVpdVector.assign((std::istreambuf_iterator<char>(kwVpdFile)),
-                                std::istreambuf_iterator<char>());
-        // Open the BONO type kw VPD file in binary mode
-        std::ifstream bonoKwVpdFile("bono.vpd", std::ios::binary);
-
-        // Read the content of the binary file into a vector
-        bonoKwVpdVector.assign((std::istreambuf_iterator<char>(bonoKwVpdFile)),
-                               std::istreambuf_iterator<char>());
-    }
-};
-
-TEST_F(KeywordVpdParserTest, GoodTestCase)
-{
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    KeywordVpdMap map1{
-        pair<std::string, Binary>{"WI", {0x00}},
-        pair<std::string, Binary>{"FL", {0x50, 0x32, 0x20, 0x20, 0x20}},
-        pair<std::string, Binary>{
-            "SM",
-            {0x82, 0x50, 0x32, 0x2d, 0x44, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20,
-             0x20, 0x32, 0x53, 0x53, 0x43, 0x81, 0x50, 0x32, 0x2d, 0x44, 0x35,
-             0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43, 0x80,
-             0x50, 0x32, 0x2d, 0x44, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
-             0x32, 0x53, 0x53, 0x43, 0x83, 0x50, 0x32, 0x2d, 0x44, 0x38, 0x20,
-             0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43}},
-        pair<std::string, Binary>{
-            "B2",
-            {0x50, 0x05, 0x07, 0x60, 0x73, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00,
-             0x00, 0x00, 0x00, 0x01, 0x00}},
-        pair<std::string, Binary>{"MF", {0x00, 0x10}},
-        pair<std::string, Binary>{"VZ", {0x30, 0x33}},
-        pair<std::string, Binary>{"PN",
-                                  {0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
-        pair<std::string, Binary>{
-            "FN", {0x20, 0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
-        pair<std::string, Binary>{"CE", {0x31}},
-        pair<std::string, Binary>{"SN",
-                                  {0x59, 0x48, 0x33, 0x30, 0x42, 0x47, 0x37,
-                                   0x38, 0x42, 0x30, 0x31, 0x34}},
-        pair<std::string, Binary>{"CC", {0x32, 0x44, 0x33, 0x37}}};
-
-    auto map2 = std::move(get<KeywordVpdMap>(parserObj1.parse()));
-    ASSERT_EQ(1, map1 == map2);
-
-    // BONO TYPE VPD
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    map1 = {
-        pair<std::string, Binary>{"B2",
-                                  {0x50, 0x0, 0xb3, 0xe0, 0x90, 0x0, 0x2, 0x50,
-                                   0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}},
-        pair<std::string, Binary>{"CC", {0x35, 0x39, 0x33, 0x42}},
-        pair<std::string, Binary>{"CT", {0x50, 0x37, 0x32, 0x0}},
-        pair<std::string, Binary>{"EC", {0x50, 0x34, 0x35, 0x35, 0x33, 0x37}},
-        pair<std::string, Binary>{"FN",
-                                  {0x30, 0x32, 0x44, 0x45, 0x33, 0x36, 0x35}},
-        pair<std::string, Binary>{"PN",
-                                  {0x30, 0x32, 0x44, 0x45, 0x33, 0x36, 0x36}},
-        pair<std::string, Binary>{"RV", {0xa1}},
-        pair<std::string, Binary>{
-            "SI", {0x31, 0x30, 0x31, 0x34, 0x30, 0x36, 0x37, 0x34}},
-        pair<std::string, Binary>{"SN",
-                                  {0x59, 0x4c, 0x35, 0x30, 0x48, 0x54, 0x39,
-                                   0x36, 0x4a, 0x30, 0x30, 0x38}},
-        pair<std::string, Binary>{"Z4", {0x30}},
-        pair<std::string, Binary>{"Z5", {0x30}},
-        pair<std::string, Binary>{
-            "Z6", {0x41, 0x31, 0x38, 0x30, 0x30, 0x32, 0x30, 0x30}}};
-
-    map2 = std::move(get<KeywordVpdMap>(parserObj2.parse()));
-    ASSERT_EQ(1, map1 == map2);
-}
-
-TEST_F(KeywordVpdParserTest, InvKwVpdTag)
-{
-    // Invalid Large resource type Identifier String - corrupted at index[0]
-    keywordVpdVector[0] = 0x83;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD
-    bonoKwVpdVector[0] = 0x83;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, InvKwValTag)
-{
-    // Invalid Large resource type Vendor Defined - corrupted at index[19]
-    keywordVpdVector[19] = 0x85;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD - corruputed at index[33]
-    bonoKwVpdVector[33] = 0x91;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, InvKwValSize)
-{
-    // Badly formed keyword VPD data - corrupted at index[20]
-    keywordVpdVector[20] = 0x00;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD - corruputed at index[34]
-    bonoKwVpdVector[34] = 0x00;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, InvKwValEndTag)
-{
-    // Invalid Small resource type End - corrupted at index[177]
-    keywordVpdVector[177] = 0x80;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, InvChecksum)
-{
-    // Invalid Check sum - corrupted at index[178]
-    keywordVpdVector[178] = 0xb1;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, InvKwVpdEndTag)
-{
-    // Invalid Small resource type Last End Of Data - corrupted at index[179]
-    keywordVpdVector[179] = 0x79;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD - corrupted at index[147]
-    bonoKwVpdVector[147] = 0x79;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, OutOfBoundGreaterSize)
-{
-    // Iterator Out of Bound - size is larger than the actual size - corrupted
-    // at index[24]
-    keywordVpdVector[24] = 0x32;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD - corrupted at index[38]
-    bonoKwVpdVector[38] = 0x4D;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, OutOfBoundLesserSize)
-{
-    // Iterator Out of Bound - size is smaller than the actual size - corrupted
-    // at index[24]
-    keywordVpdVector[24] = 0x03;
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // For BONO type VPD - corrupted at index[38]
-    bonoKwVpdVector[38] = 0x04;
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-TEST_F(KeywordVpdParserTest, BlankVpd)
-{
-    // Blank Kw Vpd
-    keywordVpdVector.clear();
-    KeywordVpdParser parserObj1(std::move(keywordVpdVector));
-    EXPECT_THROW(parserObj1.parse(), std::runtime_error);
-
-    // Blank Bono Type Vpd
-    bonoKwVpdVector.clear();
-    KeywordVpdParser parserObj2(std::move(bonoKwVpdVector));
-    EXPECT_THROW(parserObj2.parse(), std::runtime_error);
-}
-
-int main(int argc, char** argv)
-{
-    ::testing::InitGoogleTest(&argc, argv);
-
-    return RUN_ALL_TESTS();
-}
diff --git a/test/meson.build b/test/meson.build
index b400d6a..0def0f8 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,53 +1,70 @@
-if get_option('oe-sdk').allowed()
-  # Setup OE SYSROOT
-  OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
-  if OECORE_TARGET_SYSROOT == ''
-      error('Unable to get $OECORE_TARGET_SYSROOT, check your environment.')
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+libgpiodcxx = dependency(
+            'libgpiodcxx',
+            default_options: ['bindings=cxx'],
+        )
+if not gtest_dep.found() or not gmock_dep.found()
+    cmake = import('cmake')
+    gtest_opts = cmake.subproject_options()
+    gtest_opts.set_override_option('warning_level', '1')
+    gtest_opts.set_override_option('werror', 'false')
+    gtest_proj = cmake.subproject('googletest',
+                                  options: gtest_opts,
+                                  required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+  else
+        assert(
+            not get_option('tests').allowed(),
+            'Googletest is required if tests are enabled'
+        )
   endif
-  message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
-  rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
-  ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
-  dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
-else
-  dynamic_linker = []
 endif
-gmock = dependency('gmock', disabler: true, required: build_tests)
-gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
-libgpiodcxx = dependency('libgpiodcxx', default_options: ['bindings=cxx'])
-dependecy_list = [gtest, gmock, sdbusplus, phosphor_logging, phosphor_dbus_interfaces, libgpiodcxx, nlohmann_json_dep]
 
-configuration_inc = include_directories('..', '../vpd-manager', 'vpd-manager-test', '../vpd-parser')
+parser_build_arguments = []
+if get_option('ipz_ecc_check').enabled()
+    parser_build_arguments += ['-DIPZ_ECC_CHECK']
+endif
 
-vpd_test = ['store/store.cpp',
-            'ipz_parser/parser.cpp',
-            'keyword_vpd_parser_test/kw_vpd_test.cpp',
-            'vpd-manager-test/reader_test.cpp',
-            'vpd-manager-test/editor_test.cpp'
+dependency_list = [gtest_dep, gmock_dep, sdbusplus, libgpiodcxx]
+
+configuration_inc = include_directories('..', '../vpd-manager/include', '../vpdecc')
+
+test_sources = [
+  '../vpd-manager/src/logger.cpp',
+  '../vpd-manager/src/ddimm_parser.cpp',
+  '../vpd-manager/src/parser.cpp',
+  '../vpd-manager/src/parser_factory.cpp',
+  '../vpd-manager/src/isdimm_parser.cpp',
+  '../vpd-manager/src/ipz_parser.cpp',
+  '../vpd-manager/src/keyword_vpd_parser.cpp',
+  '../vpd-manager/src/event_logger.cpp',
+  '../vpdecc/vpdecc.c'
 ]
 
-application_src =['../impl.cpp',
-                   '../vpd-parser/ipz_parser.cpp',
-                   '../ibm_vpd_utils.cpp',
-                   '../common_utility.cpp',
-                   '../vpd-manager/reader_impl.cpp',
-                   '../vpd-parser/keyword_vpd_parser.cpp',
-                   '../vpd-manager/editor_impl.cpp',
-                   '../vpd-parser/parser_factory.cpp',
-                   '../vpd-parser/memory_vpd_parser.cpp',
-                   '../vpd-parser/isdimm_vpd_parser.cpp'
-                  ]
+tests = [
+  'utest_utils.cpp',
+  'utest_keyword_parser.cpp',
+  'utest_ddimm_parser.cpp',
+  'utest_ipz_parser.cpp',
+  'utest_json_utility.cpp'
+]
 
-foreach t : vpd_test
-    test(t, executable(t.underscorify(),
-            [t, application_src],
-    build_rpath: get_option('oe-sdk').allowed() ? rpath : '',
-    link_args: dynamic_linker,
-    cpp_args: ['-DIPZ_PARSER', '-DManagerTest'],
-    c_args: ['-Wno-unused-parameter',
-      '-Wno-unused-variable'],
-    dependencies: dependecy_list,
-    include_directories: configuration_inc,
-    link_with : libvpdecc,
-    ),
-    workdir: meson.current_source_dir())
+foreach test_file : tests
+  test(test_file, executable(test_file.underscorify(),
+                     test_file,
+                     test_sources,
+                     include_directories: configuration_inc,
+                     dependencies: dependency_list,
+                     cpp_args: parser_build_arguments
+                     ),
+       workdir: meson.current_source_dir())
 endforeach
diff --git a/test/parser/parser.cpp b/test/parser/parser.cpp
deleted file mode 100644
index d9f441e..0000000
--- a/test/parser/parser.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include <defines.hpp>
-#include <store.hpp>
-#include <vpd-parser/ipz_parser.hpp>
-
-#include <cassert>
-#include <fstream>
-#include <iterator>
-
-void runTests()
-{
-    using namespace openpower::vpd;
-    using namespace openpower::vpd::ipz::parser;
-    // Test parse() API
-    {
-        std::ifstream vpdFile("test.vpd", std::ios::binary);
-        Binary vpd((std::istreambuf_iterator<char>(vpdFile)),
-                   std::istreambuf_iterator<char>());
-
-        IpzVpdParser ipzParser(std::move(vpd));
-        auto vpdStore = std::move(std::get<Store>(ipzParser.parse()));
-
-        assert(("P012" == vpdStore.get<Record::VINI, record::Keyword::CC>()));
-        assert(("2019-01-01-08:30:00" ==
-                vpdStore.get<Record::VINI, record::Keyword::MB>()));
-    }
-}
-
-int main()
-{
-    runTests();
-
-    return 0;
-}
diff --git a/test/parser/test.vpd b/test/parser/test.vpd
deleted file mode 100644
index ba17611..0000000
--- a/test/parser/test.vpd
+++ /dev/null
Binary files differ
diff --git a/test/store/store.cpp b/test/store/store.cpp
deleted file mode 100644
index 4c83ba7..0000000
--- a/test/store/store.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "store.hpp"
-
-#include "defines.hpp"
-
-#include <cassert>
-#include <string>
-#include <unordered_map>
-#include <utility>
-
-void runTests()
-{
-    using namespace openpower::vpd;
-
-    // Test Store::get API
-    {
-        Parsed vpd;
-        using inner = Parsed::mapped_type;
-        inner i;
-
-        i.emplace("SN", "1001");
-        i.emplace("PN", "F001");
-        i.emplace("DR", "Fake FRU");
-        vpd.emplace("VINI", i);
-
-        Store s(std::move(vpd));
-
-        assert(("1001" == s.get<Record::VINI, record::Keyword::SN>()));
-        assert(("F001" == s.get<Record::VINI, record::Keyword::PN>()));
-        assert(("Fake FRU" == s.get<Record::VINI, record::Keyword::DR>()));
-    }
-}
-
-int main()
-{
-    runTests();
-
-    return 0;
-}
diff --git a/test/utest_ddimm_parser.cpp b/test/utest_ddimm_parser.cpp
new file mode 100644
index 0000000..6674c51
--- /dev/null
+++ b/test/utest_ddimm_parser.cpp
@@ -0,0 +1,117 @@
+#include "vpdecc.h"
+
+#include "ddimm_parser.hpp"
+#include "exceptions.hpp"
+#include "parser.hpp"
+#include "types.hpp"
+
+#include <cstdint>
+#include <exception>
+#include <fstream>
+
+#include <gtest/gtest.h>
+
+using namespace vpd;
+
+TEST(DdimmVpdParserTest, GoodTestCase)
+{
+    types::DdimmVpdMap l_ddimmMap{
+        std::pair<std::string, size_t>{"MemorySizeInKB", 0x2000000},
+        std::pair<std::string, types::BinaryVector>{
+            "FN", {0x30, 0x33, 0x48, 0x44, 0x37, 0x30, 0x30}},
+        std::pair<std::string, types::BinaryVector>{
+            "PN", {0x30, 0x33, 0x48, 0x44, 0x37, 0x30, 0x30}},
+        std::pair<std::string, types::BinaryVector>{
+            "SN",
+            {0x59, 0x48, 0x33, 0x33, 0x31, 0x54, 0x33, 0x38, 0x34, 0x30, 0x33,
+             0x46}},
+        std::pair<std::string, types::BinaryVector>{"CC",
+                                                    {0x33, 0x32, 0x41, 0x31}}};
+
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr5_ddimm.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    ASSERT_EQ(1,
+              l_ddimmMap == std::get<types::DdimmVpdMap>(l_vpdParser.parse()));
+}
+
+TEST(DdimmVpdParserTest, DDR4GoodTestCase)
+{
+    types::DdimmVpdMap l_ddimmMap{
+        std::pair<std::string, size_t>{"MemorySizeInKB", 0x4000000},
+        std::pair<std::string, types::BinaryVector>{
+            "FN", {0x37, 0x38, 0x50, 0x36, 0x35, 0x37, 0x35}},
+        std::pair<std::string, types::BinaryVector>{
+            "PN", {0x37, 0x38, 0x50, 0x36, 0x35, 0x37, 0x35}},
+        std::pair<std::string, types::BinaryVector>{
+            "SN",
+            {0x59, 0x48, 0x33, 0x35, 0x31, 0x54, 0x31, 0x35, 0x53, 0x30, 0x44,
+             0x35}},
+        std::pair<std::string, types::BinaryVector>{"CC",
+                                                    {0x33, 0x32, 0x37, 0x42}}};
+
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr4_ddimm.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    ASSERT_EQ(1,
+              l_ddimmMap == std::get<types::DdimmVpdMap>(l_vpdParser.parse()));
+}
+
+TEST(DdimmVpdParserTest, InvalidDdrType)
+{
+    // Invalid DDR type, corrupted at index[2]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_2.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(DdimmVpdParserTest, ZeroDdimmSize)
+{
+    // Badly formed DDIMM VPD data - corrupted at index[235],
+    // ddimm size calculated a zero
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_235.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(DdimmVpdParserTest, InvalidDensityPerDie)
+{
+    // Out of range data, fails to check valid value - corrupted at index[4]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_4.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(DdimmVpdParserTest, InvalidVpdType)
+{
+    // Invalid VPD type - corrupted at index[2] & index[3]
+    // Not able to find the VPD type, vpdTypeCheck failed
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ddr5_ddimm_corrupted_index_2_3.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(DdimmVpdParserTest, EmptyInputVector)
+{
+    // Blank VPD
+    types::BinaryVector emptyVector{};
+
+    EXPECT_THROW(DdimmVpdParser(std::move(emptyVector)), DataException);
+}
+
+int main(int i_argc, char** io_argv)
+{
+    ::testing::InitGoogleTest(&i_argc, io_argv);
+
+    return RUN_ALL_TESTS();
+}
diff --git a/test/utest_ipz_parser.cpp b/test/utest_ipz_parser.cpp
new file mode 100644
index 0000000..2f23060
--- /dev/null
+++ b/test/utest_ipz_parser.cpp
@@ -0,0 +1,135 @@
+#include "ipz_parser.hpp"
+#include "parser.hpp"
+
+#include <exception>
+
+#include <gtest/gtest.h>
+
+TEST(IpzVpdParserTest, GoodTestCase)
+{
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    vpd::types::IPZVpdMap l_ipzVpdMap;
+    auto l_parsedMap = l_vpdParser.parse();
+    if (auto l_ipzVpdMapPtr = std::get_if<vpd::types::IPZVpdMap>(&l_parsedMap))
+        l_ipzVpdMap = *l_ipzVpdMapPtr;
+
+    std::string l_record("VINI");
+    std::string l_keyword("DR");
+    std::string l_description;
+
+    // check 'DR' keyword value from 'VINI' record
+    auto l_vpdItr = l_ipzVpdMap.find(l_record);
+    if (l_ipzVpdMap.end() != l_vpdItr)
+    {
+        auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
+        if ((l_vpdItr->second).end() != l_kwValItr)
+        {
+            l_description = l_kwValItr->second;
+        }
+    }
+    EXPECT_EQ(l_description, "SYSTEM BACKPLANE");
+
+    // check 'SN' keyword value from 'VINI' record
+    l_record = "VINI";
+    l_keyword = "SN";
+    l_vpdItr = l_ipzVpdMap.find(l_record);
+    if (l_ipzVpdMap.end() != l_vpdItr)
+    {
+        auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
+        if ((l_vpdItr->second).end() != l_kwValItr)
+        {
+            l_description = l_kwValItr->second;
+        }
+    }
+    EXPECT_EQ(l_description, "Y131UF07300L");
+
+    // check 'DR' keyword value of 'VSYS' record
+    l_record = "VSYS";
+    l_keyword = "DR";
+    l_vpdItr = l_ipzVpdMap.find(l_record);
+    if (l_ipzVpdMap.end() != l_vpdItr)
+    {
+        auto l_kwValItr = (l_vpdItr->second).find(l_keyword);
+        if ((l_vpdItr->second).end() != l_kwValItr)
+        {
+            l_description = l_kwValItr->second;
+        }
+    }
+    ASSERT_EQ(l_description, "SYSTEM");
+}
+
+TEST(IpzVpdParserTest, VpdFileDoesNotExist)
+{
+    // Vpd file does not exist
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/xyz.dat");
+
+    EXPECT_THROW(vpd::Parser(l_vpdFile, l_json), std::runtime_error);
+}
+
+TEST(IpzVpdParserTest, MissingHeader)
+{
+    // Missing VHDR tag, failed header check - corrupted at index[17]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_17.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(IpzVpdParserTest, MissingVtoc)
+{
+    // Missing VTOC tag - corrupted at index[61]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_61.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(IpzVpdParserTest, MalformedVpdFile)
+{
+    // Vpd vector size is less than RECORD_MIN(44), fails for checkHeader
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_min_record.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+#ifdef IPZ_ECC_CHECK
+TEST(IpzVpdParserTest, InvalidRecordOffset)
+{
+    // VTOC ECC check fail
+    // Invalid VINI Record offset, corrupted at index[74]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_74.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(IpzVpdParserTest, InvalidRecordEccOffset)
+{
+    // VTOC ECC check fail
+    // Invalid VINI Record ECC offset, corrupted at index[78] & index[79]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_corrupted_index_78_79.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+
+TEST(IpzVpdParserTest, TruncatedVpdFile)
+{
+    // Truncated vpd file, VTOC ECC check fail
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/ipz_system_truncated.dat");
+    vpd::Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), std::exception);
+}
+#endif
diff --git a/test/utest_json_utility.cpp b/test/utest_json_utility.cpp
new file mode 100644
index 0000000..4f0b5c5
--- /dev/null
+++ b/test/utest_json_utility.cpp
@@ -0,0 +1,29 @@
+#include "parser.hpp"
+#include "types.hpp"
+#include "utility/json_utility.hpp"
+
+#include <iostream>
+
+#include <gtest/gtest.h>
+
+using namespace vpd;
+
+TEST(IsFruPowerOffOnlyTest, PositiveTestCase)
+{
+    const std::string l_jsonPath{"/usr/local/share/vpd/50001001.json"};
+    const std::string l_vpdPath{"/sys/bus/spi/drivers/at25/spi12.0/eeprom"};
+    const nlohmann::json l_parsedJson = jsonUtility::getParsedJson(l_jsonPath);
+    const bool l_result =
+        jsonUtility::isFruPowerOffOnly(l_parsedJson, l_vpdPath);
+    EXPECT_TRUE(l_result);
+}
+
+TEST(IsFruPowerOffOnlyTest, NegativeTestCase)
+{
+    const std::string l_jsonPath{"/usr/local/share/vpd/50001001.json"};
+    const std::string l_vpdPath{"/sys/bus/i2c/drivers/at24/4-0050/eeprom"};
+    const nlohmann::json l_parsedJson = jsonUtility::getParsedJson(l_jsonPath);
+    const bool l_result =
+        jsonUtility::isFruPowerOffOnly(l_parsedJson, l_vpdPath);
+    EXPECT_FALSE(l_result);
+}
diff --git a/test/utest_keyword_parser.cpp b/test/utest_keyword_parser.cpp
new file mode 100644
index 0000000..1f72829
--- /dev/null
+++ b/test/utest_keyword_parser.cpp
@@ -0,0 +1,145 @@
+#include "exceptions.hpp"
+#include "keyword_vpd_parser.hpp"
+#include "parser.hpp"
+#include "types.hpp"
+
+#include <cstdint>
+#include <exception>
+#include <fstream>
+
+#include <gtest/gtest.h>
+
+using namespace vpd;
+
+TEST(KeywordVpdParserTest, GoodTestCase)
+{
+    types::KeywordVpdMap l_keywordMap{
+        std::pair<std::string, types::BinaryVector>{"WI", {0x00}},
+        std::pair<std::string, types::BinaryVector>{
+            "FL", {0x50, 0x32, 0x20, 0x20, 0x20}},
+        std::pair<std::string, types::BinaryVector>{
+            "SM",
+            {0x82, 0x50, 0x32, 0x2d, 0x44, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20,
+             0x20, 0x32, 0x53, 0x53, 0x43, 0x81, 0x50, 0x32, 0x2d, 0x44, 0x35,
+             0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43, 0x80,
+             0x50, 0x32, 0x2d, 0x44, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+             0x32, 0x53, 0x53, 0x43, 0x83, 0x50, 0x32, 0x2d, 0x44, 0x38, 0x20,
+             0x20, 0x20, 0x20, 0x20, 0x20, 0x32, 0x53, 0x53, 0x43}},
+        std::pair<std::string, types::BinaryVector>{
+            "B2",
+            {0x50, 0x05, 0x07, 0x60, 0x73, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00,
+             0x00, 0x00, 0x00, 0x01, 0x00}},
+        std::pair<std::string, types::BinaryVector>{"MF", {0x00, 0x10}},
+        std::pair<std::string, types::BinaryVector>{"VZ", {0x30, 0x33}},
+        std::pair<std::string, types::BinaryVector>{
+            "PN", {0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
+        std::pair<std::string, types::BinaryVector>{
+            "FN", {0x20, 0x30, 0x31, 0x4b, 0x55, 0x37, 0x32, 0x34}},
+        std::pair<std::string, types::BinaryVector>{"CE", {0x31}},
+        std::pair<std::string, types::BinaryVector>{
+            "SN",
+            {0x59, 0x48, 0x33, 0x30, 0x42, 0x47, 0x37, 0x38, 0x42, 0x30, 0x31,
+             0x34}},
+        std::pair<std::string, types::BinaryVector>{"CC",
+                                                    {0x32, 0x44, 0x33, 0x37}}};
+
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    ASSERT_EQ(1, std::get<types::KeywordVpdMap>(l_vpdParser.parse()) ==
+                     l_keywordMap);
+}
+
+TEST(KeywordVpdParserTest, InvalidVpd)
+{
+    // Invalid large resource type identifier string - corrupted at index[0]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_0.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, InvalidStartTag)
+{
+    // Invalid large resource type vendor defined - corrupted at index[19]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_19.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, InvalidSize)
+{
+    // Badly formed keyword VPD data - corrupted at index[20]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_20.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, InvalidEndTag)
+{
+    // Invalid small resource type end - corrupted at index[177]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_177.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, InvalidChecksum)
+{
+    // Invalid check sum - corrupted at index[178]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_178.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, InvalidLastEndTag)
+{
+    // Invalid small resource type last end of data - corrupted at index[179]
+    nlohmann::json l_json;
+    std::string l_vpdFile("vpd_files/keyword_corrupted_index_179.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, OutOfBoundGreaterSize)
+{
+    // Iterator out of bound - size is larger than the actual size - corrupted
+    // at index[24]
+    nlohmann::json l_json;
+    std::string l_vpdFile(
+        "vpd_files/keyword_corrupted_index_24_large_size.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, OutOfBoundLesserSize)
+{
+    // Iterator out of bound - size is smaller than the actual size - corrupted
+    // at index[24]
+    nlohmann::json l_json;
+    std::string l_vpdFile(
+        "vpd_files/keyword_corrupted_index_24_small_size.dat");
+    Parser l_vpdParser(l_vpdFile, l_json);
+
+    EXPECT_THROW(l_vpdParser.parse(), DataException);
+}
+
+TEST(KeywordVpdParserTest, EmptyInput)
+{
+    // Blank keyword VPD
+    types::BinaryVector emptyVector{};
+    KeywordVpdParser l_keywordParser(std::move(emptyVector));
+
+    EXPECT_THROW(l_keywordParser.parse(), std::exception);
+}
diff --git a/test/utest_utils.cpp b/test/utest_utils.cpp
new file mode 100644
index 0000000..6511dcb
--- /dev/null
+++ b/test/utest_utils.cpp
@@ -0,0 +1,23 @@
+#include <utility/vpd_specific_utility.hpp>
+
+#include <cassert>
+#include <string>
+
+#include <gtest/gtest.h>
+
+using namespace vpd;
+
+TEST(UtilsTest, TestValidValue)
+{
+    std::string key = "VINI";
+    std::string encoding = "MAC";
+    std::string expected = "56:49:4e:49";
+    EXPECT_EQ(expected, vpdSpecificUtility::encodeKeyword(key, encoding));
+}
+
+int main(int argc, char** argv)
+{
+    ::testing::InitGoogleTest(&argc, argv);
+
+    return RUN_ALL_TESTS();
+}
diff --git a/test/vpd-manager-test/editor_test.cpp b/test/vpd-manager-test/editor_test.cpp
deleted file mode 100644
index 53f32ad..0000000
--- a/test/vpd-manager-test/editor_test.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-#include "editor_impl.hpp"
-#include "ipz_parser.hpp"
-
-#include <nlohmann/json.hpp>
-
-#include <algorithm>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-using namespace openpower::vpd;
-using namespace openpower::vpd::manager::editor;
-using namespace openpower::vpd::inventory;
-using namespace openpower::vpd::constants;
-
-class vpdManagerEditorTest : public ::testing::Test
-{
-  protected:
-    Binary vpd;
-
-    nlohmann::json jsonFile;
-
-    // map to hold the mapping of location code and inventory path
-    inventory::LocationCodeMap fruLocationCode;
-
-  public:
-    // constructor
-    vpdManagerEditorTest()
-    {
-        processJson();
-    }
-
-    void processJson();
-    void readFile(std::string pathToFile);
-};
-
-void vpdManagerEditorTest::readFile(std::string pathToFile)
-{
-    // read the json file and parse it
-    std::ifstream vpdFile(pathToFile, std::ios::binary);
-
-    if (!vpdFile)
-    {
-        throw std::runtime_error("json file not found");
-    }
-
-    vpd.assign((std::istreambuf_iterator<char>(vpdFile)),
-               std::istreambuf_iterator<char>());
-}
-
-void vpdManagerEditorTest::processJson()
-{
-    // read the json file and parse it
-    std::ifstream json("vpd-manager-test/vpd_editor_test.json",
-                       std::ios::binary);
-
-    if (!json)
-    {
-        throw std::runtime_error("json file not found");
-    }
-
-    jsonFile = nlohmann::json::parse(json);
-
-    const nlohmann::json& groupFRUS =
-        jsonFile["frus"].get_ref<const nlohmann::json::object_t&>();
-    for (const auto& itemFRUS : groupFRUS.items())
-    {
-        const std::vector<nlohmann::json>& groupEEPROM =
-            itemFRUS.value().get_ref<const nlohmann::json::array_t&>();
-        for (const auto& itemEEPROM : groupEEPROM)
-        {
-            fruLocationCode.emplace(
-                itemEEPROM["extraInterfaces"][IBM_LOCATION_CODE_INF]
-                          ["LocationCode"]
-                              .get_ref<const nlohmann::json::string_t&>(),
-                itemEEPROM["inventoryPath"]
-                    .get_ref<const nlohmann::json::string_t&>());
-        }
-    }
-}
-
-TEST_F(vpdManagerEditorTest, InvalidFile)
-{
-    Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y',
-                        'D', 'A', 'T', 'A', 'O', 'K'};
-
-    Binary emptyVpdFile;
-    try
-    {
-        // Invalid kwd name
-        EditorImpl edit("VINI", "SN", std::move(emptyVpdFile));
-        edit.updateKeyword(dataToUodate, 0, true);
-    }
-    catch (const std::exception& e)
-    {
-        EXPECT_EQ(std::string(e.what()), std::string("Invalid File"));
-    }
-}
-
-TEST_F(vpdManagerEditorTest, InvalidHeader)
-{
-    Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y',
-                        'D', 'A', 'T', 'A', 'O', 'K'};
-
-    readFile("vpd-manager-test/invalidHeaderFile.dat");
-    try
-    {
-        // the path is dummy
-        EditorImpl edit("VINI", "SN", std::move(vpd));
-        edit.updateKeyword(dataToUodate, 0, true);
-    }
-    catch (const std::exception& e)
-    {
-        EXPECT_EQ(std::string(e.what()), std::string("VHDR record not found"));
-    }
-}
-
-TEST_F(vpdManagerEditorTest, InvalidRecordName)
-{
-    Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y',
-                        'D', 'A', 'T', 'A', 'O', 'K'};
-
-    readFile("vpd-manager-test/vpdFile.dat");
-
-    try
-    {
-        // Invalid record name "VIN", path is dummy
-        EditorImpl edit("VIN", "SN", std::move(vpd));
-        edit.updateKeyword(dataToUodate, 0, true);
-    }
-    catch (const std::exception& e)
-    {
-        EXPECT_EQ(std::string(e.what()), std::string("Record not found"));
-    }
-}
-
-TEST_F(vpdManagerEditorTest, InvalidKWdName)
-{
-    Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y',
-                        'D', 'A', 'T', 'A', 'O', 'K'};
-
-    readFile("vpd-manager-test/vpdFile.dat");
-
-    try
-    {
-        // All valid data
-        EditorImpl edit("VINI", "Sn", std::move(vpd));
-        edit.updateKeyword(dataToUodate, 0, true);
-    }
-    catch (const std::runtime_error& e)
-    {
-        EXPECT_EQ(std::string(e.what()), std::string("Keyword not found"));
-    }
-}
-
-TEST_F(vpdManagerEditorTest, UpdateKwd_Success)
-{
-    Binary dataToUodate{'M', 'O', 'D', 'I', 'F', 'Y',
-                        'D', 'A', 'T', 'A', 'O', 'K'};
-
-    readFile("vpd-manager-test/vpdFile.dat");
-
-    try
-    {
-        // All valid data, but can't update with dummy ECC code
-        EditorImpl edit("VINI", "SN", std::move(vpd));
-        edit.updateKeyword(dataToUodate, 0, true);
-    }
-    catch (const std::runtime_error& e)
-    {
-        EXPECT_EQ(std::string(e.what()), std::string("Ecc update failed"));
-    }
-}
-
-int main(int argc, char** argv)
-{
-    ::testing::InitGoogleTest(&argc, argv);
-
-    return RUN_ALL_TESTS();
-}
diff --git a/test/vpd-manager-test/invalidHeaderFile.dat b/test/vpd-manager-test/invalidHeaderFile.dat
deleted file mode 100644
index 7f8de18..0000000
--- a/test/vpd-manager-test/invalidHeaderFile.dat
+++ /dev/null
Binary files differ
diff --git a/test/vpd-manager-test/reader_test.cpp b/test/vpd-manager-test/reader_test.cpp
deleted file mode 100644
index dd576e6..0000000
--- a/test/vpd-manager-test/reader_test.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-#include "reader_test.hpp"
-
-#include "const.hpp"
-#include "reader_impl.hpp"
-#include "types.hpp"
-
-#include <nlohmann/json.hpp>
-
-#include <fstream>
-#include <tuple>
-
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-using namespace openpower::vpd::manager::reader;
-using namespace openpower::vpd::inventory;
-using namespace openpower::vpd::constants;
-
-class vpdManagerReaderTest : public ::testing::Test
-{
-  protected:
-    nlohmann::json jsonFile;
-
-    // map to hold the mapping of location code and inventory path
-    LocationCodeMap fruLocationCode;
-
-    // dummy value of node number
-    const uint8_t nodeNumber = 1;
-
-  public:
-    // constructor
-    vpdManagerReaderTest()
-    {
-        processJson();
-    }
-
-    void processJson();
-};
-
-using namespace openpower::vpd;
-
-void vpdManagerReaderTest::processJson()
-{
-    // read the json file and parse it
-    std::ifstream json("vpd-manager-test/vpd_reader_test.json",
-                       std::ios::binary);
-
-    if (!json)
-    {
-        throw std::runtime_error("json file not found");
-    }
-
-    jsonFile = nlohmann::json::parse(json);
-
-    if (jsonFile.find("frus") == jsonFile.end())
-    {
-        throw std::runtime_error("frus group not found in json");
-    }
-
-    const nlohmann::json& groupFRUS =
-        jsonFile["frus"].get_ref<const nlohmann::json::object_t&>();
-    for (const auto& itemFRUS : groupFRUS.items())
-    {
-        const std::vector<nlohmann::json>& groupEEPROM =
-            itemFRUS.value().get_ref<const nlohmann::json::array_t&>();
-        for (const auto& itemEEPROM : groupEEPROM)
-        {
-            fruLocationCode.emplace(
-                itemEEPROM["extraInterfaces"][IBM_LOCATION_CODE_INF]
-                          ["LocationCode"]
-                              .get_ref<const nlohmann::json::string_t&>(),
-                itemEEPROM["inventoryPath"]
-                    .get_ref<const nlohmann::json::string_t&>());
-        }
-    }
-}
-
-TEST_F(vpdManagerReaderTest, isValidLocationCode_invalid)
-{
-    // No MTS or FCS in the collapsed location code
-    std::string unexpandedLocationCode_Invalid = "Uabc-X0";
-
-    MockUtilCalls uCalls;
-    ReaderImpl read(uCalls);
-    EXPECT_ANY_THROW({
-        read.getExpandedLocationCode(unexpandedLocationCode_Invalid, nodeNumber,
-                                     fruLocationCode);
-    });
-
-    // not starting with U
-    unexpandedLocationCode_Invalid = "Mabc-X0";
-    EXPECT_ANY_THROW({
-        read.getExpandedLocationCode(unexpandedLocationCode_Invalid, nodeNumber,
-                                     fruLocationCode);
-    });
-}
-
-TEST_F(vpdManagerReaderTest, getExpandedLocationCode_Invalid)
-{
-    std::string unexpandedLocationCode_Invalid = "Uabc-X0";
-
-    MockUtilCalls uCalls;
-    ReaderImpl read(uCalls);
-    EXPECT_ANY_THROW({
-        read.getExpandedLocationCode(unexpandedLocationCode_Invalid, nodeNumber,
-                                     fruLocationCode);
-    });
-}
-
-TEST_F(vpdManagerReaderTest, getExpandedLocationCode_Valid)
-{
-    // mock the call to read bus property
-    MockUtilCalls uCalls;
-    EXPECT_CALL(uCalls, readBusProperty(SYSTEM_OBJECT, IBM_LOCATION_CODE_INF,
-                                        "LocationCode"))
-        .Times(1)
-        .WillOnce(testing::Return("U78DA.ND1.1234567-P0"));
-
-    std::string unexpandedLocationCode = "Ufcs-P0";
-    ReaderImpl read(uCalls);
-    std::string res = read.getExpandedLocationCode(unexpandedLocationCode,
-                                                   nodeNumber, fruLocationCode);
-
-    EXPECT_EQ(res, "U78DA.ND1.1234567-P0");
-}
-
-TEST_F(vpdManagerReaderTest, getFrusAtLocation_Invalid)
-{
-    // invalid location code
-    std::string unexpandedLocationCode = "Uabc-X0";
-
-    MockUtilCalls uCalls;
-    ReaderImpl read(uCalls);
-    EXPECT_ANY_THROW({
-        read.getFrusAtLocation(unexpandedLocationCode, nodeNumber,
-                               fruLocationCode);
-    });
-
-    // map to hold the mapping of location code and inventory path, empty in
-    // this case
-    LocationCodeMap mapLocationCode;
-    unexpandedLocationCode = "Ufcs-P0";
-    EXPECT_ANY_THROW({
-        read.getFrusAtLocation(unexpandedLocationCode, nodeNumber,
-                               mapLocationCode);
-    });
-}
-
-TEST_F(vpdManagerReaderTest, getFrusAtLocation_Valid)
-{
-    std::string LocationCode = "Ufcs-P0";
-
-    MockUtilCalls uCalls;
-    ReaderImpl read(uCalls);
-    ListOfPaths paths =
-        read.getFrusAtLocation(LocationCode, nodeNumber, fruLocationCode);
-    std::string expected =
-        "/xyz/openbmc_project/inventory/system/chassis/motherboard";
-    EXPECT_EQ(paths.at(0), expected);
-}
-
-TEST_F(vpdManagerReaderTest, getFRUsByExpandedLocationCode_invalid)
-{
-    // not starting from U
-    std::string locationCode = "9105.22A.SIMP10R";
-
-    MockUtilCalls uCalls;
-    ReaderImpl read(uCalls);
-    ListOfPaths paths;
-    EXPECT_ANY_THROW({
-        paths =
-            read.getFRUsByExpandedLocationCode(locationCode, fruLocationCode);
-    });
-
-    // unused variable warning
-    (void)paths;
-
-    // length is les sthan 17 for expanded location code
-    locationCode = "U9105.22A.SIMP10";
-    EXPECT_ANY_THROW({
-        paths =
-            read.getFRUsByExpandedLocationCode(locationCode, fruLocationCode);
-    });
-
-    // Invalid location code. No "."
-    locationCode = "U78DAND11234567-P0";
-
-    // Mock readBUsproperty call
-    EXPECT_CALL(uCalls,
-                readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN", "FC"))
-        .Times(1)
-        .WillOnce(
-            testing::Return("78DAPQRS")); // return a dummy value for FC keyword
-
-    // unused variable warning
-    (void)paths;
-    EXPECT_ANY_THROW({
-        paths =
-            read.getFRUsByExpandedLocationCode(locationCode, fruLocationCode);
-    });
-}
-
-TEST_F(vpdManagerReaderTest, getFRUsByExpandedLocationCode_Valid_FC)
-{
-    // valid location code with FC kwd.
-    std::string validLocationCode = "U78DA.ND1.1234567-P0";
-
-    // Mock readBUsproperty call
-    MockUtilCalls uCalls;
-    EXPECT_CALL(uCalls,
-                readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN", "FC"))
-        .WillRepeatedly(
-            testing::Return("78DAPQRS")); // return a dummy value for FC keyword
-
-    ReaderImpl read(uCalls);
-    ListOfPaths paths =
-        read.getFRUsByExpandedLocationCode(validLocationCode, fruLocationCode);
-
-    std::string expected =
-        "/xyz/openbmc_project/inventory/system/chassis/motherboard";
-    EXPECT_EQ(paths.at(0), expected);
-}
-
-TEST_F(vpdManagerReaderTest, getFRUsByExpandedLocationCode_Valid_TM)
-{
-    // valid location code with TM kwd.
-    std::string validLocationCode = "U9105.22A.SIMP10R";
-
-    // Mock readBUsproperty call
-    MockUtilCalls uCalls;
-    EXPECT_CALL(uCalls,
-                readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VCEN", "FC"))
-        .Times(1)
-        .WillOnce(
-            testing::Return("78DAPQRS")); // return a dummy value for FC keyword
-
-    EXPECT_CALL(uCalls,
-                readBusProperty(SYSTEM_OBJECT, "com.ibm.ipzvpd.VSYS", "TM"))
-        .Times(1)
-        .WillOnce(
-            testing::Return("9105PQRS")); // return a dummy value for TM keyword
-
-    ReaderImpl read(uCalls);
-    ListOfPaths paths =
-        read.getFRUsByExpandedLocationCode(validLocationCode, fruLocationCode);
-
-    std::string expected = "/xyz/openbmc_project/inventory/system";
-    EXPECT_EQ(paths.at(0), expected);
-}
-
-int main(int argc, char** argv)
-{
-    ::testing::InitGoogleTest(&argc, argv);
-
-    return RUN_ALL_TESTS();
-}
diff --git a/test/vpd-manager-test/reader_test.hpp b/test/vpd-manager-test/reader_test.hpp
deleted file mode 100644
index b108df2..0000000
--- a/test/vpd-manager-test/reader_test.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include "utilInterface.hpp"
-
-#include <gmock/gmock.h>
-
-using namespace openpower::vpd::utils::interface;
-
-class MockUtilCalls : public UtilityInterface
-{
-  public:
-    MOCK_METHOD(std::string, readBusProperty,
-                (const std::string& obj, const std::string& inf,
-                 const std::string& prop),
-                (override));
-};
diff --git a/test/vpd-manager-test/vpdFile.dat b/test/vpd-manager-test/vpdFile.dat
deleted file mode 100644
index 147f63b..0000000
--- a/test/vpd-manager-test/vpdFile.dat
+++ /dev/null
Binary files differ
diff --git a/test/vpd-manager-test/vpd_editor_test.json b/test/vpd-manager-test/vpd_editor_test.json
deleted file mode 100644
index 516dcad..0000000
--- a/test/vpd-manager-test/vpd_editor_test.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
-    "commonInterfaces": {
-        "xyz.openbmc_project.Inventory.Decorator.Asset": {
-            "PartNumber": {
-                "recordName": "VINI",
-                "keywordName": "PN"
-            },
-            "SerialNumber": {
-                "recordName": "VINI",
-                "keywordName": "SN"
-            },
-            "BuildDate": {
-                "recordName": "VR10",
-                "keywordName": "DC",
-                "encoding": "DATE"
-            }
-        },
-        "xyz.openbmc_project.Inventory.Item": {
-            "PrettyName": {
-                "recordName": "VINI",
-                "keywordName": "DR"
-            },
-            "Present": true
-        }
-    },
-    "frus": {
-        "/sys/bus/i2c/drivers/at24/8-0050/eeprom": [
-            {
-                "inventoryPath": "/system/chassis/motherboard",
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Board.Motherboard": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system",
-                "inherit": false,
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.System": null,
-                    "xyz.openbmc_project.Inventory.Decorator.Asset": {
-                        "SerialNumber": {
-                            "recordName": "VSYS",
-                            "keywordName": "SE"
-                        },
-                        "Model": {
-                            "recordName": "VSYS",
-                            "keywordName": "TM"
-                        }
-                    },
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Umts"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis",
-                "inherit": false,
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Chassis": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a480.i2c-bus/i2c-8/8-0051/8-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Bmc": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc/ethernet0",
-                "inherit": false,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Ethernet": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5-T0"
-                    },
-                    "xyz.openbmc_project.Inventory.Item.NetworkInterface": {
-                        "MACAddress": {
-                            "recordName": "VCFG",
-                            "keywordName": "Z0",
-                            "encoding": "MAC"
-                        }
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc/ethernet1",
-                "inherit": false,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Ethernet": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5-T1"
-                    },
-                    "xyz.openbmc_project.Inventory.Item.NetworkInterface": {
-                        "MACAddress": {
-                            "recordName": "VCFG",
-                            "keywordName": "Z1",
-                            "encoding": "MAC"
-                        }
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a080.i2c-bus/i2c-0/0-0051/0-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/tpm_wilson",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Tpm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C22"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a400.i2c-bus/i2c-7/7-0050/7-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/base_op_panel_blyth",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Panel": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-D0"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a400.i2c-bus/i2c-7/7-0051/7-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/lcd_op_panel_hill",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Panel": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-D1"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a500.i2c-bus/i2c-9/9-0050/9-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/vdd_vrm0",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Vrm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C14"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a580.i2c-bus/i2c-10/10-0050/10-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/vdd_vrm1",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Vrm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C23"
-                    }
-                }
-            }
-        ]
-    }
-}
diff --git a/test/vpd-manager-test/vpd_reader_test.json b/test/vpd-manager-test/vpd_reader_test.json
deleted file mode 100644
index 516dcad..0000000
--- a/test/vpd-manager-test/vpd_reader_test.json
+++ /dev/null
@@ -1,172 +0,0 @@
-{
-    "commonInterfaces": {
-        "xyz.openbmc_project.Inventory.Decorator.Asset": {
-            "PartNumber": {
-                "recordName": "VINI",
-                "keywordName": "PN"
-            },
-            "SerialNumber": {
-                "recordName": "VINI",
-                "keywordName": "SN"
-            },
-            "BuildDate": {
-                "recordName": "VR10",
-                "keywordName": "DC",
-                "encoding": "DATE"
-            }
-        },
-        "xyz.openbmc_project.Inventory.Item": {
-            "PrettyName": {
-                "recordName": "VINI",
-                "keywordName": "DR"
-            },
-            "Present": true
-        }
-    },
-    "frus": {
-        "/sys/bus/i2c/drivers/at24/8-0050/eeprom": [
-            {
-                "inventoryPath": "/system/chassis/motherboard",
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Board.Motherboard": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system",
-                "inherit": false,
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.System": null,
-                    "xyz.openbmc_project.Inventory.Decorator.Asset": {
-                        "SerialNumber": {
-                            "recordName": "VSYS",
-                            "keywordName": "SE"
-                        },
-                        "Model": {
-                            "recordName": "VSYS",
-                            "keywordName": "TM"
-                        }
-                    },
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Umts"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis",
-                "inherit": false,
-                "isSystemVpd": true,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Chassis": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a480.i2c-bus/i2c-8/8-0051/8-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Bmc": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5"
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc/ethernet0",
-                "inherit": false,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Ethernet": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5-T0"
-                    },
-                    "xyz.openbmc_project.Inventory.Item.NetworkInterface": {
-                        "MACAddress": {
-                            "recordName": "VCFG",
-                            "keywordName": "Z0",
-                            "encoding": "MAC"
-                        }
-                    }
-                }
-            },
-            {
-                "inventoryPath": "/system/chassis/motherboard/ebmc_card_bmc/ethernet1",
-                "inherit": false,
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Ethernet": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C5-T1"
-                    },
-                    "xyz.openbmc_project.Inventory.Item.NetworkInterface": {
-                        "MACAddress": {
-                            "recordName": "VCFG",
-                            "keywordName": "Z1",
-                            "encoding": "MAC"
-                        }
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a080.i2c-bus/i2c-0/0-0051/0-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/tpm_wilson",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Tpm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C22"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a400.i2c-bus/i2c-7/7-0050/7-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/base_op_panel_blyth",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Panel": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-D0"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a400.i2c-bus/i2c-7/7-0051/7-00510/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/lcd_op_panel_hill",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Panel": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-D1"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a500.i2c-bus/i2c-9/9-0050/9-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/vdd_vrm0",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Vrm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C14"
-                    }
-                }
-            }
-        ],
-        "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a580.i2c-bus/i2c-10/10-0050/10-00500/nvmem": [
-            {
-                "inventoryPath": "/system/chassis/motherboard/vdd_vrm1",
-                "extraInterfaces": {
-                    "xyz.openbmc_project.Inventory.Item.Vrm": null,
-                    "com.ibm.ipzvpd.Location": {
-                        "LocationCode": "Ufcs-P0-C23"
-                    }
-                }
-            }
-        ]
-    }
-}
diff --git a/test/vpd_files/ddr4_ddimm.dat b/test/vpd_files/ddr4_ddimm.dat
new file mode 100755
index 0000000..3226bb3
--- /dev/null
+++ b/test/vpd_files/ddr4_ddimm.dat
Binary files differ
diff --git a/test/vpd_files/ddr5_ddimm.dat b/test/vpd_files/ddr5_ddimm.dat
new file mode 100644
index 0000000..b7f4107
--- /dev/null
+++ b/test/vpd_files/ddr5_ddimm.dat
Binary files differ
diff --git a/test/vpd_files/ddr5_ddimm_corrupted_index_2.dat b/test/vpd_files/ddr5_ddimm_corrupted_index_2.dat
new file mode 100644
index 0000000..3ddf5fc
--- /dev/null
+++ b/test/vpd_files/ddr5_ddimm_corrupted_index_2.dat
Binary files differ
diff --git a/test/vpd_files/ddr5_ddimm_corrupted_index_235.dat b/test/vpd_files/ddr5_ddimm_corrupted_index_235.dat
new file mode 100644
index 0000000..dcbb477
--- /dev/null
+++ b/test/vpd_files/ddr5_ddimm_corrupted_index_235.dat
Binary files differ
diff --git a/test/vpd_files/ddr5_ddimm_corrupted_index_2_3.dat b/test/vpd_files/ddr5_ddimm_corrupted_index_2_3.dat
new file mode 100644
index 0000000..9adf253
--- /dev/null
+++ b/test/vpd_files/ddr5_ddimm_corrupted_index_2_3.dat
Binary files differ
diff --git a/test/vpd_files/ddr5_ddimm_corrupted_index_4.dat b/test/vpd_files/ddr5_ddimm_corrupted_index_4.dat
new file mode 100644
index 0000000..cdac642
--- /dev/null
+++ b/test/vpd_files/ddr5_ddimm_corrupted_index_4.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system.dat b/test/vpd_files/ipz_system.dat
new file mode 100644
index 0000000..6c11e60
--- /dev/null
+++ b/test/vpd_files/ipz_system.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_corrupted_index_17.dat b/test/vpd_files/ipz_system_corrupted_index_17.dat
new file mode 100644
index 0000000..db829a9
--- /dev/null
+++ b/test/vpd_files/ipz_system_corrupted_index_17.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_corrupted_index_61.dat b/test/vpd_files/ipz_system_corrupted_index_61.dat
new file mode 100644
index 0000000..638b8c8
--- /dev/null
+++ b/test/vpd_files/ipz_system_corrupted_index_61.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_corrupted_index_74.dat b/test/vpd_files/ipz_system_corrupted_index_74.dat
new file mode 100644
index 0000000..e0b3754
--- /dev/null
+++ b/test/vpd_files/ipz_system_corrupted_index_74.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_corrupted_index_78_79.dat b/test/vpd_files/ipz_system_corrupted_index_78_79.dat
new file mode 100644
index 0000000..eeff8e3
--- /dev/null
+++ b/test/vpd_files/ipz_system_corrupted_index_78_79.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_min_record.dat b/test/vpd_files/ipz_system_min_record.dat
new file mode 100644
index 0000000..a3bac3c
--- /dev/null
+++ b/test/vpd_files/ipz_system_min_record.dat
Binary files differ
diff --git a/test/vpd_files/ipz_system_truncated.dat b/test/vpd_files/ipz_system_truncated.dat
new file mode 100644
index 0000000..a9777e1
--- /dev/null
+++ b/test/vpd_files/ipz_system_truncated.dat
Binary files differ
diff --git a/test/vpd.dat b/test/vpd_files/keyword.dat
old mode 100755
new mode 100644
similarity index 100%
rename from test/vpd.dat
rename to test/vpd_files/keyword.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_0.dat b/test/vpd_files/keyword_corrupted_index_0.dat
new file mode 100644
index 0000000..cda52ce
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_0.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_177.dat b/test/vpd_files/keyword_corrupted_index_177.dat
new file mode 100644
index 0000000..69810aa
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_177.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_178.dat b/test/vpd_files/keyword_corrupted_index_178.dat
new file mode 100644
index 0000000..40aab82
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_178.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_179.dat b/test/vpd_files/keyword_corrupted_index_179.dat
new file mode 100644
index 0000000..ac2e89d
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_179.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_19.dat b/test/vpd_files/keyword_corrupted_index_19.dat
new file mode 100644
index 0000000..58f146d
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_19.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_20.dat b/test/vpd_files/keyword_corrupted_index_20.dat
new file mode 100644
index 0000000..f18282f
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_20.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_24_large_size.dat b/test/vpd_files/keyword_corrupted_index_24_large_size.dat
new file mode 100644
index 0000000..03122bb
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_24_large_size.dat
Binary files differ
diff --git a/test/vpd_files/keyword_corrupted_index_24_small_size.dat b/test/vpd_files/keyword_corrupted_index_24_small_size.dat
new file mode 100644
index 0000000..1bb1e26
--- /dev/null
+++ b/test/vpd_files/keyword_corrupted_index_24_small_size.dat
Binary files differ
