| Index: net/base/address_tracker_linux_unittest.cc
|
| diff --git a/net/base/address_tracker_linux_unittest.cc b/net/base/address_tracker_linux_unittest.cc
|
| index 1223d04f2eff09560e85942e979b46ebce02be9c..641220731b71bbbe43b54f4e8b564921494f5b64 100644
|
| --- a/net/base/address_tracker_linux_unittest.cc
|
| +++ b/net/base/address_tracker_linux_unittest.cc
|
| @@ -2,6 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/memory/scoped_ptr.h"
|
| #include "net/base/address_tracker_linux.h"
|
|
|
| #include <linux/if.h>
|
| @@ -33,12 +34,18 @@ typedef std::vector<char> Buffer;
|
|
|
| class AddressTrackerLinuxTest : public testing::Test {
|
| protected:
|
| - AddressTrackerLinuxTest()
|
| - : tracker_(base::Bind(&base::DoNothing),
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&base::DoNothing)),
|
| - original_get_interface_name_(tracker_.get_interface_name_) {
|
| - tracker_.get_interface_name_ = TestGetInterfaceName;
|
| + AddressTrackerLinuxTest() {}
|
| +
|
| + void InitializeAddressTracker(bool tracking) {
|
| + if (tracking) {
|
| + tracker_.reset(new AddressTrackerLinux(base::Bind(&base::DoNothing),
|
| + base::Bind(&base::DoNothing),
|
| + base::Bind(&base::DoNothing)));
|
| + } else {
|
| + tracker_.reset(new AddressTrackerLinux());
|
| + }
|
| + original_get_interface_name_ = tracker_->get_interface_name_;
|
| + tracker_->get_interface_name_ = TestGetInterfaceName;
|
| }
|
|
|
| bool HandleAddressMessage(const Buffer& buf) {
|
| @@ -46,7 +53,7 @@ class AddressTrackerLinuxTest : public testing::Test {
|
| bool address_changed = false;
|
| bool link_changed = false;
|
| bool tunnel_changed = false;
|
| - tracker_.HandleMessage(&writable_buf[0], buf.size(),
|
| + tracker_->HandleMessage(&writable_buf[0], buf.size(),
|
| &address_changed, &link_changed, &tunnel_changed);
|
| EXPECT_FALSE(link_changed);
|
| return address_changed;
|
| @@ -57,7 +64,7 @@ class AddressTrackerLinuxTest : public testing::Test {
|
| bool address_changed = false;
|
| bool link_changed = false;
|
| bool tunnel_changed = false;
|
| - tracker_.HandleMessage(&writable_buf[0], buf.size(),
|
| + tracker_->HandleMessage(&writable_buf[0], buf.size(),
|
| &address_changed, &link_changed, &tunnel_changed);
|
| EXPECT_FALSE(address_changed);
|
| return link_changed;
|
| @@ -68,21 +75,21 @@ class AddressTrackerLinuxTest : public testing::Test {
|
| bool address_changed = false;
|
| bool link_changed = false;
|
| bool tunnel_changed = false;
|
| - tracker_.HandleMessage(&writable_buf[0], buf.size(),
|
| + tracker_->HandleMessage(&writable_buf[0], buf.size(),
|
| &address_changed, &link_changed, &tunnel_changed);
|
| EXPECT_FALSE(address_changed);
|
| return tunnel_changed;
|
| }
|
|
|
| AddressTrackerLinux::AddressMap GetAddressMap() {
|
| - return tracker_.GetAddressMap();
|
| + return tracker_->GetAddressMap();
|
| }
|
|
|
| - const base::hash_set<int>* GetOnlineLinks() const {
|
| - return &tracker_.online_links_;
|
| + const base::hash_set<int> GetOnlineLinks() const {
|
| + return tracker_->GetOnlineLinks();
|
| }
|
|
|
| - AddressTrackerLinux tracker_;
|
| + scoped_ptr<AddressTrackerLinux> tracker_;
|
| AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_;
|
| };
|
|
|
| @@ -190,6 +197,8 @@ const unsigned char kAddress3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
| 0, 0, 0, 1 };
|
|
|
| TEST_F(AddressTrackerLinuxTest, NewAddress) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kEmpty;
|
| const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
| const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
|
| @@ -224,6 +233,8 @@ TEST_F(AddressTrackerLinuxTest, NewAddress) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, NewAddressChange) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kEmpty;
|
| const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
|
|
| @@ -258,6 +269,8 @@ TEST_F(AddressTrackerLinuxTest, NewAddressChange) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
|
|
| Buffer buffer;
|
| @@ -276,6 +289,8 @@ TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, DeleteAddress) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kEmpty;
|
| const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
| const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1));
|
| @@ -311,6 +326,8 @@ TEST_F(AddressTrackerLinuxTest, DeleteAddress) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, DeprecatedLifetime) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kEmpty;
|
| const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
|
|
|
| @@ -351,6 +368,8 @@ TEST_F(AddressTrackerLinuxTest, DeprecatedLifetime) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, IgnoredMessage) {
|
| + InitializeAddressTracker(true);
|
| +
|
| const IPAddressNumber kEmpty;
|
| const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
| const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3));
|
| @@ -381,6 +400,8 @@ TEST_F(AddressTrackerLinuxTest, IgnoredMessage) {
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, AddInterface) {
|
| + InitializeAddressTracker(true);
|
| +
|
| Buffer buffer;
|
|
|
| // Ignores loopback.
|
| @@ -388,69 +409,73 @@ TEST_F(AddressTrackerLinuxTest, AddInterface) {
|
| IFF_LOOPBACK | IFF_UP | IFF_LOWER_UP | IFF_RUNNING,
|
| 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Ignores not IFF_LOWER_UP.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Ignores deletion.
|
| MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Verify success.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->count(0));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->size());
|
| + EXPECT_EQ(1u, GetOnlineLinks().count(0));
|
| + EXPECT_EQ(1u, GetOnlineLinks().size());
|
|
|
| // Ignores redundant enables.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->count(0));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->size());
|
| + EXPECT_EQ(1u, GetOnlineLinks().count(0));
|
| + EXPECT_EQ(1u, GetOnlineLinks().size());
|
|
|
| // Verify adding another online device (e.g. VPN) is considered a change.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 1, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->count(0));
|
| - EXPECT_EQ(1u, GetOnlineLinks()->count(1));
|
| - EXPECT_EQ(2u, GetOnlineLinks()->size());
|
| + EXPECT_EQ(1u, GetOnlineLinks().count(0));
|
| + EXPECT_EQ(1u, GetOnlineLinks().count(1));
|
| + EXPECT_EQ(2u, GetOnlineLinks().size());
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, RemoveInterface) {
|
| + InitializeAddressTracker(true);
|
| +
|
| Buffer buffer;
|
|
|
| // Should disappear when not IFF_LOWER_UP.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_FALSE(GetOnlineLinks()->empty());
|
| + EXPECT_FALSE(GetOnlineLinks().empty());
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Ignores redundant disables.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Ignores deleting down interfaces.
|
| MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_FALSE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
|
|
| // Should disappear when deleted.
|
| MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_FALSE(GetOnlineLinks()->empty());
|
| + EXPECT_FALSE(GetOnlineLinks().empty());
|
| MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| EXPECT_TRUE(HandleLinkMessage(buffer));
|
| - EXPECT_TRUE(GetOnlineLinks()->empty());
|
| + EXPECT_TRUE(GetOnlineLinks().empty());
|
| }
|
|
|
| TEST_F(AddressTrackerLinuxTest, TunnelInterface) {
|
| + InitializeAddressTracker(true);
|
| +
|
| Buffer buffer;
|
|
|
| // Ignores without "tun" prefixed name.
|
| @@ -493,10 +518,38 @@ TEST_F(AddressTrackerLinuxTest, TunnelInterface) {
|
| // Check AddressTrackerLinux::get_interface_name_ original implementation
|
| // doesn't crash or return NULL.
|
| TEST_F(AddressTrackerLinuxTest, GetInterfaceName) {
|
| + InitializeAddressTracker(true);
|
| +
|
| for (int i = 0; i < 10; i++)
|
| EXPECT_NE((const char*)NULL, original_get_interface_name_(i));
|
| }
|
|
|
| +TEST_F(AddressTrackerLinuxTest, NonTrackingMode) {
|
| + InitializeAddressTracker(false);
|
| +
|
| + const IPAddressNumber kEmpty;
|
| + const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0));
|
| +
|
| + Buffer buffer;
|
| + MakeAddrMessage(
|
| + RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, &buffer);
|
| + EXPECT_TRUE(HandleAddressMessage(buffer));
|
| + AddressTrackerLinux::AddressMap map = GetAddressMap();
|
| + EXPECT_EQ(1u, map.size());
|
| + EXPECT_EQ(1u, map.count(kAddr0));
|
| + EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags);
|
| +
|
| + MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer);
|
| + EXPECT_TRUE(HandleLinkMessage(buffer));
|
| + EXPECT_EQ(1u, GetOnlineLinks().count(0));
|
| + EXPECT_EQ(1u, GetOnlineLinks().size());
|
| +}
|
| +
|
| +TEST_F(AddressTrackerLinuxTest, NonTrackingModeInit) {
|
| + AddressTrackerLinux tracker;
|
| + tracker.Init();
|
| +}
|
| +
|
| } // namespace
|
|
|
| } // namespace internal
|
|
|