diff --git a/test/Makefile.am b/test/Makefile.am
index 8f951bf..bf1a935 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -8,7 +8,8 @@
 	test_util.cpp \
 	mock_syscall.cpp \
 	test_network_manager.cpp \
-	test_ethernet_interface.cpp
+	test_ethernet_interface.cpp \
+	test_config_parser.cpp
 
 test_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
 
@@ -32,5 +33,6 @@
 			$(top_builddir)/routing_table.cpp \
 			$(top_builddir)/util.cpp \
 			$(top_builddir)/system_configuration.cpp \
+			$(top_builddir)/config_parser.cpp \
 			$(top_builddir)/xyz/openbmc_project/Network/VLAN/Create/phosphor_network_manager-server.o \
 			$(top_builddir)/xyz/openbmc_project/Network/IP/Create/phosphor_network_manager-server.o
diff --git a/test/test_config_parser.cpp b/test/test_config_parser.cpp
new file mode 100644
index 0000000..a07390b
--- /dev/null
+++ b/test/test_config_parser.cpp
@@ -0,0 +1,98 @@
+#include <gtest/gtest.h>
+
+#include "config_parser.hpp"
+
+#include "xyz/openbmc_project/Common/error.hpp"
+#include <phosphor-logging/elog-errors.hpp>
+
+#include "config.h"
+#include <exception>
+#include <stdexcept>
+#include <fstream>
+
+namespace phosphor
+{
+namespace network
+{
+
+class TestConfigParser : public testing::Test
+{
+    public:
+        config::Parser parser;
+        TestConfigParser()
+        {
+            remove("/tmp/eth0.network");
+            std::ofstream filestream("/tmp/eth0.network");
+
+            filestream << "[Match]\nName=eth0\n" <<
+                          "[Network]\nDHCP=true\n[DHCP]\nClientIdentifier= mac\n";
+            filestream.close();
+            parser.setFile("/tmp/eth0.network");
+        }
+
+        bool isValueFound(const std::vector<std::string>& values,
+                          const std::string& expectedValue)
+        {
+            for (const auto& value : values)
+            {
+                if (expectedValue == value)
+                {
+                    return  true;
+                }
+            }
+            return false;
+        }
+};
+
+TEST_F(TestConfigParser, ReadConfigDataFromFile)
+{
+    auto values = parser.getValues("Network", "DHCP");
+    std::string expectedValue = "true";
+    bool found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("DHCP", "ClientIdentifier");
+    expectedValue = "mac";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("Match", "Name");
+    expectedValue = "eth0";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+}
+
+TEST_F(TestConfigParser, SectionNotExist)
+{
+    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+    bool caughtException = false;
+    try
+    {
+        parser.getValues("abc", "ipaddress");
+    }
+    catch (const std::exception& e)
+    {
+        caughtException = true;
+    }
+    EXPECT_EQ(true, caughtException);
+}
+
+TEST_F(TestConfigParser, KeyNotFound)
+{
+    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+    bool caughtException = false;
+    try
+    {
+        parser.getValues("Network", "abc");
+    }
+    catch (const std::exception& e)
+    {
+        caughtException = true;
+    }
+    EXPECT_EQ(true, caughtException);
+    remove("/tmp/eth0.network");
+}
+
+}//namespace network
+}//namespace phosphor
+
