diff --git a/tests/core/network-interface-predicate.t.cpp b/tests/core/network-interface-predicate.t.cpp
index 3ec581b..9ae6c44 100644
--- a/tests/core/network-interface-predicate.t.cpp
+++ b/tests/core/network-interface-predicate.t.cpp
@@ -24,10 +24,10 @@
  */
 
 #include "core/network-interface-predicate.hpp"
-#include "core/network-interface.hpp"
 
 #include "tests/test-common.hpp"
 
+#include <ndn-cxx/net/ethernet.hpp>
 #include <ndn-cxx/net/network-monitor-stub.hpp>
 #include <boost/property_tree/info_parser.hpp>
 #include <sstream>
@@ -41,36 +41,8 @@
   NetworkInterfacePredicateFixture()
   {
     using namespace boost::asio::ip;
-    interfaces.push_back(
-      NetworkInterfaceInfo{0, "eth0",
-        ethernet::Address::fromString("3e:15:c2:8b:65:00"),
-        {address_v4::from_string("129.82.100.1")},
-        {},
-        address_v4::from_string("129.82.255.255"),
-        IFF_UP});
-    interfaces.push_back(
-      NetworkInterfaceInfo{1, "eth1",
-        ethernet::Address::fromString("3e:15:c2:8b:65:01"),
-        {address_v4::from_string("192.168.2.1")},
-        {},
-        address_v4::from_string("192.168.2.255"),
-        IFF_UP});
-    interfaces.push_back(
-      NetworkInterfaceInfo{2, "eth2",
-        ethernet::Address::fromString("3e:15:c2:8b:65:02"),
-        {address_v4::from_string("198.51.100.1")},
-        {address_v6::from_string("2001:db8::1")},
-        address_v4::from_string("198.51.100.255"),
-        IFF_MULTICAST | IFF_BROADCAST | IFF_UP});
-    interfaces.push_back(
-      NetworkInterfaceInfo{3, "enp68s0f1",
-        ethernet::Address::fromString("3e:15:c2:8b:65:03"),
-        {address_v4::from_string("192.168.2.3")},
-        {},
-        address_v4::from_string("192.168.2.255"),
-        IFF_UP});
-
     using namespace ndn::net;
+    namespace ethernet = ndn::ethernet;
 
     netifs.push_back(NetworkMonitorStub::makeNetworkInterface());
     netifs.back()->setIndex(0);
@@ -131,7 +103,6 @@
 
 protected:
   NetworkInterfacePredicate predicate;
-  std::vector<NetworkInterfaceInfo> interfaces;
   std::vector<shared_ptr<ndn::net::NetworkInterface>> netifs;
 };
 
@@ -141,11 +112,6 @@
 {
   parseConfig("");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -158,11 +124,6 @@
               "{\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -176,11 +137,6 @@
               "  *\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -195,11 +151,6 @@
               "  ifname eth1\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -214,11 +165,6 @@
               "  ifname eth1\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -232,11 +178,6 @@
               "  ifname enp*\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -250,11 +191,6 @@
               "  ifname *th*\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -268,11 +204,6 @@
               "  ifname eth**\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -286,11 +217,6 @@
               "  ifname *\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -304,11 +230,6 @@
               "  ifname eth?\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -333,11 +254,6 @@
               "  ether 3e:15:c2:8b:65:01\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -352,11 +268,6 @@
               "  ether 3e:15:c2:8b:65:01\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
@@ -380,11 +291,6 @@
               "  subnet 192.168.0.0/16\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), true);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), false);
@@ -398,11 +304,6 @@
               "  subnet 192.168.0.0/16\n"
               "}");
 
-  BOOST_CHECK_EQUAL(predicate(interfaces[0]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[1]), false);
-  BOOST_CHECK_EQUAL(predicate(interfaces[2]), true);
-  BOOST_CHECK_EQUAL(predicate(interfaces[3]), false);
-
   BOOST_CHECK_EQUAL(predicate(*netifs[0]), true);
   BOOST_CHECK_EQUAL(predicate(*netifs[1]), false);
   BOOST_CHECK_EQUAL(predicate(*netifs[2]), true);
diff --git a/tests/core/network-interface.t.cpp b/tests/core/network-interface.t.cpp
deleted file mode 100644
index 43436bb..0000000
--- a/tests/core/network-interface.t.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2015,  Regents of the University of California,
- *                           Arizona Board of Regents,
- *                           Colorado State University,
- *                           University Pierre & Marie Curie, Sorbonne University,
- *                           Washington University in St. Louis,
- *                           Beijing Institute of Technology,
- *                           The University of Memphis.
- *
- * This file is part of NFD (Named Data Networking Forwarding Daemon).
- * See AUTHORS.md for complete list of NFD authors and contributors.
- *
- * NFD is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "core/network-interface.hpp"
-#include "tests/test-common.hpp"
-
-namespace nfd {
-namespace tests {
-
-BOOST_FIXTURE_TEST_SUITE(TestNetworkInterface, BaseFixture)
-
-BOOST_AUTO_TEST_CASE(ListRealNetworkInterfaces)
-{
-  std::vector<NetworkInterfaceInfo> netifs;
-  BOOST_CHECK_NO_THROW(netifs = listNetworkInterfaces());
-
-  for (const auto& netif : netifs) {
-    BOOST_TEST_MESSAGE(netif.index << ": " << netif.name);
-    BOOST_TEST_MESSAGE("\tether " << netif.etherAddress);
-    for (const auto& address : netif.ipv4Addresses)
-      BOOST_TEST_MESSAGE("\tinet  " << address);
-    for (const auto& address : netif.ipv6Addresses)
-      BOOST_TEST_MESSAGE("\tinet6 " << address);
-    BOOST_TEST_MESSAGE("\tloopback  : " << netif.isLoopback());
-    BOOST_TEST_MESSAGE("\tmulticast : " << netif.isMulticastCapable());
-    BOOST_TEST_MESSAGE("\tup        : " << netif.isUp());
-  }
-}
-
-class FakeNetworkInterfaceFixture : public BaseFixture
-{
-public:
-  FakeNetworkInterfaceFixture()
-  {
-    using namespace boost::asio::ip;
-
-    auto fakeInterfaces = make_shared<std::vector<NetworkInterfaceInfo>>();
-
-    fakeInterfaces->push_back(
-      NetworkInterfaceInfo {0, "lo0",
-        ethernet::Address(),
-        {address_v4::from_string("127.0.0.1")},
-        {address_v6::from_string("fe80::1")},
-        address_v4::from_string("127.255.255.255"),
-        IFF_LOOPBACK | IFF_UP});
-    fakeInterfaces->push_back(
-      NetworkInterfaceInfo {1, "eth0",
-        ethernet::Address::fromString("3e:15:c2:8b:65:00"),
-        {address_v4::from_string("192.168.2.1")},
-        {},
-        address_v4::from_string("192.168.2.255"),
-        0});
-    fakeInterfaces->push_back(
-      NetworkInterfaceInfo {2, "eth1",
-        ethernet::Address::fromString("3e:15:c2:8b:65:00"),
-        {address_v4::from_string("198.51.100.1")},
-        {address_v6::from_string("2001:db8::1")},
-        address_v4::from_string("198.51.100.255"),
-        IFF_MULTICAST | IFF_BROADCAST | IFF_UP});
-
-    setDebugNetworkInterfaces(fakeInterfaces);
-  }
-
-  ~FakeNetworkInterfaceFixture()
-  {
-    setDebugNetworkInterfaces(nullptr);
-  }
-};
-
-BOOST_FIXTURE_TEST_CASE(ListFakeNetworkInterfaces, FakeNetworkInterfaceFixture)
-{
-  std::vector<NetworkInterfaceInfo> netifs;
-  BOOST_CHECK_NO_THROW(netifs = listNetworkInterfaces());
-
-  BOOST_REQUIRE_EQUAL(netifs.size(), 3);
-
-  BOOST_CHECK_EQUAL(netifs[0].index, 0);
-  BOOST_CHECK_EQUAL(netifs[1].index, 1);
-  BOOST_CHECK_EQUAL(netifs[2].index, 2);
-
-  BOOST_CHECK_EQUAL(netifs[0].name, "lo0");
-  BOOST_CHECK_EQUAL(netifs[1].name, "eth0");
-  BOOST_CHECK_EQUAL(netifs[2].name, "eth1");
-
-  // no real value of testing other parameters
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace tests
-} // namespace nfd
