tests: don't throw if NetworkMonitor lacks CAP_ENUM

Gracefully handle this case by returning an empty list of interfaces

Change-Id: Ib07215c76dec60ec4bdc86358e1dbecd30a3ca62
Refs: #4796
diff --git a/tests/unit/net/collect-netifs.cpp b/tests/unit/net/collect-netifs.cpp
index eeaec20..fe866af 100644
--- a/tests/unit/net/collect-netifs.cpp
+++ b/tests/unit/net/collect-netifs.cpp
@@ -37,26 +37,21 @@
 std::vector<shared_ptr<const NetworkInterface>>
 collectNetworkInterfaces(bool allowCached)
 {
-  static std::vector<shared_ptr<const NetworkInterface>> cached;
-  // cached.empty() indicates there's no cached list of netifs.
-  // Although it could also mean a system without any network interface, this situation is rare
-  // because the loopback interface is present on almost all systems.
+  static optional<std::vector<shared_ptr<const NetworkInterface>>> cached;
 
-  if (!allowCached || cached.empty()) {
+  if (!allowCached || !cached) {
     boost::asio::io_service io;
     NetworkMonitor netmon(io);
-    if ((netmon.getCapabilities() & NetworkMonitor::CAP_ENUM) == 0) {
-      BOOST_THROW_EXCEPTION(NetworkMonitor::Error("NetworkMonitor::CAP_ENUM is unavailable"));
+
+    if (netmon.getCapabilities() & NetworkMonitor::CAP_ENUM) {
+      netmon.onEnumerationCompleted.connect([&io] { io.stop(); });
+      io.run();
+      io.reset();
     }
-
-    netmon.onEnumerationCompleted.connect([&io] { io.stop(); });
-    io.run();
-    io.reset();
-
     cached = netmon.listNetworkInterfaces();
   }
 
-  return cached;
+  return *cached;
 }
 
 } // namespace tests