Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Side by Side Diff: webrtc/base/network_unittest.cc

Issue 1391703003: Create network change notifier. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc@master
Patch Set: Merge with master Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/base/network.h" 11 #include "webrtc/base/network.h"
12 12
13 #include "webrtc/base/networkmonitor.h"
13 #include <vector> 14 #include <vector>
14 #if defined(WEBRTC_POSIX) 15 #if defined(WEBRTC_POSIX)
15 #include <sys/types.h> 16 #include <sys/types.h>
16 #if !defined(WEBRTC_ANDROID) 17 #if !defined(WEBRTC_ANDROID)
17 #include <ifaddrs.h> 18 #include <ifaddrs.h>
18 #else 19 #else
19 #include "webrtc/base/ifaddrs-android.h" 20 #include "webrtc/base/ifaddrs-android.h"
20 #endif 21 #endif
21 #endif 22 #endif
22 #include "webrtc/base/gunit.h" 23 #include "webrtc/base/gunit.h"
23 #if defined(WEBRTC_WIN) 24 #if defined(WEBRTC_WIN)
24 #include "webrtc/base/logging.h" // For LOG_GLE 25 #include "webrtc/base/logging.h" // For LOG_GLE
25 #endif 26 #endif
26 27
27 namespace rtc { 28 namespace rtc {
28 29
30 class FakeNetworkMonitor : public NetworkMonitorBase {
31 public:
32 void Start() override {}
33 void Stop() override {}
34 };
35
36 class FakeNetworkMonitorFactory : public NetworkMonitorFactory {
37 public:
38 FakeNetworkMonitorFactory() {}
39 NetworkMonitor* CreateNetworkMonitor() { return new FakeNetworkMonitor(); }
40 };
41
29 class NetworkTest : public testing::Test, public sigslot::has_slots<> { 42 class NetworkTest : public testing::Test, public sigslot::has_slots<> {
30 public: 43 public:
31 NetworkTest() : callback_called_(false) {} 44 NetworkTest() : callback_called_(false) {}
32 45
33 void OnNetworksChanged() { 46 void OnNetworksChanged() {
34 callback_called_ = true; 47 callback_called_ = true;
35 } 48 }
36 49
37 NetworkManager::Stats MergeNetworkList( 50 NetworkManager::Stats MergeNetworkList(
38 BasicNetworkManager& network_manager, 51 BasicNetworkManager& network_manager,
39 const NetworkManager::NetworkList& list, 52 const NetworkManager::NetworkList& list,
40 bool* changed) { 53 bool* changed) {
41 NetworkManager::Stats stats; 54 NetworkManager::Stats stats;
42 network_manager.MergeNetworkList(list, changed, &stats); 55 network_manager.MergeNetworkList(list, changed, &stats);
43 return stats; 56 return stats;
44 } 57 }
45 58
46 bool IsIgnoredNetwork(BasicNetworkManager& network_manager, 59 bool IsIgnoredNetwork(BasicNetworkManager& network_manager,
47 const Network& network) { 60 const Network& network) {
48 return network_manager.IsIgnoredNetwork(network); 61 return network_manager.IsIgnoredNetwork(network);
49 } 62 }
50 63
51 NetworkManager::NetworkList GetNetworks( 64 NetworkManager::NetworkList GetNetworks(
52 const BasicNetworkManager& network_manager, bool include_ignored) { 65 const BasicNetworkManager& network_manager, bool include_ignored) {
53 NetworkManager::NetworkList list; 66 NetworkManager::NetworkList list;
54 network_manager.CreateNetworks(include_ignored, &list); 67 network_manager.CreateNetworks(include_ignored, &list);
55 return list; 68 return list;
56 } 69 }
57 70
71 NetworkMonitor* GetNetworkMonitor(BasicNetworkManager& network_manager) {
72 return network_manager.network_monitor_.get();
73 }
74 void ClearNetworks(BasicNetworkManager& network_manager) {
75 for (const auto& kv : network_manager.networks_map_) {
76 delete kv.second;
77 }
78 network_manager.networks_.clear();
79 network_manager.networks_map_.clear();
80 }
81
58 #if defined(WEBRTC_POSIX) 82 #if defined(WEBRTC_POSIX)
59 // Separated from CreateNetworks for tests. 83 // Separated from CreateNetworks for tests.
60 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager, 84 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager,
61 struct ifaddrs* interfaces, 85 struct ifaddrs* interfaces,
62 bool include_ignored, 86 bool include_ignored,
63 NetworkManager::NetworkList* networks) { 87 NetworkManager::NetworkList* networks) {
64 network_manager.ConvertIfAddrs(interfaces, include_ignored, networks); 88 network_manager.ConvertIfAddrs(interfaces, include_ignored, networks);
65 } 89 }
66 #endif // defined(WEBRTC_POSIX) 90 #endif // defined(WEBRTC_POSIX)
67 91
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 ipv6_network.AddIP(ip); 807 ipv6_network.AddIP(ip);
784 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip)); 808 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip));
785 809
786 // Add global dynamic temporary one. 810 // Add global dynamic temporary one.
787 ipstr = "2401:fa00:4:1000:be30:5bff:fee5:c6"; 811 ipstr = "2401:fa00:4:1000:be30:5bff:fee5:c6";
788 ASSERT_TRUE(IPFromString(ipstr, IPV6_ADDRESS_FLAG_TEMPORARY, &ip)); 812 ASSERT_TRUE(IPFromString(ipstr, IPV6_ADDRESS_FLAG_TEMPORARY, &ip));
789 ipv6_network.AddIP(ip); 813 ipv6_network.AddIP(ip);
790 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip)); 814 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip));
791 } 815 }
792 816
817 TEST_F(NetworkTest, TestNetworkMonitoring) {
818 BasicNetworkManager manager;
819 manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
820 &NetworkTest::OnNetworksChanged);
821 FakeNetworkMonitorFactory* factory = new FakeNetworkMonitorFactory();
822 NetworkMonitorFactory::SetFactory(factory);
823 manager.StartUpdating();
824 NetworkMonitor* network_monitor = GetNetworkMonitor(manager);
825 EXPECT_TRUE_WAIT(callback_called_, 1000);
826 callback_called_ = false;
827
828 // Clear the networks so that there will be network changes below.
829 ClearNetworks(manager);
830 // Network manager is started, so the callback is called when the network
831 // monitor fires the network-change event.
832 network_monitor->OnNetworksChanged();
833 EXPECT_TRUE_WAIT(callback_called_, 1000);
834
835 // Network manager is stopped; the network monitor is removed.
836 manager.StopUpdating();
837 EXPECT_TRUE(GetNetworkMonitor(manager) == nullptr);
838
839 NetworkMonitorFactory::ReleaseFactory(factory);
840 }
841
793 } // namespace rtc 842 } // namespace rtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698