summaryrefslogtreecommitdiffstats
path: root/net/base/host_resolver_impl_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/base/host_resolver_impl_unittest.cc')
-rw-r--r--net/base/host_resolver_impl_unittest.cc37
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 fb5b5dc..233ee21 100644
--- a/net/base/host_resolver_impl_unittest.cc
+++ b/net/base/host_resolver_impl_unittest.cc
@@ -1130,6 +1130,43 @@ TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) {
EXPECT_EQ(0u, cache->size());
}
+// Obey pool constraints after IP address has changed.
+TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) {
+ scoped_refptr<WaitingHostResolverProc> resolver_proc =
+ new WaitingHostResolverProc(NULL);
+ scoped_refptr<MockHostResolver> host_resolver(new MockHostResolver());
+ host_resolver->Reset(resolver_proc);
+
+ const size_t kMaxOutstandingJobs = 1u;
+ const size_t kMaxPendingRequests = 1000000u; // not relevant.
+ host_resolver->SetPoolConstraints(HostResolverImpl::POOL_NORMAL,
+ kMaxOutstandingJobs,
+ kMaxPendingRequests);
+
+ // Resolve "host1".
+ HostResolver::RequestInfo info(HostPortPair("host1", 70));
+ TestCompletionCallback callback;
+ AddressList addrlist;
+ int rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
+ BoundNetLog());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+
+ // Triggering an IP address change.
+ NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+ MessageLoop::current()->RunAllPending(); // Notification happens async.
+ resolver_proc->Signal();
+
+ EXPECT_EQ(ERR_ABORTED, callback.WaitForResult());
+
+ // Don't bother with WaitingHostResolverProc anymore.
+ host_resolver->Reset(NULL);
+
+ rv = host_resolver->Resolve(info, &addrlist, &callback, NULL,
+ BoundNetLog());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ EXPECT_EQ(OK, callback.WaitForResult());
+}
+
class ResolveWithinCallback : public CallbackRunner< Tuple1<int> > {
public:
ResolveWithinCallback(