diff options
author | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-03 00:17:29 +0000 |
---|---|---|
committer | szym@chromium.org <szym@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-03 00:17:29 +0000 |
commit | 6998a66de5bb5889f5a31732236bdc9205ca200b (patch) | |
tree | bcc42aff5c80379b344fc71742287442d8c19cec /net/dns/dns_config_service_unittest.cc | |
parent | db8c36868a4e462a466f30adfe3b3ab1bb78daa6 (diff) | |
download | chromium_src-6998a66de5bb5889f5a31732236bdc9205ca200b.zip chromium_src-6998a66de5bb5889f5a31732236bdc9205ca200b.tar.gz chromium_src-6998a66de5bb5889f5a31732236bdc9205ca200b.tar.bz2 |
Refactoring and further work on DnsConfigService
- Isolate WatchingFileReader for reusability and testability
- DnsHosts and ParseHosts to parse /etc/hosts
BUG=90881
TEST=./net_unittests --gtest_filter='DnsConfig*:DnsHosts*:WatchingFileReader*'
Review URL: http://codereview.chromium.org/7826010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99484 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/dns/dns_config_service_unittest.cc')
-rw-r--r-- | net/dns/dns_config_service_unittest.cc | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/net/dns/dns_config_service_unittest.cc b/net/dns/dns_config_service_unittest.cc new file mode 100644 index 0000000..0a86dca --- /dev/null +++ b/net/dns/dns_config_service_unittest.cc @@ -0,0 +1,108 @@ +// Copyright (c) 2011 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/compiler_specific.h" +#include "base/message_loop.h" +#include "base/task.h" +#include "base/test/test_timeouts.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { + +namespace { + +class DnsConfigServiceTest : public testing::Test, + public DnsConfigService::Observer { + public: + void OnConfigChanged(const DnsConfig& config) OVERRIDE { + EXPECT_FALSE(config.Equals(last_config_)) << + "Config must be different from last call."; + last_config_ = config; + if (quit_on_config_) + MessageLoop::current()->Quit(); + } + void Timeout() const { + MessageLoop::current()->Quit(); + } + + protected: + // test::Test methods + virtual void SetUp() OVERRIDE { + service_.reset(new DnsConfigService()); + quit_on_config_ = false; + } + + DnsConfig last_config_; + bool quit_on_config_; + + // Service under test. + scoped_ptr<DnsConfigService> service_; +}; + +} // namespace + +TEST_F(DnsConfigServiceTest, NotifyOnChange) { + service_->AddObserver(this); + service_->Watch(); + + DnsConfig config; + IPAddressNumber ip; + ASSERT_TRUE(ParseIPLiteralToNumber("1.2.3.4", &ip)); + config.nameservers.push_back(IPEndPoint(ip, 53)); + ASSERT_TRUE(config.IsValid()); + service_->OnConfigRead(config); + + EXPECT_FALSE(last_config_.Equals(config)) << + "Unexpected notification with incomplete config."; + + DnsHosts hosts; + ParseHosts("127.0.0.1 localhost", &hosts); + ASSERT_FALSE(hosts.empty()); + service_->OnHostsRead(hosts); + + EXPECT_TRUE(last_config_.hosts == hosts); + EXPECT_TRUE(last_config_.EqualsIgnoreHosts(config)); + + DnsConfig complete_config = config; + complete_config.hosts = hosts; + EXPECT_TRUE(last_config_.Equals(complete_config)); + + // Check if it ignores no-change in config or hosts. + service_->OnConfigRead(config); + service_->OnHostsRead(hosts); + + // Check if it provides config and hosts after AddObserver; + service_->RemoveObserver(this); + last_config_ = DnsConfig(); + service_->AddObserver(this); + EXPECT_TRUE(last_config_.Equals(complete_config)); +} + +#if defined(OS_POSIX) +// TODO(szym): enable OS_WIN once ready +// This is really an integration test. +TEST_F(DnsConfigServiceTest, GetSystemConfig) { + scoped_ptr<DnsConfigService> service(DnsConfigService::CreateSystemService()); + + // Quit the loop after timeout unless cancelled + const int64 kTimeout = TestTimeouts::action_timeout_ms(); + ScopedRunnableMethodFactory<DnsConfigServiceTest> factory_(this); + MessageLoop::current()->PostDelayedTask( + FROM_HERE, + factory_.NewRunnableMethod(&DnsConfigServiceTest::Timeout), + kTimeout); + + service->AddObserver(this); + service->Watch(); + quit_on_config_ = true; + MessageLoop::current()->Run(); + ASSERT_TRUE(last_config_.IsValid()) << "Did not receive DnsConfig in " << + kTimeout << "ms"; +} +#endif // OS_POSIX + +} // namespace net + |