config_parser: Reduce number of file reads

This changes focuses on reducing the number of Parser() constructions to
limit the number of duplicate file reads.

Change-Id: I05df943844c70dc6aa729ab744d2d405cbfe2c76
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/mock_ethernet_interface.hpp b/test/mock_ethernet_interface.hpp
index b8c3335..a0358ed 100644
--- a/test/mock_ethernet_interface.hpp
+++ b/test/mock_ethernet_interface.hpp
@@ -13,9 +13,9 @@
 {
   public:
     MockEthernetInterface(sdbusplus::bus_t& bus, const std::string& objPath,
-                          DHCPConf dhcpEnabled, Manager& parent,
-                          bool emitSignal) :
-        EthernetInterface(bus, objPath, dhcpEnabled, parent, emitSignal,
+                          const config::Parser& config, DHCPConf dhcpEnabled,
+                          Manager& parent, bool emitSignal) :
+        EthernetInterface(bus, objPath, config, dhcpEnabled, parent, emitSignal,
                           /*nicEnabled=*/true)
     {
     }
diff --git a/test/mock_network_manager.hpp b/test/mock_network_manager.hpp
index 741cee9..46c7c4b 100644
--- a/test/mock_network_manager.hpp
+++ b/test/mock_network_manager.hpp
@@ -1,7 +1,4 @@
 #pragma once
-
-#include "config.h"
-
 #include "mock_ethernet_interface.hpp"
 #include "network_manager.hpp"
 
@@ -34,13 +31,14 @@
             fs::path objPath = objectPath;
             // normal ethernet interface
             objPath /= interface;
-            auto dhcp = getDHCPValue(confDir, interface);
+            config::Parser config(config::pathForIntfConf(confDir, interface));
             auto intf =
                 std::make_shared<phosphor::network::MockEthernetInterface>(
-                    bus, objPath.string(), dhcp, *this, true);
+                    bus, objPath.string(), config, getDHCPValue(config), *this,
+                    true);
             intf->createIPAddressObjects();
             intf->createStaticNeighborObjects();
-            intf->loadNameServers();
+            intf->loadNameServers(config);
             this->interfaces.emplace(
                 std::make_pair(std::move(interface), std::move(intf)));
         }
diff --git a/test/test_config_parser.cpp b/test/test_config_parser.cpp
index cd2fa4f..896d61e 100644
--- a/test/test_config_parser.cpp
+++ b/test/test_config_parser.cpp
@@ -69,18 +69,21 @@
 
 TEST_F(TestConfigParser, EmptyObject)
 {
+    EXPECT_TRUE(parser.getFilename().empty());
     EXPECT_EQ(0, parser.getWarnings().size());
 }
 
 TEST_F(TestConfigParser, ReadDirectory)
 {
     parser.setFile("/");
+    EXPECT_EQ("/", parser.getFilename());
     EXPECT_EQ(1, parser.getWarnings().size());
 }
 
 TEST_F(TestConfigParser, ReadConfigDataMissingFile)
 {
     parser.setFile("/no-such-path");
+    EXPECT_EQ("/no-such-path", parser.getFilename());
     EXPECT_EQ(1, parser.getWarnings().size());
 }
 
@@ -88,6 +91,7 @@
 {
     WriteSampleFile();
     parser.setFile(filename);
+    EXPECT_EQ(filename, parser.getFilename());
     EXPECT_EQ(4, parser.getWarnings().size());
 
     EXPECT_THAT(parser.getValues("Match", "Name"), ElementsAre("eth0"));
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
index 96f00d1..e9ed3fd 100644
--- a/test/test_ethernet_interface.cpp
+++ b/test/test_ethernet_interface.cpp
@@ -43,8 +43,12 @@
     {
         mock_clear();
         mock_addIF("test0", 1, mac);
-        return {bus, "/xyz/openbmc_test/network/test0",
-                EthernetInterface::DHCPConf::none, manager, true};
+        return {bus,
+                "/xyz/openbmc_test/network/test0",
+                config::Parser(),
+                EthernetInterface::DHCPConf::none,
+                manager,
+                true};
     }
 
     int countIPObjects()
diff --git a/test/test_vlan_interface.cpp b/test/test_vlan_interface.cpp
index 126d2d0..5ee1cf9 100644
--- a/test/test_vlan_interface.cpp
+++ b/test/test_vlan_interface.cpp
@@ -43,6 +43,7 @@
         mock_addIF("test0", 1);
         return {bus,
                 "/xyz/openbmc_test/network/test0",
+                config::Parser(),
                 EthernetInterface::DHCPConf::none,
                 manager,
                 false,