| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "googleurl/src/gurl.h" | 5 #include "googleurl/src/gurl.h" |
| 6 #include "net/base/net_errors.h" | 6 #include "net/base/net_errors.h" |
| 7 #include "net/proxy/proxy_service.h" | 7 #include "net/proxy/proxy_service.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace { | 10 namespace { |
| 11 | 11 |
| 12 // TODO(eroman): get rid of synchronous usages of ProxyService::ResolveProxy(). |
| 13 |
| 14 class MockProxyConfigService: public net::ProxyConfigService { |
| 15 public: |
| 16 MockProxyConfigService() {} // Direct connect. |
| 17 explicit MockProxyConfigService(const net::ProxyConfig& pc) : config(pc) {} |
| 18 explicit MockProxyConfigService(const std::string& pac_url) { |
| 19 config.pac_url = GURL(pac_url); |
| 20 } |
| 21 |
| 22 virtual int GetProxyConfig(net::ProxyConfig* results) { |
| 23 *results = config; |
| 24 return net::OK; |
| 25 } |
| 26 |
| 27 net::ProxyConfig config; |
| 28 }; |
| 29 |
| 12 class MockProxyResolver : public net::ProxyResolver { | 30 class MockProxyResolver : public net::ProxyResolver { |
| 13 public: | 31 public: |
| 14 MockProxyResolver() : fail_get_proxy_for_url(false) { | 32 MockProxyResolver() : fail_get_proxy_for_url(false) { |
| 15 } | 33 } |
| 16 // Init the MockProxyResolver with the specified ProxyConfig. | 34 |
| 17 explicit MockProxyResolver(const net::ProxyConfig& c) : config(c) { | |
| 18 } | |
| 19 virtual int GetProxyConfig(net::ProxyConfig* results) { | |
| 20 *results = config; | |
| 21 return net::OK; | |
| 22 } | |
| 23 virtual int GetProxyForURL(const GURL& query_url, | 35 virtual int GetProxyForURL(const GURL& query_url, |
| 24 const GURL& pac_url, | 36 const GURL& pac_url, |
| 25 net::ProxyInfo* results) { | 37 net::ProxyInfo* results) { |
| 26 if (pac_url != config.pac_url) | |
| 27 return net::ERR_INVALID_ARGUMENT; | |
| 28 if (fail_get_proxy_for_url) | 38 if (fail_get_proxy_for_url) |
| 29 return net::ERR_FAILED; | 39 return net::ERR_FAILED; |
| 30 if (GURL(query_url).host() == info_predicate_query_host) { | 40 if (GURL(query_url).host() == info_predicate_query_host) { |
| 31 results->Use(info); | 41 results->Use(info); |
| 32 } else { | 42 } else { |
| 33 results->UseDirect(); | 43 results->UseDirect(); |
| 34 } | 44 } |
| 35 return net::OK; | 45 return net::OK; |
| 36 } | 46 } |
| 37 net::ProxyConfig config; | 47 |
| 38 net::ProxyInfo info; | 48 net::ProxyInfo info; |
| 39 | 49 |
| 40 // info is only returned if query_url in GetProxyForURL matches this: | 50 // info is only returned if query_url in GetProxyForURL matches this: |
| 41 std::string info_predicate_query_host; | 51 std::string info_predicate_query_host; |
| 42 | 52 |
| 43 // If true, then GetProxyForURL will fail, which simulates failure to | 53 // If true, then GetProxyForURL will fail, which simulates failure to |
| 44 // download or execute the PAC file. | 54 // download or execute the PAC file. |
| 45 bool fail_get_proxy_for_url; | 55 bool fail_get_proxy_for_url; |
| 46 }; | 56 }; |
| 47 | 57 |
| 48 } // namespace | 58 } // namespace |
| 49 | 59 |
| 50 // GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl | 60 // GetAnnotatedList() is used to generate a string for mozilla's GetProxyForUrl |
| 51 // NPAPI extension. Check that it adheres to the expected format. | 61 // NPAPI extension. Check that it adheres to the expected format. |
| 52 TEST(ProxyListTest, GetAnnotatedList) { | 62 TEST(ProxyListTest, GetAnnotatedList) { |
| 53 net::ProxyList proxy_list; | 63 net::ProxyList proxy_list; |
| 54 | 64 |
| 55 std::vector<std::string> proxies; | 65 std::vector<std::string> proxies; |
| 56 proxies.push_back("www.first.com:80"); | 66 proxies.push_back("www.first.com:80"); |
| 57 proxies.push_back("www.second.com:80"); | 67 proxies.push_back("www.second.com:80"); |
| 58 proxy_list.SetVector(proxies); | 68 proxy_list.SetVector(proxies); |
| 59 | 69 |
| 60 EXPECT_EQ(std::string("PROXY www.first.com:80;PROXY www.second.com:80"), | 70 EXPECT_EQ(std::string("PROXY www.first.com:80;PROXY www.second.com:80"), |
| 61 proxy_list.GetAnnotatedList()); | 71 proxy_list.GetAnnotatedList()); |
| 62 } | 72 } |
| 63 | 73 |
| 64 TEST(ProxyServiceTest, Direct) { | 74 TEST(ProxyServiceTest, Direct) { |
| 65 net::ProxyService service(new MockProxyResolver); | 75 net::ProxyService service(new MockProxyConfigService, |
| 76 new MockProxyResolver); |
| 66 | 77 |
| 67 GURL url("http://www.google.com/"); | 78 GURL url("http://www.google.com/"); |
| 68 | 79 |
| 69 net::ProxyInfo info; | 80 net::ProxyInfo info; |
| 70 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 81 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 71 EXPECT_EQ(rv, net::OK); | 82 EXPECT_EQ(rv, net::OK); |
| 72 EXPECT_TRUE(info.is_direct()); | 83 EXPECT_TRUE(info.is_direct()); |
| 73 } | 84 } |
| 74 | 85 |
| 75 TEST(ProxyServiceTest, PAC) { | 86 TEST(ProxyServiceTest, PAC) { |
| 87 MockProxyConfigService* config_service = |
| 88 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 89 |
| 76 MockProxyResolver* resolver = new MockProxyResolver; | 90 MockProxyResolver* resolver = new MockProxyResolver; |
| 77 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 78 resolver->info.UseNamedProxy("foopy"); | 91 resolver->info.UseNamedProxy("foopy"); |
| 79 resolver->info_predicate_query_host = "www.google.com"; | 92 resolver->info_predicate_query_host = "www.google.com"; |
| 80 | 93 |
| 81 net::ProxyService service(resolver); | 94 net::ProxyService service(config_service, resolver); |
| 82 | 95 |
| 83 GURL url("http://www.google.com/"); | 96 GURL url("http://www.google.com/"); |
| 84 | 97 |
| 85 net::ProxyInfo info; | 98 net::ProxyInfo info; |
| 86 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 99 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 87 EXPECT_EQ(rv, net::OK); | 100 EXPECT_EQ(rv, net::OK); |
| 88 EXPECT_FALSE(info.is_direct()); | 101 EXPECT_FALSE(info.is_direct()); |
| 89 EXPECT_EQ(info.proxy_server(), "foopy"); | 102 EXPECT_EQ(info.proxy_server(), "foopy"); |
| 90 } | 103 } |
| 91 | 104 |
| 92 TEST(ProxyServiceTest, PAC_FailoverToDirect) { | 105 TEST(ProxyServiceTest, PAC_FailoverToDirect) { |
| 106 MockProxyConfigService* config_service = |
| 107 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 108 |
| 93 MockProxyResolver* resolver = new MockProxyResolver; | 109 MockProxyResolver* resolver = new MockProxyResolver; |
| 94 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 95 resolver->info.UseNamedProxy("foopy:8080"); | 110 resolver->info.UseNamedProxy("foopy:8080"); |
| 96 resolver->info_predicate_query_host = "www.google.com"; | 111 resolver->info_predicate_query_host = "www.google.com"; |
| 97 | 112 |
| 98 net::ProxyService service(resolver); | 113 net::ProxyService service(config_service, resolver); |
| 99 | 114 |
| 100 GURL url("http://www.google.com/"); | 115 GURL url("http://www.google.com/"); |
| 101 | 116 |
| 102 net::ProxyInfo info; | 117 net::ProxyInfo info; |
| 103 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 118 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 104 EXPECT_EQ(rv, net::OK); | 119 EXPECT_EQ(rv, net::OK); |
| 105 EXPECT_FALSE(info.is_direct()); | 120 EXPECT_FALSE(info.is_direct()); |
| 106 EXPECT_EQ(info.proxy_server(), "foopy:8080"); | 121 EXPECT_EQ(info.proxy_server(), "foopy:8080"); |
| 107 | 122 |
| 108 // Now, imagine that connecting to foopy:8080 fails. | 123 // Now, imagine that connecting to foopy:8080 fails. |
| 109 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 124 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 110 EXPECT_EQ(rv, net::OK); | 125 EXPECT_EQ(rv, net::OK); |
| 111 EXPECT_TRUE(info.is_direct()); | 126 EXPECT_TRUE(info.is_direct()); |
| 112 } | 127 } |
| 113 | 128 |
| 114 TEST(ProxyServiceTest, PAC_FailsToDownload) { | 129 TEST(ProxyServiceTest, PAC_FailsToDownload) { |
| 115 // Test what happens when we fail to download the PAC URL. | 130 // Test what happens when we fail to download the PAC URL. |
| 116 | 131 |
| 132 MockProxyConfigService* config_service = |
| 133 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 134 |
| 117 MockProxyResolver* resolver = new MockProxyResolver; | 135 MockProxyResolver* resolver = new MockProxyResolver; |
| 118 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 119 resolver->info.UseNamedProxy("foopy:8080"); | 136 resolver->info.UseNamedProxy("foopy:8080"); |
| 120 resolver->info_predicate_query_host = "www.google.com"; | 137 resolver->info_predicate_query_host = "www.google.com"; |
| 121 resolver->fail_get_proxy_for_url = true; | 138 resolver->fail_get_proxy_for_url = true; |
| 122 | 139 |
| 123 net::ProxyService service(resolver); | 140 net::ProxyService service(config_service, resolver); |
| 124 | 141 |
| 125 GURL url("http://www.google.com/"); | 142 GURL url("http://www.google.com/"); |
| 126 net::ProxyInfo info; | 143 net::ProxyInfo info; |
| 127 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 144 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 128 EXPECT_EQ(rv, net::OK); | 145 EXPECT_EQ(rv, net::OK); |
| 129 EXPECT_TRUE(info.is_direct()); | 146 EXPECT_TRUE(info.is_direct()); |
| 130 | 147 |
| 131 rv = service.ResolveProxy(url, &info, NULL, NULL); | 148 rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 132 EXPECT_EQ(rv, net::OK); | 149 EXPECT_EQ(rv, net::OK); |
| 133 EXPECT_TRUE(info.is_direct()); | 150 EXPECT_TRUE(info.is_direct()); |
| 134 | 151 |
| 135 resolver->fail_get_proxy_for_url = false; | 152 resolver->fail_get_proxy_for_url = false; |
| 136 resolver->info.UseNamedProxy("foopy_valid:8080"); | 153 resolver->info.UseNamedProxy("foopy_valid:8080"); |
| 137 | 154 |
| 138 // But, if that fails, then we should give the proxy config another shot | 155 // But, if that fails, then we should give the proxy config another shot |
| 139 // since we have never tried it with this URL before. | 156 // since we have never tried it with this URL before. |
| 140 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 157 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 141 EXPECT_EQ(rv, net::OK); | 158 EXPECT_EQ(rv, net::OK); |
| 142 EXPECT_FALSE(info.is_direct()); | 159 EXPECT_FALSE(info.is_direct()); |
| 143 EXPECT_EQ(info.proxy_server(), "foopy_valid:8080"); | 160 EXPECT_EQ(info.proxy_server(), "foopy_valid:8080"); |
| 144 } | 161 } |
| 145 | 162 |
| 146 TEST(ProxyServiceTest, ProxyFallback) { | 163 TEST(ProxyServiceTest, ProxyFallback) { |
| 147 // Test what happens when we specify multiple proxy servers and some of them | 164 // Test what happens when we specify multiple proxy servers and some of them |
| 148 // are bad. | 165 // are bad. |
| 149 | 166 |
| 167 MockProxyConfigService* config_service = |
| 168 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 169 |
| 150 MockProxyResolver* resolver = new MockProxyResolver; | 170 MockProxyResolver* resolver = new MockProxyResolver; |
| 151 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 152 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); | 171 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
| 153 resolver->info_predicate_query_host = "www.google.com"; | 172 resolver->info_predicate_query_host = "www.google.com"; |
| 154 resolver->fail_get_proxy_for_url = false; | 173 resolver->fail_get_proxy_for_url = false; |
| 155 | 174 |
| 156 net::ProxyService service(resolver); | 175 net::ProxyService service(config_service, resolver); |
| 157 | 176 |
| 158 GURL url("http://www.google.com/"); | 177 GURL url("http://www.google.com/"); |
| 159 | 178 |
| 160 // Get the proxy information. | 179 // Get the proxy information. |
| 161 net::ProxyInfo info; | 180 net::ProxyInfo info; |
| 162 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 181 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 163 EXPECT_EQ(rv, net::OK); | 182 EXPECT_EQ(rv, net::OK); |
| 164 EXPECT_FALSE(info.is_direct()); | 183 EXPECT_FALSE(info.is_direct()); |
| 165 | 184 |
| 166 // The first item is valid. | 185 // The first item is valid. |
| 167 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); | 186 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
| 168 | 187 |
| 169 // Fake an error on the proxy. | 188 // Fake an error on the proxy. |
| 170 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 189 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 171 EXPECT_EQ(rv, net::OK); | 190 EXPECT_EQ(rv, net::OK); |
| 172 | 191 |
| 173 // The second proxy should be specified. | 192 // The second proxy should be specified. |
| 174 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); | 193 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); |
| 175 | 194 |
| 176 // Create a new resolver that returns 3 proxies. The second one is already | 195 // Create a new resolver that returns 3 proxies. The second one is already |
| 177 // known to be bad. | 196 // known to be bad. |
| 178 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | 197 config_service->config.pac_url = GURL("http://foopy/proxy.pac"); |
| 179 resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090"); | 198 resolver->info.UseNamedProxy("foopy3:7070;foopy1:8080;foopy2:9090"); |
| 180 resolver->info_predicate_query_host = "www.google.com"; | 199 resolver->info_predicate_query_host = "www.google.com"; |
| 181 resolver->fail_get_proxy_for_url = false; | 200 resolver->fail_get_proxy_for_url = false; |
| 182 | 201 |
| 183 rv = service.ResolveProxy(url, &info, NULL, NULL); | 202 rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 184 EXPECT_EQ(rv, net::OK); | 203 EXPECT_EQ(rv, net::OK); |
| 185 EXPECT_FALSE(info.is_direct()); | 204 EXPECT_FALSE(info.is_direct()); |
| 186 EXPECT_EQ(info.proxy_server(), "foopy3:7070"); | 205 EXPECT_EQ(info.proxy_server(), "foopy3:7070"); |
| 187 | 206 |
| 188 // We fake another error. It should now try the third one. | 207 // We fake another error. It should now try the third one. |
| 189 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 208 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 190 EXPECT_EQ(rv, net::OK); | 209 EXPECT_EQ(rv, net::OK); |
| 191 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); | 210 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); |
| 192 | 211 |
| 193 // Fake another error, the last proxy is gone, the list should now be empty. | 212 // Fake another error, the last proxy is gone, the list should now be empty. |
| 194 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 213 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 195 EXPECT_EQ(rv, net::OK); // We try direct. | 214 EXPECT_EQ(rv, net::OK); // We try direct. |
| 196 EXPECT_TRUE(info.is_direct()); | 215 EXPECT_TRUE(info.is_direct()); |
| 197 | 216 |
| 198 // If it fails again, we don't have anything else to try. | 217 // If it fails again, we don't have anything else to try. |
| 199 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 218 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 200 EXPECT_EQ(rv, net::ERR_FAILED); // We try direct. | 219 EXPECT_EQ(rv, net::ERR_FAILED); // We try direct. |
| 201 | 220 |
| 202 // TODO(nsylvain): Test that the proxy can be retried after the delay. | 221 // TODO(nsylvain): Test that the proxy can be retried after the delay. |
| 203 } | 222 } |
| 204 | 223 |
| 205 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { | 224 TEST(ProxyServiceTest, ProxyFallback_NewSettings) { |
| 206 // Test proxy failover when new settings are available. | 225 // Test proxy failover when new settings are available. |
| 207 | 226 |
| 227 MockProxyConfigService* config_service = |
| 228 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 229 |
| 208 MockProxyResolver* resolver = new MockProxyResolver; | 230 MockProxyResolver* resolver = new MockProxyResolver; |
| 209 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 210 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); | 231 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
| 211 resolver->info_predicate_query_host = "www.google.com"; | 232 resolver->info_predicate_query_host = "www.google.com"; |
| 212 resolver->fail_get_proxy_for_url = false; | 233 resolver->fail_get_proxy_for_url = false; |
| 213 | 234 |
| 214 net::ProxyService service(resolver); | 235 net::ProxyService service(config_service, resolver); |
| 215 | 236 |
| 216 GURL url("http://www.google.com/"); | 237 GURL url("http://www.google.com/"); |
| 217 | 238 |
| 218 // Get the proxy information. | 239 // Get the proxy information. |
| 219 net::ProxyInfo info; | 240 net::ProxyInfo info; |
| 220 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 241 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 221 EXPECT_EQ(rv, net::OK); | 242 EXPECT_EQ(rv, net::OK); |
| 222 EXPECT_FALSE(info.is_direct()); | 243 EXPECT_FALSE(info.is_direct()); |
| 223 | 244 |
| 224 // The first item is valid. | 245 // The first item is valid. |
| 225 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); | 246 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
| 226 | 247 |
| 227 // Fake an error on the proxy, and also a new configuration on the proxy. | 248 // Fake an error on the proxy, and also a new configuration on the proxy. |
| 228 resolver->config = net::ProxyConfig(); | 249 config_service->config = net::ProxyConfig(); |
| 229 resolver->config.pac_url = GURL("http://foopy-new/proxy.pac"); | 250 config_service->config.pac_url = GURL("http://foopy-new/proxy.pac"); |
| 230 | 251 |
| 231 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 252 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 232 EXPECT_EQ(rv, net::OK); | 253 EXPECT_EQ(rv, net::OK); |
| 233 | 254 |
| 234 // The first proxy is still there since the configuration changed. | 255 // The first proxy is still there since the configuration changed. |
| 235 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); | 256 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
| 236 | 257 |
| 237 // We fake another error. It should now ignore the first one. | 258 // We fake another error. It should now ignore the first one. |
| 238 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 259 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 239 EXPECT_EQ(rv, net::OK); | 260 EXPECT_EQ(rv, net::OK); |
| 240 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); | 261 EXPECT_EQ(info.proxy_server(), "foopy2:9090"); |
| 241 | 262 |
| 242 // We simulate a new configuration. | 263 // We simulate a new configuration. |
| 243 resolver->config = net::ProxyConfig(); | 264 config_service->config = net::ProxyConfig(); |
| 244 resolver->config.pac_url = GURL("http://foopy-new2/proxy.pac"); | 265 config_service->config.pac_url = GURL("http://foopy-new2/proxy.pac"); |
| 245 | 266 |
| 246 // We fake anothe error. It should go back to the first proxy. | 267 // We fake anothe error. It should go back to the first proxy. |
| 247 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); | 268 rv = service.ReconsiderProxyAfterError(url, &info, NULL, NULL); |
| 248 EXPECT_EQ(rv, net::OK); | 269 EXPECT_EQ(rv, net::OK); |
| 249 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); | 270 EXPECT_EQ(info.proxy_server(), "foopy1:8080"); |
| 250 } | 271 } |
| 251 | 272 |
| 252 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { | 273 TEST(ProxyServiceTest, ProxyFallback_BadConfig) { |
| 253 // Test proxy failover when the configuration is bad. | 274 // Test proxy failover when the configuration is bad. |
| 254 | 275 |
| 276 MockProxyConfigService* config_service = |
| 277 new MockProxyConfigService("http://foopy/proxy.pac"); |
| 278 |
| 255 MockProxyResolver* resolver = new MockProxyResolver; | 279 MockProxyResolver* resolver = new MockProxyResolver; |
| 256 resolver->config.pac_url = GURL("http://foopy/proxy.pac"); | |
| 257 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); | 280 resolver->info.UseNamedProxy("foopy1:8080;foopy2:9090"); |
| 258 resolver->info_predicate_query_host = "www.google.com"; | 281 resolver->info_predicate_query_host = "www.google.com"; |
| 259 resolver->fail_get_proxy_for_url = false; | 282 resolver->fail_get_proxy_for_url = false; |
| 260 | 283 |
| 261 net::ProxyService service(resolver); | 284 net::ProxyService service(config_service, resolver); |
| 262 | 285 |
| 263 GURL url("http://www.google.com/"); | 286 GURL url("http://www.google.com/"); |
| 264 | 287 |
| 265 // Get the proxy information. | 288 // Get the proxy information. |
| 266 net::ProxyInfo info; | 289 net::ProxyInfo info; |
| 267 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 290 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 268 EXPECT_EQ(rv, net::OK); | 291 EXPECT_EQ(rv, net::OK); |
| 269 EXPECT_FALSE(info.is_direct()); | 292 EXPECT_FALSE(info.is_direct()); |
| 270 | 293 |
| 271 // The first item is valid. | 294 // The first item is valid. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 } | 334 } |
| 312 | 335 |
| 313 TEST(ProxyServiceTest, ProxyBypassList) { | 336 TEST(ProxyServiceTest, ProxyBypassList) { |
| 314 // Test what happens when a proxy bypass list is specified. | 337 // Test what happens when a proxy bypass list is specified. |
| 315 | 338 |
| 316 net::ProxyConfig config; | 339 net::ProxyConfig config; |
| 317 config.proxy_server = "foopy1:8080;foopy2:9090"; | 340 config.proxy_server = "foopy1:8080;foopy2:9090"; |
| 318 config.auto_detect = false; | 341 config.auto_detect = false; |
| 319 config.proxy_bypass_local_names = true; | 342 config.proxy_bypass_local_names = true; |
| 320 | 343 |
| 321 net::ProxyService service(new MockProxyResolver(config)); | 344 net::ProxyService service(new MockProxyConfigService(config), |
| 345 new MockProxyResolver()); |
| 322 GURL url("http://www.google.com/"); | 346 GURL url("http://www.google.com/"); |
| 323 // Get the proxy information. | 347 // Get the proxy information. |
| 324 net::ProxyInfo info; | 348 net::ProxyInfo info; |
| 325 int rv = service.ResolveProxy(url, &info, NULL, NULL); | 349 int rv = service.ResolveProxy(url, &info, NULL, NULL); |
| 326 EXPECT_EQ(rv, net::OK); | 350 EXPECT_EQ(rv, net::OK); |
| 327 EXPECT_FALSE(info.is_direct()); | 351 EXPECT_FALSE(info.is_direct()); |
| 328 | 352 |
| 329 net::ProxyService service1(new MockProxyResolver(config)); | 353 net::ProxyService service1(new MockProxyConfigService(config), |
| 354 new MockProxyResolver()); |
| 330 GURL test_url1("local"); | 355 GURL test_url1("local"); |
| 331 net::ProxyInfo info1; | 356 net::ProxyInfo info1; |
| 332 rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); | 357 rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); |
| 333 EXPECT_EQ(rv, net::OK); | 358 EXPECT_EQ(rv, net::OK); |
| 334 EXPECT_TRUE(info1.is_direct()); | 359 EXPECT_TRUE(info1.is_direct()); |
| 335 | 360 |
| 336 config.proxy_bypass.clear(); | 361 config.proxy_bypass.clear(); |
| 337 config.proxy_bypass.push_back("*.org"); | 362 config.proxy_bypass.push_back("*.org"); |
| 338 config.proxy_bypass_local_names = true; | 363 config.proxy_bypass_local_names = true; |
| 339 MockProxyResolver* resolver = new MockProxyResolver(config); | 364 net::ProxyService service2(new MockProxyConfigService(config), |
| 340 net::ProxyService service2(resolver); | 365 new MockProxyResolver); |
| 341 GURL test_url2("http://www.webkit.org"); | 366 GURL test_url2("http://www.webkit.org"); |
| 342 net::ProxyInfo info2; | 367 net::ProxyInfo info2; |
| 343 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); | 368 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); |
| 344 EXPECT_EQ(rv, net::OK); | 369 EXPECT_EQ(rv, net::OK); |
| 345 EXPECT_TRUE(info2.is_direct()); | 370 EXPECT_TRUE(info2.is_direct()); |
| 346 | 371 |
| 347 config.proxy_bypass.clear(); | 372 config.proxy_bypass.clear(); |
| 348 config.proxy_bypass.push_back("*.org"); | 373 config.proxy_bypass.push_back("*.org"); |
| 349 config.proxy_bypass.push_back("7*"); | 374 config.proxy_bypass.push_back("7*"); |
| 350 config.proxy_bypass_local_names = true; | 375 config.proxy_bypass_local_names = true; |
| 351 resolver = new MockProxyResolver(config); | 376 net::ProxyService service3(new MockProxyConfigService(config), |
| 352 net::ProxyService service3(resolver); | 377 new MockProxyResolver); |
| 353 GURL test_url3("http://74.125.19.147"); | 378 GURL test_url3("http://74.125.19.147"); |
| 354 net::ProxyInfo info3; | 379 net::ProxyInfo info3; |
| 355 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); | 380 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); |
| 356 EXPECT_EQ(rv, net::OK); | 381 EXPECT_EQ(rv, net::OK); |
| 357 EXPECT_TRUE(info3.is_direct()); | 382 EXPECT_TRUE(info3.is_direct()); |
| 358 | 383 |
| 359 config.proxy_bypass.clear(); | 384 config.proxy_bypass.clear(); |
| 360 config.proxy_bypass.push_back("*.org"); | 385 config.proxy_bypass.push_back("*.org"); |
| 361 config.proxy_bypass_local_names = true; | 386 config.proxy_bypass_local_names = true; |
| 362 resolver = new MockProxyResolver(config); | 387 net::ProxyService service4(new MockProxyConfigService(config), |
| 363 net::ProxyService service4(resolver); | 388 new MockProxyResolver); |
| 364 GURL test_url4("http://www.msn.com"); | 389 GURL test_url4("http://www.msn.com"); |
| 365 net::ProxyInfo info4; | 390 net::ProxyInfo info4; |
| 366 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); | 391 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); |
| 367 EXPECT_EQ(rv, net::OK); | 392 EXPECT_EQ(rv, net::OK); |
| 368 EXPECT_FALSE(info4.is_direct()); | 393 EXPECT_FALSE(info4.is_direct()); |
| 369 | 394 |
| 370 config.proxy_bypass.clear(); | 395 config.proxy_bypass.clear(); |
| 371 config.proxy_bypass.push_back("*.MSN.COM"); | 396 config.proxy_bypass.push_back("*.MSN.COM"); |
| 372 config.proxy_bypass_local_names = true; | 397 config.proxy_bypass_local_names = true; |
| 373 resolver = new MockProxyResolver(config); | 398 net::ProxyService service5(new MockProxyConfigService(config), |
| 374 net::ProxyService service5(resolver); | 399 new MockProxyResolver); |
| 375 GURL test_url5("http://www.msnbc.msn.com"); | 400 GURL test_url5("http://www.msnbc.msn.com"); |
| 376 net::ProxyInfo info5; | 401 net::ProxyInfo info5; |
| 377 rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL); | 402 rv = service5.ResolveProxy(test_url5, &info5, NULL, NULL); |
| 378 EXPECT_EQ(rv, net::OK); | 403 EXPECT_EQ(rv, net::OK); |
| 379 EXPECT_TRUE(info5.is_direct()); | 404 EXPECT_TRUE(info5.is_direct()); |
| 380 | 405 |
| 381 config.proxy_bypass.clear(); | 406 config.proxy_bypass.clear(); |
| 382 config.proxy_bypass.push_back("*.msn.com"); | 407 config.proxy_bypass.push_back("*.msn.com"); |
| 383 config.proxy_bypass_local_names = true; | 408 config.proxy_bypass_local_names = true; |
| 384 resolver = new MockProxyResolver(config); | 409 net::ProxyService service6(new MockProxyConfigService(config), |
| 385 net::ProxyService service6(resolver); | 410 new MockProxyResolver); |
| 386 GURL test_url6("HTTP://WWW.MSNBC.MSN.COM"); | 411 GURL test_url6("HTTP://WWW.MSNBC.MSN.COM"); |
| 387 net::ProxyInfo info6; | 412 net::ProxyInfo info6; |
| 388 rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL); | 413 rv = service6.ResolveProxy(test_url6, &info6, NULL, NULL); |
| 389 EXPECT_EQ(rv, net::OK); | 414 EXPECT_EQ(rv, net::OK); |
| 390 EXPECT_TRUE(info6.is_direct()); | 415 EXPECT_TRUE(info6.is_direct()); |
| 391 } | 416 } |
| 392 | 417 |
| 393 TEST(ProxyServiceTest, PerProtocolProxyTests) { | 418 TEST(ProxyServiceTest, PerProtocolProxyTests) { |
| 394 net::ProxyConfig config; | 419 net::ProxyConfig config; |
| 395 config.proxy_server = "http=foopy1:8080;https=foopy2:8080"; | 420 config.proxy_server = "http=foopy1:8080;https=foopy2:8080"; |
| 396 config.auto_detect = false; | 421 config.auto_detect = false; |
| 397 | 422 |
| 398 net::ProxyService service1(new MockProxyResolver(config)); | 423 net::ProxyService service1(new MockProxyConfigService(config), |
| 424 new MockProxyResolver); |
| 399 GURL test_url1("http://www.msn.com"); | 425 GURL test_url1("http://www.msn.com"); |
| 400 net::ProxyInfo info1; | 426 net::ProxyInfo info1; |
| 401 int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); | 427 int rv = service1.ResolveProxy(test_url1, &info1, NULL, NULL); |
| 402 EXPECT_EQ(rv, net::OK); | 428 EXPECT_EQ(rv, net::OK); |
| 403 EXPECT_FALSE(info1.is_direct()); | 429 EXPECT_FALSE(info1.is_direct()); |
| 404 EXPECT_TRUE(info1.proxy_server() == "foopy1:8080"); | 430 EXPECT_TRUE(info1.proxy_server() == "foopy1:8080"); |
| 405 | 431 |
| 406 net::ProxyService service2(new MockProxyResolver(config)); | 432 net::ProxyService service2(new MockProxyConfigService(config), |
| 433 new MockProxyResolver); |
| 407 GURL test_url2("ftp://ftp.google.com"); | 434 GURL test_url2("ftp://ftp.google.com"); |
| 408 net::ProxyInfo info2; | 435 net::ProxyInfo info2; |
| 409 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); | 436 rv = service2.ResolveProxy(test_url2, &info2, NULL, NULL); |
| 410 EXPECT_EQ(rv, net::OK); | 437 EXPECT_EQ(rv, net::OK); |
| 411 EXPECT_TRUE(info2.is_direct()); | 438 EXPECT_TRUE(info2.is_direct()); |
| 412 EXPECT_TRUE(info2.proxy_server() == ""); | 439 EXPECT_TRUE(info2.proxy_server() == ""); |
| 413 | 440 |
| 414 net::ProxyService service3(new MockProxyResolver(config)); | 441 net::ProxyService service3(new MockProxyConfigService(config), |
| 442 new MockProxyResolver); |
| 415 GURL test_url3("https://webbranch.techcu.com"); | 443 GURL test_url3("https://webbranch.techcu.com"); |
| 416 net::ProxyInfo info3; | 444 net::ProxyInfo info3; |
| 417 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); | 445 rv = service3.ResolveProxy(test_url3, &info3, NULL, NULL); |
| 418 EXPECT_EQ(rv, net::OK); | 446 EXPECT_EQ(rv, net::OK); |
| 419 EXPECT_FALSE(info3.is_direct()); | 447 EXPECT_FALSE(info3.is_direct()); |
| 420 EXPECT_TRUE(info3.proxy_server() == "foopy2:8080"); | 448 EXPECT_TRUE(info3.proxy_server() == "foopy2:8080"); |
| 421 | 449 |
| 422 MockProxyResolver* resolver = new MockProxyResolver(config); | 450 config.proxy_server = "foopy1:8080"; |
| 423 resolver->config.proxy_server = "foopy1:8080"; | 451 net::ProxyService service4(new MockProxyConfigService(config), |
| 424 net::ProxyService service4(resolver); | 452 new MockProxyResolver); |
| 425 GURL test_url4("www.microsoft.com"); | 453 GURL test_url4("www.microsoft.com"); |
| 426 net::ProxyInfo info4; | 454 net::ProxyInfo info4; |
| 427 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); | 455 rv = service4.ResolveProxy(test_url4, &info4, NULL, NULL); |
| 428 EXPECT_EQ(rv, net::OK); | 456 EXPECT_EQ(rv, net::OK); |
| 429 EXPECT_FALSE(info4.is_direct()); | 457 EXPECT_FALSE(info4.is_direct()); |
| 430 EXPECT_TRUE(info4.proxy_server() == "foopy1:8080"); | 458 EXPECT_TRUE(info4.proxy_server() == "foopy1:8080"); |
| 431 } | 459 } |
| 432 | 460 |
| OLD | NEW |