summaryrefslogtreecommitdiffstats
path: root/net/http
diff options
context:
space:
mode:
authorericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-15 22:04:32 +0000
committerericroman@google.com <ericroman@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-07-15 22:04:32 +0000
commitb59ff376c5d5b950774fcbe65727611d51832b75 (patch)
treea37598ddd4e9ec0530d5820bcce1f47bafa89289 /net/http
parent89d70652ad0bb9e7f419c17516fad279d8a4db32 (diff)
downloadchromium_src-b59ff376c5d5b950774fcbe65727611d51832b75.zip
chromium_src-b59ff376c5d5b950774fcbe65727611d51832b75.tar.gz
chromium_src-b59ff376c5d5b950774fcbe65727611d51832b75.tar.bz2
Refactorings surrounding HostResolver:
(1) Extract HostResolver to an interface. The existing concrete implementation is now named HostResolverImpl. This makes it possible to create mocks with more complex behavior (i.e. choose via rules if response will be sync vs async). (2) Transform HostMapper into HostResolverProc. Conceptually HostResolverProc maps a hostname to a socket address, whereas HostMapper mapped a hostname to another hostname (so you were still at the mercy of the system's host resolver). With HostResolverProc you can specify the exact AddressList, making it possible to run tests requiring IPv6 socketaddrs on systems (like WinXP) that don't actually support it. (3) Add a MockHostResolver implementation of HostResolver. This replaces the [ScopedHostMapper + RuleBasedHostMapper + HostResolver] combo. It is less clunky and a bit more expressive. BUG=http://crbug.com/16452 R=willchan TEST=existing Review URL: http://codereview.chromium.org/149511 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20795 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http')
-rw-r--r--net/http/http_network_layer_unittest.cc8
-rw-r--r--net/http/http_network_transaction_unittest.cc25
2 files changed, 17 insertions, 16 deletions
diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc
index 9fd35ea..b61ca3d 100644
--- a/net/http/http_network_layer_unittest.cc
+++ b/net/http/http_network_layer_unittest.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "net/base/host_resolver.h"
+#include "net/base/mock_host_resolver.h"
#include "net/http/http_network_layer.h"
#include "net/http/http_transaction_unittest.h"
#include "net/proxy/proxy_service.h"
@@ -16,7 +16,7 @@ class HttpNetworkLayerTest : public PlatformTest {
TEST_F(HttpNetworkLayerTest, CreateAndDestroy) {
scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull());
net::HttpNetworkLayer factory(
- NULL, new net::HostResolver, proxy_service.get());
+ NULL, new net::MockHostResolver, proxy_service.get());
scoped_ptr<net::HttpTransaction> trans(factory.CreateTransaction());
}
@@ -24,7 +24,7 @@ TEST_F(HttpNetworkLayerTest, CreateAndDestroy) {
TEST_F(HttpNetworkLayerTest, Suspend) {
scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull());
net::HttpNetworkLayer factory(
- NULL, new net::HostResolver, proxy_service.get());
+ NULL, new net::MockHostResolver, proxy_service.get());
scoped_ptr<net::HttpTransaction> trans(factory.CreateTransaction());
trans.reset();
@@ -56,7 +56,7 @@ TEST_F(HttpNetworkLayerTest, GET) {
mock_socket_factory.AddMockSocket(&data);
scoped_ptr<net::ProxyService> proxy_service(net::ProxyService::CreateNull());
- net::HttpNetworkLayer factory(&mock_socket_factory, new net::HostResolver,
+ net::HttpNetworkLayer factory(&mock_socket_factory, new net::MockHostResolver,
proxy_service.get());
TestCompletionCallback callback;
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 74764a5..c1510a1 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -6,7 +6,7 @@
#include "base/compiler_specific.h"
#include "net/base/completion_callback.h"
-#include "net/base/host_resolver_unittest.h"
+#include "net/base/mock_host_resolver.h"
#include "net/base/ssl_info.h"
#include "net/base/test_completion_callback.h"
#include "net/base/upload_data.h"
@@ -35,14 +35,14 @@ ProxyService* CreateNullProxyService() {
class SessionDependencies {
public:
// Default set of dependencies -- "null" proxy service.
- SessionDependencies() : host_resolver(new HostResolver),
+ SessionDependencies() : host_resolver(new MockHostResolver),
proxy_service(CreateNullProxyService()) {}
// Custom proxy service dependency.
explicit SessionDependencies(ProxyService* proxy_service)
- : host_resolver(new HostResolver), proxy_service(proxy_service) {}
+ : host_resolver(new MockHostResolver), proxy_service(proxy_service) {}
- scoped_refptr<HostResolver> host_resolver;
+ scoped_refptr<MockHostResolver> host_resolver;
scoped_ptr<ProxyService> proxy_service;
MockClientSocketFactory socket_factory;
};
@@ -3351,12 +3351,11 @@ TEST_F(HttpNetworkTransactionTest, GroupNameForProxyConnections) {
}
TEST_F(HttpNetworkTransactionTest, ReconsiderProxyAfterFailedConnection) {
- scoped_refptr<RuleBasedHostMapper> host_mapper(new RuleBasedHostMapper());
- ScopedHostMapper scoped_host_mapper(host_mapper.get());
- host_mapper->AddSimulatedFailure("*");
-
SessionDependencies session_deps(
CreateFixedProxyService("myproxy:70;foobar:80"));
+
+ session_deps.host_resolver->rules()->AddSimulatedFailure("*");
+
scoped_ptr<HttpTransaction> trans(
new HttpNetworkTransaction(
CreateSession(&session_deps),
@@ -3457,6 +3456,10 @@ TEST_F(HttpNetworkTransactionTest, ResolveMadeWithReferrer) {
// host cache is bypassed.
TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh) {
SessionDependencies session_deps;
+
+ // Enable caching in the mock host resolver (it is off by default).
+ session_deps.host_resolver->Reset(NULL, 100, 60000);
+
scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(
CreateSession(&session_deps), &session_deps.socket_factory));
@@ -3473,14 +3476,12 @@ TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh) {
rv = session_deps.host_resolver->Resolve(
HostResolver::RequestInfo("www.google.com", 80), &addrlist,
&resolve_callback, NULL);
- EXPECT_EQ(OK, rv);
+ ASSERT_EQ(OK, rv);
// Inject a failure the next time that "www.google.com" is resolved. This way
// we can tell if the next lookup hit the cache, or the "network".
// (cache --> success, "network" --> failure).
- scoped_refptr<RuleBasedHostMapper> host_mapper(new RuleBasedHostMapper());
- ScopedHostMapper scoped_host_mapper(host_mapper.get());
- host_mapper->AddSimulatedFailure("www.google.com");
+ session_deps.host_resolver->rules()->AddSimulatedFailure("www.google.com");
// Connect up a mock socket which will fail with ERR_UNEXPECTED during the
// first read -- this won't be reached as the host resolution will fail first.