diff --git a/test/Makefile.am b/test/Makefile.am
index b2fbced..87d0742 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -7,7 +7,8 @@
 test_SOURCES = \
 	test_util.cpp \
 	mock_syscall.cpp \
-	test_network_manager.cpp
+	test_network_manager.cpp \
+	test_ethernet_interface.cpp
 
 test_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
 test_CXXFLAGS = $(PTHREAD_CFLAGS)
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
new file mode 100644
index 0000000..beaa0d4
--- /dev/null
+++ b/test/test_ethernet_interface.cpp
@@ -0,0 +1,151 @@
+#include "network_manager.hpp"
+#include "mock_syscall.hpp"
+
+#include <gtest/gtest.h>
+#include <sdbusplus/bus.hpp>
+
+#include <net/if.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <exception>
+
+namespace phosphor
+{
+namespace network
+{
+
+class TestEthernetInterface : public testing::Test
+{
+    public:
+
+        sdbusplus::bus::bus bus;
+        Manager manager;
+        EthernetInterface interface;
+        TestEthernetInterface()
+            : bus(sdbusplus::bus::new_default()),
+              manager(bus, "/xyz/openbmc_test/network"),
+              interface(bus, "/xyz/openbmc_test/network/test0", false, manager)
+
+        {
+
+        }
+
+        int countIPObjects()
+        {
+            return interface.getAddresses().size();
+        }
+
+        bool isIPObjectExist(const std::string& ipaddress)
+        {
+            auto address = interface.getAddresses().find(ipaddress);
+            if (address == interface.getAddresses().end())
+            {
+                return false;
+            }
+            return true;
+
+        }
+
+        bool deleteIPObject(const std::string& ipaddress)
+        {
+            auto address = interface.getAddresses().find(ipaddress);
+            if (address == interface.getAddresses().end())
+            {
+                return false;
+            }
+            address->second->delete_();
+            return true;
+        }
+
+        std::string getObjectPath(const std::string& ipaddress,
+                                  uint8_t subnetMask,
+                                  const std::string& gateway)
+        {
+            IP::Protocol addressType = IP::Protocol::IPv4;
+
+            return interface.generateObjectPath(addressType,
+                                                ipaddress,
+                                                subnetMask,
+                                                gateway);
+        }
+
+        void createIPObject(IP::Protocol addressType,
+                            const std::string& ipaddress,
+                            uint8_t subnetMask,
+                            const std::string& gateway)
+        {
+            interface.iP(addressType,
+                         ipaddress,
+                         subnetMask,
+                         gateway
+                        );
+
+        }
+
+};
+
+TEST_F(TestEthernetInterface, NoIPaddress)
+{
+    EXPECT_EQ(countIPObjects(), 0);
+
+}
+
+TEST_F(TestEthernetInterface, AddIPAddress)
+{
+    IP::Protocol addressType = IP::Protocol::IPv4;
+    createIPObject(addressType, "10.10.10.10", 16, "10.10.10.1");
+    EXPECT_EQ(true, isIPObjectExist("10.10.10.10"));
+
+}
+
+TEST_F(TestEthernetInterface, AddMultipleAddress)
+{
+    IP::Protocol addressType = IP::Protocol::IPv4;
+    createIPObject(addressType, "10.10.10.10", 16, "10.10.10.1");
+    createIPObject(addressType, "20.20.20.20", 16, "20.20.20.1");
+    EXPECT_EQ(true, isIPObjectExist("10.10.10.10"));
+    EXPECT_EQ(true, isIPObjectExist("20.20.20.20"));
+
+}
+
+TEST_F(TestEthernetInterface, DeleteIPAddress)
+{
+    IP::Protocol addressType = IP::Protocol::IPv4;
+    createIPObject(addressType, "10.10.10.10", 16, "10.10.10.1");
+    createIPObject(addressType, "20.20.20.20", 16, "20.20.20.1");
+    deleteIPObject("10.10.10.10");
+    EXPECT_EQ(false, isIPObjectExist("10.10.10.10"));
+    EXPECT_EQ(true, isIPObjectExist("20.20.20.20"));
+
+}
+
+TEST_F(TestEthernetInterface, DeleteInvalidIPAddress)
+{
+    EXPECT_EQ(false, deleteIPObject("10.10.10.10"));
+}
+
+TEST_F(TestEthernetInterface, CheckObjectPath)
+{
+    std::string ipaddress = "10.10.10.10";
+    uint8_t prefix = 16;
+    std::string gateway = "10.10.10.1";
+
+    std::string expectedObjectPath = "/xyz/openbmc_test/network/test0/ipv4/";
+    std::stringstream hexId;
+
+    std::string hashString = ipaddress;
+    hashString += std::to_string(prefix);
+    hashString += gateway;
+
+
+    hexId << std::hex << ((std::hash<std::string> {}(
+                               hashString)) & 0xFFFFFFFF);
+    expectedObjectPath += hexId.str();
+
+    EXPECT_EQ(expectedObjectPath, getObjectPath(ipaddress,
+                                                prefix,
+                                                gateway));
+}
+
+}// namespce network
+}// namespace phosphor
