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

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: Changed comments 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
« no previous file with comments | « webrtc/base/network.cc ('k') | webrtc/base/networkmonitor.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 NetworkMonitorInterface* CreateNetworkMonitor() {
40 return new FakeNetworkMonitor();
41 }
42 };
43
29 class NetworkTest : public testing::Test, public sigslot::has_slots<> { 44 class NetworkTest : public testing::Test, public sigslot::has_slots<> {
30 public: 45 public:
31 NetworkTest() : callback_called_(false) {} 46 NetworkTest() : callback_called_(false) {}
32 47
33 void OnNetworksChanged() { 48 void OnNetworksChanged() {
34 callback_called_ = true; 49 callback_called_ = true;
35 } 50 }
36 51
37 NetworkManager::Stats MergeNetworkList( 52 NetworkManager::Stats MergeNetworkList(
38 BasicNetworkManager& network_manager, 53 BasicNetworkManager& network_manager,
39 const NetworkManager::NetworkList& list, 54 const NetworkManager::NetworkList& list,
40 bool* changed) { 55 bool* changed) {
41 NetworkManager::Stats stats; 56 NetworkManager::Stats stats;
42 network_manager.MergeNetworkList(list, changed, &stats); 57 network_manager.MergeNetworkList(list, changed, &stats);
43 return stats; 58 return stats;
44 } 59 }
45 60
46 bool IsIgnoredNetwork(BasicNetworkManager& network_manager, 61 bool IsIgnoredNetwork(BasicNetworkManager& network_manager,
47 const Network& network) { 62 const Network& network) {
48 return network_manager.IsIgnoredNetwork(network); 63 return network_manager.IsIgnoredNetwork(network);
49 } 64 }
50 65
51 NetworkManager::NetworkList GetNetworks( 66 NetworkManager::NetworkList GetNetworks(
52 const BasicNetworkManager& network_manager, bool include_ignored) { 67 const BasicNetworkManager& network_manager, bool include_ignored) {
53 NetworkManager::NetworkList list; 68 NetworkManager::NetworkList list;
54 network_manager.CreateNetworks(include_ignored, &list); 69 network_manager.CreateNetworks(include_ignored, &list);
55 return list; 70 return list;
56 } 71 }
57 72
73 NetworkMonitorInterface* GetNetworkMonitor(
74 BasicNetworkManager& network_manager) {
75 return network_manager.network_monitor_.get();
76 }
77 void ClearNetworks(BasicNetworkManager& network_manager) {
78 for (const auto& kv : network_manager.networks_map_) {
79 delete kv.second;
80 }
81 network_manager.networks_.clear();
82 network_manager.networks_map_.clear();
83 }
84
58 #if defined(WEBRTC_POSIX) 85 #if defined(WEBRTC_POSIX)
59 // Separated from CreateNetworks for tests. 86 // Separated from CreateNetworks for tests.
60 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager, 87 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager,
61 struct ifaddrs* interfaces, 88 struct ifaddrs* interfaces,
62 bool include_ignored, 89 bool include_ignored,
63 NetworkManager::NetworkList* networks) { 90 NetworkManager::NetworkList* networks) {
64 network_manager.ConvertIfAddrs(interfaces, include_ignored, networks); 91 network_manager.ConvertIfAddrs(interfaces, include_ignored, networks);
65 } 92 }
66 #endif // defined(WEBRTC_POSIX) 93 #endif // defined(WEBRTC_POSIX)
67 94
(...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 ipv6_network.AddIP(ip); 810 ipv6_network.AddIP(ip);
784 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip)); 811 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip));
785 812
786 // Add global dynamic temporary one. 813 // Add global dynamic temporary one.
787 ipstr = "2401:fa00:4:1000:be30:5bff:fee5:c6"; 814 ipstr = "2401:fa00:4:1000:be30:5bff:fee5:c6";
788 ASSERT_TRUE(IPFromString(ipstr, IPV6_ADDRESS_FLAG_TEMPORARY, &ip)); 815 ASSERT_TRUE(IPFromString(ipstr, IPV6_ADDRESS_FLAG_TEMPORARY, &ip));
789 ipv6_network.AddIP(ip); 816 ipv6_network.AddIP(ip);
790 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip)); 817 EXPECT_EQ(ipv6_network.GetBestIP(), static_cast<IPAddress>(ip));
791 } 818 }
792 819
820 TEST_F(NetworkTest, TestNetworkMonitoring) {
821 BasicNetworkManager manager;
822 manager.SignalNetworksChanged.connect(static_cast<NetworkTest*>(this),
823 &NetworkTest::OnNetworksChanged);
824 FakeNetworkMonitorFactory* factory = new FakeNetworkMonitorFactory();
825 NetworkMonitorFactory::SetFactory(factory);
826 manager.StartUpdating();
827 NetworkMonitorInterface* network_monitor = GetNetworkMonitor(manager);
828 EXPECT_TRUE_WAIT(callback_called_, 1000);
829 callback_called_ = false;
830
831 // Clear the networks so that there will be network changes below.
832 ClearNetworks(manager);
833 // Network manager is started, so the callback is called when the network
834 // monitor fires the network-change event.
835 network_monitor->OnNetworksChanged();
836 EXPECT_TRUE_WAIT(callback_called_, 1000);
837
838 // Network manager is stopped; the network monitor is removed.
839 manager.StopUpdating();
840 EXPECT_TRUE(GetNetworkMonitor(manager) == nullptr);
841
842 NetworkMonitorFactory::ReleaseFactory(factory);
843 }
844
793 } // namespace rtc 845 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/network.cc ('k') | webrtc/base/networkmonitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698