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

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

Issue 11359141: Use Netlink instead of NetworkManager (via D-bus) to monitor network (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address szym's comments on unittest Created 8 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 | Annotate | Revision Log
« no previous file with comments | « net/base/address_tracker_linux.cc ('k') | net/base/network_change_notifier_linux.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/address_tracker_linux.h" 5 #include "net/base/address_tracker_linux.h"
6 6
7 #include <linux/if.h>
8
7 #include <vector> 9 #include <vector>
8 10
9 #include "base/bind.h" 11 #include "base/bind.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace net { 14 namespace net {
13 namespace internal { 15 namespace internal {
14 16
17 typedef std::vector<char> Buffer;
18
15 void Noop() {} 19 void Noop() {}
16 20
17 class AddressTrackerLinuxTest : public testing::Test { 21 class AddressTrackerLinuxTest : public testing::Test {
18 protected: 22 protected:
19 AddressTrackerLinuxTest() : tracker_(base::Bind(&Noop)) {} 23 AddressTrackerLinuxTest() : tracker_(base::Bind(&Noop), base::Bind(&Noop)) {}
20 24
21 bool HandleMessage(char* buf, size_t length) { 25 bool HandleAddressMessage(const Buffer& buf) {
22 return tracker_.HandleMessage(buf, length); 26 bool address_changed = false;
27 bool link_changed = false;
28 tracker_.HandleMessage(&buf[0], buf.size(),
29 &address_changed, &link_changed);
30 EXPECT_FALSE(link_changed);
31 return address_changed;
32 }
33
34 bool HandleLinkMessage(const Buffer& buf) {
35 bool address_changed = false;
36 bool link_changed = false;
37 tracker_.HandleMessage(&buf[0], buf.size(),
38 &address_changed, &link_changed);
39 EXPECT_FALSE(address_changed);
40 return link_changed;
23 } 41 }
24 42
25 AddressTrackerLinux::AddressMap GetAddressMap() { 43 AddressTrackerLinux::AddressMap GetAddressMap() {
26 return tracker_.GetAddressMap(); 44 return tracker_.GetAddressMap();
27 } 45 }
28 46
47 const base::hash_set<int>* GetOnlineLinks() const {
48 return &tracker_.online_links_;
49 }
50
29 AddressTrackerLinux tracker_; 51 AddressTrackerLinux tracker_;
30 }; 52 };
31 53
32 namespace { 54 namespace {
33 55
34 typedef std::vector<char> Buffer;
35
36 class NetlinkMessage { 56 class NetlinkMessage {
37 public: 57 public:
38 explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) { 58 explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) {
39 header()->nlmsg_type = type; 59 header()->nlmsg_type = type;
40 Align(); 60 Align();
41 } 61 }
42 62
43 void AddPayload(const void* data, size_t length) { 63 void AddPayload(const void* data, size_t length) {
44 CHECK_EQ(static_cast<size_t>(NLMSG_HDRLEN), 64 CHECK_EQ(static_cast<size_t>(NLMSG_HDRLEN),
45 buffer_.size()) << "Payload must be added first"; 65 buffer_.size()) << "Payload must be added first";
(...skipping 30 matching lines...) Expand all
76 CHECK(NLMSG_OK(header(), buffer_.size())); 96 CHECK(NLMSG_OK(header(), buffer_.size()));
77 } 97 }
78 98
79 struct nlmsghdr* header() { 99 struct nlmsghdr* header() {
80 return reinterpret_cast<struct nlmsghdr*>(&buffer_[0]); 100 return reinterpret_cast<struct nlmsghdr*>(&buffer_[0]);
81 } 101 }
82 102
83 Buffer buffer_; 103 Buffer buffer_;
84 }; 104 };
85 105
86 void MakeMessage(uint16 type, 106 void MakeAddrMessage(uint16 type,
87 uint8 flags, 107 uint8 flags,
88 uint8 family, 108 uint8 family,
89 const IPAddressNumber& address, 109 const IPAddressNumber& address,
90 const IPAddressNumber& local, 110 const IPAddressNumber& local,
91 Buffer* output) { 111 Buffer* output) {
92 NetlinkMessage nlmsg(type); 112 NetlinkMessage nlmsg(type);
93 struct ifaddrmsg msg = {}; 113 struct ifaddrmsg msg = {};
94 msg.ifa_family = family; 114 msg.ifa_family = family;
95 msg.ifa_flags = flags; 115 msg.ifa_flags = flags;
96 nlmsg.AddPayload(&msg, sizeof(msg)); 116 nlmsg.AddPayload(&msg, sizeof(msg));
97 if (address.size()) 117 if (address.size())
98 nlmsg.AddAttribute(IFA_ADDRESS, &address[0], address.size()); 118 nlmsg.AddAttribute(IFA_ADDRESS, &address[0], address.size());
99 if (local.size()) 119 if (local.size())
100 nlmsg.AddAttribute(IFA_LOCAL, &local[0], local.size()); 120 nlmsg.AddAttribute(IFA_LOCAL, &local[0], local.size());
101 nlmsg.AppendTo(output); 121 nlmsg.AppendTo(output);
102 } 122 }
103 123
124 void MakeLinkMessage(uint16 type, uint32 flags, uint32 index, Buffer* output) {
125 NetlinkMessage nlmsg(type);
126 struct ifinfomsg msg = {};
127 msg.ifi_index = index;
128 msg.ifi_flags = flags;
129 nlmsg.AddPayload(&msg, sizeof(msg));
130 output->clear();
131 nlmsg.AppendTo(output);
132 }
133
104 const unsigned char kAddress0[] = { 127, 0, 0, 1 }; 134 const unsigned char kAddress0[] = { 127, 0, 0, 1 };
105 const unsigned char kAddress1[] = { 10, 0, 0, 1 }; 135 const unsigned char kAddress1[] = { 10, 0, 0, 1 };
106 const unsigned char kAddress2[] = { 192, 168, 0, 1 }; 136 const unsigned char kAddress2[] = { 192, 168, 0, 1 };
107 const unsigned char kAddress3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137 const unsigned char kAddress3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 1 }; 138 0, 0, 0, 1 };
109 const unsigned char kAddress4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 139 const unsigned char kAddress4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255,
110 169, 254, 0, 1 }; 140 169, 254, 0, 1 };
111 141
112 TEST_F(AddressTrackerLinuxTest, NewAddress) { 142 TEST_F(AddressTrackerLinuxTest, NewAddress) {
113 const IPAddressNumber kEmpty; 143 const IPAddressNumber kEmpty;
114 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 144 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
115 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1)); 145 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
116 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); 146 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2));
117 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); 147 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
118 148
119 Buffer buffer; 149 Buffer buffer;
120 MakeMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, &buffer); 150 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty,
121 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 151 &buffer);
152 EXPECT_TRUE(HandleAddressMessage(buffer));
122 AddressTrackerLinux::AddressMap map = GetAddressMap(); 153 AddressTrackerLinux::AddressMap map = GetAddressMap();
123 EXPECT_EQ(1u, map.size()); 154 EXPECT_EQ(1u, map.size());
124 EXPECT_TRUE(map.find(kAddr0) != map.end()); 155 EXPECT_TRUE(map.find(kAddr0) != map.end());
szym 2012/11/26 17:34:20 ugh, I suggested using EXPECT_EQ(1u, count(key)),
125 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 156 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
126 157
127 buffer.clear(); 158 buffer.clear();
128 MakeMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr1, kAddr2, &buffer); 159 MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr1, kAddr2,
129 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 160 &buffer);
161 EXPECT_TRUE(HandleAddressMessage(buffer));
130 map = GetAddressMap(); 162 map = GetAddressMap();
131 EXPECT_EQ(2u, map.size()); 163 EXPECT_EQ(2u, map.size());
132 EXPECT_TRUE(map.find(kAddr0) != map.end()); 164 EXPECT_TRUE(map.find(kAddr0) != map.end());
133 EXPECT_TRUE(map.find(kAddr2) != map.end()); 165 EXPECT_TRUE(map.find(kAddr2) != map.end());
134 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr2].ifa_flags); 166 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr2].ifa_flags);
135 167
136 buffer.clear(); 168 buffer.clear();
137 MakeMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer); 169 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer);
138 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 170 EXPECT_TRUE(HandleAddressMessage(buffer));
139 map = GetAddressMap(); 171 map = GetAddressMap();
140 EXPECT_EQ(3u, map.size()); 172 EXPECT_EQ(3u, map.size());
141 EXPECT_TRUE(map.find(kAddr3) != map.end()); 173 EXPECT_TRUE(map.find(kAddr3) != map.end());
142 } 174 }
143 175
144 TEST_F(AddressTrackerLinuxTest, NewAddressChange) { 176 TEST_F(AddressTrackerLinuxTest, NewAddressChange) {
145 const IPAddressNumber kEmpty; 177 const IPAddressNumber kEmpty;
146 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 178 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
147 179
148 Buffer buffer; 180 Buffer buffer;
149 MakeMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, &buffer); 181 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty,
150 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 182 &buffer);
183 EXPECT_TRUE(HandleAddressMessage(buffer));
151 AddressTrackerLinux::AddressMap map = GetAddressMap(); 184 AddressTrackerLinux::AddressMap map = GetAddressMap();
152 EXPECT_EQ(1u, map.size()); 185 EXPECT_EQ(1u, map.size());
153 EXPECT_TRUE(map.find(kAddr0) != map.end()); 186 EXPECT_TRUE(map.find(kAddr0) != map.end());
154 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 187 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
155 188
156 buffer.clear(); 189 buffer.clear();
157 MakeMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty, &buffer); 190 MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty,
158 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 191 &buffer);
192 EXPECT_TRUE(HandleAddressMessage(buffer));
159 map = GetAddressMap(); 193 map = GetAddressMap();
160 EXPECT_EQ(1u, map.size()); 194 EXPECT_EQ(1u, map.size());
161 EXPECT_TRUE(map.find(kAddr0) != map.end()); 195 EXPECT_TRUE(map.find(kAddr0) != map.end());
162 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags); 196 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags);
163 197
164 // Both messages in one buffer. 198 // Both messages in one buffer.
165 buffer.clear(); 199 buffer.clear();
166 MakeMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, &buffer); 200 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty,
167 MakeMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty, &buffer); 201 &buffer);
168 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 202 MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty,
203 &buffer);
204 EXPECT_TRUE(HandleAddressMessage(buffer));
169 map = GetAddressMap(); 205 map = GetAddressMap();
170 EXPECT_EQ(1u, map.size()); 206 EXPECT_EQ(1u, map.size());
171 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags); 207 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags);
172 } 208 }
173 209
174 TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) { 210 TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) {
175 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 211 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
176 212
177 Buffer buffer; 213 Buffer buffer;
178 MakeMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kAddr0, &buffer); 214 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kAddr0,
179 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 215 &buffer);
216 EXPECT_TRUE(HandleAddressMessage(buffer));
180 AddressTrackerLinux::AddressMap map = GetAddressMap(); 217 AddressTrackerLinux::AddressMap map = GetAddressMap();
181 EXPECT_EQ(1u, map.size()); 218 EXPECT_EQ(1u, map.size());
182 EXPECT_TRUE(map.find(kAddr0) != map.end()); 219 EXPECT_TRUE(map.find(kAddr0) != map.end());
183 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 220 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
184 221
185 EXPECT_FALSE(HandleMessage(&buffer[0], buffer.size())); 222 EXPECT_FALSE(HandleAddressMessage(buffer));
186 map = GetAddressMap(); 223 map = GetAddressMap();
187 EXPECT_EQ(1u, map.size()); 224 EXPECT_EQ(1u, map.size());
188 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 225 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
189 } 226 }
190 227
191 TEST_F(AddressTrackerLinuxTest, DeleteAddress) { 228 TEST_F(AddressTrackerLinuxTest, DeleteAddress) {
192 const IPAddressNumber kEmpty; 229 const IPAddressNumber kEmpty;
193 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 230 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
194 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1)); 231 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
195 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); 232 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2));
196 233
197 Buffer buffer; 234 Buffer buffer;
198 MakeMessage(RTM_NEWADDR, 0, AF_INET, kAddr0, kEmpty, &buffer); 235 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr0, kEmpty, &buffer);
199 MakeMessage(RTM_NEWADDR, 0, AF_INET, kAddr1, kAddr2, &buffer); 236 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr1, kAddr2, &buffer);
200 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 237 EXPECT_TRUE(HandleAddressMessage(buffer));
201 AddressTrackerLinux::AddressMap map = GetAddressMap(); 238 AddressTrackerLinux::AddressMap map = GetAddressMap();
202 EXPECT_EQ(2u, map.size()); 239 EXPECT_EQ(2u, map.size());
203 240
204 buffer.clear(); 241 buffer.clear();
205 MakeMessage(RTM_DELADDR, 0, AF_INET, kEmpty, kAddr0, &buffer); 242 MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kEmpty, kAddr0, &buffer);
206 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 243 EXPECT_TRUE(HandleAddressMessage(buffer));
207 map = GetAddressMap(); 244 map = GetAddressMap();
208 EXPECT_EQ(1u, map.size()); 245 EXPECT_EQ(1u, map.size());
209 EXPECT_TRUE(map.find(kAddr0) == map.end()); 246 EXPECT_TRUE(map.find(kAddr0) == map.end());
210 EXPECT_TRUE(map.find(kAddr2) != map.end()); 247 EXPECT_TRUE(map.find(kAddr2) != map.end());
211 248
212 buffer.clear(); 249 buffer.clear();
213 MakeMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kAddr1, &buffer); 250 MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kAddr1, &buffer);
214 // kAddr1 does not exist in the map. 251 // kAddr1 does not exist in the map.
215 EXPECT_FALSE(HandleMessage(&buffer[0], buffer.size())); 252 EXPECT_FALSE(HandleAddressMessage(buffer));
216 map = GetAddressMap(); 253 map = GetAddressMap();
217 EXPECT_EQ(1u, map.size()); 254 EXPECT_EQ(1u, map.size());
218 255
219 buffer.clear(); 256 buffer.clear();
220 MakeMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kEmpty, &buffer); 257 MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kEmpty, &buffer);
221 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 258 EXPECT_TRUE(HandleAddressMessage(buffer));
222 map = GetAddressMap(); 259 map = GetAddressMap();
223 EXPECT_EQ(0u, map.size()); 260 EXPECT_EQ(0u, map.size());
224 } 261 }
225 262
226 TEST_F(AddressTrackerLinuxTest, IgnoredMessage) { 263 TEST_F(AddressTrackerLinuxTest, IgnoredMessage) {
227 const IPAddressNumber kEmpty; 264 const IPAddressNumber kEmpty;
228 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 265 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
229 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); 266 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
230 267
231 Buffer buffer; 268 Buffer buffer;
232 // Ignored family. 269 // Ignored family.
233 MakeMessage(RTM_NEWADDR, 0, AF_UNSPEC, kAddr3, kAddr0, &buffer); 270 MakeAddrMessage(RTM_NEWADDR, 0, AF_UNSPEC, kAddr3, kAddr0, &buffer);
234 // No address. 271 // No address.
235 MakeMessage(RTM_NEWADDR, 0, AF_INET, kEmpty, kEmpty, &buffer); 272 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kEmpty, kEmpty, &buffer);
236 // Ignored type. 273 // Ignored type.
237 MakeMessage(RTM_DELROUTE, 0, AF_INET6, kAddr3, kEmpty, &buffer); 274 MakeAddrMessage(RTM_DELROUTE, 0, AF_INET6, kAddr3, kEmpty, &buffer);
238 EXPECT_FALSE(HandleMessage(&buffer[0], buffer.size())); 275 EXPECT_FALSE(HandleAddressMessage(buffer));
239 EXPECT_EQ(0u, GetAddressMap().size()); 276 EXPECT_EQ(0u, GetAddressMap().size());
240 277
241 // Valid message after ignored messages. 278 // Valid message after ignored messages.
242 NetlinkMessage nlmsg(RTM_NEWADDR); 279 NetlinkMessage nlmsg(RTM_NEWADDR);
243 struct ifaddrmsg msg = {}; 280 struct ifaddrmsg msg = {};
244 msg.ifa_family = AF_INET; 281 msg.ifa_family = AF_INET;
245 nlmsg.AddPayload(&msg, sizeof(msg)); 282 nlmsg.AddPayload(&msg, sizeof(msg));
246 // Ignored attribute. 283 // Ignored attribute.
247 struct ifa_cacheinfo cache_info = {}; 284 struct ifa_cacheinfo cache_info = {};
248 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); 285 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info));
249 nlmsg.AddAttribute(IFA_ADDRESS, &kAddr0[0], kAddr0.size()); 286 nlmsg.AddAttribute(IFA_ADDRESS, &kAddr0[0], kAddr0.size());
250 nlmsg.AppendTo(&buffer); 287 nlmsg.AppendTo(&buffer);
251 288
252 EXPECT_TRUE(HandleMessage(&buffer[0], buffer.size())); 289 EXPECT_TRUE(HandleAddressMessage(buffer));
253 EXPECT_EQ(1u, GetAddressMap().size()); 290 EXPECT_EQ(1u, GetAddressMap().size());
254 } 291 }
255 292
293 TEST_F(AddressTrackerLinuxTest, AddInterface) {
294 Buffer buffer;
295
296 // Ignores loopback
szym 2012/11/26 17:34:20 nit: Add '.' at end of comments to make them more
297 MakeLinkMessage(RTM_NEWLINK,
298 IFF_LOOPBACK | IFF_UP | IFF_LOWER_UP | IFF_RUNNING,
299 0, &buffer);
300 EXPECT_FALSE(HandleLinkMessage(buffer));
301 EXPECT_TRUE(GetOnlineLinks()->empty());
302
303 // Ignores not IFF_LOWER_UP
304 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
305 EXPECT_FALSE(HandleLinkMessage(buffer));
306 EXPECT_TRUE(GetOnlineLinks()->empty());
307
308 // Ignores deletion
309 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
310 EXPECT_FALSE(HandleLinkMessage(buffer));
311 EXPECT_TRUE(GetOnlineLinks()->empty());
312
313 // Verify success
314 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
315 EXPECT_TRUE(HandleLinkMessage(buffer));
316 EXPECT_EQ(GetOnlineLinks()->count(0), 1u);
szym 2012/11/26 17:34:20 EXPECT_EQ(expected, tested) so that when it fails
317 EXPECT_EQ(GetOnlineLinks()->size(), 1u);
318
319 // Ignores redundant enables
320 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
321 EXPECT_FALSE(HandleLinkMessage(buffer));
322 EXPECT_EQ(GetOnlineLinks()->count(0), 1u);
323 EXPECT_EQ(GetOnlineLinks()->size(), 1u);
324
325 // Verify adding another online device (e.g. VPN) is considered a change
326 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 1, &buffer);
327 EXPECT_TRUE(HandleLinkMessage(buffer));
328 EXPECT_EQ(GetOnlineLinks()->count(0), 1u);
329 EXPECT_EQ(GetOnlineLinks()->count(1), 1u);
330 EXPECT_EQ(GetOnlineLinks()->size(), 2u);
331 }
332
333 TEST_F(AddressTrackerLinuxTest, RemoveInterface) {
334 Buffer buffer;
335
336 // Should disappear when not IFF_LOWER_UP
337 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
338 EXPECT_TRUE(HandleLinkMessage(buffer));
339 EXPECT_FALSE(GetOnlineLinks()->empty());
340 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
341 EXPECT_TRUE(HandleLinkMessage(buffer));
342 EXPECT_TRUE(GetOnlineLinks()->empty());
343
344 // Ignores redundant disables
345 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
346 EXPECT_FALSE(HandleLinkMessage(buffer));
347 EXPECT_TRUE(GetOnlineLinks()->empty());
348
349 // Ignores deleting down interfaces
350 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
351 EXPECT_FALSE(HandleLinkMessage(buffer));
352 EXPECT_TRUE(GetOnlineLinks()->empty());
353
354 // Should disappear when deleted
355 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
356 EXPECT_TRUE(HandleLinkMessage(buffer));
357 EXPECT_FALSE(GetOnlineLinks()->empty());
358 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
359 EXPECT_TRUE(HandleLinkMessage(buffer));
360 EXPECT_TRUE(GetOnlineLinks()->empty());
361 }
362
256 } // namespace 363 } // namespace
257 364
258 } // namespace internal 365 } // namespace internal
259 } // namespace net 366 } // namespace net
OLDNEW
« no previous file with comments | « net/base/address_tracker_linux.cc ('k') | net/base/network_change_notifier_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698