Index: webrtc/base/network_unittest.cc |
diff --git a/webrtc/base/network_unittest.cc b/webrtc/base/network_unittest.cc |
index 6d920e0a507a0fa25cea656025e81376fa2459cb..436222127e6e08dd82767b3974f75c9bbd94cc18 100644 |
--- a/webrtc/base/network_unittest.cc |
+++ b/webrtc/base/network_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "webrtc/base/network.h" |
+#include "webrtc/base/networkmonitor.h" |
#include <vector> |
#if defined(WEBRTC_POSIX) |
#include <sys/types.h> |
@@ -26,6 +27,20 @@ |
namespace rtc { |
+class FakeNetworkMonitor : public NetworkMonitorBase { |
+ public: |
+ void Start() override {} |
+ void Stop() override {} |
+}; |
+ |
+class FakeNetworkMonitorFactory : public NetworkMonitorFactory { |
+ public: |
+ FakeNetworkMonitorFactory() {} |
+ NetworkMonitorInterface* CreateNetworkMonitor() { |
+ return new FakeNetworkMonitor(); |
+ } |
+}; |
+ |
class NetworkTest : public testing::Test, public sigslot::has_slots<> { |
public: |
NetworkTest() : callback_called_(false) {} |
@@ -55,6 +70,18 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> { |
return list; |
} |
+ NetworkMonitorInterface* GetNetworkMonitor( |
+ BasicNetworkManager& network_manager) { |
+ return network_manager.network_monitor_.get(); |
+ } |
+ void ClearNetworks(BasicNetworkManager& network_manager) { |
+ for (const auto& kv : network_manager.networks_map_) { |
+ delete kv.second; |
+ } |
+ network_manager.networks_.clear(); |
+ network_manager.networks_map_.clear(); |
+ } |
+ |
#if defined(WEBRTC_POSIX) |
// Separated from CreateNetworks for tests. |
static void CallConvertIfAddrs(const BasicNetworkManager& network_manager, |
@@ -790,4 +817,29 @@ TEST_F(NetworkTest, TestIPv6Selection) { |
EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip)); |
} |
+TEST_F(NetworkTest, TestNetworkMonitoring) { |
+ BasicNetworkManager manager; |
+ manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this), |
+ &NetworkTest::OnNetworksChanged); |
+ FakeNetworkMonitorFactory* factory = new FakeNetworkMonitorFactory(); |
+ NetworkMonitorFactory::SetFactory(factory); |
+ manager.StartUpdating(); |
+ NetworkMonitorInterface* network_monitor = GetNetworkMonitor(manager); |
+ EXPECT_TRUE_WAIT(callback_called_, 1000); |
+ callback_called_ = false; |
+ |
+ // Clear the networks so that there will be network changes below. |
+ ClearNetworks(manager); |
+ // Network manager is started, so the callback is called when the network |
+ // monitor fires the network-change event. |
+ network_monitor->OnNetworksChanged(); |
+ EXPECT_TRUE_WAIT(callback_called_, 1000); |
+ |
+ // Network manager is stopped; the network monitor is removed. |
+ manager.StopUpdating(); |
+ EXPECT_TRUE(GetNetworkMonitor(manager) == nullptr); |
+ |
+ NetworkMonitorFactory::ReleaseFactory(factory); |
+} |
+ |
} // namespace rtc |