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 |