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

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

Issue 571743002: Adding non-tracking mode support to AddressTracker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add one more test for Init() under non-tracking mode. Created 6 years, 3 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 | « net/base/address_tracker_linux.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 // 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 "base/memory/scoped_ptr.h"
5 #include "net/base/address_tracker_linux.h" 6 #include "net/base/address_tracker_linux.h"
6 7
7 #include <linux/if.h> 8 #include <linux/if.h>
8 9
9 #include <vector> 10 #include <vector>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 #ifndef IFA_F_HOMEADDRESS 15 #ifndef IFA_F_HOMEADDRESS
(...skipping 11 matching lines...) Expand all
26 return "tun0"; 27 return "tun0";
27 return "eth0"; 28 return "eth0";
28 } 29 }
29 30
30 } // namespace 31 } // namespace
31 32
32 typedef std::vector<char> Buffer; 33 typedef std::vector<char> Buffer;
33 34
34 class AddressTrackerLinuxTest : public testing::Test { 35 class AddressTrackerLinuxTest : public testing::Test {
35 protected: 36 protected:
36 AddressTrackerLinuxTest() 37 AddressTrackerLinuxTest() {}
37 : tracker_(base::Bind(&base::DoNothing), 38
38 base::Bind(&base::DoNothing), 39 void InitializeAddressTracker(bool tracking) {
39 base::Bind(&base::DoNothing)), 40 if (tracking) {
40 original_get_interface_name_(tracker_.get_interface_name_) { 41 tracker_.reset(new AddressTrackerLinux(base::Bind(&base::DoNothing),
41 tracker_.get_interface_name_ = TestGetInterfaceName; 42 base::Bind(&base::DoNothing),
43 base::Bind(&base::DoNothing)));
44 } else {
45 tracker_.reset(new AddressTrackerLinux());
46 }
47 original_get_interface_name_ = tracker_->get_interface_name_;
48 tracker_->get_interface_name_ = TestGetInterfaceName;
42 } 49 }
43 50
44 bool HandleAddressMessage(const Buffer& buf) { 51 bool HandleAddressMessage(const Buffer& buf) {
45 Buffer writable_buf = buf; 52 Buffer writable_buf = buf;
46 bool address_changed = false; 53 bool address_changed = false;
47 bool link_changed = false; 54 bool link_changed = false;
48 bool tunnel_changed = false; 55 bool tunnel_changed = false;
49 tracker_.HandleMessage(&writable_buf[0], buf.size(), 56 tracker_->HandleMessage(&writable_buf[0], buf.size(),
50 &address_changed, &link_changed, &tunnel_changed); 57 &address_changed, &link_changed, &tunnel_changed);
51 EXPECT_FALSE(link_changed); 58 EXPECT_FALSE(link_changed);
52 return address_changed; 59 return address_changed;
53 } 60 }
54 61
55 bool HandleLinkMessage(const Buffer& buf) { 62 bool HandleLinkMessage(const Buffer& buf) {
56 Buffer writable_buf = buf; 63 Buffer writable_buf = buf;
57 bool address_changed = false; 64 bool address_changed = false;
58 bool link_changed = false; 65 bool link_changed = false;
59 bool tunnel_changed = false; 66 bool tunnel_changed = false;
60 tracker_.HandleMessage(&writable_buf[0], buf.size(), 67 tracker_->HandleMessage(&writable_buf[0], buf.size(),
61 &address_changed, &link_changed, &tunnel_changed); 68 &address_changed, &link_changed, &tunnel_changed);
62 EXPECT_FALSE(address_changed); 69 EXPECT_FALSE(address_changed);
63 return link_changed; 70 return link_changed;
64 } 71 }
65 72
66 bool HandleTunnelMessage(const Buffer& buf) { 73 bool HandleTunnelMessage(const Buffer& buf) {
67 Buffer writable_buf = buf; 74 Buffer writable_buf = buf;
68 bool address_changed = false; 75 bool address_changed = false;
69 bool link_changed = false; 76 bool link_changed = false;
70 bool tunnel_changed = false; 77 bool tunnel_changed = false;
71 tracker_.HandleMessage(&writable_buf[0], buf.size(), 78 tracker_->HandleMessage(&writable_buf[0], buf.size(),
72 &address_changed, &link_changed, &tunnel_changed); 79 &address_changed, &link_changed, &tunnel_changed);
73 EXPECT_FALSE(address_changed); 80 EXPECT_FALSE(address_changed);
74 return tunnel_changed; 81 return tunnel_changed;
75 } 82 }
76 83
77 AddressTrackerLinux::AddressMap GetAddressMap() { 84 AddressTrackerLinux::AddressMap GetAddressMap() {
78 return tracker_.GetAddressMap(); 85 return tracker_->GetAddressMap();
79 } 86 }
80 87
81 const base::hash_set<int>* GetOnlineLinks() const { 88 const base::hash_set<int> GetOnlineLinks() const {
82 return &tracker_.online_links_; 89 return tracker_->GetOnlineLinks();
83 } 90 }
84 91
85 AddressTrackerLinux tracker_; 92 scoped_ptr<AddressTrackerLinux> tracker_;
86 AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_; 93 AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_;
87 }; 94 };
88 95
89 namespace { 96 namespace {
90 97
91 class NetlinkMessage { 98 class NetlinkMessage {
92 public: 99 public:
93 explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) { 100 explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) {
94 header()->nlmsg_type = type; 101 header()->nlmsg_type = type;
95 Align(); 102 Align();
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 nlmsg.AppendTo(output); 190 nlmsg.AppendTo(output);
184 } 191 }
185 192
186 const unsigned char kAddress0[] = { 127, 0, 0, 1 }; 193 const unsigned char kAddress0[] = { 127, 0, 0, 1 };
187 const unsigned char kAddress1[] = { 10, 0, 0, 1 }; 194 const unsigned char kAddress1[] = { 10, 0, 0, 1 };
188 const unsigned char kAddress2[] = { 192, 168, 0, 1 }; 195 const unsigned char kAddress2[] = { 192, 168, 0, 1 };
189 const unsigned char kAddress3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196 const unsigned char kAddress3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
190 0, 0, 0, 1 }; 197 0, 0, 0, 1 };
191 198
192 TEST_F(AddressTrackerLinuxTest, NewAddress) { 199 TEST_F(AddressTrackerLinuxTest, NewAddress) {
200 InitializeAddressTracker(true);
201
193 const IPAddressNumber kEmpty; 202 const IPAddressNumber kEmpty;
194 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 203 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
195 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1)); 204 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
196 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); 205 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2));
197 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); 206 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
198 207
199 Buffer buffer; 208 Buffer buffer;
200 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, 209 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty,
201 &buffer); 210 &buffer);
202 EXPECT_TRUE(HandleAddressMessage(buffer)); 211 EXPECT_TRUE(HandleAddressMessage(buffer));
(...skipping 14 matching lines...) Expand all
217 226
218 buffer.clear(); 227 buffer.clear();
219 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer); 228 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer);
220 EXPECT_TRUE(HandleAddressMessage(buffer)); 229 EXPECT_TRUE(HandleAddressMessage(buffer));
221 map = GetAddressMap(); 230 map = GetAddressMap();
222 EXPECT_EQ(3u, map.size()); 231 EXPECT_EQ(3u, map.size());
223 EXPECT_EQ(1u, map.count(kAddr3)); 232 EXPECT_EQ(1u, map.count(kAddr3));
224 } 233 }
225 234
226 TEST_F(AddressTrackerLinuxTest, NewAddressChange) { 235 TEST_F(AddressTrackerLinuxTest, NewAddressChange) {
236 InitializeAddressTracker(true);
237
227 const IPAddressNumber kEmpty; 238 const IPAddressNumber kEmpty;
228 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 239 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
229 240
230 Buffer buffer; 241 Buffer buffer;
231 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, 242 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty,
232 &buffer); 243 &buffer);
233 EXPECT_TRUE(HandleAddressMessage(buffer)); 244 EXPECT_TRUE(HandleAddressMessage(buffer));
234 AddressTrackerLinux::AddressMap map = GetAddressMap(); 245 AddressTrackerLinux::AddressMap map = GetAddressMap();
235 EXPECT_EQ(1u, map.size()); 246 EXPECT_EQ(1u, map.size());
236 EXPECT_EQ(1u, map.count(kAddr0)); 247 EXPECT_EQ(1u, map.count(kAddr0));
(...skipping 14 matching lines...) Expand all
251 &buffer); 262 &buffer);
252 MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty, 263 MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty,
253 &buffer); 264 &buffer);
254 EXPECT_TRUE(HandleAddressMessage(buffer)); 265 EXPECT_TRUE(HandleAddressMessage(buffer));
255 map = GetAddressMap(); 266 map = GetAddressMap();
256 EXPECT_EQ(1u, map.size()); 267 EXPECT_EQ(1u, map.size());
257 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags); 268 EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags);
258 } 269 }
259 270
260 TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) { 271 TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) {
272 InitializeAddressTracker(true);
273
261 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 274 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
262 275
263 Buffer buffer; 276 Buffer buffer;
264 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kAddr0, 277 MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kAddr0,
265 &buffer); 278 &buffer);
266 EXPECT_TRUE(HandleAddressMessage(buffer)); 279 EXPECT_TRUE(HandleAddressMessage(buffer));
267 AddressTrackerLinux::AddressMap map = GetAddressMap(); 280 AddressTrackerLinux::AddressMap map = GetAddressMap();
268 EXPECT_EQ(1u, map.size()); 281 EXPECT_EQ(1u, map.size());
269 EXPECT_EQ(1u, map.count(kAddr0)); 282 EXPECT_EQ(1u, map.count(kAddr0));
270 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 283 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
271 284
272 EXPECT_FALSE(HandleAddressMessage(buffer)); 285 EXPECT_FALSE(HandleAddressMessage(buffer));
273 map = GetAddressMap(); 286 map = GetAddressMap();
274 EXPECT_EQ(1u, map.size()); 287 EXPECT_EQ(1u, map.size());
275 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); 288 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
276 } 289 }
277 290
278 TEST_F(AddressTrackerLinuxTest, DeleteAddress) { 291 TEST_F(AddressTrackerLinuxTest, DeleteAddress) {
292 InitializeAddressTracker(true);
293
279 const IPAddressNumber kEmpty; 294 const IPAddressNumber kEmpty;
280 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 295 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
281 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1)); 296 const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
282 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); 297 const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2));
283 298
284 Buffer buffer; 299 Buffer buffer;
285 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr0, kEmpty, &buffer); 300 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr0, kEmpty, &buffer);
286 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr1, kAddr2, &buffer); 301 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr1, kAddr2, &buffer);
287 EXPECT_TRUE(HandleAddressMessage(buffer)); 302 EXPECT_TRUE(HandleAddressMessage(buffer));
288 AddressTrackerLinux::AddressMap map = GetAddressMap(); 303 AddressTrackerLinux::AddressMap map = GetAddressMap();
(...skipping 15 matching lines...) Expand all
304 EXPECT_EQ(1u, map.size()); 319 EXPECT_EQ(1u, map.size());
305 320
306 buffer.clear(); 321 buffer.clear();
307 MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kEmpty, &buffer); 322 MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kEmpty, &buffer);
308 EXPECT_TRUE(HandleAddressMessage(buffer)); 323 EXPECT_TRUE(HandleAddressMessage(buffer));
309 map = GetAddressMap(); 324 map = GetAddressMap();
310 EXPECT_EQ(0u, map.size()); 325 EXPECT_EQ(0u, map.size());
311 } 326 }
312 327
313 TEST_F(AddressTrackerLinuxTest, DeprecatedLifetime) { 328 TEST_F(AddressTrackerLinuxTest, DeprecatedLifetime) {
329 InitializeAddressTracker(true);
330
314 const IPAddressNumber kEmpty; 331 const IPAddressNumber kEmpty;
315 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); 332 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
316 333
317 Buffer buffer; 334 Buffer buffer;
318 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer); 335 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer);
319 EXPECT_TRUE(HandleAddressMessage(buffer)); 336 EXPECT_TRUE(HandleAddressMessage(buffer));
320 AddressTrackerLinux::AddressMap map = GetAddressMap(); 337 AddressTrackerLinux::AddressMap map = GetAddressMap();
321 EXPECT_EQ(1u, map.size()); 338 EXPECT_EQ(1u, map.size());
322 EXPECT_EQ(1u, map.count(kAddr3)); 339 EXPECT_EQ(1u, map.count(kAddr3));
323 EXPECT_EQ(0, map[kAddr3].ifa_flags); 340 EXPECT_EQ(0, map[kAddr3].ifa_flags);
(...skipping 20 matching lines...) Expand all
344 buffer.clear(); 361 buffer.clear();
345 MakeAddrMessageWithCacheInfo(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, 0, 362 MakeAddrMessageWithCacheInfo(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, 0,
346 &buffer); 363 &buffer);
347 EXPECT_FALSE(HandleAddressMessage(buffer)); 364 EXPECT_FALSE(HandleAddressMessage(buffer));
348 map = GetAddressMap(); 365 map = GetAddressMap();
349 EXPECT_EQ(1u, map.size()); 366 EXPECT_EQ(1u, map.size());
350 EXPECT_EQ(IFA_F_DEPRECATED, map[kAddr3].ifa_flags); 367 EXPECT_EQ(IFA_F_DEPRECATED, map[kAddr3].ifa_flags);
351 } 368 }
352 369
353 TEST_F(AddressTrackerLinuxTest, IgnoredMessage) { 370 TEST_F(AddressTrackerLinuxTest, IgnoredMessage) {
371 InitializeAddressTracker(true);
372
354 const IPAddressNumber kEmpty; 373 const IPAddressNumber kEmpty;
355 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); 374 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
356 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); 375 const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
357 376
358 Buffer buffer; 377 Buffer buffer;
359 // Ignored family. 378 // Ignored family.
360 MakeAddrMessage(RTM_NEWADDR, 0, AF_UNSPEC, kAddr3, kAddr0, &buffer); 379 MakeAddrMessage(RTM_NEWADDR, 0, AF_UNSPEC, kAddr3, kAddr0, &buffer);
361 // No address. 380 // No address.
362 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kEmpty, kEmpty, &buffer); 381 MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kEmpty, kEmpty, &buffer);
363 // Ignored type. 382 // Ignored type.
(...skipping 10 matching lines...) Expand all
374 struct ifa_cacheinfo cache_info = {}; 393 struct ifa_cacheinfo cache_info = {};
375 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); 394 nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info));
376 nlmsg.AddAttribute(IFA_ADDRESS, &kAddr0[0], kAddr0.size()); 395 nlmsg.AddAttribute(IFA_ADDRESS, &kAddr0[0], kAddr0.size());
377 nlmsg.AppendTo(&buffer); 396 nlmsg.AppendTo(&buffer);
378 397
379 EXPECT_TRUE(HandleAddressMessage(buffer)); 398 EXPECT_TRUE(HandleAddressMessage(buffer));
380 EXPECT_EQ(1u, GetAddressMap().size()); 399 EXPECT_EQ(1u, GetAddressMap().size());
381 } 400 }
382 401
383 TEST_F(AddressTrackerLinuxTest, AddInterface) { 402 TEST_F(AddressTrackerLinuxTest, AddInterface) {
403 InitializeAddressTracker(true);
404
384 Buffer buffer; 405 Buffer buffer;
385 406
386 // Ignores loopback. 407 // Ignores loopback.
387 MakeLinkMessage(RTM_NEWLINK, 408 MakeLinkMessage(RTM_NEWLINK,
388 IFF_LOOPBACK | IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 409 IFF_LOOPBACK | IFF_UP | IFF_LOWER_UP | IFF_RUNNING,
389 0, &buffer); 410 0, &buffer);
390 EXPECT_FALSE(HandleLinkMessage(buffer)); 411 EXPECT_FALSE(HandleLinkMessage(buffer));
391 EXPECT_TRUE(GetOnlineLinks()->empty()); 412 EXPECT_TRUE(GetOnlineLinks().empty());
392 413
393 // Ignores not IFF_LOWER_UP. 414 // Ignores not IFF_LOWER_UP.
394 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer); 415 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
395 EXPECT_FALSE(HandleLinkMessage(buffer)); 416 EXPECT_FALSE(HandleLinkMessage(buffer));
396 EXPECT_TRUE(GetOnlineLinks()->empty()); 417 EXPECT_TRUE(GetOnlineLinks().empty());
397 418
398 // Ignores deletion. 419 // Ignores deletion.
399 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 420 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
400 EXPECT_FALSE(HandleLinkMessage(buffer)); 421 EXPECT_FALSE(HandleLinkMessage(buffer));
401 EXPECT_TRUE(GetOnlineLinks()->empty()); 422 EXPECT_TRUE(GetOnlineLinks().empty());
402 423
403 // Verify success. 424 // Verify success.
404 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 425 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
405 EXPECT_TRUE(HandleLinkMessage(buffer)); 426 EXPECT_TRUE(HandleLinkMessage(buffer));
406 EXPECT_EQ(1u, GetOnlineLinks()->count(0)); 427 EXPECT_EQ(1u, GetOnlineLinks().count(0));
407 EXPECT_EQ(1u, GetOnlineLinks()->size()); 428 EXPECT_EQ(1u, GetOnlineLinks().size());
408 429
409 // Ignores redundant enables. 430 // Ignores redundant enables.
410 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 431 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
411 EXPECT_FALSE(HandleLinkMessage(buffer)); 432 EXPECT_FALSE(HandleLinkMessage(buffer));
412 EXPECT_EQ(1u, GetOnlineLinks()->count(0)); 433 EXPECT_EQ(1u, GetOnlineLinks().count(0));
413 EXPECT_EQ(1u, GetOnlineLinks()->size()); 434 EXPECT_EQ(1u, GetOnlineLinks().size());
414 435
415 // Verify adding another online device (e.g. VPN) is considered a change. 436 // Verify adding another online device (e.g. VPN) is considered a change.
416 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 1, &buffer); 437 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 1, &buffer);
417 EXPECT_TRUE(HandleLinkMessage(buffer)); 438 EXPECT_TRUE(HandleLinkMessage(buffer));
418 EXPECT_EQ(1u, GetOnlineLinks()->count(0)); 439 EXPECT_EQ(1u, GetOnlineLinks().count(0));
419 EXPECT_EQ(1u, GetOnlineLinks()->count(1)); 440 EXPECT_EQ(1u, GetOnlineLinks().count(1));
420 EXPECT_EQ(2u, GetOnlineLinks()->size()); 441 EXPECT_EQ(2u, GetOnlineLinks().size());
421 } 442 }
422 443
423 TEST_F(AddressTrackerLinuxTest, RemoveInterface) { 444 TEST_F(AddressTrackerLinuxTest, RemoveInterface) {
445 InitializeAddressTracker(true);
446
424 Buffer buffer; 447 Buffer buffer;
425 448
426 // Should disappear when not IFF_LOWER_UP. 449 // Should disappear when not IFF_LOWER_UP.
427 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 450 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
428 EXPECT_TRUE(HandleLinkMessage(buffer)); 451 EXPECT_TRUE(HandleLinkMessage(buffer));
429 EXPECT_FALSE(GetOnlineLinks()->empty()); 452 EXPECT_FALSE(GetOnlineLinks().empty());
430 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer); 453 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
431 EXPECT_TRUE(HandleLinkMessage(buffer)); 454 EXPECT_TRUE(HandleLinkMessage(buffer));
432 EXPECT_TRUE(GetOnlineLinks()->empty()); 455 EXPECT_TRUE(GetOnlineLinks().empty());
433 456
434 // Ignores redundant disables. 457 // Ignores redundant disables.
435 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer); 458 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
436 EXPECT_FALSE(HandleLinkMessage(buffer)); 459 EXPECT_FALSE(HandleLinkMessage(buffer));
437 EXPECT_TRUE(GetOnlineLinks()->empty()); 460 EXPECT_TRUE(GetOnlineLinks().empty());
438 461
439 // Ignores deleting down interfaces. 462 // Ignores deleting down interfaces.
440 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_RUNNING, 0, &buffer); 463 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
441 EXPECT_FALSE(HandleLinkMessage(buffer)); 464 EXPECT_FALSE(HandleLinkMessage(buffer));
442 EXPECT_TRUE(GetOnlineLinks()->empty()); 465 EXPECT_TRUE(GetOnlineLinks().empty());
443 466
444 // Should disappear when deleted. 467 // Should disappear when deleted.
445 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 468 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
446 EXPECT_TRUE(HandleLinkMessage(buffer)); 469 EXPECT_TRUE(HandleLinkMessage(buffer));
447 EXPECT_FALSE(GetOnlineLinks()->empty()); 470 EXPECT_FALSE(GetOnlineLinks().empty());
448 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); 471 MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
449 EXPECT_TRUE(HandleLinkMessage(buffer)); 472 EXPECT_TRUE(HandleLinkMessage(buffer));
450 EXPECT_TRUE(GetOnlineLinks()->empty()); 473 EXPECT_TRUE(GetOnlineLinks().empty());
451 } 474 }
452 475
453 TEST_F(AddressTrackerLinuxTest, TunnelInterface) { 476 TEST_F(AddressTrackerLinuxTest, TunnelInterface) {
477 InitializeAddressTracker(true);
478
454 Buffer buffer; 479 Buffer buffer;
455 480
456 // Ignores without "tun" prefixed name. 481 // Ignores without "tun" prefixed name.
457 MakeLinkMessage(RTM_NEWLINK, 482 MakeLinkMessage(RTM_NEWLINK,
458 IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, 483 IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT,
459 0, &buffer); 484 0, &buffer);
460 EXPECT_FALSE(HandleTunnelMessage(buffer)); 485 EXPECT_FALSE(HandleTunnelMessage(buffer));
461 486
462 // Verify success. 487 // Verify success.
463 MakeLinkMessage(RTM_NEWLINK, 488 MakeLinkMessage(RTM_NEWLINK,
(...skipping 22 matching lines...) Expand all
486 // Ignores redundant deletions. 511 // Ignores redundant deletions.
487 MakeLinkMessage(RTM_DELLINK, 512 MakeLinkMessage(RTM_DELLINK,
488 IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, 513 IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT,
489 kTestInterfaceTun, &buffer); 514 kTestInterfaceTun, &buffer);
490 EXPECT_FALSE(HandleTunnelMessage(buffer)); 515 EXPECT_FALSE(HandleTunnelMessage(buffer));
491 } 516 }
492 517
493 // Check AddressTrackerLinux::get_interface_name_ original implementation 518 // Check AddressTrackerLinux::get_interface_name_ original implementation
494 // doesn't crash or return NULL. 519 // doesn't crash or return NULL.
495 TEST_F(AddressTrackerLinuxTest, GetInterfaceName) { 520 TEST_F(AddressTrackerLinuxTest, GetInterfaceName) {
521 InitializeAddressTracker(true);
522
496 for (int i = 0; i < 10; i++) 523 for (int i = 0; i < 10; i++)
497 EXPECT_NE((const char*)NULL, original_get_interface_name_(i)); 524 EXPECT_NE((const char*)NULL, original_get_interface_name_(i));
498 } 525 }
499 526
527 TEST_F(AddressTrackerLinuxTest, NonTrackingMode) {
528 InitializeAddressTracker(false);
529
530 const IPAddressNumber kEmpty;
531 const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
532
533 Buffer buffer;
534 MakeAddrMessage(
535 RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, &buffer);
536 EXPECT_TRUE(HandleAddressMessage(buffer));
537 AddressTrackerLinux::AddressMap map = GetAddressMap();
538 EXPECT_EQ(1u, map.size());
539 EXPECT_EQ(1u, map.count(kAddr0));
540 EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
541
542 MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
543 EXPECT_TRUE(HandleLinkMessage(buffer));
544 EXPECT_EQ(1u, GetOnlineLinks().count(0));
545 EXPECT_EQ(1u, GetOnlineLinks().size());
546 }
547
548 TEST_F(AddressTrackerLinuxTest, NonTrackingModeInit) {
549 AddressTrackerLinux tracker;
550 tracker.Init();
551 }
552
500 } // namespace 553 } // namespace
501 554
502 } // namespace internal 555 } // namespace internal
503 } // namespace net 556 } // namespace net
OLDNEW
« no previous file with comments | « net/base/address_tracker_linux.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698