diff --git a/network_manager.cpp b/network_manager.cpp
index bce6731..cdbaf45 100644
--- a/network_manager.cpp
+++ b/network_manager.cpp
@@ -27,17 +27,30 @@
 using namespace phosphor::logging;
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 
-Manager::Manager(sdbusplus::bus::bus& bus, const char* objPath):
+Manager::Manager(sdbusplus::bus::bus& bus, const char* objPath,
+                 const std::string& path):
     details::VLANCreateIface(bus, objPath, true),
     bus(bus),
     objectPath(objPath)
 {
-    confDir = NETWORK_CONF_DIR;
+    fs::path confDir(path);
+    setConfDir(confDir);
 }
 
 void Manager::setConfDir(const fs::path& dir)
 {
     confDir = dir;
+
+    if (!fs::exists(confDir))
+    {
+        if (!fs::create_directories(confDir))
+        {
+            log<level::ERR>("Unable to create the network conf dir",
+                            entry("DIR=%s", confDir.c_str()));
+            elog<InternalFailure>();
+        }
+    }
+
 }
 
 void Manager::createInterfaces()
diff --git a/network_manager.hpp b/network_manager.hpp
index 9324aec..db4db0f 100644
--- a/network_manager.hpp
+++ b/network_manager.hpp
@@ -49,8 +49,10 @@
         /** @brief Constructor to put object onto bus at a dbus path.
          *  @param[in] bus - Bus to attach to.
          *  @param[in] objPath - Path to attach at.
+         *  @param[in] dir - Network Configuration directory path.
          */
-        Manager(sdbusplus::bus::bus& bus, const char* objPath);
+        Manager(sdbusplus::bus::bus& bus, const char* objPath,
+                const std::string& dir);
 
         void vLAN(IntfName interfaceName, uint32_t id) override;
 
@@ -73,6 +75,10 @@
          */
         void setConfDir(const fs::path& dir);
 
+        /** @brief gets the network conf directory.
+         */
+        fs::path getConfDir() { return confDir; }
+
     private:
 
         /** @brief write the dhcp section **/
diff --git a/network_manager_main.cpp b/network_manager_main.cpp
index d98ab0d..47d38a5 100644
--- a/network_manager_main.cpp
+++ b/network_manager_main.cpp
@@ -10,7 +10,7 @@
     // Add sdbusplus Object Manager for the 'root' path of the network manager.
     sdbusplus::server::manager::manager objManager(bus, OBJ_NETWORK);
 
-    phosphor::network::Manager manager(bus, OBJ_NETWORK);
+    phosphor::network::Manager manager(bus, OBJ_NETWORK, NETWORK_CONF_DIR);
 
     manager.createChildObjects();
 
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
index beaa0d4..67a25df 100644
--- a/test/test_ethernet_interface.cpp
+++ b/test/test_ethernet_interface.cpp
@@ -4,9 +4,11 @@
 #include <gtest/gtest.h>
 #include <sdbusplus/bus.hpp>
 
+#include <arpa/inet.h>
 #include <net/if.h>
 #include <netinet/in.h>
-#include <arpa/inet.h>
+#include <stdlib.h>
+
 #include <exception>
 
 namespace phosphor
@@ -21,15 +23,33 @@
         sdbusplus::bus::bus bus;
         Manager manager;
         EthernetInterface interface;
+        std::string confDir;
         TestEthernetInterface()
             : bus(sdbusplus::bus::new_default()),
-              manager(bus, "/xyz/openbmc_test/network"),
+              manager(bus, "/xyz/openbmc_test/network", "/tmp/"),
               interface(bus, "/xyz/openbmc_test/network/test0", false, manager)
 
         {
+            setConfDir();
 
         }
 
+        void setConfDir()
+        {
+            char tmp[] = "/tmp/EthernetInterface.XXXXXX";
+            confDir = mkdtemp(tmp);
+            manager.setConfDir(confDir);
+        }
+
+        ~TestEthernetInterface()
+        {
+            if(confDir != "")
+            {
+                fs::remove_all(confDir);
+            }
+        }
+
+
         int countIPObjects()
         {
             return interface.getAddresses().size();
diff --git a/test/test_network_manager.cpp b/test/test_network_manager.cpp
index 3382e38..3e1f0e3 100644
--- a/test/test_network_manager.cpp
+++ b/test/test_network_manager.cpp
@@ -10,25 +10,45 @@
 #include <net/if.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <stdlib.h>
+
 #include <exception>
+#include <experimental/filesystem>
 
 namespace phosphor
 {
 namespace network
 {
 
+namespace fs = std::experimental::filesystem;
+
 class TestNetworkManager : public testing::Test
 {
     public:
 
         sdbusplus::bus::bus bus;
         Manager manager;
-
+        std::string confDir;
         TestNetworkManager()
             : bus(sdbusplus::bus::new_default()),
-              manager(bus, "xyz/openbmc_test/abc")
+              manager(bus, "/xyz/openbmc_test/abc", "/tmp")
         {
+            setConfDir();
+        }
 
+        ~TestNetworkManager()
+        {
+            if(confDir != "")
+            {
+                fs::remove_all(confDir);
+            }
+        }
+
+        void setConfDir()
+        {
+            char tmp[] = "/tmp/NetworkManager.XXXXXX";
+            confDir = mkdtemp(tmp);
+            manager.setConfDir(confDir);
         }
 
         void createInterfaces()
