diff options
author | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-21 12:54:37 +0000 |
---|---|---|
committer | agayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-21 12:54:37 +0000 |
commit | d987cca5eac5c840027698fa49a4712d84057e68 (patch) | |
tree | d92552852fdb7e6c387c9d2f46357beb753ee6d5 /net/base/host_resolver_impl_unittest.cc | |
parent | 357b5202da8b573ef3239e722bc18d93fc90fbd9 (diff) | |
download | chromium_src-d987cca5eac5c840027698fa49a4712d84057e68.zip chromium_src-d987cca5eac5c840027698fa49a4712d84057e68.tar.gz chromium_src-d987cca5eac5c840027698fa49a4712d84057e68.tar.bz2 |
Implemented AsyncHostResolver -- asynchronous HostResolver!
BUG=60149
TEST=net_unittests --gtest_filter="AsyncHostResolverTest*"
Review URL: http://codereview.chromium.org/7472025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@93380 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/host_resolver_impl_unittest.cc')
-rw-r--r-- | net/base/host_resolver_impl_unittest.cc | 94 |
1 files changed, 14 insertions, 80 deletions
diff --git a/net/base/host_resolver_impl_unittest.cc b/net/base/host_resolver_impl_unittest.cc index 52b7f89..a833599 100644 --- a/net/base/host_resolver_impl_unittest.cc +++ b/net/base/host_resolver_impl_unittest.cc @@ -16,6 +16,7 @@ #include "base/time.h" #include "net/base/address_list.h" #include "net/base/completion_callback.h" +#include "net/base/dns_test_util.h" #include "net/base/mock_host_resolver.h" #include "net/base/net_errors.h" #include "net/base/net_log_unittest.h" @@ -979,73 +980,6 @@ TEST_F(HostResolverImplTest, BypassCache) { MessageLoop::current()->Run(); } -bool operator==(const HostResolver::RequestInfo& a, - const HostResolver::RequestInfo& b) { - return a.hostname() == b.hostname() && - a.port() == b.port() && - a.allow_cached_response() == b.allow_cached_response() && - a.priority() == b.priority() && - a.is_speculative() == b.is_speculative() && - a.referrer() == b.referrer(); -} - -// Observer that just makes note of how it was called. The test code can then -// inspect to make sure it was called with the right parameters. -class CapturingObserver : public HostResolver::Observer { - public: - // DnsResolutionObserver methods: - virtual void OnStartResolution(int id, - const HostResolver::RequestInfo& info) { - start_log.push_back(StartOrCancelEntry(id, info)); - } - - virtual void OnFinishResolutionWithStatus( - int id, - bool was_resolved, - const HostResolver::RequestInfo& info) { - finish_log.push_back(FinishEntry(id, was_resolved, info)); - } - - virtual void OnCancelResolution(int id, - const HostResolver::RequestInfo& info) { - cancel_log.push_back(StartOrCancelEntry(id, info)); - } - - // Tuple (id, info). - struct StartOrCancelEntry { - StartOrCancelEntry(int id, const HostResolver::RequestInfo& info) - : id(id), info(info) {} - - bool operator==(const StartOrCancelEntry& other) const { - return id == other.id && info == other.info; - } - - int id; - HostResolver::RequestInfo info; - }; - - // Tuple (id, was_resolved, info). - struct FinishEntry { - FinishEntry(int id, bool was_resolved, - const HostResolver::RequestInfo& info) - : id(id), was_resolved(was_resolved), info(info) {} - - bool operator==(const FinishEntry& other) const { - return id == other.id && - was_resolved == other.was_resolved && - info == other.info; - } - - int id; - bool was_resolved; - HostResolver::RequestInfo info; - }; - - std::vector<StartOrCancelEntry> start_log; - std::vector<FinishEntry> finish_log; - std::vector<StartOrCancelEntry> cancel_log; -}; - // Test that registering, unregistering, and notifying of observers works. // Does not test the cancellation notification since all resolves are // synchronous. @@ -1053,7 +987,7 @@ TEST_F(HostResolverImplTest, Observers) { scoped_ptr<HostResolver> host_resolver( CreateHostResolverImpl(NULL)); - CapturingObserver observer; + TestHostResolverObserver observer; host_resolver->AddObserver(&observer); @@ -1078,9 +1012,9 @@ TEST_F(HostResolverImplTest, Observers) { EXPECT_EQ(1U, observer.finish_log.size()); EXPECT_EQ(0U, observer.cancel_log.size()); EXPECT_TRUE(observer.start_log[0] == - CapturingObserver::StartOrCancelEntry(0, info1)); + TestHostResolverObserver::StartOrCancelEntry(0, info1)); EXPECT_TRUE(observer.finish_log[0] == - CapturingObserver::FinishEntry(0, true, info1)); + TestHostResolverObserver::FinishEntry(0, true, info1)); // Resolve "host1" again -- this time it will be served from cache, but it // should still notify of completion. @@ -1092,9 +1026,9 @@ TEST_F(HostResolverImplTest, Observers) { EXPECT_EQ(2U, observer.finish_log.size()); EXPECT_EQ(0U, observer.cancel_log.size()); EXPECT_TRUE(observer.start_log[1] == - CapturingObserver::StartOrCancelEntry(1, info1)); + TestHostResolverObserver::StartOrCancelEntry(1, info1)); EXPECT_TRUE(observer.finish_log[1] == - CapturingObserver::FinishEntry(1, true, info1)); + TestHostResolverObserver::FinishEntry(1, true, info1)); // Resolve "host2", setting referrer to "http://foobar.com" HostResolver::RequestInfo info2(HostPortPair("host2", 70)); @@ -1106,9 +1040,9 @@ TEST_F(HostResolverImplTest, Observers) { EXPECT_EQ(3U, observer.finish_log.size()); EXPECT_EQ(0U, observer.cancel_log.size()); EXPECT_TRUE(observer.start_log[2] == - CapturingObserver::StartOrCancelEntry(2, info2)); + TestHostResolverObserver::StartOrCancelEntry(2, info2)); EXPECT_TRUE(observer.finish_log[2] == - CapturingObserver::FinishEntry(2, true, info2)); + TestHostResolverObserver::FinishEntry(2, true, info2)); // Unregister the observer. host_resolver->RemoveObserver(&observer); @@ -1128,7 +1062,7 @@ TEST_F(HostResolverImplTest, Observers) { // (1) Delete the HostResolver while job is outstanding. // (2) Call HostResolver::CancelRequest() while a request is outstanding. TEST_F(HostResolverImplTest, CancellationObserver) { - CapturingObserver observer; + TestHostResolverObserver observer; { // Create a host resolver and attach an observer. scoped_ptr<HostResolver> host_resolver( @@ -1155,7 +1089,7 @@ TEST_F(HostResolverImplTest, CancellationObserver) { EXPECT_EQ(0U, observer.cancel_log.size()); EXPECT_TRUE(observer.start_log[0] == - CapturingObserver::StartOrCancelEntry(0, info1)); + TestHostResolverObserver::StartOrCancelEntry(0, info1)); // Cancel the request. host_resolver->CancelRequest(req); @@ -1165,7 +1099,7 @@ TEST_F(HostResolverImplTest, CancellationObserver) { EXPECT_EQ(1U, observer.cancel_log.size()); EXPECT_TRUE(observer.cancel_log[0] == - CapturingObserver::StartOrCancelEntry(0, info1)); + TestHostResolverObserver::StartOrCancelEntry(0, info1)); // Start an async request for (host2:60) HostResolver::RequestInfo info2(HostPortPair("host2", 60)); @@ -1179,7 +1113,7 @@ TEST_F(HostResolverImplTest, CancellationObserver) { EXPECT_EQ(1U, observer.cancel_log.size()); EXPECT_TRUE(observer.start_log[1] == - CapturingObserver::StartOrCancelEntry(1, info2)); + TestHostResolverObserver::StartOrCancelEntry(1, info2)); // Upon exiting this scope, HostResolver is destroyed, so all requests are // implicitly cancelled. @@ -1194,7 +1128,7 @@ TEST_F(HostResolverImplTest, CancellationObserver) { HostResolver::RequestInfo info(HostPortPair("host2", 60)); EXPECT_TRUE(observer.cancel_log[1] == - CapturingObserver::StartOrCancelEntry(1, info)); + TestHostResolverObserver::StartOrCancelEntry(1, info)); } // Test that IP address changes flush the cache. @@ -1364,7 +1298,7 @@ TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) { new HostResolverImpl(resolver_proc, CreateDefaultCache(), kMaxJobs, kRetryAttempts, NULL)); - CapturingObserver observer; + TestHostResolverObserver observer; host_resolver->AddObserver(&observer); // Note that at this point the CapturingHostResolverProc is blocked, so any |