util: no-op NetworkMonitor on unsupported platforms

NetworkMonitor::getCapabilities() function reports what functions
and signals are supported on current platform.

refs #4025

Change-Id: I2c2825e0f9919a734fb78b4699a483c837ee09af
diff --git a/tests/integrated/network-monitor.cpp b/tests/integrated/network-monitor.cpp
index 3b4a516..ac74862 100644
--- a/tests/integrated/network-monitor.cpp
+++ b/tests/integrated/network-monitor.cpp
@@ -55,6 +55,8 @@
   boost::asio::io_service io;
   NetworkMonitor monitor(io);
 
+  std::cout << "capabilities=" << monitor.getCapabilities() << std::endl;
+
   monitor.onNetworkStateChanged.connect([] {
     logEvent() << "onNetworkStateChanged" << std::endl;
   });
diff --git a/tests/unit-tests/util/network-monitor.t.cpp b/tests/unit-tests/util/network-monitor.t.cpp
index 0e6e599..b6d7330 100644
--- a/tests/unit-tests/util/network-monitor.t.cpp
+++ b/tests/unit-tests/util/network-monitor.t.cpp
@@ -31,21 +31,27 @@
 BOOST_AUTO_TEST_SUITE(Util)
 BOOST_AUTO_TEST_SUITE(TestNetworkMonitor)
 
+#define NM_REQUIRE_CAP(capability) \
+  do { \
+    if ((nm->getCapabilities() & NetworkMonitor::CAP_ ## capability) == 0) { \
+      BOOST_WARN_MESSAGE(false, "skipping assertions that require " #capability " capability"); \
+      return; \
+    } \
+  } while (false)
+
 BOOST_AUTO_TEST_CASE(DestructWithoutRun)
 {
-#if defined(NDN_CXX_HAVE_RTNETLINK) || defined(NDN_CXX_HAVE_COREFOUNDATION_COREFOUNDATION_H)
   boost::asio::io_service io;
   auto nm = make_unique<NetworkMonitor>(io);
   nm.reset();
-#endif
   BOOST_CHECK(true); // if we got this far, the test passed
 }
 
 BOOST_AUTO_TEST_CASE(DestructWhileEnumerating)
 {
-#ifdef NDN_CXX_HAVE_RTNETLINK
   boost::asio::io_service io;
   auto nm = make_unique<NetworkMonitor>(io);
+  NM_REQUIRE_CAP(ENUM);
 
   nm->onInterfaceAdded.connect([&] (const shared_ptr<NetworkInterface>&) {
     io.post([&] { nm.reset(); });
@@ -57,7 +63,6 @@
   });
 
   io.run();
-#endif
   BOOST_CHECK(true); // if we got this far, the test passed
 }