| 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
|
|
|