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

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

Issue 1531763006: Enable IPv6 temporary address filtering on iOS (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: fix android build Created 5 years 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') | no next file » | 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/nethelpers.h" 13 #include "webrtc/base/nethelpers.h"
14 #include "webrtc/base/networkmonitor.h" 14 #include "webrtc/base/networkmonitor.h"
15 #include <vector> 15 #include <vector>
16 #if defined(WEBRTC_POSIX) 16 #if defined(WEBRTC_POSIX)
17 #include <sys/types.h> 17 #include <sys/types.h>
18 #if !defined(WEBRTC_ANDROID) 18 #include <net/if.h>
19 #include <ifaddrs.h> 19 #include "webrtc/base/ifaddrs_converter.h"
20 #else 20 #endif // defined(WEBRTC_POSIX)
21 #include "webrtc/base/ifaddrs-android.h"
22 #endif
23 #endif
24 #include "webrtc/base/gunit.h" 21 #include "webrtc/base/gunit.h"
25 #if defined(WEBRTC_WIN) 22 #if defined(WEBRTC_WIN)
26 #include "webrtc/base/logging.h" // For LOG_GLE 23 #include "webrtc/base/logging.h" // For LOG_GLE
27 #endif 24 #endif
28 25
29 namespace rtc { 26 namespace rtc {
30 27
28 namespace {
29
31 class FakeNetworkMonitor : public NetworkMonitorBase { 30 class FakeNetworkMonitor : public NetworkMonitorBase {
32 public: 31 public:
33 void Start() override {} 32 void Start() override {}
34 void Stop() override {} 33 void Stop() override {}
35 }; 34 };
36 35
37 class FakeNetworkMonitorFactory : public NetworkMonitorFactory { 36 class FakeNetworkMonitorFactory : public NetworkMonitorFactory {
38 public: 37 public:
39 FakeNetworkMonitorFactory() {} 38 FakeNetworkMonitorFactory() {}
40 NetworkMonitorInterface* CreateNetworkMonitor() { 39 NetworkMonitorInterface* CreateNetworkMonitor() {
41 return new FakeNetworkMonitor(); 40 return new FakeNetworkMonitor();
42 } 41 }
43 }; 42 };
44 43
44 } // namespace
45
45 class NetworkTest : public testing::Test, public sigslot::has_slots<> { 46 class NetworkTest : public testing::Test, public sigslot::has_slots<> {
46 public: 47 public:
47 NetworkTest() : callback_called_(false) {} 48 NetworkTest() : callback_called_(false) {}
48 49
49 void OnNetworksChanged() { 50 void OnNetworksChanged() {
50 callback_called_ = true; 51 callback_called_ = true;
51 } 52 }
52 53
53 NetworkManager::Stats MergeNetworkList( 54 NetworkManager::Stats MergeNetworkList(
54 BasicNetworkManager& network_manager, 55 BasicNetworkManager& network_manager,
(...skipping 27 matching lines...) Expand all
82 network_manager.networks_.clear(); 83 network_manager.networks_.clear();
83 network_manager.networks_map_.clear(); 84 network_manager.networks_map_.clear();
84 } 85 }
85 86
86 #if defined(WEBRTC_POSIX) 87 #if defined(WEBRTC_POSIX)
87 // Separated from CreateNetworks for tests. 88 // Separated from CreateNetworks for tests.
88 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager, 89 static void CallConvertIfAddrs(const BasicNetworkManager& network_manager,
89 struct ifaddrs* interfaces, 90 struct ifaddrs* interfaces,
90 bool include_ignored, 91 bool include_ignored,
91 NetworkManager::NetworkList* networks) { 92 NetworkManager::NetworkList* networks) {
92 network_manager.ConvertIfAddrs(interfaces, include_ignored, networks); 93 // Use the base IfAddrsConverter for test cases.
94 rtc::scoped_ptr<IfAddrsConverter> ifaddrs_converter(new IfAddrsConverter());
95 network_manager.ConvertIfAddrs(interfaces, ifaddrs_converter.get(),
96 include_ignored, networks);
93 } 97 }
94 98
95 struct sockaddr_in6* CreateIpv6Addr(const std::string& ip_string, 99 struct sockaddr_in6* CreateIpv6Addr(const std::string& ip_string,
96 uint32_t scope_id) { 100 uint32_t scope_id) {
97 struct sockaddr_in6* ipv6_addr = new struct sockaddr_in6; 101 struct sockaddr_in6* ipv6_addr = new struct sockaddr_in6;
98 memset(ipv6_addr, 0, sizeof(struct sockaddr_in6)); 102 memset(ipv6_addr, 0, sizeof(struct sockaddr_in6));
99 ipv6_addr->sin6_family = AF_INET6; 103 ipv6_addr->sin6_family = AF_INET6;
100 ipv6_addr->sin6_scope_id = scope_id; 104 ipv6_addr->sin6_scope_id = scope_id;
101 IPAddress ip; 105 IPAddress ip;
102 IPFromString(ip_string, &ip); 106 IPFromString(ip_string, &ip);
103 ipv6_addr->sin6_addr = ip.ipv6_address(); 107 ipv6_addr->sin6_addr = ip.ipv6_address();
104 return ipv6_addr; 108 return ipv6_addr;
105 } 109 }
106 110
107 // Pointers created here need to be released via ReleaseIfAddrs. 111 // Pointers created here need to be released via ReleaseIfAddrs.
108 struct ifaddrs* AddIpv6Address(struct ifaddrs* list, 112 struct ifaddrs* AddIpv6Address(struct ifaddrs* list,
109 char* if_name, 113 char* if_name,
110 const std::string& ipv6_address, 114 const std::string& ipv6_address,
111 const std::string& ipv6_netmask, 115 const std::string& ipv6_netmask,
112 uint32_t scope_id) { 116 uint32_t scope_id) {
113 struct ifaddrs* if_addr = new struct ifaddrs; 117 struct ifaddrs* if_addr = new struct ifaddrs;
114 memset(if_addr, 0, sizeof(struct ifaddrs)); 118 memset(if_addr, 0, sizeof(struct ifaddrs));
115 if_addr->ifa_name = if_name; 119 if_addr->ifa_name = if_name;
116 if_addr->ifa_addr = reinterpret_cast<struct sockaddr*>( 120 if_addr->ifa_addr = reinterpret_cast<struct sockaddr*>(
117 CreateIpv6Addr(ipv6_address, scope_id)); 121 CreateIpv6Addr(ipv6_address, scope_id));
118 if_addr->ifa_netmask = 122 if_addr->ifa_netmask =
119 reinterpret_cast<struct sockaddr*>(CreateIpv6Addr(ipv6_netmask, 0)); 123 reinterpret_cast<struct sockaddr*>(CreateIpv6Addr(ipv6_netmask, 0));
120 if_addr->ifa_next = list; 124 if_addr->ifa_next = list;
125 if_addr->ifa_flags = IFF_RUNNING;
121 return if_addr; 126 return if_addr;
122 } 127 }
123 128
124 void ReleaseIfAddrs(struct ifaddrs* list) { 129 void ReleaseIfAddrs(struct ifaddrs* list) {
125 struct ifaddrs* if_addr = list; 130 struct ifaddrs* if_addr = list;
126 while (if_addr != nullptr) { 131 while (if_addr != nullptr) {
127 struct ifaddrs* next_addr = if_addr->ifa_next; 132 struct ifaddrs* next_addr = if_addr->ifa_next;
128 delete if_addr->ifa_addr; 133 delete if_addr->ifa_addr;
129 delete if_addr->ifa_netmask; 134 delete if_addr->ifa_netmask;
130 delete if_addr; 135 delete if_addr;
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 "FFFF:FFFF:FFFF:FFFF::", 0); 760 "FFFF:FFFF:FFFF:FFFF::", 0);
756 NetworkManager::NetworkList result; 761 NetworkManager::NetworkList result;
757 BasicNetworkManager manager; 762 BasicNetworkManager manager;
758 CallConvertIfAddrs(manager, list, true, &result); 763 CallConvertIfAddrs(manager, list, true, &result);
759 EXPECT_EQ(1U, result.size()); 764 EXPECT_EQ(1U, result.size());
760 bool changed; 765 bool changed;
761 // This ensures we release the objects created in CallConvertIfAddrs. 766 // This ensures we release the objects created in CallConvertIfAddrs.
762 MergeNetworkList(manager, result, &changed); 767 MergeNetworkList(manager, result, &changed);
763 ReleaseIfAddrs(list); 768 ReleaseIfAddrs(list);
764 } 769 }
770
771 TEST_F(NetworkTest, TestConvertIfAddrsNotRunning) {
772 ifaddrs list;
773 memset(&list, 0, sizeof(list));
774 list.ifa_name = const_cast<char*>("test_iface");
775 sockaddr ifa_addr;
776 sockaddr ifa_netmask;
777 list.ifa_addr = &ifa_addr;
778 list.ifa_netmask = &ifa_netmask;
779
780 NetworkManager::NetworkList result;
781 BasicNetworkManager manager;
782 CallConvertIfAddrs(manager, &list, true, &result);
783 EXPECT_TRUE(result.empty());
784 }
765 #endif // defined(WEBRTC_POSIX) 785 #endif // defined(WEBRTC_POSIX)
766 786
767 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) 787 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID)
768 // If you want to test non-default routes, you can do the following on a linux 788 // If you want to test non-default routes, you can do the following on a linux
769 // machine: 789 // machine:
770 // 1) Load the dummy network driver: 790 // 1) Load the dummy network driver:
771 // sudo modprobe dummy 791 // sudo modprobe dummy
772 // sudo ifconfig dummy0 127.0.0.1 792 // sudo ifconfig dummy0 127.0.0.1
773 // 2) Run this test and confirm the output says it found a dummy route (and 793 // 2) Run this test and confirm the output says it found a dummy route (and
774 // passes). 794 // passes).
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 manager.set_default_local_addresses(GetLoopbackIP(AF_INET), 999 manager.set_default_local_addresses(GetLoopbackIP(AF_INET),
980 GetLoopbackIP(AF_INET6)); 1000 GetLoopbackIP(AF_INET6));
981 EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET, &ip)); 1001 EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET, &ip));
982 EXPECT_EQ(ip, GetLoopbackIP(AF_INET)); 1002 EXPECT_EQ(ip, GetLoopbackIP(AF_INET));
983 EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET6, &ip)); 1003 EXPECT_TRUE(manager.GetDefaultLocalAddress(AF_INET6, &ip));
984 EXPECT_EQ(ip, GetLoopbackIP(AF_INET6)); 1004 EXPECT_EQ(ip, GetLoopbackIP(AF_INET6));
985 manager.StopUpdating(); 1005 manager.StopUpdating();
986 } 1006 }
987 1007
988 } // namespace rtc 1008 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/network.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698