Index: net/proxy/proxy_resolver_perftest.cc |
diff --git a/net/proxy/proxy_resolver_perftest.cc b/net/proxy/proxy_resolver_perftest.cc |
deleted file mode 100644 |
index a910d45d4b792d93dde7491fddad2cf9a04eb4ee..0000000000000000000000000000000000000000 |
--- a/net/proxy/proxy_resolver_perftest.cc |
+++ /dev/null |
@@ -1,286 +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 <utility> |
- |
-#include "base/base_paths.h" |
-#include "base/compiler_specific.h" |
-#include "base/files/file_util.h" |
-#include "base/macros.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/strings/string_util.h" |
-#include "base/test/perf_time_logger.h" |
-#include "net/base/net_errors.h" |
-#include "net/dns/mock_host_resolver.h" |
-#include "net/log/net_log_with_source.h" |
-#include "net/proxy/proxy_info.h" |
-#include "net/proxy/proxy_resolver.h" |
-#include "net/proxy/proxy_resolver_factory.h" |
-#include "net/proxy/proxy_resolver_v8.h" |
-#include "net/test/embedded_test_server/embedded_test_server.h" |
-#include "net/test/gtest_util.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-#if defined(OS_WIN) |
-#include "net/proxy/proxy_resolver_winhttp.h" |
-#elif defined(OS_MACOSX) |
-#include "net/proxy/proxy_resolver_mac.h" |
-#endif |
- |
-using net::test::IsOk; |
- |
-namespace net { |
- |
-namespace { |
- |
-// This class holds the URL to use for resolving, and the expected result. |
-// We track the expected result in order to make sure the performance |
-// test is actually resolving URLs properly, otherwise the perf numbers |
-// are meaningless :-) |
-struct PacQuery { |
- const char* query_url; |
- const char* expected_result; |
-}; |
- |
-// Entry listing which PAC scripts to load, and which URLs to try resolving. |
-// |queries| should be terminated by {NULL, NULL}. A sentinel is used |
-// rather than a length, to simplify using initializer lists. |
-struct PacPerfTest { |
- const char* pac_name; |
- PacQuery queries[100]; |
- |
- // Returns the actual number of entries in |queries| (assumes NULL sentinel). |
- int NumQueries() const; |
-}; |
- |
-// List of performance tests. |
-static PacPerfTest kPerfTests[] = { |
- // This test uses an ad-blocker PAC script. This script is very heavily |
- // regular expression oriented, and has no dependencies on the current |
- // IP address, or DNS resolving of hosts. |
- { "no-ads.pac", |
- { // queries: |
- {"http://www.google.com", "DIRECT"}, |
- {"http://www.imdb.com/photos/cmsicons/x", "PROXY 0.0.0.0:3421"}, |
- {"http://www.imdb.com/x", "DIRECT"}, |
- {"http://www.staples.com/", "DIRECT"}, |
- {"http://www.staples.com/pixeltracker/x", "PROXY 0.0.0.0:3421"}, |
- {"http://www.staples.com/pixel/x", "DIRECT"}, |
- {"http://www.foobar.com", "DIRECT"}, |
- {"http://www.foobarbaz.com/x/y/z", "DIRECT"}, |
- {"http://www.testurl1.com/index.html", "DIRECT"}, |
- {"http://www.testurl2.com", "DIRECT"}, |
- {"https://www.sample/pirate/arrrrrr", "DIRECT"}, |
- {NULL, NULL} |
- }, |
- }, |
-}; |
- |
-int PacPerfTest::NumQueries() const { |
- for (size_t i = 0; i < arraysize(queries); ++i) { |
- if (queries[i].query_url == NULL) |
- return i; |
- } |
- NOTREACHED(); // Bad definition. |
- return 0; |
-} |
- |
-// The number of URLs to resolve when testing a PAC script. |
-const int kNumIterations = 500; |
- |
-// Helper class to run through all the performance tests using the specified |
-// proxy resolver implementation. |
-class PacPerfSuiteRunner { |
- public: |
- // |resolver_name| is the label used when logging the results. |
- PacPerfSuiteRunner(ProxyResolverFactory* factory, |
- const std::string& resolver_name) |
- : factory_(factory), resolver_name_(resolver_name) { |
- test_server_.ServeFilesFromSourceDirectory( |
- "net/data/proxy_resolver_perftest"); |
- } |
- |
- void RunAllTests() { |
- ASSERT_TRUE(test_server_.Start()); |
- for (size_t i = 0; i < arraysize(kPerfTests); ++i) { |
- const PacPerfTest& test_data = kPerfTests[i]; |
- RunTest(test_data.pac_name, |
- test_data.queries, |
- test_data.NumQueries()); |
- } |
- } |
- |
- private: |
- void RunTest(const std::string& script_name, |
- const PacQuery* queries, |
- int queries_len) { |
- std::unique_ptr<ProxyResolver> resolver; |
- if (!factory_->expects_pac_bytes()) { |
- GURL pac_url = test_server_.GetURL(std::string("/") + script_name); |
- int rv = factory_->CreateProxyResolver( |
- ProxyResolverScriptData::FromURL(pac_url), &resolver, |
- CompletionCallback(), nullptr); |
- EXPECT_THAT(rv, IsOk()); |
- } else { |
- resolver = LoadPacScriptAndCreateResolver(script_name); |
- } |
- ASSERT_TRUE(resolver); |
- |
- // Do a query to warm things up. In the case of internal-fetch proxy |
- // resolvers, the first resolve will be slow since it has to download |
- // the PAC script. |
- { |
- ProxyInfo proxy_info; |
- int result = resolver->GetProxyForURL(GURL("http://www.warmup.com"), |
- &proxy_info, CompletionCallback(), |
- NULL, NetLogWithSource()); |
- ASSERT_THAT(result, IsOk()); |
- } |
- |
- // Start the perf timer. |
- std::string perf_test_name = resolver_name_ + "_" + script_name; |
- base::PerfTimeLogger timer(perf_test_name.c_str()); |
- |
- for (int i = 0; i < kNumIterations; ++i) { |
- // Round-robin between URLs to resolve. |
- const PacQuery& query = queries[i % queries_len]; |
- |
- // Resolve. |
- ProxyInfo proxy_info; |
- int result = resolver->GetProxyForURL(GURL(query.query_url), &proxy_info, |
- CompletionCallback(), NULL, |
- NetLogWithSource()); |
- |
- // Check that the result was correct. Note that ToPacString() and |
- // ASSERT_EQ() are fast, so they won't skew the results. |
- ASSERT_THAT(result, IsOk()); |
- ASSERT_EQ(query.expected_result, proxy_info.ToPacString()); |
- } |
- |
- // Print how long the test ran for. |
- timer.Done(); |
- } |
- |
- // Read the PAC script from disk and initialize the proxy resolver with it. |
- std::unique_ptr<ProxyResolver> LoadPacScriptAndCreateResolver( |
- const std::string& script_name) { |
- base::FilePath path; |
- PathService::Get(base::DIR_SOURCE_ROOT, &path); |
- path = path.AppendASCII("net"); |
- path = path.AppendASCII("data"); |
- path = path.AppendASCII("proxy_resolver_perftest"); |
- path = path.AppendASCII(script_name); |
- |
- // Try to read the file from disk. |
- std::string file_contents; |
- bool ok = base::ReadFileToString(path, &file_contents); |
- |
- // If we can't load the file from disk, something is misconfigured. |
- LOG_IF(ERROR, !ok) << "Failed to read file: " << path.value(); |
- if (!ok) |
- return nullptr; |
- |
- // Load the PAC script into the ProxyResolver. |
- std::unique_ptr<ProxyResolver> resolver; |
- int rv = factory_->CreateProxyResolver( |
- ProxyResolverScriptData::FromUTF8(file_contents), &resolver, |
- CompletionCallback(), nullptr); |
- EXPECT_THAT(rv, IsOk()); |
- return resolver; |
- } |
- |
- ProxyResolverFactory* factory_; |
- std::string resolver_name_; |
- EmbeddedTestServer test_server_; |
-}; |
- |
-#if defined(OS_WIN) |
-TEST(ProxyResolverPerfTest, ProxyResolverWinHttp) { |
- ProxyResolverFactoryWinHttp factory; |
- PacPerfSuiteRunner runner(&factory, "ProxyResolverWinHttp"); |
- runner.RunAllTests(); |
-} |
-#elif defined(OS_MACOSX) |
-TEST(ProxyResolverPerfTest, ProxyResolverMac) { |
- ProxyResolverFactoryMac factory; |
- PacPerfSuiteRunner runner(&factory, "ProxyResolverMac"); |
- runner.RunAllTests(); |
-} |
-#endif |
- |
-class MockJSBindings : public ProxyResolverV8::JSBindings { |
- public: |
- MockJSBindings() {} |
- |
- void Alert(const base::string16& message) override { CHECK(false); } |
- |
- bool ResolveDns(const std::string& host, |
- ResolveDnsOperation op, |
- std::string* output, |
- bool* terminate) override { |
- CHECK(false); |
- return false; |
- } |
- |
- void OnError(int line_number, const base::string16& message) override { |
- CHECK(false); |
- } |
-}; |
- |
-class ProxyResolverV8Wrapper : public ProxyResolver { |
- public: |
- ProxyResolverV8Wrapper(std::unique_ptr<ProxyResolverV8> resolver, |
- std::unique_ptr<MockJSBindings> bindings) |
- : resolver_(std::move(resolver)), bindings_(std::move(bindings)) {} |
- |
- int GetProxyForURL(const GURL& url, |
- ProxyInfo* results, |
- const CompletionCallback& /*callback*/, |
- std::unique_ptr<Request>* /*request*/, |
- const NetLogWithSource& net_log) override { |
- return resolver_->GetProxyForURL(url, results, bindings_.get()); |
- } |
- |
- private: |
- std::unique_ptr<ProxyResolverV8> resolver_; |
- std::unique_ptr<MockJSBindings> bindings_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ProxyResolverV8Wrapper); |
-}; |
- |
-class ProxyResolverV8Factory : public ProxyResolverFactory { |
- public: |
- ProxyResolverV8Factory() : ProxyResolverFactory(true) {} |
- int CreateProxyResolver( |
- const scoped_refptr<ProxyResolverScriptData>& pac_script, |
- std::unique_ptr<ProxyResolver>* resolver, |
- const net::CompletionCallback& callback, |
- std::unique_ptr<Request>* request) override { |
- std::unique_ptr<ProxyResolverV8> v8_resolver; |
- std::unique_ptr<MockJSBindings> js_bindings_(new MockJSBindings); |
- int result = |
- ProxyResolverV8::Create(pac_script, js_bindings_.get(), &v8_resolver); |
- if (result == OK) { |
- resolver->reset(new ProxyResolverV8Wrapper(std::move(v8_resolver), |
- std::move(js_bindings_))); |
- } |
- return result; |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(ProxyResolverV8Factory); |
-}; |
- |
-TEST(ProxyResolverPerfTest, ProxyResolverV8) { |
- base::MessageLoop message_loop; |
- ProxyResolverV8Factory factory; |
- PacPerfSuiteRunner runner(&factory, "ProxyResolverV8"); |
- runner.RunAllTests(); |
-} |
- |
-} // namespace |
- |
-} // namespace net |