Index: chrome/browser/net/chrome_url_request_context_unittest.cc |
=================================================================== |
--- chrome/browser/net/chrome_url_request_context_unittest.cc (revision 0) |
+++ chrome/browser/net/chrome_url_request_context_unittest.cc (revision 0) |
@@ -0,0 +1,181 @@ |
+// Copyright (c) 2006-2009 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 "base/command_line.h" |
+#include "chrome/browser/net/chrome_url_request_context.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "net/proxy/proxy_config.h" |
+#include "net/proxy/proxy_config_service_common_unittest.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+// Builds an identifier for each test in an array. |
+#define TEST_DESC(desc) StringPrintf("at line %d <%s>", __LINE__, desc) |
+ |
+TEST(ChromeUrlRequestContextTest, CreateProxyConfigTest) { |
+ // Build the input command lines here. |
+ CommandLine empty(L"foo.exe"); |
+ CommandLine no_proxy(L"foo.exe"); |
+ no_proxy.AppendSwitch(switches::kNoProxyServer); |
+ CommandLine no_proxy_extra_params(L"foo.exe"); |
+ no_proxy_extra_params.AppendSwitch(switches::kNoProxyServer); |
+ no_proxy_extra_params.AppendSwitchWithValue(switches::kProxyServer, |
+ L"http://proxy:8888"); |
+ CommandLine single_proxy(L"foo.exe"); |
+ single_proxy.AppendSwitchWithValue(switches::kProxyServer, |
+ L"http://proxy:8888"); |
+ CommandLine per_scheme_proxy(L"foo.exe"); |
+ per_scheme_proxy.AppendSwitchWithValue(switches::kProxyServer, |
+ L"http=httpproxy:8888;ftp=ftpproxy:8889"); |
+ CommandLine per_scheme_proxy_bypass(L"foo.exe"); |
+ per_scheme_proxy_bypass.AppendSwitchWithValue(switches::kProxyServer, |
+ L"http=httpproxy:8888;ftp=ftpproxy:8889"); |
+ per_scheme_proxy_bypass.AppendSwitchWithValue( |
+ switches::kProxyServerBypassUrls, |
+ L".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); |
+ CommandLine with_pac_url(L"foo.exe"); |
+ with_pac_url.AppendSwitchWithValue(switches::kProxyServerPacUrl, |
+ L"http://wpad/wpad.dat"); |
+ with_pac_url.AppendSwitchWithValue( |
+ switches::kProxyServerBypassUrls, |
+ L".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); |
+ CommandLine with_auto_detect(L"foo.exe"); |
+ with_auto_detect.AppendSwitch(switches::kProxyServerAutoDetect); |
+ |
+ // Inspired from proxy_config_service_win_unittest.cc. |
+ const struct { |
+ // Short description to identify the test |
+ std::string description; |
+ |
+ // The command line to build a ProxyConfig from. |
+ const CommandLine& command_line; |
+ |
+ // Expected outputs (fields of the ProxyConfig). |
+ bool is_null; |
+ bool auto_detect; |
+ GURL pac_url; |
+ net::ProxyConfig::ProxyRules proxy_rules; |
+ const char* proxy_bypass_list; // newline separated |
+ bool bypass_local_names; |
+ } tests[] = { |
+ { |
+ TEST_DESC("Empty command line"), |
+ // Input |
+ empty, |
+ // Expected result |
+ true, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("No proxy"), |
+ // Input |
+ no_proxy, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("No proxy with extra parameters."), |
+ // Input |
+ no_proxy_extra_params, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("Single proxy."), |
+ // Input |
+ single_proxy, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::MakeSingleProxyRules("http://proxy:8888"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("Per scheme proxy."), |
+ // Input |
+ per_scheme_proxy, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::MakeProxyPerSchemeRules("httpproxy:8888", |
+ "", |
+ "ftpproxy:8889"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("Per scheme proxy with bypass URLs."), |
+ // Input |
+ per_scheme_proxy_bypass, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ net::MakeProxyPerSchemeRules("httpproxy:8888", |
+ "", |
+ "ftpproxy:8889"), // proxy_rules |
+ "*.google.com\n*foo.com:99\n1.2.3.4:22\n127.0.0.1/8\n", |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("Pac URL with proxy bypass URLs"), |
+ // Input |
+ with_pac_url, |
+ // Expected result |
+ false, // is_null |
+ false, // auto_detect |
+ GURL("http://wpad/wpad.dat"), // pac_url |
+ net::ProxyConfig::ProxyRules(), // proxy_rules |
+ "*.google.com\n*foo.com:99\n1.2.3.4:22\n127.0.0.1/8\n", |
+ false // bypass_local_names |
+ }, |
+ { |
+ TEST_DESC("Autodetect"), |
+ // Input |
+ with_auto_detect, |
+ // Expected result |
+ false, // is_null |
+ true, // auto_detect |
+ GURL(), // pac_url |
+ net::ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false // bypass_local_names |
+ } |
+ }; |
+ |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); i++) { |
+ SCOPED_TRACE(StringPrintf("Test[%d] %s", i, tests[i].description.c_str())); |
+ scoped_ptr<net::ProxyConfig> config(CreateProxyConfig( |
+ CommandLine(tests[i].command_line))); |
+ |
+ if (tests[i].is_null) { |
+ EXPECT_TRUE(config == NULL); |
+ } else { |
+ EXPECT_TRUE(config != NULL); |
+ EXPECT_EQ(tests[i].auto_detect, config->auto_detect); |
+ EXPECT_EQ(tests[i].pac_url, config->pac_url); |
+ EXPECT_EQ(tests[i].proxy_bypass_list, |
+ net::FlattenProxyBypass(config->proxy_bypass)); |
+ EXPECT_EQ(tests[i].bypass_local_names, config->proxy_bypass_local_names); |
+ EXPECT_EQ(tests[i].proxy_rules, config->proxy_rules); |
+ } |
+ } |
+} |