15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_config_service_android.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_info.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestObserver : public ProxyConfigService::Observer { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestObserver() : availability_(ProxyConfigService::CONFIG_UNSET) {} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ProxyConfigService::Observer: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnProxyConfigChanged( 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProxyConfig& config, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigService::ConfigAvailability availability) OVERRIDE { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config_ = config; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) availability_ = availability; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigService::ConfigAvailability availability() const { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return availability_; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ProxyConfig& config() const { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return config_; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig config_; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigService::ConfigAvailability availability_; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef std::map<std::string, std::string> StringMap; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigServiceAndroidTestBase : public testing::Test { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that the current thread's message loop is initialized by the test 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // suite (see net/test/net_test_suite.cc). 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigServiceAndroidTestBase(const StringMap& initial_configuration) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : configuration_(initial_configuration), 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_(base::MessageLoop::current()), 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) service_(message_loop_->message_loop_proxy(), 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) message_loop_->message_loop_proxy(), 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Bind(&ProxyConfigServiceAndroidTestBase::GetProperty, 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::Unretained(this))) {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ProxyConfigServiceAndroidTestBase() {} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // testing::Test: 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_->RunUntilIdle(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.AddObserver(&observer_); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.RemoveObserver(&observer_); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearConfiguration() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) configuration_.clear(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddProperty(const std::string& key, const std::string& value) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) configuration_[key] = value; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetProperty(const std::string& key) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringMap::const_iterator it = configuration_.find(key); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (it == configuration_.end()) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::string(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return it->second; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ProxySettingsChanged() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.ProxySettingsChanged(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_->RunUntilIdle(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestMapping(const std::string& url, const std::string& expected) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigService::ConfigAvailability availability; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfig proxy_config; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) availability = service_.GetLatestProxyConfig(&proxy_config); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ProxyConfigService::CONFIG_VALID, availability); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyInfo proxy_info; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.proxy_rules().Apply(GURL(url), &proxy_info); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected, proxy_info.ToPacString()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringMap configuration_; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestObserver observer_; 10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop* const message_loop_; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigServiceAndroid service_; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigServiceAndroidTest : public ProxyConfigServiceAndroidTestBase { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigServiceAndroidTest() 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ProxyConfigServiceAndroidTestBase(StringMap()) {} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigServiceAndroidWithInitialConfigTest 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ProxyConfigServiceAndroidTestBase { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigServiceAndroidWithInitialConfigTest() 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ProxyConfigServiceAndroidTestBase(MakeInitialConfiguration()) {} 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringMap MakeInitialConfiguration() { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StringMap initial_configuration; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_configuration["http.proxyHost"] = "httpproxy.com"; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) initial_configuration["http.proxyPort"] = "8080"; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return initial_configuration; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, TestChangePropertiesNotification) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up a non-empty configuration 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "localhost"); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ProxyConfigService::CONFIG_VALID, observer_.availability()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(observer_.config().proxy_rules().empty()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up an empty configuration 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearConfiguration(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ProxyConfigService::CONFIG_VALID, observer_.availability()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(observer_.config().proxy_rules().empty()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidWithInitialConfigTest, TestInitialConfig) { 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that the initial config is set. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:8080"); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Override the initial configuration. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearConfiguration(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:80"); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// !! The following test cases are automatically generated from 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// !! net/android/tools/proxy_test_cases.py. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// !! Please edit that file instead of editing the test cases below and 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// !! update also the corresponding Java unit tests in 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// !! AndroidProxySelectorTest.java 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, NoProxy) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test direct mapping when no proxy defined. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyHostAndPort) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test http.proxyHost and http.proxyPort works. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:8080"); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyHostOnly) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should get the default port (80) for proxied hosts. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:80"); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyPortOnly) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http.proxyPort only should not result in any hosts being proxied. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpNonProxyHosts1) { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that HTTP non proxy hosts are mapped correctly 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.nonProxyHosts", "slashdot.org"); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:8080"); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://slashdot.org/", "DIRECT"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpNonProxyHosts2) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that | pattern works. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.nonProxyHosts", "slashdot.org|freecode.net"); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY httpproxy.com:8080"); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://freecode.net/", "DIRECT"); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://slashdot.org/", "DIRECT"); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpNonProxyHosts3) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that * pattern works. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.nonProxyHosts", "*example.com"); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "httpproxy.com"); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://slashdot.org/", "PROXY httpproxy.com:8080"); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://www.example.com/", "DIRECT"); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, FtpNonProxyHosts) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that FTP non proxy hosts are mapped correctly 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.nonProxyHosts", "slashdot.org"); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyHost", "httpproxy.com"); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyPort", "8080"); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, FtpProxyHostAndPort) { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test ftp.proxyHost and ftp.proxyPort works. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyHost", "httpproxy.com"); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyPort", "8080"); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, FtpProxyHostOnly) { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test ftp.proxyHost and default port. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyHost", "httpproxy.com"); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "PROXY httpproxy.com:80"); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "DIRECT"); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpsProxyHostAndPort) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test https.proxyHost and https.proxyPort works. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("https.proxyHost", "httpproxy.com"); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("https.proxyPort", "8080"); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestMapping("https://example.com/", "PROXY httpproxy.com:8080"); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpsProxyHostOnly) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test https.proxyHost and default port. 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("https.proxyHost", "httpproxy.com"); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestMapping("https://example.com/", "PROXY httpproxy.com:80"); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyHostIPv6) { 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IPv6 https.proxyHost and default port. 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "a:b:c::d:1"); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY [a:b:c::d:1]:80"); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyHostAndPortIPv6) { 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test IPv6 http.proxyHost and http.proxyPort works. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "a:b:c::d:1"); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "8080"); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY [a:b:c::d:1]:8080"); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxyHostAndInvalidPort) { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test invalid http.proxyPort does not crash. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "a:b:c::d:1"); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyPort", "65536"); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "DIRECT"); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "DIRECT"); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, DefaultProxyExplictPort) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default http proxy is used if a scheme-specific one is not found. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyHost", "httpproxy.com"); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("ftp.proxyPort", "8080"); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("proxyHost", "defaultproxy.com"); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("proxyPort", "8080"); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com/", "PROXY httpproxy.com:8080"); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY defaultproxy.com:8080"); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestMapping("https://example.com/", "PROXY defaultproxy.com:8080"); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, DefaultProxyDefaultPort) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the default proxy port is as expected. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("proxyHost", "defaultproxy.com"); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY defaultproxy.com:80"); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestMapping("https://example.com/", "PROXY defaultproxy.com:80"); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, FallbackToSocks) { 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SOCKS proxy is used if scheme-specific one is not found. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("http.proxyHost", "defaultproxy.com"); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("socksProxyHost", "socksproxy.com"); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("ftp://example.com", "SOCKS5 socksproxy.com:1080"); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY defaultproxy.com:80"); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("https://example.com/", "SOCKS5 socksproxy.com:1080"); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, SocksExplicitPort) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SOCKS proxy port is used if specified 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("socksProxyHost", "socksproxy.com"); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("socksProxyPort", "9000"); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "SOCKS5 socksproxy.com:9000"); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProxyConfigServiceAndroidTest, HttpProxySupercedesSocks) { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SOCKS proxy is ignored if default HTTP proxy defined. 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("proxyHost", "defaultproxy.com"); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("socksProxyHost", "socksproxy.com"); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddProperty("socksProxyPort", "9000"); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxySettingsChanged(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestMapping("http://example.com/", "PROXY defaultproxy.com:80"); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 353