Pass the network conf dir to network manager constructor

when the network manager comes up,it should have its
conf dir path which caller wants,instead of calling one
more function to set the desired conf dir.

Change-Id: I282c1d5e1c6edb2b6e77d16518d2204a6ac41a45
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
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()