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 |
deleted file mode 100644 |
index 1eba58fbe6af35aa9319129bfba5ac214be92baa..0000000000000000000000000000000000000000 |
--- a/net/base/address_tracker_linux_unittest.cc |
+++ /dev/null |
@@ -1,558 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// 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> |
- |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-#ifndef IFA_F_HOMEADDRESS |
-#define IFA_F_HOMEADDRESS 0x10 |
-#endif |
- |
-namespace net { |
-namespace internal { |
-namespace { |
- |
-const int kTestInterfaceTun = 123; |
- |
-char* TestGetInterfaceName(int interface_index, char* buf) { |
- if (interface_index == kTestInterfaceTun) |
- return strncpy(buf, "tun0", IFNAMSIZ); |
- return strncpy(buf, "eth0", IFNAMSIZ); |
-} |
- |
-} // namespace |
- |
-typedef std::vector<char> Buffer; |
- |
-class AddressTrackerLinuxTest : public testing::Test { |
- protected: |
- 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) { |
- Buffer writable_buf = buf; |
- bool address_changed = false; |
- bool link_changed = false; |
- bool tunnel_changed = false; |
- tracker_->HandleMessage(&writable_buf[0], buf.size(), |
- &address_changed, &link_changed, &tunnel_changed); |
- EXPECT_FALSE(link_changed); |
- return address_changed; |
- } |
- |
- bool HandleLinkMessage(const Buffer& buf) { |
- Buffer writable_buf = buf; |
- bool address_changed = false; |
- bool link_changed = false; |
- bool tunnel_changed = false; |
- tracker_->HandleMessage(&writable_buf[0], buf.size(), |
- &address_changed, &link_changed, &tunnel_changed); |
- EXPECT_FALSE(address_changed); |
- return link_changed; |
- } |
- |
- bool HandleTunnelMessage(const Buffer& buf) { |
- Buffer writable_buf = buf; |
- bool address_changed = false; |
- bool link_changed = false; |
- bool tunnel_changed = false; |
- 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(); |
- } |
- |
- const base::hash_set<int> GetOnlineLinks() const { |
- return tracker_->GetOnlineLinks(); |
- } |
- |
- scoped_ptr<AddressTrackerLinux> tracker_; |
- AddressTrackerLinux::GetInterfaceNameFunction original_get_interface_name_; |
-}; |
- |
-namespace { |
- |
-class NetlinkMessage { |
- public: |
- explicit NetlinkMessage(uint16 type) : buffer_(NLMSG_HDRLEN) { |
- header()->nlmsg_type = type; |
- Align(); |
- } |
- |
- void AddPayload(const void* data, size_t length) { |
- CHECK_EQ(static_cast<size_t>(NLMSG_HDRLEN), |
- buffer_.size()) << "Payload must be added first"; |
- Append(data, length); |
- Align(); |
- } |
- |
- void AddAttribute(uint16 type, const void* data, size_t length) { |
- struct nlattr attr; |
- attr.nla_len = NLA_HDRLEN + length; |
- attr.nla_type = type; |
- Append(&attr, sizeof(attr)); |
- Align(); |
- Append(data, length); |
- Align(); |
- } |
- |
- void AppendTo(Buffer* output) const { |
- CHECK_EQ(NLMSG_ALIGN(output->size()), output->size()); |
- output->reserve(output->size() + NLMSG_LENGTH(buffer_.size())); |
- output->insert(output->end(), buffer_.begin(), buffer_.end()); |
- } |
- |
- private: |
- void Append(const void* data, size_t length) { |
- const char* chardata = reinterpret_cast<const char*>(data); |
- buffer_.insert(buffer_.end(), chardata, chardata + length); |
- } |
- |
- void Align() { |
- header()->nlmsg_len = buffer_.size(); |
- buffer_.insert(buffer_.end(), NLMSG_ALIGN(buffer_.size()) - buffer_.size(), |
- 0); |
- CHECK(NLMSG_OK(header(), buffer_.size())); |
- } |
- |
- struct nlmsghdr* header() { |
- return reinterpret_cast<struct nlmsghdr*>(&buffer_[0]); |
- } |
- |
- Buffer buffer_; |
-}; |
- |
-#define INFINITY_LIFE_TIME 0xFFFFFFFF |
- |
-void MakeAddrMessageWithCacheInfo(uint16 type, |
- uint8 flags, |
- uint8 family, |
- const IPAddressNumber& address, |
- const IPAddressNumber& local, |
- uint32 preferred_lifetime, |
- Buffer* output) { |
- NetlinkMessage nlmsg(type); |
- struct ifaddrmsg msg = {}; |
- msg.ifa_family = family; |
- msg.ifa_flags = flags; |
- nlmsg.AddPayload(&msg, sizeof(msg)); |
- if (address.size()) |
- nlmsg.AddAttribute(IFA_ADDRESS, &address[0], address.size()); |
- if (local.size()) |
- nlmsg.AddAttribute(IFA_LOCAL, &local[0], local.size()); |
- struct ifa_cacheinfo cache_info = {}; |
- cache_info.ifa_prefered = preferred_lifetime; |
- cache_info.ifa_valid = INFINITY_LIFE_TIME; |
- nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); |
- nlmsg.AppendTo(output); |
-} |
- |
-void MakeAddrMessage(uint16 type, |
- uint8 flags, |
- uint8 family, |
- const IPAddressNumber& address, |
- const IPAddressNumber& local, |
- Buffer* output) { |
- MakeAddrMessageWithCacheInfo(type, flags, family, address, local, |
- INFINITY_LIFE_TIME, output); |
-} |
- |
-void MakeLinkMessage(uint16 type, uint32 flags, uint32 index, Buffer* output) { |
- NetlinkMessage nlmsg(type); |
- struct ifinfomsg msg = {}; |
- msg.ifi_index = index; |
- msg.ifi_flags = flags; |
- nlmsg.AddPayload(&msg, sizeof(msg)); |
- output->clear(); |
- nlmsg.AppendTo(output); |
-} |
- |
-const unsigned char kAddress0[] = { 127, 0, 0, 1 }; |
-const unsigned char kAddress1[] = { 10, 0, 0, 1 }; |
-const unsigned char kAddress2[] = { 192, 168, 0, 1 }; |
-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)); |
- const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); |
- const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); |
- |
- 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); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr1, kAddr2, |
- &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(2u, map.size()); |
- EXPECT_EQ(1u, map.count(kAddr0)); |
- EXPECT_EQ(1u, map.count(kAddr2)); |
- EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr2].ifa_flags); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(3u, map.size()); |
- EXPECT_EQ(1u, map.count(kAddr3)); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, NewAddressChange) { |
- InitializeAddressTracker(true); |
- |
- 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); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty, |
- &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(1u, map.count(kAddr0)); |
- EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags); |
- |
- // Both messages in one buffer. |
- buffer.clear(); |
- MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kEmpty, |
- &buffer); |
- MakeAddrMessage(RTM_NEWADDR, IFA_F_HOMEADDRESS, AF_INET, kAddr0, kEmpty, |
- &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(IFA_F_HOMEADDRESS, map[kAddr0].ifa_flags); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, NewAddressDuplicate) { |
- InitializeAddressTracker(true); |
- |
- const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); |
- |
- Buffer buffer; |
- MakeAddrMessage(RTM_NEWADDR, IFA_F_TEMPORARY, AF_INET, kAddr0, kAddr0, |
- &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); |
- |
- EXPECT_FALSE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(IFA_F_TEMPORARY, map[kAddr0].ifa_flags); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, DeleteAddress) { |
- InitializeAddressTracker(true); |
- |
- const IPAddressNumber kEmpty; |
- const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); |
- const IPAddressNumber kAddr1(kAddress1, kAddress1 + arraysize(kAddress1)); |
- const IPAddressNumber kAddr2(kAddress2, kAddress2 + arraysize(kAddress2)); |
- |
- Buffer buffer; |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr0, kEmpty, &buffer); |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kAddr1, kAddr2, &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- AddressTrackerLinux::AddressMap map = GetAddressMap(); |
- EXPECT_EQ(2u, map.size()); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kEmpty, kAddr0, &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(0u, map.count(kAddr0)); |
- EXPECT_EQ(1u, map.count(kAddr2)); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kAddr1, &buffer); |
- // kAddr1 does not exist in the map. |
- EXPECT_FALSE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- |
- buffer.clear(); |
- MakeAddrMessage(RTM_DELADDR, 0, AF_INET, kAddr2, kEmpty, &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(0u, map.size()); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, DeprecatedLifetime) { |
- InitializeAddressTracker(true); |
- |
- const IPAddressNumber kEmpty; |
- const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); |
- |
- Buffer buffer; |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- AddressTrackerLinux::AddressMap map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(1u, map.count(kAddr3)); |
- EXPECT_EQ(0, map[kAddr3].ifa_flags); |
- |
- // Verify 0 preferred lifetime implies deprecated. |
- buffer.clear(); |
- MakeAddrMessageWithCacheInfo(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, 0, |
- &buffer); |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(IFA_F_DEPRECATED, map[kAddr3].ifa_flags); |
- |
- // Verify properly flagged message doesn't imply change. |
- buffer.clear(); |
- MakeAddrMessageWithCacheInfo(RTM_NEWADDR, IFA_F_DEPRECATED, AF_INET6, kEmpty, |
- kAddr3, 0, &buffer); |
- EXPECT_FALSE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(IFA_F_DEPRECATED, map[kAddr3].ifa_flags); |
- |
- // Verify implied deprecated doesn't imply change. |
- buffer.clear(); |
- MakeAddrMessageWithCacheInfo(RTM_NEWADDR, 0, AF_INET6, kEmpty, kAddr3, 0, |
- &buffer); |
- EXPECT_FALSE(HandleAddressMessage(buffer)); |
- map = GetAddressMap(); |
- EXPECT_EQ(1u, map.size()); |
- EXPECT_EQ(IFA_F_DEPRECATED, map[kAddr3].ifa_flags); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, IgnoredMessage) { |
- InitializeAddressTracker(true); |
- |
- const IPAddressNumber kEmpty; |
- const IPAddressNumber kAddr0(kAddress0, kAddress0 + arraysize(kAddress0)); |
- const IPAddressNumber kAddr3(kAddress3, kAddress3 + arraysize(kAddress3)); |
- |
- Buffer buffer; |
- // Ignored family. |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_UNSPEC, kAddr3, kAddr0, &buffer); |
- // No address. |
- MakeAddrMessage(RTM_NEWADDR, 0, AF_INET, kEmpty, kEmpty, &buffer); |
- // Ignored type. |
- MakeAddrMessage(RTM_DELROUTE, 0, AF_INET6, kAddr3, kEmpty, &buffer); |
- EXPECT_FALSE(HandleAddressMessage(buffer)); |
- EXPECT_TRUE(GetAddressMap().empty()); |
- |
- // Valid message after ignored messages. |
- NetlinkMessage nlmsg(RTM_NEWADDR); |
- struct ifaddrmsg msg = {}; |
- msg.ifa_family = AF_INET; |
- nlmsg.AddPayload(&msg, sizeof(msg)); |
- // Ignored attribute. |
- struct ifa_cacheinfo cache_info = {}; |
- nlmsg.AddAttribute(IFA_CACHEINFO, &cache_info, sizeof(cache_info)); |
- nlmsg.AddAttribute(IFA_ADDRESS, &kAddr0[0], kAddr0.size()); |
- nlmsg.AppendTo(&buffer); |
- |
- EXPECT_TRUE(HandleAddressMessage(buffer)); |
- EXPECT_EQ(1u, GetAddressMap().size()); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, AddInterface) { |
- InitializeAddressTracker(true); |
- |
- Buffer buffer; |
- |
- // Ignores loopback. |
- MakeLinkMessage(RTM_NEWLINK, |
- IFF_LOOPBACK | IFF_UP | IFF_LOWER_UP | IFF_RUNNING, |
- 0, &buffer); |
- EXPECT_FALSE(HandleLinkMessage(buffer)); |
- 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()); |
- |
- // Ignores deletion. |
- MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); |
- EXPECT_FALSE(HandleLinkMessage(buffer)); |
- 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()); |
- |
- // 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()); |
- |
- // 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()); |
-} |
- |
-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()); |
- MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer); |
- EXPECT_TRUE(HandleLinkMessage(buffer)); |
- EXPECT_TRUE(GetOnlineLinks().empty()); |
- |
- // Ignores redundant disables. |
- MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_RUNNING, 0, &buffer); |
- EXPECT_FALSE(HandleLinkMessage(buffer)); |
- 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()); |
- |
- // Should disappear when deleted. |
- MakeLinkMessage(RTM_NEWLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); |
- EXPECT_TRUE(HandleLinkMessage(buffer)); |
- EXPECT_FALSE(GetOnlineLinks().empty()); |
- MakeLinkMessage(RTM_DELLINK, IFF_UP | IFF_LOWER_UP | IFF_RUNNING, 0, &buffer); |
- EXPECT_TRUE(HandleLinkMessage(buffer)); |
- EXPECT_TRUE(GetOnlineLinks().empty()); |
-} |
- |
-TEST_F(AddressTrackerLinuxTest, TunnelInterface) { |
- InitializeAddressTracker(true); |
- |
- Buffer buffer; |
- |
- // Ignores without "tun" prefixed name. |
- MakeLinkMessage(RTM_NEWLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- 0, &buffer); |
- EXPECT_FALSE(HandleTunnelMessage(buffer)); |
- |
- // Verify success. |
- MakeLinkMessage(RTM_NEWLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- kTestInterfaceTun, &buffer); |
- EXPECT_TRUE(HandleTunnelMessage(buffer)); |
- |
- // Ignores redundant enables. |
- MakeLinkMessage(RTM_NEWLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- kTestInterfaceTun, &buffer); |
- EXPECT_FALSE(HandleTunnelMessage(buffer)); |
- |
- // Ignores deleting without "tun" prefixed name. |
- MakeLinkMessage(RTM_DELLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- 0, &buffer); |
- EXPECT_FALSE(HandleTunnelMessage(buffer)); |
- |
- // Verify successful deletion |
- MakeLinkMessage(RTM_DELLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- kTestInterfaceTun, &buffer); |
- EXPECT_TRUE(HandleTunnelMessage(buffer)); |
- |
- // Ignores redundant deletions. |
- MakeLinkMessage(RTM_DELLINK, |
- IFF_UP | IFF_LOWER_UP | IFF_RUNNING | IFF_POINTOPOINT, |
- kTestInterfaceTun, &buffer); |
- EXPECT_FALSE(HandleTunnelMessage(buffer)); |
-} |
- |
-// 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++) { |
- char buf[IFNAMSIZ] = {0}; |
- EXPECT_NE((const char*)NULL, original_get_interface_name_(i, buf)); |
- } |
-} |
- |
-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 |
-} // namespace net |