summaryrefslogtreecommitdiffstats
path: root/net/dns/dns_config_service_unittest.cc
diff options
context:
space:
mode:
authorszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 19:52:40 +0000
committerszym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-31 19:52:40 +0000
commitbb0e34549798b05741950f793b572e600de0c2cd (patch)
treed8ec98dc3d9378c3036bfa92493ae9b83ea1b92d /net/dns/dns_config_service_unittest.cc
parent90c8b9ca6040546b9b08c03188a604a9f348dd89 (diff)
downloadchromium_src-bb0e34549798b05741950f793b572e600de0c2cd.zip
chromium_src-bb0e34549798b05741950f793b572e600de0c2cd.tar.gz
chromium_src-bb0e34549798b05741950f793b572e600de0c2cd.tar.bz2
[net] Move DnsConfigService to NetworkChangeNotifier.
This merges DnsConfigWatcher back into DnsConfigService and installs DnsConfigService at NetworkChangeNotifier. It removes |detail| from OnDNSChanged callback, and exposes NetworkChangeNotifier::GetDnsConfig. BUG=142142 Review URL: https://chromiumcodereview.appspot.com/10873018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@154485 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns/dns_config_service_unittest.cc')
-rw-r--r--net/dns/dns_config_service_unittest.cc92
1 files changed, 71 insertions, 21 deletions
diff --git a/net/dns/dns_config_service_unittest.cc b/net/dns/dns_config_service_unittest.cc
index 2533809..c89f35b 100644
--- a/net/dns/dns_config_service_unittest.cc
+++ b/net/dns/dns_config_service_unittest.cc
@@ -19,8 +19,6 @@ namespace {
class DnsConfigServiceTest : public testing::Test {
public:
void OnConfigChanged(const DnsConfig& config) {
- EXPECT_FALSE(config.Equals(last_config_)) <<
- "Config must be different from last call.";
last_config_ = config;
if (quit_on_config_)
MessageLoop::current()->Quit();
@@ -29,7 +27,8 @@ class DnsConfigServiceTest : public testing::Test {
protected:
class TestDnsConfigService : public DnsConfigService {
public:
- virtual void OnDNSChanged(unsigned detail) OVERRIDE {}
+ virtual void ReadNow() OVERRIDE {}
+ virtual bool StartWatching() OVERRIDE { return true; }
// Expose the protected methods to this test suite.
void InvalidateConfig() {
@@ -47,6 +46,10 @@ class DnsConfigServiceTest : public testing::Test {
void OnHostsRead(const DnsHosts& hosts) {
DnsConfigService::OnHostsRead(hosts);
}
+
+ void set_watch_failed(bool value) {
+ DnsConfigService::set_watch_failed(value);
+ }
};
void WaitForConfig(base::TimeDelta timeout) {
@@ -64,7 +67,7 @@ class DnsConfigServiceTest : public testing::Test {
DnsConfig MakeConfig(unsigned seed) {
DnsConfig config;
IPAddressNumber ip;
- EXPECT_TRUE(ParseIPLiteralToNumber("1.2.3.4", &ip));
+ CHECK(ParseIPLiteralToNumber("1.2.3.4", &ip));
config.nameservers.push_back(IPEndPoint(ip, seed & 0xFFFF));
EXPECT_TRUE(config.IsValid());
return config;
@@ -84,8 +87,8 @@ class DnsConfigServiceTest : public testing::Test {
quit_on_config_ = false;
service_.reset(new TestDnsConfigService());
- service_->Watch(base::Bind(&DnsConfigServiceTest::OnConfigChanged,
- base::Unretained(this)));
+ service_->WatchConfig(base::Bind(&DnsConfigServiceTest::OnConfigChanged,
+ base::Unretained(this)));
EXPECT_FALSE(last_config_.IsValid());
}
@@ -103,11 +106,9 @@ TEST_F(DnsConfigServiceTest, FirstConfig) {
service_->OnConfigRead(config);
// No hosts yet, so no config.
- EXPECT_FALSE(last_config_.IsValid());
+ EXPECT_TRUE(last_config_.Equals(DnsConfig()));
service_->OnHostsRead(config.hosts);
- // Empty hosts is acceptable.
- EXPECT_TRUE(last_config_.IsValid());
EXPECT_TRUE(last_config_.Equals(config));
}
@@ -118,29 +119,34 @@ TEST_F(DnsConfigServiceTest, Timeout) {
service_->OnConfigRead(config);
service_->OnHostsRead(config.hosts);
- EXPECT_TRUE(last_config_.IsValid());
+ EXPECT_FALSE(last_config_.Equals(DnsConfig()));
EXPECT_TRUE(last_config_.Equals(config));
service_->InvalidateConfig();
WaitForConfig(TestTimeouts::action_timeout());
- EXPECT_FALSE(last_config_.IsValid());
+ 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_.IsValid());
+ 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. If we get an update,
- // we'll detect unchanged config.
+ // We don't expect an update. This should time out.
WaitForConfig(base::TimeDelta::FromMilliseconds(100) +
TestTimeouts::tiny_timeout());
- EXPECT_FALSE(last_config_.IsValid());
+ 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));
}
@@ -150,14 +156,15 @@ TEST_F(DnsConfigServiceTest, SameConfig) {
service_->OnConfigRead(config);
service_->OnHostsRead(config.hosts);
+ EXPECT_FALSE(last_config_.Equals(DnsConfig()));
EXPECT_TRUE(last_config_.Equals(config));
- // OnConfigChanged will catch if there was no change.
+ last_config_ = DnsConfig();
service_->OnConfigRead(config);
- EXPECT_TRUE(last_config_.Equals(config));
+ EXPECT_TRUE(last_config_.Equals(DnsConfig())) << "Unexpected change";
service_->OnHostsRead(config.hosts);
- EXPECT_TRUE(last_config_.Equals(config));
+ EXPECT_TRUE(last_config_.Equals(DnsConfig())) << "Unexpected change";
}
TEST_F(DnsConfigServiceTest, DifferentConfig) {
@@ -174,6 +181,7 @@ TEST_F(DnsConfigServiceTest, DifferentConfig) {
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.
@@ -181,14 +189,56 @@ TEST_F(DnsConfigServiceTest, DifferentConfig) {
service_->InvalidateHosts();
service_->OnConfigRead(config2);
- service_->OnHostsRead(config2.hosts);
+ 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
@@ -196,8 +246,8 @@ TEST_F(DnsConfigServiceTest, FLAKY_GetSystemConfig) {
service_.reset();
scoped_ptr<DnsConfigService> service(DnsConfigService::CreateSystemService());
- service->Read(base::Bind(&DnsConfigServiceTest::OnConfigChanged,
- base::Unretained(this)));
+ 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 " <<