Index: net/proxy/proxy_config_service_linux_unittest.cc |
diff --git a/net/proxy/proxy_config_service_linux_unittest.cc b/net/proxy/proxy_config_service_linux_unittest.cc |
deleted file mode 100644 |
index 2c1995cf4a14a6a7a45a24d96c4a31670f75762f..0000000000000000000000000000000000000000 |
--- a/net/proxy/proxy_config_service_linux_unittest.cc |
+++ /dev/null |
@@ -1,1615 +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_config_service_linux.h" |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/files/file_path.h" |
-#include "base/files/file_util.h" |
-#include "base/format_macros.h" |
-#include "base/logging.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/synchronization/waitable_event.h" |
-#include "base/threading/thread.h" |
-#include "net/proxy/proxy_config.h" |
-#include "net/proxy/proxy_config_service_common_unittest.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "testing/platform_test.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 *DESKTOP_SESSION, *HOME, |
- *KDEHOME, *KDE_SESSION_VERSION, |
- *auto_proxy, *all_proxy, |
- *http_proxy, *https_proxy, *ftp_proxy, |
- *SOCKS_SERVER, *SOCKS_VERSION, |
- *no_proxy; |
-}; |
- |
-// Undo macro pollution from GDK includes (from message_loop.h). |
-#undef TRUE |
-#undef FALSE |
- |
-// 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 key_type, typename value_type> |
-struct SettingsTable { |
- typedef std::map<key_type, value_type*> map_type; |
- |
- // Gets the value from its location |
- value_type Get(key_type 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 MockEnvironment : public base::Environment { |
- public: |
- MockEnvironment() { |
-#define ENTRY(x) table[#x] = &values.x |
- ENTRY(DESKTOP_SESSION); |
- ENTRY(HOME); |
- ENTRY(KDEHOME); |
- ENTRY(KDE_SESSION_VERSION); |
- 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(); |
- } |
- |
- // Zeroes all environment values. |
- void Reset() { |
- EnvVarValues zero_values = { 0 }; |
- values = zero_values; |
- } |
- |
- // Begin base::Environment implementation. |
- bool GetVar(const char* variable_name, std::string* result) override { |
- std::map<std::string, const char**>::iterator it = |
- table.find(variable_name); |
- if (it != table.end() && *(it->second) != NULL) { |
- // Note that the variable may be defined but empty. |
- *result = *(it->second); |
- return true; |
- } |
- return false; |
- } |
- |
- bool SetVar(const char* variable_name, |
- const std::string& new_value) override { |
- ADD_FAILURE(); |
- return false; |
- } |
- |
- bool UnSetVar(const char* variable_name) override { |
- ADD_FAILURE(); |
- return false; |
- } |
- // End base::Environment implementation. |
- |
- // Intentionally public, for convenience when setting up a test. |
- EnvVarValues values; |
- |
- private: |
- std::map<std::string, const char**> table; |
-}; |
- |
-class MockSettingGetter |
- : public ProxyConfigServiceLinux::SettingGetter { |
- public: |
- typedef ProxyConfigServiceLinux::SettingGetter SettingGetter; |
- MockSettingGetter() { |
-#define ENTRY(key, field) \ |
- strings_table.settings[SettingGetter::key] = &values.field |
- ENTRY(PROXY_MODE, mode); |
- ENTRY(PROXY_AUTOCONF_URL, autoconfig_url); |
- ENTRY(PROXY_HTTP_HOST, http_host); |
- ENTRY(PROXY_HTTPS_HOST, secure_host); |
- ENTRY(PROXY_FTP_HOST, ftp_host); |
- ENTRY(PROXY_SOCKS_HOST, socks_host); |
-#undef ENTRY |
-#define ENTRY(key, field) \ |
- ints_table.settings[SettingGetter::key] = &values.field |
- ENTRY(PROXY_HTTP_PORT, http_port); |
- ENTRY(PROXY_HTTPS_PORT, secure_port); |
- ENTRY(PROXY_FTP_PORT, ftp_port); |
- ENTRY(PROXY_SOCKS_PORT, socks_port); |
-#undef ENTRY |
-#define ENTRY(key, field) \ |
- bools_table.settings[SettingGetter::key] = &values.field |
- ENTRY(PROXY_USE_HTTP_PROXY, use_proxy); |
- ENTRY(PROXY_USE_SAME_PROXY, same_proxy); |
- ENTRY(PROXY_USE_AUTHENTICATION, use_auth); |
-#undef ENTRY |
- string_lists_table.settings[SettingGetter::PROXY_IGNORE_HOSTS] = |
- &values.ignore_hosts; |
- Reset(); |
- } |
- |
- // Zeros all environment values. |
- void Reset() { |
- GConfValues zero_values = { 0 }; |
- values = zero_values; |
- } |
- |
- bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner, |
- const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) |
- override { |
- task_runner_ = glib_task_runner; |
- return true; |
- } |
- |
- void ShutDown() override {} |
- |
- bool SetUpNotifications( |
- ProxyConfigServiceLinux::Delegate* delegate) override { |
- return true; |
- } |
- |
- const scoped_refptr<base::SingleThreadTaskRunner>& GetNotificationTaskRunner() |
- override { |
- return task_runner_; |
- } |
- |
- ProxyConfigSource GetConfigSource() override { |
- return PROXY_CONFIG_SOURCE_TEST; |
- } |
- |
- bool GetString(StringSetting key, std::string* result) override { |
- const char* value = strings_table.Get(key); |
- if (value) { |
- *result = value; |
- return true; |
- } |
- return false; |
- } |
- |
- bool GetBool(BoolSetting key, bool* result) override { |
- BoolSettingValue value = bools_table.Get(key); |
- switch (value) { |
- case UNSET: |
- return false; |
- case TRUE: |
- *result = true; |
- break; |
- case FALSE: |
- *result = false; |
- } |
- return true; |
- } |
- |
- bool GetInt(IntSetting key, int* result) override { |
- // We don't bother to distinguish unset keys from 0 values. |
- *result = ints_table.Get(key); |
- return true; |
- } |
- |
- bool GetStringList(StringListSetting key, |
- std::vector<std::string>* result) override { |
- *result = string_lists_table.Get(key); |
- // We don't bother to distinguish unset keys from empty lists. |
- return !result->empty(); |
- } |
- |
- bool BypassListIsReversed() override { return false; } |
- |
- bool MatchHostsUsingSuffixMatching() override { return false; } |
- |
- // Intentionally public, for convenience when setting up a test. |
- GConfValues values; |
- |
- private: |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
- SettingsTable<StringSetting, const char*> strings_table; |
- SettingsTable<BoolSetting, BoolSettingValue> bools_table; |
- SettingsTable<IntSetting, int> ints_table; |
- SettingsTable<StringListSetting, |
- std::vector<std::string> > string_lists_table; |
-}; |
- |
-} // namespace |
-} // namespace net |
- |
-// This helper class runs ProxyConfigServiceLinux::GetLatestProxyConfig() on |
-// the IO thread and synchronously waits for the result. |
-// Some code duplicated from proxy_script_fetcher_unittest.cc. |
-class SynchConfigGetter { |
- public: |
- // Takes ownership of |config_service|. |
- explicit SynchConfigGetter(net::ProxyConfigServiceLinux* config_service) |
- : event_(false, false), |
- io_thread_("IO_Thread"), |
- config_service_(config_service) { |
- // Start an IO thread. |
- base::Thread::Options options; |
- options.message_loop_type = base::MessageLoop::TYPE_IO; |
- io_thread_.StartWithOptions(options); |
- |
- // Make sure the thread started. |
- io_thread_.message_loop()->PostTask(FROM_HERE, |
- base::Bind(&SynchConfigGetter::Init, base::Unretained(this))); |
- Wait(); |
- } |
- |
- ~SynchConfigGetter() { |
- // Let the config service post a destroy message to the IO thread |
- // before cleaning up that thread. |
- delete config_service_; |
- // Clean up the IO thread. |
- io_thread_.message_loop()->PostTask(FROM_HERE, |
- base::Bind(&SynchConfigGetter::CleanUp, base::Unretained(this))); |
- Wait(); |
- } |
- |
- // Does gconf setup and initial fetch of the proxy config, |
- // all on the calling thread (meant to be the thread with the |
- // default glib main loop, which is the UI thread). |
- void SetupAndInitialFetch() { |
- // We pass the mock IO thread as both the IO and file threads. |
- config_service_->SetupAndFetchInitialConfig( |
- base::MessageLoopProxy::current(), |
- io_thread_.message_loop_proxy(), |
- io_thread_.message_loop_proxy()); |
- } |
- // Synchronously gets the proxy config. |
- net::ProxyConfigService::ConfigAvailability SyncGetLatestProxyConfig( |
- net::ProxyConfig* config) { |
- io_thread_.message_loop()->PostTask(FROM_HERE, |
- base::Bind(&SynchConfigGetter::GetLatestConfigOnIOThread, |
- base::Unretained(this))); |
- Wait(); |
- *config = proxy_config_; |
- return get_latest_config_result_; |
- } |
- |
- private: |
- // [Runs on |io_thread_|] |
- void Init() { |
- event_.Signal(); |
- } |
- |
- // Calls GetLatestProxyConfig, running on |io_thread_| Signals |event_| |
- // on completion. |
- void GetLatestConfigOnIOThread() { |
- get_latest_config_result_ = |
- config_service_->GetLatestProxyConfig(&proxy_config_); |
- event_.Signal(); |
- } |
- |
- // [Runs on |io_thread_|] Signals |event_| on cleanup completion. |
- void CleanUp() { |
- base::MessageLoop::current()->RunUntilIdle(); |
- event_.Signal(); |
- } |
- |
- void Wait() { |
- event_.Wait(); |
- event_.Reset(); |
- } |
- |
- base::WaitableEvent event_; |
- base::Thread io_thread_; |
- |
- net::ProxyConfigServiceLinux* config_service_; |
- |
- // The config obtained by |io_thread_| and read back by the main |
- // thread. |
- net::ProxyConfig proxy_config_; |
- |
- // Return value from GetLatestProxyConfig(). |
- net::ProxyConfigService::ConfigAvailability get_latest_config_result_; |
-}; |
- |
-namespace net { |
- |
-// This test fixture is only really needed for the KDEConfigParser test case, |
-// but all the test cases with the same prefix ("ProxyConfigServiceLinuxTest") |
-// must use the same test fixture class (also "ProxyConfigServiceLinuxTest"). |
-class ProxyConfigServiceLinuxTest : public PlatformTest { |
- protected: |
- void SetUp() override { |
- PlatformTest::SetUp(); |
- // Set up a temporary KDE home directory. |
- std::string prefix("ProxyConfigServiceLinuxTest_user_home"); |
- base::CreateNewTempDirectory(prefix, &user_home_); |
- kde_home_ = user_home_.Append(FILE_PATH_LITERAL(".kde")); |
- base::FilePath path = kde_home_.Append(FILE_PATH_LITERAL("share")); |
- path = path.Append(FILE_PATH_LITERAL("config")); |
- base::CreateDirectory(path); |
- kioslaverc_ = path.Append(FILE_PATH_LITERAL("kioslaverc")); |
- // Set up paths but do not create the directory for .kde4. |
- kde4_home_ = user_home_.Append(FILE_PATH_LITERAL(".kde4")); |
- path = kde4_home_.Append(FILE_PATH_LITERAL("share")); |
- kde4_config_ = path.Append(FILE_PATH_LITERAL("config")); |
- kioslaverc4_ = kde4_config_.Append(FILE_PATH_LITERAL("kioslaverc")); |
- } |
- |
- void TearDown() override { |
- // Delete the temporary KDE home directory. |
- base::DeleteFile(user_home_, true); |
- PlatformTest::TearDown(); |
- } |
- |
- base::FilePath user_home_; |
- // KDE3 paths. |
- base::FilePath kde_home_; |
- base::FilePath kioslaverc_; |
- // KDE4 paths. |
- base::FilePath kde4_home_; |
- base::FilePath kde4_config_; |
- base::FilePath kioslaverc4_; |
-}; |
- |
-// Builds an identifier for each test in an array. |
-#define TEST_DESC(desc) base::StringPrintf("at line %d <%s>", __LINE__, desc) |
- |
-TEST_F(ProxyConfigServiceLinuxTest, BasicGConfTest) { |
- 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 (availability and fields of ProxyConfig). |
- ProxyConfigService::ConfigAvailability availability; |
- bool auto_detect; |
- GURL pac_url; |
- ProxyRulesExpectation proxy_rules; |
- } 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- true, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL("http://wpad/wpad.dat"), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:80", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:88", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Per-scheme proxy rules"), |
- { // Input. |
- "manual", // mode |
- "", // autoconfig_url |
- "www.google.com", // http_host |
- "www.foo.com", // secure_host |
- "ftp.foo.com", // ftp |
- "", // socks |
- 88, 110, 121, 0, // ports |
- TRUE, FALSE, FALSE, // use, same, auth |
- empty_ignores, // ignore_hosts |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:88", // http |
- "www.foo.com:110", // https |
- "ftp.foo.com:121", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- 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. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks5://socks.com:99", // single proxy |
- "") // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Per-scheme proxy rules with fallback to SOCKS"), |
- { // Input. |
- "manual", // mode |
- "", // autoconfig_url |
- "www.google.com", // http_host |
- "www.foo.com", // secure_host |
- "ftp.foo.com", // ftp |
- "foobar.net", // socks |
- 88, 110, 121, 99, // ports |
- TRUE, FALSE, FALSE, // use, same, auth |
- empty_ignores, // ignore_hosts |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerSchemeWithSocks( |
- "www.google.com:88", // http |
- "www.foo.com:110", // https |
- "ftp.foo.com:121", // ftp |
- "socks5://foobar.net:99", // socks |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Per-scheme proxy rules (just HTTP) with fallback to SOCKS"), |
- { // Input. |
- "manual", // mode |
- "", // autoconfig_url |
- "www.google.com", // http_host |
- "", // secure_host |
- "", // ftp |
- "foobar.net", // socks |
- 88, 0, 0, 99, // ports |
- TRUE, FALSE, FALSE, // use, same, auth |
- empty_ignores, // ignore_hosts |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerSchemeWithSocks( |
- "www.google.com:88", // http |
- "", // https |
- "", // ftp |
- "socks5://foobar.net:99", // socks |
- ""), // bypass rules |
- }, |
- |
- { |
- 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 |
- }, |
- |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:80", // single proxy |
- "*.google.com"), // bypass rules |
- }, |
- }; |
- |
- for (size_t i = 0; i < arraysize(tests); ++i) { |
- SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
- tests[i].description.c_str())); |
- MockEnvironment* env = new MockEnvironment; |
- MockSettingGetter* setting_getter = new MockSettingGetter; |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env, setting_getter)); |
- ProxyConfig config; |
- setting_getter->values = tests[i].values; |
- sync_config_getter.SetupAndInitialFetch(); |
- ProxyConfigService::ConfigAvailability availability = |
- sync_config_getter.SyncGetLatestProxyConfig(&config); |
- EXPECT_EQ(tests[i].availability, availability); |
- |
- if (availability == ProxyConfigService::CONFIG_VALID) { |
- EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
- EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
- EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
- } |
- } |
-} |
- |
-TEST_F(ProxyConfigServiceLinuxTest, BasicEnvTest) { |
- // Inspired from proxy_config_service_win_unittest.cc. |
- const struct { |
- // Short description to identify the test |
- std::string description; |
- |
- // Input. |
- EnvVarValues values; |
- |
- // Expected outputs (availability and fields of ProxyConfig). |
- ProxyConfigService::ConfigAvailability availability; |
- bool auto_detect; |
- GURL pac_url; |
- ProxyRulesExpectation proxy_rules; |
- } tests[] = { |
- { |
- TEST_DESC("No proxying"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- NULL, // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- "*", // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Auto detect"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- "", // auto_proxy |
- NULL, // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- true, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Valid PAC URL"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- "http://wpad/wpad.dat", // auto_proxy |
- NULL, // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL("http://wpad/wpad.dat"), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Invalid PAC URL"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- "wpad.dat", // auto_proxy |
- NULL, // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Single-host in proxy list"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "www.google.com", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:80", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Single-host, different port"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "www.google.com:99", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:99", // single |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Tolerate a scheme"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "http://www.google.com:99", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:99", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Per-scheme proxy rules"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- NULL, // all_proxy |
- "www.google.com:80", "www.foo.com:110", "ftp.foo.com:121", // per-proto |
- NULL, NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "www.foo.com:110", // https |
- "ftp.foo.com:121", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("socks"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- "socks.com:888", NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks5://socks.com:888", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("socks4"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- "socks.com:888", "4", // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks4://socks.com:888", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("socks default port"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- "", // all_proxy |
- NULL, NULL, NULL, // per-proto proxies |
- "socks.com", NULL, // SOCKS |
- NULL, // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks5://socks.com:1080", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("bypass"), |
- { // Input. |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- 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 |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "www.google.com:80", |
- "*.google.com,*foo.com:99,1.2.3.4:22,127.0.0.1/8"), |
- }, |
- }; |
- |
- for (size_t i = 0; i < arraysize(tests); ++i) { |
- SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
- tests[i].description.c_str())); |
- MockEnvironment* env = new MockEnvironment; |
- MockSettingGetter* setting_getter = new MockSettingGetter; |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env, setting_getter)); |
- ProxyConfig config; |
- env->values = tests[i].values; |
- sync_config_getter.SetupAndInitialFetch(); |
- ProxyConfigService::ConfigAvailability availability = |
- sync_config_getter.SyncGetLatestProxyConfig(&config); |
- EXPECT_EQ(tests[i].availability, availability); |
- |
- if (availability == ProxyConfigService::CONFIG_VALID) { |
- EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
- EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
- EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
- } |
- } |
-} |
- |
-TEST_F(ProxyConfigServiceLinuxTest, GconfNotification) { |
- MockEnvironment* env = new MockEnvironment; |
- MockSettingGetter* setting_getter = new MockSettingGetter; |
- ProxyConfigServiceLinux* service = |
- new ProxyConfigServiceLinux(env, setting_getter); |
- SynchConfigGetter sync_config_getter(service); |
- ProxyConfig config; |
- |
- // Start with no proxy. |
- setting_getter->values.mode = "none"; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_FALSE(config.auto_detect()); |
- |
- // Now set to auto-detect. |
- setting_getter->values.mode = "auto"; |
- // Simulate setting change notification callback. |
- service->OnCheckProxyConfigSettings(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_TRUE(config.auto_detect()); |
-} |
- |
-TEST_F(ProxyConfigServiceLinuxTest, KDEConfigParser) { |
- // One of the tests below needs a worst-case long line prefix. We build it |
- // programmatically so that it will always be the right size. |
- std::string long_line; |
- size_t limit = ProxyConfigServiceLinux::SettingGetter::BUFFER_SIZE - 1; |
- for (size_t i = 0; i < limit; ++i) |
- long_line += "-"; |
- |
- // Inspired from proxy_config_service_win_unittest.cc. |
- const struct { |
- // Short description to identify the test |
- std::string description; |
- |
- // Input. |
- std::string kioslaverc; |
- EnvVarValues env_values; |
- |
- // Expected outputs (availability and fields of ProxyConfig). |
- ProxyConfigService::ConfigAvailability availability; |
- bool auto_detect; |
- GURL pac_url; |
- ProxyRulesExpectation proxy_rules; |
- } tests[] = { |
- { |
- TEST_DESC("No proxying"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=0\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Auto detect"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=3\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- true, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Valid PAC URL"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=2\n" |
- "Proxy Config Script=http://wpad/wpad.dat\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL("http://wpad/wpad.dat"), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Valid PAC file without file://"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=2\n" |
- "Proxy Config Script=/wpad/wpad.dat\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL("file:///wpad/wpad.dat"), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Per-scheme proxy rules"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "httpsProxy=www.foo.com\nftpProxy=ftp.foo.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "www.foo.com:80", // https |
- "ftp.foo.com:80", // http |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Only HTTP proxy specified"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\n" |
- "httpProxy=www.google.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Only HTTP proxy specified, different port"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\n" |
- "httpProxy=www.google.com:88\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:88", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Only HTTP proxy specified, different port, space-delimited"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\n" |
- "httpProxy=www.google.com 88\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:88", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Bypass *.google.com"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "NoProxyFor=.google.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- "*.google.com"), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Bypass *.google.com and *.kde.org"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "NoProxyFor=.google.com,.kde.org\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- "*.google.com,*.kde.org"), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Correctly parse bypass list with ReversedException"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "NoProxyFor=.google.com\nReversedException=true\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerSchemeWithBypassReversed( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- "*.google.com"), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("socks"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nsocksProxy=socks.com 888\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks5://socks.com:888", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("socks4"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nsocksProxy=socks4://socks.com 888\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Single( |
- "socks4://socks.com:888", // single proxy |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Treat all hostname patterns as wildcard patterns"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "NoProxyFor=google.com,kde.org,<local>\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- "*google.com,*kde.org,<local>"), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Allow trailing whitespace after boolean value"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "NoProxyFor=.google.com\nReversedException=true \n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerSchemeWithBypassReversed( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- "*.google.com"), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Ignore settings outside [Proxy Settings]"), |
- |
- // Input. |
- "httpsProxy=www.foo.com\n[Proxy Settings]\nProxyType=1\n" |
- "httpProxy=www.google.com\n[Other Section]\nftpProxy=ftp.foo.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Handle CRLF line endings"), |
- |
- // Input. |
- "[Proxy Settings]\r\nProxyType=1\r\nhttpProxy=www.google.com\r\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Handle blank lines and mixed line endings"), |
- |
- // Input. |
- "[Proxy Settings]\r\n\nProxyType=1\n\r\nhttpProxy=www.google.com\n\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Handle localized settings"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType[$e]=1\nhttpProxy[$e]=www.google.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Ignore malformed localized settings"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=1\nhttpProxy=www.google.com\n" |
- "httpsProxy$e]=www.foo.com\nftpProxy=ftp.foo.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "ftp.foo.com:80", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Handle strange whitespace"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType [$e] =2\n" |
- " Proxy Config Script = http:// foo\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL("http:// foo"), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Ignore all of a line which is too long"), |
- |
- // Input. |
- std::string("[Proxy Settings]\nProxyType=1\nftpProxy=ftp.foo.com\n") + |
- long_line + "httpsProxy=www.foo.com\nhttpProxy=www.google.com\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.google.com:80", // http |
- "", // https |
- "ftp.foo.com:80", // ftp |
- ""), // bypass rules |
- }, |
- |
- { |
- TEST_DESC("Indirect Proxy - no env vars set"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" |
- "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", |
- {}, // env_values |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::Empty(), |
- }, |
- |
- { |
- TEST_DESC("Indirect Proxy - with env vars set"), |
- |
- // Input. |
- "[Proxy Settings]\nProxyType=4\nhttpProxy=http_proxy\n" |
- "httpsProxy=https_proxy\nftpProxy=ftp_proxy\nNoProxyFor=no_proxy\n", |
- { // env_values |
- NULL, // DESKTOP_SESSION |
- NULL, // HOME |
- NULL, // KDEHOME |
- NULL, // KDE_SESSION_VERSION |
- NULL, // auto_proxy |
- NULL, // all_proxy |
- "www.normal.com", // http_proxy |
- "www.secure.com", // https_proxy |
- "ftp.foo.com", // ftp_proxy |
- NULL, NULL, // SOCKS |
- ".google.com, .kde.org", // no_proxy |
- }, |
- |
- // Expected result. |
- ProxyConfigService::CONFIG_VALID, |
- false, // auto_detect |
- GURL(), // pac_url |
- ProxyRulesExpectation::PerScheme( |
- "www.normal.com:80", // http |
- "www.secure.com:80", // https |
- "ftp.foo.com:80", // ftp |
- "*.google.com,*.kde.org"), // bypass rules |
- }, |
- |
- }; |
- |
- for (size_t i = 0; i < arraysize(tests); ++i) { |
- SCOPED_TRACE(base::StringPrintf("Test[%" PRIuS "] %s", i, |
- tests[i].description.c_str())); |
- MockEnvironment* env = new MockEnvironment; |
- env->values = tests[i].env_values; |
- // Force the KDE getter to be used and tell it where the test is. |
- env->values.DESKTOP_SESSION = "kde4"; |
- env->values.KDEHOME = kde_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- // Overwrite the kioslaverc file. |
- base::WriteFile(kioslaverc_, tests[i].kioslaverc.c_str(), |
- tests[i].kioslaverc.length()); |
- sync_config_getter.SetupAndInitialFetch(); |
- ProxyConfigService::ConfigAvailability availability = |
- sync_config_getter.SyncGetLatestProxyConfig(&config); |
- EXPECT_EQ(tests[i].availability, availability); |
- |
- if (availability == ProxyConfigService::CONFIG_VALID) { |
- EXPECT_EQ(tests[i].auto_detect, config.auto_detect()); |
- EXPECT_EQ(tests[i].pac_url, config.pac_url()); |
- EXPECT_TRUE(tests[i].proxy_rules.Matches(config.proxy_rules())); |
- } |
- } |
-} |
- |
-TEST_F(ProxyConfigServiceLinuxTest, KDEHomePicker) { |
- // Auto detect proxy settings. |
- std::string slaverc3 = "[Proxy Settings]\nProxyType=3\n"; |
- // Valid PAC URL. |
- std::string slaverc4 = "[Proxy Settings]\nProxyType=2\n" |
- "Proxy Config Script=http://wpad/wpad.dat\n"; |
- GURL slaverc4_pac_url("http://wpad/wpad.dat"); |
- |
- // Overwrite the .kde kioslaverc file. |
- base::WriteFile(kioslaverc_, slaverc3.c_str(), slaverc3.length()); |
- |
- // If .kde4 exists it will mess up the first test. It should not, as |
- // we created the directory for $HOME in the test setup. |
- CHECK(!base::DirectoryExists(kde4_home_)); |
- |
- { SCOPED_TRACE("KDE4, no .kde4 directory, verify fallback"); |
- MockEnvironment* env = new MockEnvironment; |
- env->values.DESKTOP_SESSION = "kde4"; |
- env->values.HOME = user_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_TRUE(config.auto_detect()); |
- EXPECT_EQ(GURL(), config.pac_url()); |
- } |
- |
- // Now create .kde4 and put a kioslaverc in the config directory. |
- // Note that its timestamp will be at least as new as the .kde one. |
- base::CreateDirectory(kde4_config_); |
- base::WriteFile(kioslaverc4_, slaverc4.c_str(), slaverc4.length()); |
- CHECK(base::PathExists(kioslaverc4_)); |
- |
- { SCOPED_TRACE("KDE4, .kde4 directory present, use it"); |
- MockEnvironment* env = new MockEnvironment; |
- env->values.DESKTOP_SESSION = "kde4"; |
- env->values.HOME = user_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_FALSE(config.auto_detect()); |
- EXPECT_EQ(slaverc4_pac_url, config.pac_url()); |
- } |
- |
- { SCOPED_TRACE("KDE3, .kde4 directory present, ignore it"); |
- MockEnvironment* env = new MockEnvironment; |
- env->values.DESKTOP_SESSION = "kde"; |
- env->values.HOME = user_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_TRUE(config.auto_detect()); |
- EXPECT_EQ(GURL(), config.pac_url()); |
- } |
- |
- { SCOPED_TRACE("KDE4, .kde4 directory present, KDEHOME set to .kde"); |
- MockEnvironment* env = new MockEnvironment; |
- env->values.DESKTOP_SESSION = "kde4"; |
- env->values.HOME = user_home_.value().c_str(); |
- env->values.KDEHOME = kde_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_TRUE(config.auto_detect()); |
- EXPECT_EQ(GURL(), config.pac_url()); |
- } |
- |
- // Finally, make the .kde4 config directory older than the .kde directory |
- // and make sure we then use .kde instead of .kde4 since it's newer. |
- base::TouchFile(kde4_config_, base::Time(), base::Time()); |
- |
- { SCOPED_TRACE("KDE4, very old .kde4 directory present, use .kde"); |
- MockEnvironment* env = new MockEnvironment; |
- env->values.DESKTOP_SESSION = "kde4"; |
- env->values.HOME = user_home_.value().c_str(); |
- SynchConfigGetter sync_config_getter( |
- new ProxyConfigServiceLinux(env)); |
- ProxyConfig config; |
- sync_config_getter.SetupAndInitialFetch(); |
- EXPECT_EQ(ProxyConfigService::CONFIG_VALID, |
- sync_config_getter.SyncGetLatestProxyConfig(&config)); |
- EXPECT_TRUE(config.auto_detect()); |
- EXPECT_EQ(GURL(), config.pac_url()); |
- } |
-} |
- |
-} // namespace net |