Index: net/proxy/proxy_config_service_linux_unittest.cc |
=================================================================== |
--- net/proxy/proxy_config_service_linux_unittest.cc (revision 0) |
+++ net/proxy/proxy_config_service_linux_unittest.cc (revision 0) |
@@ -0,0 +1,736 @@ |
+// Copyright (c) 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 <map> |
+#include <string> |
+#include <vector> |
+ |
+#include "net/proxy/proxy_config_service_linux.h" |
+ |
+#include "base/logging.h" |
+#include "base/string_util.h" |
+#include "net/proxy/proxy_config.h" |
+#include "net/proxy/proxy_config_service_common_unittest.h" |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net { |
+ |
+namespace { |
+ |
+// Set of values for all environment variables that we might |
+// query. NULL represents an unset variable. |
+struct EnvVarValues { |
+ // The strange capitalization is so that the field matches the |
+ // environment variable name exactly. |
+ const char *GNOME_DESKTOP_SESSION_ID, *DESKTOP_SESSION, |
+ *auto_proxy, *all_proxy, |
+ *http_proxy, *https_proxy, *ftp_proxy, |
+ *SOCKS_SERVER, *SOCKS_VERSION, |
+ *no_proxy; |
+}; |
+ |
+// So as to distinguish between an unset gconf boolean variable and |
+// one that is false. |
+enum BoolSettingValue { |
+ UNSET = 0, TRUE, FALSE |
+}; |
+ |
+// Set of values for all gconf settings that we might query. |
+struct GConfValues { |
+ // strings |
+ const char *mode, *autoconfig_url, |
+ *http_host, *secure_host, *ftp_host, *socks_host; |
+ // integers |
+ int http_port, secure_port, ftp_port, socks_port; |
+ // booleans |
+ BoolSettingValue use_proxy, same_proxy, use_auth; |
+ // string list |
+ std::vector<std::string> ignore_hosts; |
+}; |
+ |
+// Mapping from a setting name to the location of the corresponding |
+// value (inside a EnvVarValues or GConfValues struct). |
+template<typename value_type> |
+struct SettingsTable { |
+ typedef std::map<std::string, value_type*> map_type; |
+ |
+ // Gets the value from its location |
+ value_type Get(const std::string& key) { |
+ typename map_type::const_iterator it = settings.find(key); |
+ // In case there's a typo or the unittest becomes out of sync. |
+ CHECK(it != settings.end()) << "key " << key << " not found"; |
+ value_type* value_ptr = it->second; |
+ return *value_ptr; |
+ } |
+ |
+ map_type settings; |
+}; |
+ |
+class MockEnvironmentVariableGetter |
+ : public ProxyConfigServiceLinux::EnvironmentVariableGetter { |
+ public: |
+ MockEnvironmentVariableGetter() { |
+#define ENTRY(x) table.settings[#x] = &values.x |
+ ENTRY(GNOME_DESKTOP_SESSION_ID); |
+ ENTRY(DESKTOP_SESSION); |
+ ENTRY(auto_proxy); |
+ ENTRY(all_proxy); |
+ ENTRY(http_proxy); |
+ ENTRY(https_proxy); |
+ ENTRY(ftp_proxy); |
+ ENTRY(no_proxy); |
+ ENTRY(SOCKS_SERVER); |
+ ENTRY(SOCKS_VERSION); |
+#undef ENTRY |
+ reset(); |
+ } |
+ |
+ // Zeros all environment values. |
+ void reset() { |
+ EnvVarValues zero_values = { 0 }; |
+ values = zero_values; |
+ } |
+ |
+ virtual bool Getenv(const char* variable_name, std::string* result) { |
+ const char* env_value = table.Get(variable_name); |
+ if (env_value) { |
+ // Note that the variable may be defined but empty. |
+ *result = env_value; |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
+ // Intentionally public, for convenience when setting up a test. |
+ EnvVarValues values; |
+ |
+ private: |
+ SettingsTable<const char*> table; |
+}; |
+ |
+class MockGConfSettingGetter |
+ : public ProxyConfigServiceLinux::GConfSettingGetter { |
+ public: |
+ MockGConfSettingGetter() { |
+#define ENTRY(key, field) \ |
+ strings_table.settings["/system/" key] = &values.field |
+ ENTRY("proxy/mode", mode); |
+ ENTRY("proxy/autoconfig_url", autoconfig_url); |
+ ENTRY("http_proxy/host", http_host); |
+ ENTRY("proxy/secure_host", secure_host); |
+ ENTRY("proxy/ftp_host", ftp_host); |
+ ENTRY("proxy/socks_host", socks_host); |
+#undef ENTRY |
+#define ENTRY(key, field) \ |
+ ints_table.settings["/system/" key] = &values.field |
+ ENTRY("http_proxy/port", http_port); |
+ ENTRY("proxy/secure_port", secure_port); |
+ ENTRY("proxy/ftp_port", ftp_port); |
+ ENTRY("proxy/socks_port", socks_port); |
+#undef ENTRY |
+#define ENTRY(key, field) \ |
+ bools_table.settings["/system/" key] = &values.field |
+ ENTRY("http_proxy/use_http_proxy", use_proxy); |
+ ENTRY("http_proxy/use_same_proxy", same_proxy); |
+ ENTRY("http_proxy/use_authentication", use_auth); |
+#undef ENTRY |
+ string_lists_table.settings["/system/http_proxy/ignore_hosts"] = |
+ &values.ignore_hosts; |
+ reset(); |
+ } |
+ |
+ // Zeros all environment values. |
+ void reset() { |
+ GConfValues zero_values; |
+ values = zero_values; |
+ } |
+ |
+ virtual void Enter() {} |
+ virtual void Leave() {} |
+ |
+ virtual bool InitIfNeeded() { |
+ return true; |
+ } |
+ |
+ virtual bool GetString(const char* key, std::string* result) { |
+ const char* value = strings_table.Get(key); |
+ if (value) { |
+ *result = value; |
+ return true; |
+ } |
+ return false; |
+ } |
+ |
+ virtual bool GetInt(const char* key, int* result) { |
+ // We don't bother to distinguish unset keys from 0 values. |
+ *result = ints_table.Get(key); |
+ return true; |
+ } |
+ |
+ virtual bool GetBoolean(const char* key, bool* result) { |
+ BoolSettingValue value = bools_table.Get(key); |
+ switch (value) { |
+ case UNSET: |
+ return false; |
+ case TRUE: |
+ *result = true; |
+ break; |
+ case FALSE: |
+ *result = false; |
+ } |
+ return true; |
+ } |
+ |
+ virtual bool GetStringList(const char* key, |
+ std::vector<std::string>* result) { |
+ *result = string_lists_table.Get(key); |
+ // We don't bother to distinguish unset keys from empty lists. |
+ return !result->empty(); |
+ } |
+ |
+ // Intentionally public, for convenience when setting up a test. |
+ GConfValues values; |
+ |
+ private: |
+ SettingsTable<const char*> strings_table; |
+ SettingsTable<int> ints_table; |
+ SettingsTable<BoolSettingValue> bools_table; |
+ SettingsTable<std::vector<std::string> > string_lists_table; |
+}; |
+ |
+} // namespace |
+ |
+// Builds an identifier for each test in an array. |
+#define TEST_DESC(desc) StringPrintf("at line %d <%s>", __LINE__, desc) |
+ |
+TEST(ProxyConfigServiceLinuxTest, BasicGConfTest) { |
+ MockEnvironmentVariableGetter* env_getter = |
+ new MockEnvironmentVariableGetter; |
+ MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; |
+ ProxyConfigServiceLinux service(env_getter, gconf_getter); |
+ // This env var indicates we are running Gnome and should consult gconf. |
+ env_getter->values.GNOME_DESKTOP_SESSION_ID = "defined"; |
+ |
+ std::vector<std::string> empty_ignores; |
+ |
+ std::vector<std::string> google_ignores; |
+ google_ignores.push_back("*.google.com"); |
+ |
+ // Inspired from proxy_config_service_win_unittest.cc. |
+ // Very neat, but harder to track down failures though. |
+ const struct { |
+ // Short description to identify the test |
+ std::string description; |
+ |
+ // Input. |
+ GConfValues values; |
+ |
+ // Expected outputs (fields of the ProxyConfig). |
+ bool auto_detect; |
+ GURL pac_url; |
+ ProxyConfig::ProxyRules proxy_rules; |
+ const char* proxy_bypass_list; // newline separated |
+ bool bypass_local_names; |
+ } tests[] = { |
+ { |
+ TEST_DESC("No proxying"), |
+ { // Input. |
+ "none", // mode |
+ "", // autoconfig_url |
+ "", "", "", "", // hosts |
+ 0, 0, 0, 0, // ports |
+ FALSE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Auto detect"), |
+ { // Input. |
+ "auto", // mode |
+ "", // autoconfig_url |
+ "", "", "", "", // hosts |
+ 0, 0, 0, 0, // ports |
+ FALSE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ true, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Valid PAC url"), |
+ { // Input. |
+ "auto", // mode |
+ "http://wpad/wpad.dat", // autoconfig_url |
+ "", "", "", "", // hosts |
+ 0, 0, 0, 0, // ports |
+ FALSE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL("http://wpad/wpad.dat"), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Invalid PAC url"), |
+ { // Input. |
+ "auto", // mode |
+ "wpad.dat", // autoconfig_url |
+ "", "", "", "", // hosts |
+ 0, 0, 0, 0, // ports |
+ FALSE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Single-host in proxy list"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", "", "", "", // hosts |
+ 80, 0, 0, 0, // ports |
+ TRUE, TRUE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("use_http_proxy is honored"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", "", "", "", // hosts |
+ 80, 0, 0, 0, // ports |
+ FALSE, TRUE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("use_http_proxy and use_same_proxy are optional"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", "", "", "", // hosts |
+ 80, 0, 0, 0, // ports |
+ UNSET, UNSET, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeProxyPerSchemeRules("www.google.com", // proxy_rules |
+ "", ""), |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Single-host, different port"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", "", "", "", // hosts |
+ 88, 0, 0, 0, // ports |
+ TRUE, TRUE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_aurl |
+ MakeSingleProxyRules("www.google.com:88"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Per-scheme proxy rules"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", // http_host |
+ "www.foo.com", // secure_host |
+ "ftpfoo.com", // ftp |
+ "", // socks |
+ 88, 110, 121, 0, // ports |
+ TRUE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeProxyPerSchemeRules("www.google.com:88", // proxy_rules |
+ "www.foo.com:110", |
+ "ftpfoo.com:121"), |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("socks"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "", "", "", "socks.com", // hosts |
+ 0, 0, 0, 99, // ports |
+ TRUE, FALSE, FALSE, // use, same, auth |
+ empty_ignores, // ignore_hosts |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("socks4://socks.com:99"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Bypass *.google.com"), |
+ { // Input. |
+ "manual", // mode |
+ "", // autoconfig_url |
+ "www.google.com", "", "", "", // hosts |
+ 80, 0, 0, 0, // ports |
+ TRUE, TRUE, FALSE, // use, same, auth |
+ google_ignores, // ignore_hosts |
+ }, |
+ |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com"), // proxy_rules |
+ "*.google.com\n", // 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())); |
+ ProxyConfig config; |
+ gconf_getter->values = tests[i].values; |
+ service.GetProxyConfig(&config); |
+ |
+ // TODO(sdoyon): Add a description field to each test, and a |
+ // corresponding message to the EXPECT statements, so that it is |
+ // possible to identify which one of the tests failed. |
+ 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, |
+ 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); |
+ } |
+} |
+ |
+TEST(ProxyConfigServiceLinuxTest, BasicEnvTest) { |
+ MockEnvironmentVariableGetter* env_getter = |
+ new MockEnvironmentVariableGetter; |
+ MockGConfSettingGetter* gconf_getter = new MockGConfSettingGetter; |
+ ProxyConfigServiceLinux service(env_getter, gconf_getter); |
+ |
+ // Inspired from proxy_config_service_win_unittest.cc. |
+ const struct { |
+ // Short description to identify the test |
+ std::string description; |
+ |
+ // Input. |
+ EnvVarValues values; |
+ |
+ // Expected outputs (fields of the ProxyConfig). |
+ bool auto_detect; |
+ GURL pac_url; |
+ ProxyConfig::ProxyRules proxy_rules; |
+ const char* proxy_bypass_list; // newline separated |
+ bool bypass_local_names; |
+ } tests[] = { |
+ { |
+ TEST_DESC("No proxying"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ NULL, // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ "*", // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Auto detect"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ "", // auto_proxy |
+ NULL, // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ true, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Valid PAC url"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ "http://wpad/wpad.dat", // auto_proxy |
+ NULL, // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL("http://wpad/wpad.dat"), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Invalid PAC url"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ "wpad.dat", // auto_proxy |
+ NULL, // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ ProxyConfig::ProxyRules(), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Single-host in proxy list"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "www.google.com", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Single-host, different port"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "www.google.com:99", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com:99"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Tolerate a scheme"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "http://www.google.com:99", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com:99"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("Per-scheme proxy rules"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ NULL, // all_proxy |
+ "www.google.com:80", "www.foo.com:110", "ftpfoo.com:121", // per-proto |
+ NULL, NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeProxyPerSchemeRules("www.google.com", "www.foo.com:110", |
+ "ftpfoo.com:121"), |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("socks"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ "socks.com:888", NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("socks4://socks.com:888"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("socks5"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ "socks.com:888", "5", // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("socks5://socks.com:888"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("socks default port"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "", // all_proxy |
+ NULL, NULL, NULL, // per-proto proxies |
+ "socks.com", NULL, // SOCKS |
+ NULL, // no_proxy |
+ }, |
+ |
+ // Expected result. |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("socks4://socks.com"), // proxy_rules |
+ "", // proxy_bypass_list |
+ false, // bypass_local_names |
+ }, |
+ |
+ { |
+ TEST_DESC("bypass"), |
+ { // Input. |
+ NULL, NULL, // *DESKTOP* |
+ NULL, // auto_proxy |
+ "www.google.com", // all_proxy |
+ NULL, NULL, NULL, // per-proto |
+ NULL, NULL, // SOCKS |
+ ".google.com, foo.com:99, 1.2.3.4:22, 127.0.0.1/8", // no_proxy |
+ }, |
+ |
+ false, // auto_detect |
+ GURL(), // pac_url |
+ MakeSingleProxyRules("www.google.com"), // proxy_rules |
+ // proxy_bypass_list |
+ "*.google.com\n*foo.com:99\n1.2.3.4:22\n127.0.0.1/8\n", |
+ 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())); |
+ ProxyConfig config; |
+ env_getter->values = tests[i].values; |
+ service.GetProxyConfig(&config); |
+ |
+ 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, |
+ 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); |
+ } |
+} |
+ |
+} // namespace net |
Property changes on: net/proxy/proxy_config_service_linux_unittest.cc |
___________________________________________________________________ |
Name: svn:eol-style |
+ LF |