| Index: net/proxy/proxy_resolver_js_bindings_unittest.cc
|
| diff --git a/net/proxy/proxy_resolver_js_bindings_unittest.cc b/net/proxy/proxy_resolver_js_bindings_unittest.cc
|
| deleted file mode 100644
|
| index 97d69bf4bbc1bfba35ce22c70b2a2fb45057b393..0000000000000000000000000000000000000000
|
| --- a/net/proxy/proxy_resolver_js_bindings_unittest.cc
|
| +++ /dev/null
|
| @@ -1,365 +0,0 @@
|
| -// Copyright (c) 2012 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/proxy/proxy_resolver_js_bindings.h"
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/string_util.h"
|
| -#include "net/base/address_list.h"
|
| -#include "net/base/host_cache.h"
|
| -#include "net/base/mock_host_resolver.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/base/net_log_unittest.h"
|
| -#include "net/base/net_util.h"
|
| -#include "net/base/test_completion_callback.h"
|
| -#include "net/proxy/proxy_resolver_request_context.h"
|
| -#include "net/proxy/sync_host_resolver.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -// This is a HostResolver that synchronously resolves all hosts to the
|
| -// following address list of length 3:
|
| -// 192.168.1.1
|
| -// 172.22.34.1
|
| -// 200.100.1.2
|
| -class MockHostResolverWithMultipleResults : public SyncHostResolver {
|
| - public:
|
| - // HostResolver methods:
|
| - virtual int Resolve(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& bound_net_log) OVERRIDE {
|
| - return ParseAddressList("192.168.1.1,172.22.34.1,200.100.1.2", "",
|
| - addresses);
|
| - }
|
| -
|
| - virtual void Shutdown() OVERRIDE {}
|
| -
|
| - private:
|
| - virtual ~MockHostResolverWithMultipleResults() {}
|
| -};
|
| -
|
| -class MockFailingHostResolver : public SyncHostResolver {
|
| - public:
|
| - MockFailingHostResolver() : count_(0) {}
|
| -
|
| - // HostResolver methods:
|
| - virtual int Resolve(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& bound_net_log) OVERRIDE {
|
| - count_++;
|
| - return ERR_NAME_NOT_RESOLVED;
|
| - }
|
| -
|
| - virtual void Shutdown() OVERRIDE {}
|
| -
|
| - // Returns the number of times Resolve() has been called.
|
| - int count() const { return count_; }
|
| - void ResetCount() { count_ = 0; }
|
| -
|
| - private:
|
| - int count_;
|
| -};
|
| -
|
| -class MockSyncHostResolver : public SyncHostResolver {
|
| - public:
|
| - MockSyncHostResolver() {
|
| - resolver_.set_synchronous_mode(true);
|
| - }
|
| -
|
| - virtual int Resolve(const HostResolver::RequestInfo& info,
|
| - AddressList* addresses,
|
| - const BoundNetLog& bound_net_log) OVERRIDE {
|
| - return resolver_.Resolve(info, addresses, CompletionCallback(), NULL,
|
| - bound_net_log);
|
| - }
|
| -
|
| - virtual void Shutdown() OVERRIDE {}
|
| -
|
| - RuleBasedHostResolverProc* rules() {
|
| - return resolver_.rules();
|
| - }
|
| -
|
| - private:
|
| - MockHostResolver resolver_;
|
| -};
|
| -
|
| -TEST(ProxyResolverJSBindingsTest, DnsResolve) {
|
| - MockSyncHostResolver* host_resolver = new MockSyncHostResolver;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(host_resolver, NULL, NULL));
|
| -
|
| - std::string ip_address;
|
| -
|
| - // Empty string is not considered a valid host (even though on some systems
|
| - // requesting this will resolve to localhost).
|
| - host_resolver->rules()->AddSimulatedFailure("");
|
| - EXPECT_FALSE(bindings->DnsResolve("", &ip_address));
|
| -
|
| - // Should call through to the HostResolver.
|
| - host_resolver->rules()->AddRule("google.com", "192.168.1.1");
|
| - EXPECT_TRUE(bindings->DnsResolve("google.com", &ip_address));
|
| - EXPECT_EQ("192.168.1.1", ip_address);
|
| -
|
| - // Resolve failures should give empty string.
|
| - host_resolver->rules()->AddSimulatedFailure("fail");
|
| - EXPECT_FALSE(bindings->DnsResolve("fail", &ip_address));
|
| -
|
| - // TODO(eroman): would be nice to have an IPV6 test here too, but that
|
| - // won't work on all systems.
|
| -}
|
| -
|
| -TEST(ProxyResolverJSBindingsTest, MyIpAddress) {
|
| - MockSyncHostResolver* host_resolver = new MockSyncHostResolver;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(host_resolver, NULL, NULL));
|
| -
|
| - // Our IP address is always going to be 127.0.0.1, since we are using a
|
| - // mock host resolver.
|
| - std::string my_ip_address;
|
| - EXPECT_TRUE(bindings->MyIpAddress(&my_ip_address));
|
| -
|
| - EXPECT_EQ("127.0.0.1", my_ip_address);
|
| -}
|
| -
|
| -// Tests that the regular PAC functions restrict results to IPv4,
|
| -// but that the Microsoft extensions to PAC do not. We test this
|
| -// by seeing whether ADDRESS_FAMILY_IPV4 or ADDRESS_FAMILY_UNSPECIFIED
|
| -// was passed into to the host resolver.
|
| -//
|
| -// Restricted to IPv4 address family:
|
| -// myIpAddress()
|
| -// dnsResolve()
|
| -//
|
| -// Unrestricted address family:
|
| -// myIpAddressEx()
|
| -// dnsResolveEx()
|
| -TEST(ProxyResolverJSBindingsTest, RestrictAddressFamily) {
|
| - MockSyncHostResolver* host_resolver = new MockSyncHostResolver;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(host_resolver, NULL, NULL));
|
| -
|
| - // Make it so requests resolve to particular address patterns based on family:
|
| - // IPV4_ONLY --> 192.168.1.*
|
| - // UNSPECIFIED --> 192.168.2.1
|
| - host_resolver->rules()->AddRuleForAddressFamily(
|
| - "foo", ADDRESS_FAMILY_IPV4, "192.168.1.1");
|
| - host_resolver->rules()->AddRuleForAddressFamily(
|
| - "*", ADDRESS_FAMILY_IPV4, "192.168.1.2");
|
| - host_resolver->rules()->AddRuleForAddressFamily(
|
| - "foo", ADDRESS_FAMILY_UNSPECIFIED, "192.168.2.1");
|
| - host_resolver->rules()->AddRuleForAddressFamily(
|
| - "*", ADDRESS_FAMILY_UNSPECIFIED, "192.168.2.2");
|
| -
|
| - // Verify that our mock setups works as expected, and we get different results
|
| - // depending if the address family was IPV4_ONLY or not.
|
| - HostResolver::RequestInfo info(HostPortPair("foo", 80));
|
| - AddressList address_list;
|
| - EXPECT_EQ(OK, host_resolver->Resolve(info, &address_list, BoundNetLog()));
|
| - ASSERT_FALSE(address_list.empty());
|
| - EXPECT_EQ("192.168.2.1", address_list.front().ToStringWithoutPort());
|
| -
|
| - info.set_address_family(ADDRESS_FAMILY_IPV4);
|
| - EXPECT_EQ(OK, host_resolver->Resolve(info, &address_list, BoundNetLog()));
|
| - ASSERT_FALSE(address_list.empty());
|
| - EXPECT_EQ("192.168.1.1", address_list.front().ToStringWithoutPort());
|
| -
|
| - std::string ip_address;
|
| - // Now the actual test.
|
| - EXPECT_TRUE(bindings->MyIpAddress(&ip_address));
|
| - EXPECT_EQ("192.168.1.2", ip_address); // IPv4 restricted.
|
| -
|
| - EXPECT_TRUE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_EQ("192.168.1.1", ip_address); // IPv4 restricted.
|
| -
|
| - EXPECT_TRUE(bindings->DnsResolve("foo2", &ip_address));
|
| - EXPECT_EQ("192.168.1.2", ip_address); // IPv4 restricted.
|
| -
|
| - EXPECT_TRUE(bindings->MyIpAddressEx(&ip_address));
|
| - EXPECT_EQ("192.168.2.2", ip_address); // Unrestricted.
|
| -
|
| - EXPECT_TRUE(bindings->DnsResolveEx("foo", &ip_address));
|
| - EXPECT_EQ("192.168.2.1", ip_address); // Unrestricted.
|
| -
|
| - EXPECT_TRUE(bindings->DnsResolveEx("foo2", &ip_address));
|
| - EXPECT_EQ("192.168.2.2", ip_address); // Unrestricted.
|
| -}
|
| -
|
| -// Test that myIpAddressEx() and dnsResolveEx() both return a semi-colon
|
| -// separated list of addresses (as opposed to the non-Ex versions which
|
| -// just return the first result).
|
| -TEST(ProxyResolverJSBindingsTest, ExFunctionsReturnList) {
|
| - SyncHostResolver* host_resolver =
|
| - new MockHostResolverWithMultipleResults;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(host_resolver, NULL, NULL));
|
| -
|
| - std::string ip_addresses;
|
| -
|
| - EXPECT_TRUE(bindings->MyIpAddressEx(&ip_addresses));
|
| - EXPECT_EQ("192.168.1.1;172.22.34.1;200.100.1.2", ip_addresses);
|
| -
|
| - EXPECT_TRUE(bindings->DnsResolveEx("FOO", &ip_addresses));
|
| - EXPECT_EQ("192.168.1.1;172.22.34.1;200.100.1.2", ip_addresses);
|
| -}
|
| -
|
| -TEST(ProxyResolverJSBindingsTest, PerRequestDNSCache) {
|
| - MockFailingHostResolver* host_resolver = new MockFailingHostResolver;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(host_resolver, NULL, NULL));
|
| -
|
| - std::string ip_address;
|
| -
|
| - // Call DnsResolve() 4 times for the same hostname -- this should issue
|
| - // 4 separate calls to the underlying host resolver, since there is no
|
| - // current request context.
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_EQ(4, host_resolver->count());
|
| -
|
| - host_resolver->ResetCount();
|
| -
|
| - // Now setup a per-request context, and try the same experiment -- we
|
| - // expect the underlying host resolver to receive only 1 request this time,
|
| - // since it will service the others from the per-request DNS cache.
|
| - const unsigned kMaxCacheEntries = 50;
|
| - HostCache cache(kMaxCacheEntries);
|
| - ProxyResolverRequestContext context(NULL, &cache);
|
| - bindings->set_current_request_context(&context);
|
| -
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolve("foo", &ip_address));
|
| - EXPECT_EQ(1, host_resolver->count());
|
| -
|
| - host_resolver->ResetCount();
|
| -
|
| - // The "Ex" version shares this same cache, however since the flags
|
| - // are different it won't reuse this particular entry.
|
| - EXPECT_FALSE(bindings->DnsResolveEx("foo", &ip_address));
|
| - EXPECT_EQ(1, host_resolver->count());
|
| - EXPECT_FALSE(bindings->DnsResolveEx("foo", &ip_address));
|
| - EXPECT_FALSE(bindings->DnsResolveEx("foo", &ip_address));
|
| - EXPECT_EQ(1, host_resolver->count());
|
| -
|
| - bindings->set_current_request_context(NULL);
|
| -}
|
| -
|
| -// Test that when a binding is called, it logs to the per-request NetLog.
|
| -TEST(ProxyResolverJSBindingsTest, NetLog) {
|
| - MockFailingHostResolver* host_resolver = new MockFailingHostResolver;
|
| -
|
| - CapturingNetLog global_log;
|
| -
|
| - // Get a hold of a DefaultJSBindings* (it is a hidden impl class).
|
| - scoped_ptr<ProxyResolverJSBindings> bindings(
|
| - ProxyResolverJSBindings::CreateDefault(
|
| - host_resolver, &global_log, NULL));
|
| -
|
| - // Attach a capturing NetLog as the current request's log stream.
|
| - CapturingNetLog log;
|
| - BoundNetLog bound_log(BoundNetLog::Make(&log, NetLog::SOURCE_NONE));
|
| - ProxyResolverRequestContext context(&bound_log, NULL);
|
| - bindings->set_current_request_context(&context);
|
| -
|
| - std::string ip_address;
|
| - net::CapturingNetLog::CapturedEntryList entries;
|
| - log.GetEntries(&entries);
|
| - ASSERT_EQ(0u, entries.size());
|
| -
|
| - // Call all the bindings. Each call should be logging something to
|
| - // our NetLog.
|
| -
|
| - bindings->MyIpAddress(&ip_address);
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(2u, entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - entries, 0, NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - entries, 1, NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS));
|
| -
|
| - bindings->MyIpAddressEx(&ip_address);
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(4u, entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - entries, 2, NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS_EX));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - entries, 3, NetLog::TYPE_PAC_JAVASCRIPT_MY_IP_ADDRESS_EX));
|
| -
|
| - bindings->DnsResolve("foo", &ip_address);
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(6u, entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - entries, 4, NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - entries, 5, NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE));
|
| -
|
| - bindings->DnsResolveEx("foo", &ip_address);
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(8u, entries.size());
|
| - EXPECT_TRUE(LogContainsBeginEvent(
|
| - entries, 6, NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE_EX));
|
| - EXPECT_TRUE(LogContainsEndEvent(
|
| - entries, 7, NetLog::TYPE_PAC_JAVASCRIPT_DNS_RESOLVE_EX));
|
| -
|
| - // Nothing has been emitted globally yet.
|
| - net::CapturingNetLog::CapturedEntryList global_log_entries;
|
| - global_log.GetEntries(&global_log_entries);
|
| - EXPECT_EQ(0u, global_log_entries.size());
|
| -
|
| - bindings->OnError(30, string16());
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(9u, entries.size());
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - entries, 8, NetLog::TYPE_PAC_JAVASCRIPT_ERROR,
|
| - NetLog::PHASE_NONE));
|
| -
|
| - // We also emit errors to the top-level log stream.
|
| - global_log.GetEntries(&global_log_entries);
|
| - EXPECT_EQ(1u, global_log_entries.size());
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - global_log_entries, 0, NetLog::TYPE_PAC_JAVASCRIPT_ERROR,
|
| - NetLog::PHASE_NONE));
|
| -
|
| - bindings->Alert(string16());
|
| -
|
| - log.GetEntries(&entries);
|
| - EXPECT_EQ(10u, entries.size());
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - entries, 9, NetLog::TYPE_PAC_JAVASCRIPT_ALERT,
|
| - NetLog::PHASE_NONE));
|
| -
|
| - // We also emit javascript alerts to the top-level log stream.
|
| - global_log.GetEntries(&global_log_entries);
|
| - EXPECT_EQ(2u, global_log_entries.size());
|
| - EXPECT_TRUE(LogContainsEvent(
|
| - global_log_entries, 1, NetLog::TYPE_PAC_JAVASCRIPT_ALERT,
|
| - NetLog::PHASE_NONE));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace net
|
|
|