diff --git a/.gitignore b/.gitignore
index cc2c852..04d8cc5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,3 +55,7 @@
 /test/test-suite.log
 /test/utest.log
 /test/utest.trs
+/test/ldap_mapper_test
+/test/ldap_mapper_test.log
+/test/ldap_mapper_test.trs
+
diff --git a/test/Makefile.am b/test/Makefile.am
index 5026e30..e3c1366 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -34,3 +34,12 @@
                             -lgmock
 ldap_config_test_SOURCES  = ldap_config_test.cpp utils_test.cpp
 ldap_config_test_LDADD  = $(top_builddir)/phosphor-ldap-config/ldap_configuration.o $(top_builddir)/phosphor-ldap-config/utils.o
+
+check_PROGRAMS += ldap_mapper_test
+ldap_mapper_test_CPPFLAGS = $(utest_CPPFLAGS)
+ldap_mapper_test_CXXFLAGS = $(utest_CXXFLAGS)
+ldap_mapper_test_LDFLAGS  = $(utest_LDFLAGS)
+ldap_mapper_test_SOURCES  = ldap_mapper_test.cpp
+ldap_mapper_test_LDADD  = $(top_builddir)/phosphor-ldap-mapper/ldap_mapper_entry.o \
+                          $(top_builddir)/phosphor-ldap-mapper/ldap_mapper_mgr.o \
+                          $(top_builddir)/phosphor-ldap-mapper/ldap_mapper_serialize.o
diff --git a/test/ldap_mapper_test.cpp b/test/ldap_mapper_test.cpp
new file mode 100644
index 0000000..2b06cce
--- /dev/null
+++ b/test/ldap_mapper_test.cpp
@@ -0,0 +1,151 @@
+#include <gtest/gtest.h>
+#include <experimental/filesystem>
+#include <stdlib.h>
+#include <sdbusplus/bus.hpp>
+#include "phosphor-ldap-mapper/ldap_mapper_entry.hpp"
+#include "phosphor-ldap-mapper/ldap_mapper_mgr.hpp"
+#include "phosphor-ldap-mapper/ldap_mapper_serialize.hpp"
+#include <xyz/openbmc_project/Common/error.hpp>
+#include <xyz/openbmc_project/User/Common/error.hpp>
+#include "config.h"
+
+namespace phosphor
+{
+namespace user
+{
+
+namespace fs = std::experimental::filesystem;
+
+class TestSerialization : public testing::Test
+{
+  public:
+    TestSerialization() : bus(sdbusplus::bus::new_default())
+    {
+    }
+
+    void SetUp() override
+    {
+        char tempDir[] = "/tmp/privmapper_test.XXXXXX";
+        dir = fs::path(mkdtemp(tempDir));
+    }
+
+    void TearDown() override
+    {
+        fs::remove_all(dir);
+    }
+
+    fs::path dir;
+    sdbusplus::bus::bus bus;
+};
+
+TEST_F(TestSerialization, testPersistPath)
+{
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          TestSerialization::dir.c_str());
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    size_t entryId = 1;
+    auto dbusPath = std::string(mapperMgrRoot) + '/' + std::to_string(entryId);
+
+    auto entry = std::make_unique<LDAPMapperEntry>(
+        TestSerialization::bus, dbusPath.c_str(),
+        (TestSerialization::dir).c_str(), groupName, privilege, manager);
+    auto outPath = serialize(*entry, entryId, TestSerialization::dir);
+    EXPECT_EQ(outPath, TestSerialization::dir / std::to_string(entryId));
+}
+
+TEST_F(TestSerialization, testPersistData)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    size_t entryId = 1;
+    auto dbusPath = std::string(mapperMgrRoot) + '/' + std::to_string(entryId);
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          TestSerialization::dir.c_str());
+
+    auto input = std::make_unique<LDAPMapperEntry>(
+        bus, dbusPath.c_str(), TestSerialization::dir.c_str(), groupName,
+        privilege, manager);
+    auto outPath = serialize(*input, entryId, TestSerialization::dir);
+
+    auto output = std::make_unique<LDAPMapperEntry>(
+        bus, dbusPath.c_str(), (TestSerialization::dir).c_str(), manager);
+    auto rc = deserialize(outPath, *output);
+
+    EXPECT_EQ(rc, true);
+    EXPECT_EQ(output->groupName(), groupName);
+    EXPECT_EQ(output->privilege(), privilege);
+}
+
+TEST_F(TestSerialization, testRestore)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    namespace fs = std::experimental::filesystem;
+    size_t entryId = 1;
+    LDAPMapperMgr manager1(TestSerialization::bus, mapperMgrRoot,
+                           (TestSerialization::dir).c_str());
+    EXPECT_NO_THROW(manager1.create(groupName, privilege));
+
+    EXPECT_EQ(fs::exists(TestSerialization::dir / std::to_string(entryId)),
+              true);
+    LDAPMapperMgr manager2(TestSerialization::bus, mapperMgrRoot,
+                           (TestSerialization::dir).c_str());
+    EXPECT_NO_THROW(manager2.restore());
+    EXPECT_NO_THROW(manager2.deletePrivilegeMapper(entryId));
+    EXPECT_EQ(fs::exists(TestSerialization::dir / std::to_string(entryId)),
+              false);
+}
+
+TEST_F(TestSerialization, testPrivilegeMapperCreation)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          (TestSerialization::dir).c_str());
+    EXPECT_NO_THROW(manager.create(groupName, privilege));
+}
+
+TEST_F(TestSerialization, testDuplicateGroupName)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    using PrivilegeMappingExists = sdbusplus::xyz::openbmc_project::User::
+        Common::Error::PrivilegeMappingExists;
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          (TestSerialization::dir).c_str());
+    auto objectPath = manager.create(groupName, privilege);
+    EXPECT_THROW(manager.create(groupName, privilege), PrivilegeMappingExists);
+}
+
+TEST_F(TestSerialization, testValidPrivilege)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-admin";
+    size_t entryId = 1;
+    auto dbusPath = std::string(mapperMgrRoot) + '/' + std::to_string(entryId);
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          TestSerialization::dir.c_str());
+
+    auto entry = std::make_unique<LDAPMapperEntry>(
+        TestSerialization::bus, dbusPath.c_str(),
+        (TestSerialization::dir).c_str(), groupName, privilege, manager);
+
+    EXPECT_NO_THROW(entry->privilege("priv-operator"));
+    EXPECT_NO_THROW(entry->privilege("priv-user"));
+    EXPECT_NO_THROW(entry->privilege("priv-callback"));
+}
+
+TEST_F(TestSerialization, testInvalidPrivilege)
+{
+    std::string groupName = "admin";
+    std::string privilege = "priv-test";
+    using InvalidArgument =
+        sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
+    LDAPMapperMgr manager(TestSerialization::bus, mapperMgrRoot,
+                          (TestSerialization::dir).c_str());
+    EXPECT_THROW(manager.create(groupName, privilege), InvalidArgument);
+}
+
+} // namespace user
+} // namespace phosphor
