diff --git a/test/global_network_objects.cpp b/test/global_network_objects.cpp
index 0f6550f..9442546 100644
--- a/test/global_network_objects.cpp
+++ b/test/global_network_objects.cpp
@@ -1,8 +1,6 @@
 #include "mock_network_manager.hpp"
 #include "types.hpp"
 
-#include <sdeventplus/event.hpp>
-
 namespace phosphor
 {
 
@@ -10,23 +8,7 @@
 {
 
 std::unique_ptr<MockManager> manager = nullptr;
-std::unique_ptr<Timer> refreshObjectTimer = nullptr;
 std::unique_ptr<Timer> reloadTimer = nullptr;
 
-/** @brief refresh the network objects. */
-void refreshObjects()
-{
-    if (manager)
-    {
-        manager->createChildObjects();
-    }
-}
-
-void initializeTimers()
-{
-    refreshObjectTimer = std::make_unique<Timer>(
-        sdeventplus::Event::get_default(), std::bind(refreshObjects));
-}
-
 } // namespace network
 } // namespace phosphor
diff --git a/test/meson.build b/test/meson.build
index 1b96586..0e580fd 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -49,7 +49,6 @@
   'netlink',
   'network_manager',
   'rtnetlink',
-  'system_queries',
   'types',
   'util',
 ]
diff --git a/test/mock_ethernet_interface.hpp b/test/mock_ethernet_interface.hpp
index 1f72486..ff1b324 100644
--- a/test/mock_ethernet_interface.hpp
+++ b/test/mock_ethernet_interface.hpp
@@ -17,8 +17,8 @@
     {
     }
 
+    MOCK_METHOD((ServerList), getNTPServerFromTimeSyncd, (), (override));
     MOCK_METHOD((ServerList), getNameServerFromResolvd, (), (override));
-    friend class TestEthernetInterface;
 };
 } // namespace network
 } // namespace phosphor
diff --git a/test/mock_network_manager.hpp b/test/mock_network_manager.hpp
index fd344bf..87214d4 100644
--- a/test/mock_network_manager.hpp
+++ b/test/mock_network_manager.hpp
@@ -1,8 +1,5 @@
 #pragma once
-#include "config_parser.hpp"
-#include "mock_ethernet_interface.hpp"
 #include "network_manager.hpp"
-#include "system_queries.hpp"
 
 #include <gmock/gmock.h>
 
@@ -11,9 +8,6 @@
 namespace network
 {
 
-void initializeTimers();
-void refreshObjects();
-
 class MockManager : public Manager
 {
   public:
@@ -23,25 +17,9 @@
     {
     }
 
-    void createInterfaces() override
-    {
-        interfaces.clear();
-        for (auto& interface : system::getInterfaces())
-        {
-            config::Parser config(
-                config::pathForIntfConf(confDir, *interface.name));
-            auto intf = std::make_unique<MockEthernetInterface>(
-                bus, *this, interface, objectPath, config);
-            intf->createIPAddressObjects();
-            intf->createStaticNeighborObjects();
-            intf->loadNameServers(config);
-            this->interfaces.emplace(
-                std::make_pair(std::move(*interface.name), std::move(intf)));
-        }
-    }
-
     MOCK_METHOD(void, reloadConfigs, (), (override));
-    MOCK_METHOD(void, reloadConfigsNoRefresh, (), (override));
+
+    using Manager::handleAdminState;
 };
 
 } // namespace network
diff --git a/test/test_ethernet_interface.cpp b/test/test_ethernet_interface.cpp
index a7b3c69..dd1a10d 100644
--- a/test/test_ethernet_interface.cpp
+++ b/test/test_ethernet_interface.cpp
@@ -1,23 +1,15 @@
 #include "config_parser.hpp"
 #include "ipaddress.hpp"
+#include "mock_ethernet_interface.hpp"
 #include "mock_network_manager.hpp"
-#include "mock_syscall.hpp"
-#include "system_queries.hpp"
-#include "util.hpp"
 
-#include <arpa/inet.h>
 #include <net/if.h>
-#include <netinet/in.h>
-#include <stdlib.h>
 
-#include <charconv>
-#include <exception>
 #include <sdbusplus/bus.hpp>
 #include <stdplus/gtest/tmp.hpp>
 #include <string_view>
 #include <xyz/openbmc_project/Common/error.hpp>
 
-#include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
 namespace phosphor
@@ -33,7 +25,7 @@
 {
   public:
     sdbusplus::bus_t bus;
-    std::string confDir;
+    std::filesystem::path confDir;
     MockManager manager;
     MockEthernetInterface interface;
     TestEthernetInterface() :
@@ -47,9 +39,7 @@
     static MockEthernetInterface makeInterface(sdbusplus::bus_t& bus,
                                                MockManager& manager)
     {
-        system::mock_clear();
         InterfaceInfo info{.idx = 1, .flags = 0, .name = "test0"};
-        system::mock_addIF(info);
         return {bus, manager, info, "/xyz/openbmc_test/network"sv,
                 config::Parser()};
     }
@@ -86,7 +76,6 @@
                        .name = "test1",
                        .mac = mac,
                        .mtu = mtu};
-    system::mock_addIF(info);
     MockEthernetInterface intf(bus, manager, info,
                                "/xyz/openbmc_test/network"sv, config::Parser());
 
@@ -136,11 +125,9 @@
 TEST_F(TestEthernetInterface, addStaticNameServers)
 {
     ServerList servers = {"9.1.1.1", "9.2.2.2", "9.3.3.3"};
-    EXPECT_CALL(manager, reloadConfigsNoRefresh());
+    EXPECT_CALL(manager, reloadConfigs());
     interface.staticNameServers(servers);
-    fs::path filePath = confDir;
-    filePath /= "00-bmc-test0.network";
-    config::Parser parser(filePath.string());
+    config::Parser parser((confDir / "00-bmc-test0.network").native());
     EXPECT_EQ(servers, parser.map.getValueStrings("Network", "DNS"));
 }
 
@@ -155,11 +142,9 @@
 TEST_F(TestEthernetInterface, addStaticNTPServers)
 {
     ServerList servers = {"10.1.1.1", "10.2.2.2", "10.3.3.3"};
-    EXPECT_CALL(manager, reloadConfigsNoRefresh());
+    EXPECT_CALL(manager, reloadConfigs());
     interface.staticNTPServers(servers);
-    fs::path filePath = confDir;
-    filePath /= "00-bmc-test0.network";
-    config::Parser parser(filePath.string());
+    config::Parser parser((confDir / "00-bmc-test0.network").native());
     EXPECT_EQ(servers, parser.map.getValueStrings("Network", "NTP"));
 }
 
diff --git a/test/test_network_manager.cpp b/test/test_network_manager.cpp
index 7e3e211..ffffb44 100644
--- a/test/test_network_manager.cpp
+++ b/test/test_network_manager.cpp
@@ -1,11 +1,5 @@
 #include "config_parser.hpp"
 #include "mock_network_manager.hpp"
-#include "mock_syscall.hpp"
-
-#include <arpa/inet.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <stdlib.h>
 
 #include <filesystem>
 #include <sdbusplus/bus.hpp>
@@ -30,12 +24,6 @@
         bus(sdbusplus::bus::new_default()),
         manager(bus, "/xyz/openbmc_test/abc", CaseTmpDir())
     {
-        system::mock_clear();
-    }
-
-    void createInterfaces()
-    {
-        manager.createInterfaces();
     }
 
     void deleteVLAN(std::string_view ifname)
@@ -44,31 +32,29 @@
     }
 };
 
-// getifaddrs will not return any interface
 TEST_F(TestNetworkManager, NoInterface)
 {
-    createInterfaces();
     EXPECT_TRUE(manager.interfaces.empty());
 }
-// getifaddrs returns single interface.
+
 TEST_F(TestNetworkManager, WithSingleInterface)
 {
-    // Adds the following ip in the getifaddrs list.
-    system::mock_addIF({.idx = 2, .flags = 0, .name = "igb1"});
+    manager.addInterface({.idx = 2, .flags = 0, .name = "igb1"});
+    manager.handleAdminState("managed", 2);
 
     // Now create the interfaces which will call the mocked getifaddrs
     // which returns the above interface detail.
-    createInterfaces();
     EXPECT_THAT(manager.interfaces, UnorderedElementsAre(Key("igb1")));
 }
 
 // getifaddrs returns two interfaces.
 TEST_F(TestNetworkManager, WithMultipleInterfaces)
 {
-    system::mock_addIF({.idx = 1, .flags = 0, .name = "igb0"});
-    system::mock_addIF({.idx = 2, .flags = 0, .name = "igb1"});
+    manager.addInterface({.idx = 1, .flags = 0, .name = "igb0"});
+    manager.handleAdminState("managed", 1);
+    manager.handleAdminState("unmanaged", 2);
+    manager.addInterface({.idx = 2, .flags = 0, .name = "igb1"});
 
-    createInterfaces();
     EXPECT_THAT(manager.interfaces,
                 UnorderedElementsAre(Key("igb0"), Key("igb1")));
 }
@@ -79,8 +65,8 @@
     EXPECT_THROW(manager.vlan("", 0), std::exception);
     EXPECT_THROW(manager.vlan("eth0", 2), std::exception);
 
-    system::mock_addIF({.idx = 1, .flags = 0, .name = "eth0"});
-    manager.createInterfaces();
+    manager.addInterface({.idx = 1, .flags = 0, .name = "eth0"});
+    manager.handleAdminState("managed", 1);
     EXPECT_NO_THROW(manager.vlan("eth0", 2));
     EXPECT_NO_THROW(manager.vlan("eth0", 4094));
     EXPECT_THAT(
diff --git a/test/test_system_queries.cpp b/test/test_system_queries.cpp
deleted file mode 100644
index e88c64b..0000000
--- a/test/test_system_queries.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "system_queries.hpp"
-
-#include <gtest/gtest.h>
-
-namespace phosphor::network::system
-{
-namespace detail
-{
-
-TEST(ValidateNewAddr, Filtering)
-{
-    AddressInfo info = {};
-    EXPECT_TRUE(validateNewAddr(info, {}));
-
-    info.ifidx = 2;
-    EXPECT_TRUE(validateNewAddr(info, {}));
-    EXPECT_TRUE(validateNewAddr(info, {.ifidx = 2}));
-    EXPECT_FALSE(validateNewAddr(info, {.ifidx = 3}));
-}
-
-TEST(ValidateNewNeigh, Filtering)
-{
-    NeighborInfo info = {};
-    EXPECT_TRUE(validateNewNeigh(info, {}));
-
-    info.ifidx = 2;
-    EXPECT_TRUE(validateNewNeigh(info, {}));
-    EXPECT_TRUE(validateNewNeigh(info, {.ifidx = 2}));
-    EXPECT_FALSE(validateNewNeigh(info, {.ifidx = 3}));
-}
-
-} // namespace detail
-} // namespace phosphor::network::system
