diff --git a/bmc-vmi-ca/ca_certs_manager.hpp b/bmc-vmi-ca/ca_certs_manager.hpp
index 9d6231e..a1db918 100644
--- a/bmc-vmi-ca/ca_certs_manager.hpp
+++ b/bmc-vmi-ca/ca_certs_manager.hpp
@@ -60,13 +60,14 @@
      */
     void deleteAll() override;
 
+  protected:
+    std::map<uint32_t, std::unique_ptr<Entry>> entries;
+
   private:
     /** @brief sdbusplus DBus bus connection. */
     sdbusplus::bus::bus& bus;
     // sdevent Event handle
     sdeventplus::Event& event;
-
-    std::map<uint32_t, std::unique_ptr<Entry>> entries;
     /** @brief object path */
     std::string objectPath;
     /** @brief Id of the last certificate entry */
diff --git a/test/Makefile.am b/test/Makefile.am
index 08aeeee..e500841 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -38,3 +38,14 @@
 certs_manager_test_LDADD += $(top_builddir)/csr.o
 certs_manager_test_LDADD += $(top_builddir)/watch.o
 certs_manager_test_LDADD += $(CODE_COVERAGE_LIBS)
+
+if CA_CERT_EXTENSION
+# Build/add ca_certs_manager_test to test suite
+check_PROGRAMS += ca_certs_manager_test
+ca_certs_manager_test_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_CPPFLAGS)
+ca_certs_manager_test_LDFLAGS = $(AM_LDFLAGS) $(PTHREAD_LIBS) $(OESDK_TESTCASE_FLAGS)
+ca_certs_manager_test_SOURCES = ca_certs_manager_test.cpp
+ca_certs_manager_test_LDADD = $(top_builddir)/bmc-vmi-ca/ca_certs_manager.o
+ca_certs_manager_test_LDADD += $(top_builddir)/bmc-vmi-ca/ca_cert_entry.o
+ca_certs_manager_test_LDADD += $(CODE_COVERAGE_LIBS)
+endif
diff --git a/test/ca_certs_manager_test.cpp b/test/ca_certs_manager_test.cpp
new file mode 100644
index 0000000..17c8589
--- /dev/null
+++ b/test/ca_certs_manager_test.cpp
@@ -0,0 +1,125 @@
+#include "config.h"
+
+#include "bmc-vmi-ca/ca_certs_manager.hpp"
+
+#include <iterator>
+#include <sdeventplus/event.hpp>
+#include <string>
+#include <xyz/openbmc_project/Certs/error.hpp>
+#include <xyz/openbmc_project/Common/error.hpp>
+
+#include <gtest/gtest.h>
+
+using InvalidArgument =
+    sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
+using namespace ca::cert;
+
+class MockCACertMgr : public CACertMgr
+{
+  public:
+    MockCACertMgr(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+                  const char* path) :
+        CACertMgr(bus, event, path)
+    {
+    }
+
+    void deleteAll()
+    {
+        CACertMgr::deleteAll();
+    }
+
+    void erase(uint32_t entryId)
+    {
+        CACertMgr::erase(entryId);
+    }
+    std::string createCSRObject(std::string csrString)
+    {
+        return (signCSR(csrString));
+    }
+
+    uint32_t getNumOfEntries()
+    {
+        return entries.size();
+    }
+
+    friend class TestCACertMgr;
+};
+/**
+ * Class to create certificate authority manager unit testcases.
+ */
+class TestCACertMgr : public ::testing::Test
+{
+  public:
+    TestCACertMgr() : bus(sdbusplus::bus::new_default())
+    {
+    }
+
+  protected:
+    sdbusplus::bus::bus bus;
+};
+
+TEST_F(TestCACertMgr, testObjectCreation)
+{
+    auto bus = sdbusplus::bus::new_default();
+    std::string objPath = "/xyz/openbmc_project/certs/ca";
+    auto event = sdeventplus::Event::get_default();
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+    MockCACertMgr manager(bus, event, objPath.c_str());
+
+    std::string csrString = "csr string";
+    EXPECT_NO_THROW(objPath = manager.createCSRObject(csrString));
+    EXPECT_TRUE(manager.getNumOfEntries() == 1);
+}
+
+TEST_F(TestCACertMgr, testInvalidArgument)
+{
+    auto bus = sdbusplus::bus::new_default();
+    std::string objPath = "/xyz/openbmc_project/certs/ca";
+    auto event = sdeventplus::Event::get_default();
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+    MockCACertMgr manager(bus, event, objPath.c_str());
+
+    std::string csrString(4097, 'C');
+
+    EXPECT_THROW(objPath = manager.createCSRObject(csrString), InvalidArgument);
+}
+TEST_F(TestCACertMgr, DeleteAllCSRObjects)
+{
+    auto bus = sdbusplus::bus::new_default();
+    std::string objPath = "/xyz/openbmc_project/certs/ca";
+    auto event = sdeventplus::Event::get_default();
+
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+    MockCACertMgr manager(bus, event, objPath.c_str());
+
+    std::string csrString = "csr string";
+
+    objPath = manager.createCSRObject(csrString);
+    objPath = manager.createCSRObject(csrString);
+    EXPECT_TRUE(manager.getNumOfEntries() == 2);
+    manager.deleteAll();
+
+    EXPECT_TRUE(manager.getNumOfEntries() == 0);
+}
+TEST_F(TestCACertMgr, DeleteObjectEntry)
+{
+
+    auto bus = sdbusplus::bus::new_default();
+    std::string objPath = "/xyz/openbmc_project/certs/ca";
+    auto event = sdeventplus::Event::get_default();
+    bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
+    MockCACertMgr manager(bus, event, objPath.c_str());
+
+    std::string csrString = "csr string";
+    std::string entryPath = manager.createCSRObject(csrString);
+    std::size_t pos = entryPath.rfind("/");
+
+    std::string id;
+    if (pos != std::string::npos)
+    {
+        id = entryPath.substr(pos + 1);
+    }
+
+    manager.erase(std::stoi(id));
+    EXPECT_TRUE(manager.getNumOfEntries() == 0);
+}
