diff options
author | mbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-02 08:09:40 +0000 |
---|---|---|
committer | mbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-02 08:09:40 +0000 |
commit | 3836871fc5749a9f79290fa97182c45b45d39350 (patch) | |
tree | 4867eef8782c8c8f05ea24d1c3bb27246ac2add2 /net/base/host_resolver_impl_unittest.cc | |
parent | 9fce5f0576768090f2c3b8f751e6e7c805cc0a6e (diff) | |
download | chromium_src-3836871fc5749a9f79290fa97182c45b45d39350.zip chromium_src-3836871fc5749a9f79290fa97182c45b45d39350.tar.gz chromium_src-3836871fc5749a9f79290fa97182c45b45d39350.tar.bz2 |
Add a flag to a host resolver request to request that resolution only
be done from the cache (i.e. don't do a network lookup, and return results
only synchronously).
BUG=none
TEST=HostResolverImplTest::DisallowNonCachedResponses
Review URL: http://codereview.chromium.org/6602038
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76515 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 | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/net/base/host_resolver_impl_unittest.cc b/net/base/host_resolver_impl_unittest.cc index 8d418e9..41e8b91 100644 --- a/net/base/host_resolver_impl_unittest.cc +++ b/net/base/host_resolver_impl_unittest.cc @@ -1657,6 +1657,43 @@ TEST_F(HostResolverImplTest, SetDefaultAddressFamily_Synchronous) { EXPECT_EQ("192.1.98.1", NetAddressToString(addrlist[3].head())); } +TEST_F(HostResolverImplTest, DisallowNonCachedResponses) { + AddressList addrlist; + const int kPortnum = 80; + + scoped_refptr<RuleBasedHostResolverProc> resolver_proc( + new RuleBasedHostResolverProc(NULL)); + resolver_proc->AddRule("just.testing", "192.168.1.42"); + + scoped_ptr<HostResolver> host_resolver( + CreateHostResolverImpl(resolver_proc)); + + // First hit will miss the cache. + HostResolver::RequestInfo info(HostPortPair("just.testing", kPortnum)); + info.set_only_use_cached_response(true); + CapturingBoundNetLog log(CapturingNetLog::kUnbounded); + int err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); + EXPECT_EQ(ERR_NAME_NOT_RESOLVED, err); + + // This time, we fetch normally. + info.set_only_use_cached_response(false); + err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); + EXPECT_EQ(OK, err); + + // Now we should be able to fetch from the cache. + info.set_only_use_cached_response(true); + err = host_resolver->Resolve(info, &addrlist, NULL, NULL, log.bound()); + EXPECT_EQ(OK, err); + + const struct addrinfo* ainfo = addrlist.head(); + EXPECT_EQ(static_cast<addrinfo*>(NULL), ainfo->ai_next); + EXPECT_EQ(sizeof(struct sockaddr_in), ainfo->ai_addrlen); + + const struct sockaddr* sa = ainfo->ai_addr; + const struct sockaddr_in* sa_in = reinterpret_cast<const sockaddr_in*>(sa); + EXPECT_EQ(htons(kPortnum), sa_in->sin_port); + EXPECT_EQ(htonl(0xc0a8012a), sa_in->sin_addr.s_addr); +} // TODO(cbentzel): Test a mix of requests with different HostResolverFlags. } // namespace |