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

Side by Side Diff: net/base/net_util_unittest.cc

Issue 734063004: Update from https://crrev.com/304418 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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 | « net/base/net_util_posix.cc ('k') | net/base/network_activity_monitor.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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/net_util.h" 5 #include "net/base/net_util.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <ostream> 9 #include <ostream>
10 10
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/format_macros.h" 12 #include "base/format_macros.h"
13 #include "base/scoped_native_library.h" 13 #include "base/scoped_native_library.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
17 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
18 #include "base/sys_byteorder.h" 18 #include "base/sys_byteorder.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "net/base/ip_endpoint.h"
20 21
21 #if !defined(OS_NACL) && !defined(OS_WIN) 22 #if !defined(OS_NACL) && !defined(OS_WIN)
22 #include <net/if.h> 23 #include <net/if.h>
23 #include <netinet/in.h> 24 #include <netinet/in.h>
25 #if defined(OS_MACOSX)
26 #include <ifaddrs.h>
27 #if !defined(OS_IOS)
28 #include <netinet/in_var.h>
29 #endif // !OS_IOS
30 #endif // OS_MACOSX
24 #endif // !OS_NACL && !OS_WIN 31 #endif // !OS_NACL && !OS_WIN
25 #include "testing/gtest/include/gtest/gtest.h" 32 #include "testing/gtest/include/gtest/gtest.h"
26 #include "url/gurl.h" 33 #include "url/gurl.h"
27 34
28 #if defined(OS_WIN) 35 #if defined(OS_WIN)
29 #include <iphlpapi.h> 36 #include <iphlpapi.h>
30 #include <objbase.h> 37 #include <objbase.h>
31 #include "base/win/windows_version.h" 38 #include "base/win/windows_version.h"
32 #include "net/base/net_util_win.h" 39 #include "net/base/net_util_win.h"
33 #endif // OS_WIN 40 #endif // OS_WIN
34 41
35 #if !defined(OS_MACOSX) && !defined(OS_NACL) && !defined(OS_WIN) 42 #if !defined(OS_MACOSX) && !defined(OS_NACL) && !defined(OS_WIN)
36 #include "net/base/address_tracker_linux.h" 43 #include "net/base/address_tracker_linux.h"
37 #endif // !OS_MACOSX && !OS_NACL && !OS_WIN 44 #endif // !OS_MACOSX && !OS_NACL && !OS_WIN
38 45
39 #if !defined(OS_WIN) 46 #if !defined(OS_WIN)
40 #include "net/base/net_util_posix.h" 47 #include "net/base/net_util_posix.h"
48 #if defined(OS_MACOSX)
49 #include "net/base/net_util_mac.h"
50 #else // OS_MACOSX
51 #include "net/base/net_util_linux.h"
52 #endif
41 #endif // !OS_WIN 53 #endif // !OS_WIN
42 54
43 using base::ASCIIToUTF16; 55 using base::ASCIIToUTF16;
44 using base::WideToUTF16; 56 using base::WideToUTF16;
45 57
46 namespace net { 58 namespace net {
47 59
48 namespace { 60 namespace {
49 61
50 struct HeaderCase { 62 struct HeaderCase {
(...skipping 27 matching lines...) Expand all
78 std::string DumpIPNumber(const IPAddressNumber& v) { 90 std::string DumpIPNumber(const IPAddressNumber& v) {
79 std::string out; 91 std::string out;
80 for (size_t i = 0; i < v.size(); ++i) { 92 for (size_t i = 0; i < v.size(); ++i) {
81 if (i != 0) 93 if (i != 0)
82 out.append(","); 94 out.append(",");
83 out.append(base::IntToString(static_cast<int>(v[i]))); 95 out.append(base::IntToString(static_cast<int>(v[i])));
84 } 96 }
85 return out; 97 return out;
86 } 98 }
87 99
100 #if defined(OS_MACOSX)
101 class IPAttributesGetterTest : public internal::IPAttributesGetterMac {
102 public:
103 IPAttributesGetterTest() : native_attributes_(0) {}
104 bool IsInitialized() const override { return true; }
105 bool GetIPAttributes(const char* ifname,
106 const sockaddr* sock_addr,
107 int* native_attributes) override {
108 *native_attributes = native_attributes_;
109 return true;
110 }
111 void set_native_attributes(int native_attributes) {
112 native_attributes_ = native_attributes;
113 }
114
115 private:
116 int native_attributes_;
117 };
118
119 // Helper function to create a single valid ifaddrs
120 bool FillIfaddrs(ifaddrs* interfaces,
121 const char* ifname,
122 uint flags,
123 const IPAddressNumber& ip_address,
124 const IPAddressNumber& ip_netmask,
125 sockaddr_storage sock_addrs[2]) {
126 interfaces->ifa_next = NULL;
127 interfaces->ifa_name = const_cast<char*>(ifname);
128 interfaces->ifa_flags = flags;
129
130 socklen_t sock_len = sizeof(sockaddr_storage);
131
132 // Convert to sockaddr for next check.
133 if (!IPEndPoint(ip_address, 0)
134 .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[0]),
135 &sock_len)) {
136 return false;
137 }
138 interfaces->ifa_addr = reinterpret_cast<sockaddr*>(&sock_addrs[0]);
139
140 sock_len = sizeof(sockaddr_storage);
141 if (!IPEndPoint(ip_netmask, 0)
142 .ToSockAddr(reinterpret_cast<sockaddr*>(&sock_addrs[1]),
143 &sock_len)) {
144 return false;
145 }
146 interfaces->ifa_netmask = reinterpret_cast<sockaddr*>(&sock_addrs[1]);
147
148 return true;
149 }
150 #endif // OS_MACOSX
151
88 } // anonymous namespace 152 } // anonymous namespace
89 153
90 TEST(NetUtilTest, GetIdentityFromURL) { 154 TEST(NetUtilTest, GetIdentityFromURL) {
91 struct { 155 struct {
92 const char* input_url; 156 const char* input_url;
93 const char* expected_username; 157 const char* expected_username;
94 const char* expected_password; 158 const char* expected_password;
95 } tests[] = { 159 } tests[] = {
96 { 160 {
97 "http://username:password@google.com", 161 "http://username:password@google.com",
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 EXPECT_NE(WIFI_PHY_LAYER_PROTOCOL_NONE, GetWifiPHYLayerProtocol()); 869 EXPECT_NE(WIFI_PHY_LAYER_PROTOCOL_NONE, GetWifiPHYLayerProtocol());
806 } 870 }
807 #elif !defined(OS_ANDROID) 871 #elif !defined(OS_ANDROID)
808 char name[IF_NAMESIZE]; 872 char name[IF_NAMESIZE];
809 EXPECT_TRUE(if_indextoname(it->interface_index, name)); 873 EXPECT_TRUE(if_indextoname(it->interface_index, name));
810 EXPECT_STREQ(it->name.c_str(), name); 874 EXPECT_STREQ(it->name.c_str(), name);
811 #endif 875 #endif
812 } 876 }
813 } 877 }
814 878
879 static const char ifname_em1[] = "em1";
880 static const char ifname_vm[] = "vmnet";
881
882 static const unsigned char kIPv6LocalAddr[] = {
883 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
884 static const unsigned char kIPv6Addr[] =
885 {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04, 0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
886 0xfe, 0xe5, 0x00, 0xc3};
887 static const unsigned char kIPv6Netmask[] =
888 {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
889 0x00, 0x00, 0x00, 0x00};
890
815 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_NACL) 891 #if !defined(OS_MACOSX) && !defined(OS_WIN) && !defined(OS_NACL)
816 892
817 char* CopyInterfaceName(const char* ifname, int ifname_size, char* output) { 893 char* CopyInterfaceName(const char* ifname, int ifname_size, char* output) {
818 EXPECT_LT(ifname_size, IF_NAMESIZE); 894 EXPECT_LT(ifname_size, IF_NAMESIZE);
819 memcpy(output, ifname, ifname_size); 895 memcpy(output, ifname, ifname_size);
820 return output; 896 return output;
821 } 897 }
822 898
823 static const char ifname_em1[] = "em1";
824 char* GetInterfaceName(unsigned int interface_index, char* ifname) { 899 char* GetInterfaceName(unsigned int interface_index, char* ifname) {
825 return CopyInterfaceName(ifname_em1, arraysize(ifname_em1), ifname); 900 return CopyInterfaceName(ifname_em1, arraysize(ifname_em1), ifname);
826 } 901 }
827 902
828 static const char ifname_vm[] = "vmnet";
829 char* GetInterfaceNameVM(unsigned int interface_index, char* ifname) { 903 char* GetInterfaceNameVM(unsigned int interface_index, char* ifname) {
830 return CopyInterfaceName(ifname_vm, arraysize(ifname_vm), ifname); 904 return CopyInterfaceName(ifname_vm, arraysize(ifname_vm), ifname);
831 } 905 }
832 906
833 TEST(NetUtilTest, GetNetworkListTrimming) { 907 TEST(NetUtilTest, GetNetworkListTrimming) {
908 IPAddressNumber ipv6_local_address(
909 kIPv6LocalAddr, kIPv6LocalAddr + arraysize(kIPv6LocalAddr));
910 IPAddressNumber ipv6_address(kIPv6Addr, kIPv6Addr + arraysize(kIPv6Addr));
911 IPAddressNumber ipv6_netmask(kIPv6Netmask,
912 kIPv6Netmask + arraysize(kIPv6Netmask));
913
834 NetworkInterfaceList results; 914 NetworkInterfaceList results;
835 ::base::hash_set<int> online_links; 915 ::base::hash_set<int> online_links;
836 net::internal::AddressTrackerLinux::AddressMap address_map; 916 net::internal::AddressTrackerLinux::AddressMap address_map;
837 917
838 const unsigned char kIPv6LocalAddr[] = {
839 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
840 const unsigned char kIPv6Addr[] =
841 {0x24, 0x01, 0xfa, 0x00, 0x00, 0x04, 0x10, 0x00, 0xbe, 0x30, 0x5b, 0xff,
842 0xfe, 0xe5, 0x00, 0xc3};
843
844 IPAddressNumber ipv6_local_address(
845 kIPv6LocalAddr, kIPv6LocalAddr + arraysize(kIPv6LocalAddr));
846 IPAddressNumber ipv6_address(kIPv6Addr, kIPv6Addr + arraysize(kIPv6Addr));
847
848 // Interface 1 is offline. 918 // Interface 1 is offline.
849 struct ifaddrmsg msg = { 919 struct ifaddrmsg msg = {
850 AF_INET6, 920 AF_INET6,
851 1, /* prefix length */ 921 1, /* prefix length */
852 IFA_F_TEMPORARY, /* address flags */ 922 IFA_F_TEMPORARY, /* address flags */
853 0, /* link scope */ 923 0, /* link scope */
854 1 /* link index */ 924 1 /* link index */
855 }; 925 };
856 926
857 // Address of offline links should be ignored. 927 // Address of offline links should be ignored.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 address_map, 1019 address_map,
950 GetInterfaceName)); 1020 GetInterfaceName));
951 EXPECT_EQ(results.size(), 1ul); 1021 EXPECT_EQ(results.size(), 1ul);
952 EXPECT_EQ(results[0].name, ifname_em1); 1022 EXPECT_EQ(results[0].name, ifname_em1);
953 EXPECT_EQ(results[0].network_prefix, 1ul); 1023 EXPECT_EQ(results[0].network_prefix, 1ul);
954 EXPECT_EQ(results[0].address, ipv6_address); 1024 EXPECT_EQ(results[0].address, ipv6_address);
955 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED); 1025 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
956 results.clear(); 1026 results.clear();
957 } 1027 }
958 1028
959 #endif 1029 #elif defined(OS_MACOSX)
1030
1031 TEST(NetUtilTest, GetNetworkListTrimming) {
1032 IPAddressNumber ipv6_local_address(
1033 kIPv6LocalAddr, kIPv6LocalAddr + arraysize(kIPv6LocalAddr));
1034 IPAddressNumber ipv6_address(kIPv6Addr, kIPv6Addr + arraysize(kIPv6Addr));
1035 IPAddressNumber ipv6_netmask(kIPv6Netmask,
1036 kIPv6Netmask + arraysize(kIPv6Netmask));
1037
1038 NetworkInterfaceList results;
1039 IPAttributesGetterTest ip_attributes_getter;
1040 sockaddr_storage addresses[2];
1041 ifaddrs interface;
1042
1043 // Address of offline links should be ignored.
1044 ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_UP, ipv6_address,
1045 ipv6_netmask, addresses));
1046 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1047 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1048 &ip_attributes_getter));
1049 EXPECT_EQ(results.size(), 0ul);
1050
1051 // Local address should be trimmed out.
1052 ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING,
1053 ipv6_local_address, ipv6_netmask, addresses));
1054 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1055 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1056 &ip_attributes_getter));
1057 EXPECT_EQ(results.size(), 0ul);
1058
1059 // vmware address should return by default.
1060 ASSERT_TRUE(FillIfaddrs(&interface, ifname_vm, IFF_RUNNING, ipv6_address,
1061 ipv6_netmask, addresses));
1062 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1063 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1064 &ip_attributes_getter));
1065 EXPECT_EQ(results.size(), 1ul);
1066 EXPECT_EQ(results[0].name, ifname_vm);
1067 EXPECT_EQ(results[0].network_prefix, 1ul);
1068 EXPECT_EQ(results[0].address, ipv6_address);
1069 results.clear();
1070
1071 // vmware address should be trimmed out if policy specified so.
1072 ASSERT_TRUE(FillIfaddrs(&interface, ifname_vm, IFF_RUNNING, ipv6_address,
1073 ipv6_netmask, addresses));
1074 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1075 &results, EXCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1076 &ip_attributes_getter));
1077 EXPECT_EQ(results.size(), 0ul);
1078 results.clear();
1079
1080 #if !defined(OS_IOS)
1081 // Addresses with banned attributes should be ignored.
1082 ip_attributes_getter.set_native_attributes(IN6_IFF_ANYCAST);
1083 ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
1084 ipv6_netmask, addresses));
1085 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1086 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1087 &ip_attributes_getter));
1088 EXPECT_EQ(results.size(), 0ul);
1089 results.clear();
1090
1091 // Addresses with allowed attribute IFA_F_TEMPORARY should be returned and
1092 // attributes should be translated correctly.
1093 ip_attributes_getter.set_native_attributes(IN6_IFF_TEMPORARY);
1094 ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
1095 ipv6_netmask, addresses));
1096 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1097 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1098 &ip_attributes_getter));
1099 EXPECT_EQ(results.size(), 1ul);
1100 EXPECT_EQ(results[0].name, ifname_em1);
1101 EXPECT_EQ(results[0].network_prefix, 1ul);
1102 EXPECT_EQ(results[0].address, ipv6_address);
1103 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_TEMPORARY);
1104 results.clear();
1105
1106 // Addresses with allowed attribute IFA_F_DEPRECATED should be returned and
1107 // attributes should be translated correctly.
1108 ip_attributes_getter.set_native_attributes(IN6_IFF_DEPRECATED);
1109 ASSERT_TRUE(FillIfaddrs(&interface, ifname_em1, IFF_RUNNING, ipv6_address,
1110 ipv6_netmask, addresses));
1111 EXPECT_TRUE(net::internal::GetNetworkListImpl(
1112 &results, INCLUDE_HOST_SCOPE_VIRTUAL_INTERFACES, &interface,
1113 &ip_attributes_getter));
1114 EXPECT_EQ(results.size(), 1ul);
1115 EXPECT_EQ(results[0].name, ifname_em1);
1116 EXPECT_EQ(results[0].network_prefix, 1ul);
1117 EXPECT_EQ(results[0].address, ipv6_address);
1118 EXPECT_EQ(results[0].ip_address_attributes, IP_ADDRESS_ATTRIBUTE_DEPRECATED);
1119 results.clear();
1120 #endif // !OS_IOS
1121 }
1122
1123 #endif // !OS_MACOSX && !OS_WIN && !OS_NACL
960 1124
961 namespace { 1125 namespace {
962 1126
963 #if defined(OS_WIN) 1127 #if defined(OS_WIN)
964 bool read_int_or_bool(DWORD data_size, 1128 bool read_int_or_bool(DWORD data_size,
965 PVOID data) { 1129 PVOID data) {
966 switch (data_size) { 1130 switch (data_size) {
967 case 1: 1131 case 1:
968 return !!*reinterpret_cast<uint8*>(data); 1132 return !!*reinterpret_cast<uint8*>(data);
969 case 4: 1133 case 4:
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 TEST_P(NetUtilNonUniqueNameTest, IsHostnameNonUnique) { 1305 TEST_P(NetUtilNonUniqueNameTest, IsHostnameNonUnique) {
1142 const NonUniqueNameTestData& test_data = GetParam(); 1306 const NonUniqueNameTestData& test_data = GetParam();
1143 1307
1144 EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname)); 1308 EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname));
1145 } 1309 }
1146 1310
1147 INSTANTIATE_TEST_CASE_P(, NetUtilNonUniqueNameTest, 1311 INSTANTIATE_TEST_CASE_P(, NetUtilNonUniqueNameTest,
1148 testing::ValuesIn(kNonUniqueNameTestData)); 1312 testing::ValuesIn(kNonUniqueNameTestData));
1149 1313
1150 } // namespace net 1314 } // namespace net
OLDNEW
« no previous file with comments | « net/base/net_util_posix.cc ('k') | net/base/network_activity_monitor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698