Index: webrtc/base/network_unittest.cc |
diff --git a/webrtc/base/network_unittest.cc b/webrtc/base/network_unittest.cc |
index 6d920e0a507a0fa25cea656025e81376fa2459cb..05fdfe66f53326c2cd1084c742dc3916b93a4048 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,22 @@ |
namespace rtc { |
+class FakeNetworkMonitor : public NetworkMonitor { |
+ public: |
+ void StartMonitoring() override {} |
+ void StopMonitoring() override {} |
+}; |
+ |
+class FakeNetworkMonitorFactory : public NetworkMonitorFactory { |
+ public: |
+ NetworkMonitor* CreateNetworkMonitor() { return new FakeNetworkMonitor(); } |
+ static FakeNetworkMonitorFactory* CreateFactory() { |
+ FakeNetworkMonitorFactory* factory = new FakeNetworkMonitorFactory(); |
+ NetworkMonitorFactory::SetFactory(factory); |
+ return factory; |
+ } |
+}; |
+ |
class NetworkTest : public testing::Test, public sigslot::has_slots<> { |
public: |
NetworkTest() : callback_called_(false) {} |
@@ -55,6 +72,10 @@ class NetworkTest : public testing::Test, public sigslot::has_slots<> { |
return list; |
} |
+ NetworkMonitor* GetNetworkMonitor(BasicNetworkManager& network_manager) { |
+ return network_manager.network_monitor_.get(); |
+ } |
+ |
#if defined(WEBRTC_POSIX) |
// Separated from CreateNetworks for tests. |
static void CallConvertIfAddrs(const BasicNetworkManager& network_manager, |
@@ -790,4 +811,28 @@ 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::CreateFactory(); |
+ manager.StartUpdating(); |
+ NetworkMonitor* network_monitor = GetNetworkMonitor(manager); |
+ Thread::Current()->ProcessMessages(0); |
+ EXPECT_TRUE(callback_called_); |
+ callback_called_ = false; |
+ |
+ // Network manager is started, so the callback is called when the network |
+ // monitor fires the network-change event. |
+ network_monitor->OnNetworksChanged(); |
+ Thread::Current()->ProcessMessages(0); |
+ EXPECT_TRUE(callback_called_); |
+ |
+ // Network manager is stopped; the network monitor is removed. |
+ manager.StopUpdating(); |
+ EXPECT_TRUE(GetNetworkMonitor(manager) == nullptr); |
+ |
+ NetworkMonitorFactory::SetFactory(nullptr); |
+} |
+ |
} // namespace rtc |