Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: net/proxy/proxy_resolver_v8_tracing_unittest.cc

Issue 1944983002: Revert "Add a histogram (Net.PacResultForStrippedUrl) that estimates how often PAC scripts depend o… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2704
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/proxy/proxy_resolver_v8_tracing.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "net/proxy/proxy_resolver_v8_tracing.h" 5 #include "net/proxy/proxy_resolver_v8_tracing.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
11 #include "base/path_service.h" 11 #include "base/path_service.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/synchronization/waitable_event.h" 14 #include "base/synchronization/waitable_event.h"
15 #include "base/test/histogram_tester.h"
16 #include "base/threading/platform_thread.h" 15 #include "base/threading/platform_thread.h"
17 #include "base/threading/thread_checker.h" 16 #include "base/threading/thread_checker.h"
18 #include "base/values.h" 17 #include "base/values.h"
19 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
20 #include "net/base/test_completion_callback.h" 19 #include "net/base/test_completion_callback.h"
21 #include "net/dns/host_cache.h" 20 #include "net/dns/host_cache.h"
22 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
23 #include "net/log/net_log.h" 22 #include "net/log/net_log.h"
24 #include "net/proxy/proxy_info.h" 23 #include "net/proxy/proxy_info.h"
25 #include "net/test/event_waiter.h" 24 #include "net/test/event_waiter.h"
26 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
27 #include "url/gurl.h" 26 #include "url/gurl.h"
28 27
29 namespace net { 28 namespace net {
30 29
31 namespace { 30 namespace {
32 31
33 class ProxyResolverV8TracingTest : public testing::Test { 32 class ProxyResolverV8TracingTest : public testing::Test {
34 public: 33 public:
35 void TearDown() override { 34 void TearDown() override {
36 // Drain any pending messages, which may be left over from cancellation. 35 // Drain any pending messages, which may be left over from cancellation.
37 // This way they get reliably run as part of the current test, rather than 36 // This way they get reliably run as part of the current test, rather than
38 // spilling into the next test's execution. 37 // spilling into the next test's execution.
39 base::RunLoop().RunUntilIdle(); 38 base::RunLoop().RunUntilIdle();
40 } 39 }
41
42 protected:
43 // TODO(eroman): Remove when done gathering data for crbug.com/593759
44 void ExpectHistogramBucketCount(PacResultForStrippedUrl bucket,
45 size_t expected_total) {
46 histograms_.ExpectUniqueSample(kHistogramPacResultForStrippedUrl,
47 static_cast<int>(bucket), expected_total);
48 }
49
50 // TODO(eroman): Remove when done gathering data for crbug.com/593759
51 void ExpectHistogramTotal(size_t expected_total) {
52 histograms_.ExpectTotalCount(kHistogramPacResultForStrippedUrl,
53 expected_total);
54 }
55
56 private:
57 base::HistogramTester histograms_;
58 }; 40 };
59 41
60 scoped_refptr<ProxyResolverScriptData> LoadScriptData(const char* filename) { 42 scoped_refptr<ProxyResolverScriptData> LoadScriptData(const char* filename) {
61 base::FilePath path; 43 base::FilePath path;
62 PathService::Get(base::DIR_SOURCE_ROOT, &path); 44 PathService::Get(base::DIR_SOURCE_ROOT, &path);
63 path = path.AppendASCII("net"); 45 path = path.AppendASCII("net");
64 path = path.AppendASCII("data"); 46 path = path.AppendASCII("data");
65 path = path.AppendASCII("proxy_resolver_v8_tracing_unittest"); 47 path = path.AppendASCII("proxy_resolver_v8_tracing_unittest");
66 path = path.AppendASCII(filename); 48 path = path.AppendASCII(filename);
67 49
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 TEST_F(ProxyResolverV8TracingTest, Simple) { 153 TEST_F(ProxyResolverV8TracingTest, Simple) {
172 MockCachingHostResolver host_resolver; 154 MockCachingHostResolver host_resolver;
173 MockBindings mock_bindings(&host_resolver); 155 MockBindings mock_bindings(&host_resolver);
174 156
175 scoped_ptr<ProxyResolverV8Tracing> resolver = 157 scoped_ptr<ProxyResolverV8Tracing> resolver =
176 CreateResolver(mock_bindings.CreateBindings(), "simple.js"); 158 CreateResolver(mock_bindings.CreateBindings(), "simple.js");
177 159
178 TestCompletionCallback callback; 160 TestCompletionCallback callback;
179 ProxyInfo proxy_info; 161 ProxyInfo proxy_info;
180 162
181 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 163 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
182 callback.callback(), NULL, 164 callback.callback(), NULL,
183 mock_bindings.CreateBindings()); 165 mock_bindings.CreateBindings());
184 166
185 EXPECT_EQ(OK, callback.WaitForResult()); 167 EXPECT_EQ(OK, callback.WaitForResult());
186 168
187 ExpectHistogramBucketCount(PacResultForStrippedUrl::SUCCESS, 1);
188 ExpectHistogramTotal(1);
189
190 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI()); 169 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI());
191 170
192 EXPECT_EQ(0u, host_resolver.num_resolve()); 171 EXPECT_EQ(0u, host_resolver.num_resolve());
193 172
194 // There were no alerts or errors. 173 // There were no alerts or errors.
195 EXPECT_TRUE(mock_bindings.GetAlerts().empty()); 174 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
196 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 175 EXPECT_TRUE(mock_bindings.GetErrors().empty());
197 } 176 }
198 177
199 TEST_F(ProxyResolverV8TracingTest, AlertUrl) {
200 MockCachingHostResolver host_resolver;
201 MockBindings mock_bindings(&host_resolver);
202
203 scoped_ptr<ProxyResolverV8Tracing> resolver =
204 CreateResolver(mock_bindings.CreateBindings(), "alert_url.js");
205
206 TestCompletionCallback callback;
207 ProxyInfo proxy_info;
208
209 resolver->GetProxyForURL(GURL("https://foo/path"), &proxy_info,
210 callback.callback(), NULL,
211 mock_bindings.CreateBindings());
212
213 EXPECT_EQ(OK, callback.WaitForResult());
214
215 ExpectHistogramBucketCount(PacResultForStrippedUrl::SUCCESS_DIFFERENT_ALERTS,
216 1);
217 ExpectHistogramTotal(1);
218
219 EXPECT_EQ("foobar:99", proxy_info.proxy_server().ToURI());
220
221 EXPECT_EQ(0u, host_resolver.num_resolve());
222
223 // There was 1 alerts and no errors.
224 EXPECT_EQ(1u, mock_bindings.GetAlerts().size());
225 EXPECT_EQ("https://foo/path", mock_bindings.GetAlerts()[0]);
226 EXPECT_TRUE(mock_bindings.GetErrors().empty());
227 }
228
229 TEST_F(ProxyResolverV8TracingTest, JavascriptError) { 178 TEST_F(ProxyResolverV8TracingTest, JavascriptError) {
230 MockCachingHostResolver host_resolver; 179 MockCachingHostResolver host_resolver;
231 MockBindings mock_bindings(&host_resolver); 180 MockBindings mock_bindings(&host_resolver);
232 181
233 scoped_ptr<ProxyResolverV8Tracing> resolver = 182 scoped_ptr<ProxyResolverV8Tracing> resolver =
234 CreateResolver(mock_bindings.CreateBindings(), "error.js"); 183 CreateResolver(mock_bindings.CreateBindings(), "error.js");
235 184
236 TestCompletionCallback callback; 185 TestCompletionCallback callback;
237 ProxyInfo proxy_info; 186 ProxyInfo proxy_info;
238 187
239 resolver->GetProxyForURL(GURL("https://throw-an-error/"), &proxy_info, 188 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info,
240 callback.callback(), NULL, 189 callback.callback(), NULL,
241 mock_bindings.CreateBindings()); 190 mock_bindings.CreateBindings());
242 191
243 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult()); 192 EXPECT_EQ(ERR_PAC_SCRIPT_FAILED, callback.WaitForResult());
244 193
245 ExpectHistogramTotal(0);
246
247 EXPECT_EQ(0u, host_resolver.num_resolve()); 194 EXPECT_EQ(0u, host_resolver.num_resolve());
248 195
249 // Check the output -- there was 1 alert and 1 javascript error. 196 // Check the output -- there was 1 alert and 1 javascript error.
250 ASSERT_EQ(1u, mock_bindings.GetAlerts().size()); 197 ASSERT_EQ(1u, mock_bindings.GetAlerts().size());
251 EXPECT_EQ("Prepare to DIE!", mock_bindings.GetAlerts()[0]); 198 EXPECT_EQ("Prepare to DIE!", mock_bindings.GetAlerts()[0]);
252 ASSERT_EQ(1u, mock_bindings.GetErrors().size()); 199 ASSERT_EQ(1u, mock_bindings.GetErrors().size());
253 EXPECT_EQ(5, mock_bindings.GetErrors()[0].first); 200 EXPECT_EQ(5, mock_bindings.GetErrors()[0].first);
254 EXPECT_EQ("Uncaught TypeError: Cannot read property 'split' of null", 201 EXPECT_EQ("Uncaught TypeError: Cannot read property 'split' of null",
255 mock_bindings.GetErrors()[0].second); 202 mock_bindings.GetErrors()[0].second);
256 } 203 }
257 204
258 TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) { 205 TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) {
259 MockCachingHostResolver host_resolver; 206 MockCachingHostResolver host_resolver;
260 MockBindings mock_bindings(&host_resolver); 207 MockBindings mock_bindings(&host_resolver);
261 208
262 scoped_ptr<ProxyResolverV8Tracing> resolver = 209 scoped_ptr<ProxyResolverV8Tracing> resolver =
263 CreateResolver(mock_bindings.CreateBindings(), "too_many_alerts.js"); 210 CreateResolver(mock_bindings.CreateBindings(), "too_many_alerts.js");
264 211
265 TestCompletionCallback callback; 212 TestCompletionCallback callback;
266 ProxyInfo proxy_info; 213 ProxyInfo proxy_info;
267 214
268 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 215 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
269 callback.callback(), NULL, 216 callback.callback(), NULL,
270 mock_bindings.CreateBindings()); 217 mock_bindings.CreateBindings());
271 218
272 EXPECT_EQ(OK, callback.WaitForResult()); 219 EXPECT_EQ(OK, callback.WaitForResult());
273 220
274 ExpectHistogramBucketCount(
275 PacResultForStrippedUrl::SKIPPED_FALLBACK_BLOCKING_DNS, 1);
276 ExpectHistogramTotal(1);
277
278 // Iteration1 does a DNS resolve 221 // Iteration1 does a DNS resolve
279 // Iteration2 exceeds the alert buffer 222 // Iteration2 exceeds the alert buffer
280 // Iteration3 runs in blocking mode and completes 223 // Iteration3 runs in blocking mode and completes
281 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 224 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
282 225
283 EXPECT_EQ(1u, host_resolver.num_resolve()); 226 EXPECT_EQ(1u, host_resolver.num_resolve());
284 227
285 // No errors. 228 // No errors.
286 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 229 EXPECT_TRUE(mock_bindings.GetErrors().empty());
287 230
(...skipping 10 matching lines...) Expand all
298 TEST_F(ProxyResolverV8TracingTest, TooManyEmptyAlerts) { 241 TEST_F(ProxyResolverV8TracingTest, TooManyEmptyAlerts) {
299 MockCachingHostResolver host_resolver; 242 MockCachingHostResolver host_resolver;
300 MockBindings mock_bindings(&host_resolver); 243 MockBindings mock_bindings(&host_resolver);
301 244
302 scoped_ptr<ProxyResolverV8Tracing> resolver = CreateResolver( 245 scoped_ptr<ProxyResolverV8Tracing> resolver = CreateResolver(
303 mock_bindings.CreateBindings(), "too_many_empty_alerts.js"); 246 mock_bindings.CreateBindings(), "too_many_empty_alerts.js");
304 247
305 TestCompletionCallback callback; 248 TestCompletionCallback callback;
306 ProxyInfo proxy_info; 249 ProxyInfo proxy_info;
307 250
308 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 251 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
309 callback.callback(), NULL, 252 callback.callback(), NULL,
310 mock_bindings.CreateBindings()); 253 mock_bindings.CreateBindings());
311 254
312 EXPECT_EQ(OK, callback.WaitForResult()); 255 EXPECT_EQ(OK, callback.WaitForResult());
313 256
314 ExpectHistogramBucketCount(
315 PacResultForStrippedUrl::SKIPPED_FALLBACK_BLOCKING_DNS, 1);
316 ExpectHistogramTotal(1);
317
318 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 257 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
319 258
320 EXPECT_EQ(1u, host_resolver.num_resolve()); 259 EXPECT_EQ(1u, host_resolver.num_resolve());
321 260
322 // No errors. 261 // No errors.
323 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 262 EXPECT_TRUE(mock_bindings.GetErrors().empty());
324 263
325 // Check the alerts -- the script generated 1000 alerts. 264 // Check the alerts -- the script generated 1000 alerts.
326 std::vector<std::string> alerts = mock_bindings.GetAlerts(); 265 std::vector<std::string> alerts = mock_bindings.GetAlerts();
327 ASSERT_EQ(1000u, alerts.size()); 266 ASSERT_EQ(1000u, alerts.size());
(...skipping 20 matching lines...) Expand all
348 host_resolver.rules()->AddRuleForAddressFamily( 287 host_resolver.rules()->AddRuleForAddressFamily(
349 "*", ADDRESS_FAMILY_IPV4, "122.133.144.155"); 288 "*", ADDRESS_FAMILY_IPV4, "122.133.144.155");
350 host_resolver.rules()->AddRule("*", "133.122.100.200"); 289 host_resolver.rules()->AddRule("*", "133.122.100.200");
351 290
352 scoped_ptr<ProxyResolverV8Tracing> resolver = 291 scoped_ptr<ProxyResolverV8Tracing> resolver =
353 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 292 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
354 293
355 TestCompletionCallback callback; 294 TestCompletionCallback callback;
356 ProxyInfo proxy_info; 295 ProxyInfo proxy_info;
357 296
358 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 297 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
359 callback.callback(), NULL, 298 callback.callback(), NULL,
360 mock_bindings.CreateBindings()); 299 mock_bindings.CreateBindings());
361 300
362 EXPECT_EQ(OK, callback.WaitForResult()); 301 EXPECT_EQ(OK, callback.WaitForResult());
363 302
364 ExpectHistogramBucketCount(PacResultForStrippedUrl::SUCCESS, 1);
365 ExpectHistogramTotal(1);
366
367 // The test does 13 DNS resolution, however only 7 of them are unique. 303 // The test does 13 DNS resolution, however only 7 of them are unique.
368 EXPECT_EQ(7u, host_resolver.num_resolve()); 304 EXPECT_EQ(7u, host_resolver.num_resolve());
369 305
370 const char* kExpectedResult = 306 const char* kExpectedResult =
371 "122.133.144.155-" // myIpAddress() 307 "122.133.144.155-" // myIpAddress()
372 "null-" // dnsResolve('') 308 "null-" // dnsResolve('')
373 "__1_192.168.1.1-" // dnsResolveEx('host1') 309 "__1_192.168.1.1-" // dnsResolveEx('host1')
374 "null-" // dnsResolve('host2') 310 "null-" // dnsResolve('host2')
375 "166.155.144.33-" // dnsResolve('host3') 311 "166.155.144.33-" // dnsResolve('host3')
376 "122.133.144.155-" // myIpAddress() 312 "122.133.144.155-" // myIpAddress()
(...skipping 26 matching lines...) Expand all
403 host_resolver.rules()->AddRule("foopy", "166.155.144.11"); 339 host_resolver.rules()->AddRule("foopy", "166.155.144.11");
404 host_resolver.rules()->AddRule("*", "122.133.144.155"); 340 host_resolver.rules()->AddRule("*", "122.133.144.155");
405 341
406 scoped_ptr<ProxyResolverV8Tracing> resolver = 342 scoped_ptr<ProxyResolverV8Tracing> resolver =
407 CreateResolver(mock_bindings.CreateBindings(), "simple_dns.js"); 343 CreateResolver(mock_bindings.CreateBindings(), "simple_dns.js");
408 344
409 TestCompletionCallback callback1; 345 TestCompletionCallback callback1;
410 TestCompletionCallback callback2; 346 TestCompletionCallback callback2;
411 ProxyInfo proxy_info; 347 ProxyInfo proxy_info;
412 348
413 resolver->GetProxyForURL(GURL("https://foopy/req1"), &proxy_info, 349 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
414 callback1.callback(), NULL, 350 callback1.callback(), NULL,
415 mock_bindings.CreateBindings()); 351 mock_bindings.CreateBindings());
416 352
417 EXPECT_EQ(OK, callback1.WaitForResult()); 353 EXPECT_EQ(OK, callback1.WaitForResult());
418 354
419 // This fails because executing FindProxyForURL() PAC script modifies global
420 // state each time, changing the result that is returned.
421 ExpectHistogramBucketCount(PacResultForStrippedUrl::FAIL_DIFFERENT_PROXY_LIST,
422 1);
423 ExpectHistogramTotal(1);
424
425 // The test does 2 DNS resolutions. 355 // The test does 2 DNS resolutions.
426 EXPECT_EQ(2u, host_resolver.num_resolve()); 356 EXPECT_EQ(2u, host_resolver.num_resolve());
427 357
428 // The first request took 2 restarts, hence on g_iteration=3. 358 // The first request took 2 restarts, hence on g_iteration=3.
429 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI()); 359 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI());
430 360
431 resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info, 361 resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info,
432 callback2.callback(), NULL, 362 callback2.callback(), NULL,
433 mock_bindings.CreateBindings()); 363 mock_bindings.CreateBindings());
434 364
435 EXPECT_EQ(OK, callback2.WaitForResult()); 365 EXPECT_EQ(OK, callback2.WaitForResult());
436 366
437 // The histograms are unchanged because the second invocation is for an
438 // http:// URL.
439 ExpectHistogramBucketCount(PacResultForStrippedUrl::FAIL_DIFFERENT_PROXY_LIST,
440 1);
441 ExpectHistogramTotal(1);
442
443 EXPECT_EQ(4u, host_resolver.num_resolve()); 367 EXPECT_EQ(4u, host_resolver.num_resolve());
444 368
445 // This time no restarts were required, so g_iteration incremented by 1. 369 // This time no restarts were required, so g_iteration incremented by 1.
446 // TODO(eroman): Additionally the counter was incremented once by the 370 EXPECT_EQ("166.155.144.11:4", proxy_info.proxy_server().ToURI());
447 // diagnostics code that ran FindProxyForURL() with a stripped URL
448 // (should really be :4 and not :5).
449 EXPECT_EQ("166.155.144.11:5", proxy_info.proxy_server().ToURI());
450 371
451 // There were no alerts or errors. 372 // There were no alerts or errors.
452 EXPECT_TRUE(mock_bindings.GetAlerts().empty()); 373 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
453 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 374 EXPECT_TRUE(mock_bindings.GetErrors().empty());
454 } 375 }
455 376
456 // This test runs a weird PAC script that was designed to defeat the DNS tracing 377 // This test runs a weird PAC script that was designed to defeat the DNS tracing
457 // optimization. The proxy resolver should detect the inconsistency and 378 // optimization. The proxy resolver should detect the inconsistency and
458 // fall-back to synchronous mode execution. 379 // fall-back to synchronous mode execution.
459 TEST_F(ProxyResolverV8TracingTest, FallBackToSynchronous1) { 380 TEST_F(ProxyResolverV8TracingTest, FallBackToSynchronous1) {
460 MockCachingHostResolver host_resolver; 381 MockCachingHostResolver host_resolver;
461 MockBindings mock_bindings(&host_resolver); 382 MockBindings mock_bindings(&host_resolver);
462 383
463 host_resolver.rules()->AddRule("host1", "166.155.144.11"); 384 host_resolver.rules()->AddRule("host1", "166.155.144.11");
464 host_resolver.rules()->AddRule("crazy4", "133.199.111.4"); 385 host_resolver.rules()->AddRule("crazy4", "133.199.111.4");
465 host_resolver.rules()->AddRule("*", "122.133.144.155"); 386 host_resolver.rules()->AddRule("*", "122.133.144.155");
466 387
467 scoped_ptr<ProxyResolverV8Tracing> resolver = 388 scoped_ptr<ProxyResolverV8Tracing> resolver =
468 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects1.js"); 389 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects1.js");
469 390
470 TestCompletionCallback callback; 391 TestCompletionCallback callback;
471 ProxyInfo proxy_info; 392 ProxyInfo proxy_info;
472 393
473 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 394 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
474 callback.callback(), NULL, 395 callback.callback(), NULL,
475 mock_bindings.CreateBindings()); 396 mock_bindings.CreateBindings());
476 EXPECT_EQ(OK, callback.WaitForResult()); 397 EXPECT_EQ(OK, callback.WaitForResult());
477 398
478 ExpectHistogramBucketCount(
479 PacResultForStrippedUrl::SKIPPED_FALLBACK_BLOCKING_DNS, 1);
480 ExpectHistogramTotal(1);
481
482 // The script itself only does 2 DNS resolves per execution, however it 399 // The script itself only does 2 DNS resolves per execution, however it
483 // constructs the hostname using a global counter which changes on each 400 // constructs the hostname using a global counter which changes on each
484 // invocation. 401 // invocation.
485 EXPECT_EQ(3u, host_resolver.num_resolve()); 402 EXPECT_EQ(3u, host_resolver.num_resolve());
486 403
487 EXPECT_EQ("166.155.144.11-133.199.111.4:100", 404 EXPECT_EQ("166.155.144.11-133.199.111.4:100",
488 proxy_info.proxy_server().ToURI()); 405 proxy_info.proxy_server().ToURI());
489 406
490 // No errors. 407 // No errors.
491 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 408 EXPECT_TRUE(mock_bindings.GetErrors().empty());
(...skipping 14 matching lines...) Expand all
506 host_resolver.rules()->AddRule("host3", "166.155.144.33"); 423 host_resolver.rules()->AddRule("host3", "166.155.144.33");
507 host_resolver.rules()->AddRule("host4", "166.155.144.44"); 424 host_resolver.rules()->AddRule("host4", "166.155.144.44");
508 host_resolver.rules()->AddRule("*", "122.133.144.155"); 425 host_resolver.rules()->AddRule("*", "122.133.144.155");
509 426
510 scoped_ptr<ProxyResolverV8Tracing> resolver = 427 scoped_ptr<ProxyResolverV8Tracing> resolver =
511 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects2.js"); 428 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects2.js");
512 429
513 TestCompletionCallback callback; 430 TestCompletionCallback callback;
514 ProxyInfo proxy_info; 431 ProxyInfo proxy_info;
515 432
516 resolver->GetProxyForURL(GURL("https://foo/"), &proxy_info, 433 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
517 callback.callback(), NULL, 434 callback.callback(), NULL,
518 mock_bindings.CreateBindings()); 435 mock_bindings.CreateBindings());
519 EXPECT_EQ(OK, callback.WaitForResult()); 436 EXPECT_EQ(OK, callback.WaitForResult());
520 437
521 ExpectHistogramBucketCount(
522 PacResultForStrippedUrl::SKIPPED_FALLBACK_BLOCKING_DNS, 1);
523 ExpectHistogramTotal(1);
524
525 EXPECT_EQ(3u, host_resolver.num_resolve()); 438 EXPECT_EQ(3u, host_resolver.num_resolve());
526 439
527 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI()); 440 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI());
528 441
529 // There were no alerts or errors. 442 // There were no alerts or errors.
530 EXPECT_TRUE(mock_bindings.GetAlerts().empty()); 443 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
531 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 444 EXPECT_TRUE(mock_bindings.GetErrors().empty());
532 } 445 }
533 446
534 // This test runs a weird PAC script that yields a never ending sequence 447 // This test runs a weird PAC script that yields a never ending sequence
(...skipping 11 matching lines...) Expand all
546 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects3.js"); 459 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects3.js");
547 460
548 TestCompletionCallback callback; 461 TestCompletionCallback callback;
549 ProxyInfo proxy_info; 462 ProxyInfo proxy_info;
550 463
551 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 464 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
552 callback.callback(), NULL, 465 callback.callback(), NULL,
553 mock_bindings.CreateBindings()); 466 mock_bindings.CreateBindings());
554 EXPECT_EQ(OK, callback.WaitForResult()); 467 EXPECT_EQ(OK, callback.WaitForResult());
555 468
556 // Was not called because this is an http:// URL.
557 ExpectHistogramTotal(0);
558
559 EXPECT_EQ(20u, host_resolver.num_resolve()); 469 EXPECT_EQ(20u, host_resolver.num_resolve());
560 470
561 EXPECT_EQ( 471 EXPECT_EQ(
562 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 472 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
563 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 473 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
564 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 474 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
565 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 475 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
566 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 476 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
567 "null:21", proxy_info.proxy_server().ToURI()); 477 "null:21", proxy_info.proxy_server().ToURI());
568 478
(...skipping 20 matching lines...) Expand all
589 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects4.js"); 499 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects4.js");
590 500
591 TestCompletionCallback callback; 501 TestCompletionCallback callback;
592 ProxyInfo proxy_info; 502 ProxyInfo proxy_info;
593 503
594 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 504 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
595 callback.callback(), NULL, 505 callback.callback(), NULL,
596 mock_bindings.CreateBindings()); 506 mock_bindings.CreateBindings());
597 EXPECT_EQ(OK, callback.WaitForResult()); 507 EXPECT_EQ(OK, callback.WaitForResult());
598 508
599 // Was not called because this is an http:// URL.
600 ExpectHistogramTotal(0);
601
602 EXPECT_EQ(20u, host_resolver.num_resolve()); 509 EXPECT_EQ(20u, host_resolver.num_resolve());
603 510
604 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI()); 511 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI());
605 512
606 // No errors. 513 // No errors.
607 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 514 EXPECT_TRUE(mock_bindings.GetErrors().empty());
608 515
609 // 1 alert. 516 // 1 alert.
610 EXPECT_EQ(1u, mock_bindings.GetAlerts().size()); 517 EXPECT_EQ(1u, mock_bindings.GetAlerts().size());
611 EXPECT_EQ("iteration: 21", mock_bindings.GetAlerts()[0]); 518 EXPECT_EQ("iteration: 21", mock_bindings.GetAlerts()[0]);
612 } 519 }
613 520
614 TEST_F(ProxyResolverV8TracingTest, DifferentResultBasedOnUrl) {
615 MockCachingHostResolver host_resolver;
616 MockBindings mock_bindings(&host_resolver);
617
618 scoped_ptr<ProxyResolverV8Tracing> resolver =
619 CreateResolver(mock_bindings.CreateBindings(), "return_url_as_proxy.js");
620
621 TestCompletionCallback callback;
622 ProxyInfo proxy_info;
623
624 resolver->GetProxyForURL(GURL("https://foo/path1"), &proxy_info,
625 callback.callback(), NULL,
626 mock_bindings.CreateBindings());
627
628 EXPECT_EQ(OK, callback.WaitForResult());
629
630 ExpectHistogramTotal(1);
631 ExpectHistogramBucketCount(PacResultForStrippedUrl::FAIL_DIFFERENT_PROXY_LIST,
632 1);
633
634 EXPECT_EQ("httpsx3Ax2Fx2Ffoox2Fpath1:99", proxy_info.proxy_server().ToURI());
635
636 EXPECT_EQ(0u, host_resolver.num_resolve());
637
638 // There were no alerts or errors.
639 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
640 EXPECT_TRUE(mock_bindings.GetErrors().empty());
641 }
642
643 TEST_F(ProxyResolverV8TracingTest, ErrorDependingOnUrl) {
644 MockCachingHostResolver host_resolver;
645 MockBindings mock_bindings(&host_resolver);
646
647 scoped_ptr<ProxyResolverV8Tracing> resolver = CreateResolver(
648 mock_bindings.CreateBindings(), "error_depending_on_url.js");
649
650 TestCompletionCallback callback;
651 ProxyInfo proxy_info;
652
653 resolver->GetProxyForURL(GURL("https://foo/DontThrowError"), &proxy_info,
654 callback.callback(), NULL,
655 mock_bindings.CreateBindings());
656
657 EXPECT_EQ(OK, callback.WaitForResult());
658
659 ExpectHistogramTotal(1);
660 ExpectHistogramBucketCount(PacResultForStrippedUrl::FAIL_ERROR, 1);
661
662 EXPECT_EQ("foopy:42", proxy_info.proxy_server().ToURI());
663
664 EXPECT_EQ(0u, host_resolver.num_resolve());
665
666 // There were no alerts or errors.
667 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
668 EXPECT_TRUE(mock_bindings.GetErrors().empty());
669 }
670
671 TEST_F(ProxyResolverV8TracingTest, DnsDependingOnUrl) {
672 MockCachingHostResolver host_resolver;
673 MockBindings mock_bindings(&host_resolver);
674
675 host_resolver.rules()->AddRule("host", "166.155.144.55");
676
677 // Catch-all that will be used for myIpAddress().
678 host_resolver.rules()->AddRule("*", "133.122.100.200");
679
680 scoped_ptr<ProxyResolverV8Tracing> resolver =
681 CreateResolver(mock_bindings.CreateBindings(), "dns_depending_on_url.js");
682
683 TestCompletionCallback callback;
684 ProxyInfo proxy_info;
685
686 resolver->GetProxyForURL(GURL("https://foo/UseMyIpAddress"), &proxy_info,
687 callback.callback(), NULL,
688 mock_bindings.CreateBindings());
689
690 EXPECT_EQ(OK, callback.WaitForResult());
691
692 ExpectHistogramBucketCount(PacResultForStrippedUrl::FAIL_ABANDONED, 1);
693 ExpectHistogramTotal(1);
694
695 EXPECT_EQ("foopy:47", proxy_info.proxy_server().ToURI());
696
697 // No errors.
698 EXPECT_TRUE(mock_bindings.GetErrors().empty());
699 ASSERT_EQ(0u, mock_bindings.GetAlerts().size());
700 }
701
702 void DnsDuringInitHelper(bool synchronous_host_resolver) { 521 void DnsDuringInitHelper(bool synchronous_host_resolver) {
703 MockCachingHostResolver host_resolver; 522 MockCachingHostResolver host_resolver;
704 MockBindings mock_bindings(&host_resolver); 523 MockBindings mock_bindings(&host_resolver);
705 host_resolver.set_synchronous_mode(synchronous_host_resolver); 524 host_resolver.set_synchronous_mode(synchronous_host_resolver);
706 525
707 host_resolver.rules()->AddRule("host1", "91.13.12.1"); 526 host_resolver.rules()->AddRule("host1", "91.13.12.1");
708 host_resolver.rules()->AddRule("host2", "91.13.12.2"); 527 host_resolver.rules()->AddRule("host2", "91.13.12.2");
709 528
710 scoped_ptr<ProxyResolverV8Tracing> resolver = 529 scoped_ptr<ProxyResolverV8Tracing> resolver =
711 CreateResolver(mock_bindings.CreateBindings(), "dns_during_init.js"); 530 CreateResolver(mock_bindings.CreateBindings(), "dns_during_init.js");
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 proxy_uri.substr(0, proxy_uri.find(':') + 1)); 1015 proxy_uri.substr(0, proxy_uri.find(':') + 1));
1197 } else { 1016 } else {
1198 NOTREACHED(); 1017 NOTREACHED();
1199 } 1018 }
1200 } 1019 }
1201 } 1020 }
1202 1021
1203 } // namespace 1022 } // namespace
1204 1023
1205 } // namespace net 1024 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_v8_tracing.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698