// 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 "chrome/browser/net/chrome_url_request_context.h" #include "base/command_line.h" #include "base/format_macros.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) { FilePath unused_path(FILE_PATH_LITERAL("foo.exe")); // Build the input command lines here. CommandLine empty(unused_path); CommandLine no_proxy(unused_path); no_proxy.AppendSwitch(switches::kNoProxyServer); CommandLine no_proxy_extra_params(unused_path); no_proxy_extra_params.AppendSwitch(switches::kNoProxyServer); no_proxy_extra_params.AppendSwitchWithValue(switches::kProxyServer, L"http://proxy:8888"); CommandLine single_proxy(unused_path); single_proxy.AppendSwitchWithValue(switches::kProxyServer, L"http://proxy:8888"); CommandLine per_scheme_proxy(unused_path); per_scheme_proxy.AppendSwitchWithValue(switches::kProxyServer, L"http=httpproxy:8888;ftp=ftpproxy:8889"); CommandLine per_scheme_proxy_bypass(unused_path); per_scheme_proxy_bypass.AppendSwitchWithValue(switches::kProxyServer, L"http=httpproxy:8888;ftp=ftpproxy:8889"); per_scheme_proxy_bypass.AppendSwitchWithValue( switches::kProxyBypassList, L".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); CommandLine with_pac_url(unused_path); with_pac_url.AppendSwitchWithValue(switches::kProxyPacUrl, L"http://wpad/wpad.dat"); with_pac_url.AppendSwitchWithValue( switches::kProxyBypassList, L".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8"); CommandLine with_auto_detect(unused_path); with_auto_detect.AppendSwitch(switches::kProxyAutoDetect); // 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[%" PRIuS "] %s", i, tests[i].description.c_str())); scoped_ptr 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); } } }