| Index: net/dns/dns_config_service_unittest.cc
|
| diff --git a/net/dns/dns_config_service_unittest.cc b/net/dns/dns_config_service_unittest.cc
|
| deleted file mode 100644
|
| index e3abafd20aa11ffad63e9b40fc0aadfed47535da..0000000000000000000000000000000000000000
|
| --- a/net/dns/dns_config_service_unittest.cc
|
| +++ /dev/null
|
| @@ -1,352 +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 "net/dns/dns_config_service.h"
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/bind.h"
|
| -#include "base/cancelable_callback.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/test/test_timeouts.h"
|
| -#include "net/base/net_util.h"
|
| -#include "net/dns/dns_protocol.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -const NameServerClassifier::NameServersType kNone =
|
| - NameServerClassifier::NAME_SERVERS_TYPE_NONE;
|
| -const NameServerClassifier::NameServersType kGoogle =
|
| - NameServerClassifier::NAME_SERVERS_TYPE_GOOGLE_PUBLIC_DNS;
|
| -const NameServerClassifier::NameServersType kPrivate =
|
| - NameServerClassifier::NAME_SERVERS_TYPE_PRIVATE;
|
| -const NameServerClassifier::NameServersType kPublic =
|
| - NameServerClassifier::NAME_SERVERS_TYPE_PUBLIC;
|
| -const NameServerClassifier::NameServersType kMixed =
|
| - NameServerClassifier::NAME_SERVERS_TYPE_MIXED;
|
| -
|
| -class NameServerClassifierTest : public testing::Test {
|
| - protected:
|
| - NameServerClassifier::NameServersType Classify(
|
| - const std::string& servers_string) {
|
| - std::vector<std::string> server_strings;
|
| - base::SplitString(servers_string, ' ', &server_strings);
|
| -
|
| - std::vector<IPEndPoint> servers;
|
| - for (std::vector<std::string>::const_iterator it = server_strings.begin();
|
| - it != server_strings.end();
|
| - ++it) {
|
| - if (it->empty())
|
| - continue;
|
| -
|
| - IPAddressNumber address;
|
| - bool parsed = ParseIPLiteralToNumber(*it, &address);
|
| - EXPECT_TRUE(parsed);
|
| - servers.push_back(IPEndPoint(address, dns_protocol::kDefaultPort));
|
| - }
|
| -
|
| - return classifier_.GetNameServersType(servers);
|
| - }
|
| -
|
| - private:
|
| - NameServerClassifier classifier_;
|
| -};
|
| -
|
| -TEST_F(NameServerClassifierTest, None) {
|
| - EXPECT_EQ(kNone, Classify(""));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, Google) {
|
| - EXPECT_EQ(kGoogle, Classify("8.8.8.8"));
|
| - EXPECT_EQ(kGoogle, Classify("8.8.8.8 8.8.4.4"));
|
| - EXPECT_EQ(kGoogle, Classify("2001:4860:4860::8888"));
|
| - EXPECT_EQ(kGoogle, Classify("2001:4860:4860::8888 2001:4860:4860::8844"));
|
| - EXPECT_EQ(kGoogle, Classify("2001:4860:4860::8888 8.8.8.8"));
|
| -
|
| - // Make sure nobody took any shortcuts on the IP matching:
|
| - EXPECT_EQ(kPublic, Classify("8.8.8.4"));
|
| - EXPECT_EQ(kPublic, Classify("8.8.4.8"));
|
| - EXPECT_EQ(kPublic, Classify("2001:4860:4860::8884"));
|
| - EXPECT_EQ(kPublic, Classify("2001:4860:4860::8848"));
|
| - EXPECT_EQ(kPublic, Classify("2001:4860:4860::1:8888"));
|
| - EXPECT_EQ(kPublic, Classify("2001:4860:4860:1::8888"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, PrivateLocalhost) {
|
| - EXPECT_EQ(kPrivate, Classify("127.0.0.1"));
|
| - EXPECT_EQ(kPrivate, Classify("::1"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, PrivateRfc1918) {
|
| - EXPECT_EQ(kPrivate, Classify("10.0.0.0 10.255.255.255"));
|
| - EXPECT_EQ(kPrivate, Classify("172.16.0.0 172.31.255.255"));
|
| - EXPECT_EQ(kPrivate, Classify("192.168.0.0 192.168.255.255"));
|
| - EXPECT_EQ(kPrivate, Classify("10.1.1.1 172.16.1.1 192.168.1.1"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, PrivateIPv4LinkLocal) {
|
| - EXPECT_EQ(kPrivate, Classify("169.254.0.0 169.254.255.255"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, PrivateIPv6LinkLocal) {
|
| - EXPECT_EQ(kPrivate,
|
| - Classify("fe80:: fe80:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, Public) {
|
| - EXPECT_EQ(kPublic, Classify("4.2.2.1"));
|
| - EXPECT_EQ(kPublic, Classify("4.2.2.1 4.2.2.2"));
|
| -}
|
| -
|
| -TEST_F(NameServerClassifierTest, Mixed) {
|
| - EXPECT_EQ(kMixed, Classify("8.8.8.8 192.168.1.1"));
|
| - EXPECT_EQ(kMixed, Classify("8.8.8.8 4.2.2.1"));
|
| - EXPECT_EQ(kMixed, Classify("192.168.1.1 4.2.2.1"));
|
| - EXPECT_EQ(kMixed, Classify("8.8.8.8 192.168.1.1 4.2.2.1"));
|
| -}
|
| -
|
| -class DnsConfigServiceTest : public testing::Test {
|
| - public:
|
| - void OnConfigChanged(const DnsConfig& config) {
|
| - last_config_ = config;
|
| - if (quit_on_config_)
|
| - base::MessageLoop::current()->Quit();
|
| - }
|
| -
|
| - protected:
|
| - class TestDnsConfigService : public DnsConfigService {
|
| - public:
|
| - void ReadNow() override {}
|
| - bool StartWatching() override { return true; }
|
| -
|
| - // Expose the protected methods to this test suite.
|
| - void InvalidateConfig() {
|
| - DnsConfigService::InvalidateConfig();
|
| - }
|
| -
|
| - void InvalidateHosts() {
|
| - DnsConfigService::InvalidateHosts();
|
| - }
|
| -
|
| - void OnConfigRead(const DnsConfig& config) {
|
| - DnsConfigService::OnConfigRead(config);
|
| - }
|
| -
|
| - void OnHostsRead(const DnsHosts& hosts) {
|
| - DnsConfigService::OnHostsRead(hosts);
|
| - }
|
| -
|
| - void set_watch_failed(bool value) {
|
| - DnsConfigService::set_watch_failed(value);
|
| - }
|
| - };
|
| -
|
| - void WaitForConfig(base::TimeDelta timeout) {
|
| - base::CancelableClosure closure(base::MessageLoop::QuitClosure());
|
| - base::MessageLoop::current()->PostDelayedTask(
|
| - FROM_HERE, closure.callback(), timeout);
|
| - quit_on_config_ = true;
|
| - base::MessageLoop::current()->Run();
|
| - quit_on_config_ = false;
|
| - closure.Cancel();
|
| - }
|
| -
|
| - // Generate a config using the given seed..
|
| - DnsConfig MakeConfig(unsigned seed) {
|
| - DnsConfig config;
|
| - IPAddressNumber ip;
|
| - CHECK(ParseIPLiteralToNumber("1.2.3.4", &ip));
|
| - config.nameservers.push_back(IPEndPoint(ip, seed & 0xFFFF));
|
| - EXPECT_TRUE(config.IsValid());
|
| - return config;
|
| - }
|
| -
|
| - // Generate hosts using the given seed.
|
| - DnsHosts MakeHosts(unsigned seed) {
|
| - DnsHosts hosts;
|
| - std::string hosts_content = "127.0.0.1 localhost";
|
| - hosts_content.append(seed, '1');
|
| - ParseHosts(hosts_content, &hosts);
|
| - EXPECT_FALSE(hosts.empty());
|
| - return hosts;
|
| - }
|
| -
|
| - void SetUp() override {
|
| - quit_on_config_ = false;
|
| -
|
| - service_.reset(new TestDnsConfigService());
|
| - service_->WatchConfig(base::Bind(&DnsConfigServiceTest::OnConfigChanged,
|
| - base::Unretained(this)));
|
| - EXPECT_FALSE(last_config_.IsValid());
|
| - }
|
| -
|
| - DnsConfig last_config_;
|
| - bool quit_on_config_;
|
| -
|
| - // Service under test.
|
| - scoped_ptr<TestDnsConfigService> service_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(DnsConfigServiceTest, FirstConfig) {
|
| - DnsConfig config = MakeConfig(1);
|
| -
|
| - service_->OnConfigRead(config);
|
| - // No hosts yet, so no config.
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - service_->OnHostsRead(config.hosts);
|
| - EXPECT_TRUE(last_config_.Equals(config));
|
| -}
|
| -
|
| -TEST_F(DnsConfigServiceTest, Timeout) {
|
| - DnsConfig config = MakeConfig(1);
|
| - config.hosts = MakeHosts(1);
|
| - ASSERT_TRUE(config.IsValid());
|
| -
|
| - service_->OnConfigRead(config);
|
| - service_->OnHostsRead(config.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config));
|
| -
|
| - service_->InvalidateConfig();
|
| - WaitForConfig(TestTimeouts::action_timeout());
|
| - EXPECT_FALSE(last_config_.Equals(config));
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - service_->OnConfigRead(config);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config));
|
| -
|
| - service_->InvalidateHosts();
|
| - WaitForConfig(TestTimeouts::action_timeout());
|
| - EXPECT_FALSE(last_config_.Equals(config));
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - DnsConfig bad_config = last_config_ = MakeConfig(0xBAD);
|
| - service_->InvalidateConfig();
|
| - // We don't expect an update. This should time out.
|
| - WaitForConfig(base::TimeDelta::FromMilliseconds(100) +
|
| - TestTimeouts::tiny_timeout());
|
| - EXPECT_TRUE(last_config_.Equals(bad_config)) << "Unexpected change";
|
| -
|
| - last_config_ = DnsConfig();
|
| - service_->OnConfigRead(config);
|
| - service_->OnHostsRead(config.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config));
|
| -}
|
| -
|
| -TEST_F(DnsConfigServiceTest, SameConfig) {
|
| - DnsConfig config = MakeConfig(1);
|
| - config.hosts = MakeHosts(1);
|
| -
|
| - service_->OnConfigRead(config);
|
| - service_->OnHostsRead(config.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config));
|
| -
|
| - last_config_ = DnsConfig();
|
| - service_->OnConfigRead(config);
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig())) << "Unexpected change";
|
| -
|
| - service_->OnHostsRead(config.hosts);
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig())) << "Unexpected change";
|
| -}
|
| -
|
| -TEST_F(DnsConfigServiceTest, DifferentConfig) {
|
| - DnsConfig config1 = MakeConfig(1);
|
| - DnsConfig config2 = MakeConfig(2);
|
| - DnsConfig config3 = MakeConfig(1);
|
| - config1.hosts = MakeHosts(1);
|
| - config2.hosts = MakeHosts(1);
|
| - config3.hosts = MakeHosts(2);
|
| - ASSERT_TRUE(config1.EqualsIgnoreHosts(config3));
|
| - ASSERT_FALSE(config1.Equals(config2));
|
| - ASSERT_FALSE(config1.Equals(config3));
|
| - ASSERT_FALSE(config2.Equals(config3));
|
| -
|
| - service_->OnConfigRead(config1);
|
| - service_->OnHostsRead(config1.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config1));
|
| -
|
| - // It doesn't matter for this tests, but increases coverage.
|
| - service_->InvalidateConfig();
|
| - service_->InvalidateHosts();
|
| -
|
| - service_->OnConfigRead(config2);
|
| - EXPECT_TRUE(last_config_.Equals(config1)) << "Unexpected change";
|
| - service_->OnHostsRead(config2.hosts); // Not an actual change.
|
| - EXPECT_FALSE(last_config_.Equals(config1));
|
| - EXPECT_TRUE(last_config_.Equals(config2));
|
| -
|
| - service_->OnConfigRead(config3);
|
| - EXPECT_TRUE(last_config_.EqualsIgnoreHosts(config3));
|
| - service_->OnHostsRead(config3.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(config2));
|
| - EXPECT_TRUE(last_config_.Equals(config3));
|
| -}
|
| -
|
| -TEST_F(DnsConfigServiceTest, WatchFailure) {
|
| - DnsConfig config1 = MakeConfig(1);
|
| - DnsConfig config2 = MakeConfig(2);
|
| - config1.hosts = MakeHosts(1);
|
| - config2.hosts = MakeHosts(2);
|
| -
|
| - service_->OnConfigRead(config1);
|
| - service_->OnHostsRead(config1.hosts);
|
| - EXPECT_FALSE(last_config_.Equals(DnsConfig()));
|
| - EXPECT_TRUE(last_config_.Equals(config1));
|
| -
|
| - // Simulate watch failure.
|
| - service_->set_watch_failed(true);
|
| - service_->InvalidateConfig();
|
| - WaitForConfig(TestTimeouts::action_timeout());
|
| - EXPECT_FALSE(last_config_.Equals(config1));
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - DnsConfig bad_config = last_config_ = MakeConfig(0xBAD);
|
| - // Actual change in config, so expect an update, but it should be empty.
|
| - service_->OnConfigRead(config1);
|
| - EXPECT_FALSE(last_config_.Equals(bad_config));
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - last_config_ = bad_config;
|
| - // Actual change in config, so expect an update, but it should be empty.
|
| - service_->InvalidateConfig();
|
| - service_->OnConfigRead(config2);
|
| - EXPECT_FALSE(last_config_.Equals(bad_config));
|
| - EXPECT_TRUE(last_config_.Equals(DnsConfig()));
|
| -
|
| - last_config_ = bad_config;
|
| - // No change, so no update.
|
| - service_->InvalidateConfig();
|
| - service_->OnConfigRead(config2);
|
| - EXPECT_TRUE(last_config_.Equals(bad_config));
|
| -}
|
| -
|
| -#if (defined(OS_POSIX) && !defined(OS_ANDROID)) || defined(OS_WIN)
|
| -// TODO(szym): This is really an integration test and can time out if HOSTS is
|
| -// huge. http://crbug.com/107810
|
| -TEST_F(DnsConfigServiceTest, DISABLED_GetSystemConfig) {
|
| - service_.reset();
|
| - scoped_ptr<DnsConfigService> service(DnsConfigService::CreateSystemService());
|
| -
|
| - service->ReadConfig(base::Bind(&DnsConfigServiceTest::OnConfigChanged,
|
| - base::Unretained(this)));
|
| - base::TimeDelta kTimeout = TestTimeouts::action_max_timeout();
|
| - WaitForConfig(kTimeout);
|
| - ASSERT_TRUE(last_config_.IsValid()) << "Did not receive DnsConfig in " <<
|
| - kTimeout.InSecondsF() << "s";
|
| -}
|
| -#endif // OS_POSIX || OS_WIN
|
| -
|
| -} // namespace net
|
| -
|
|
|