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

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

Issue 2299963002: Reland "Change ProxyResolver::GetProxyForURL() to take a unique_ptr<Request>* " (Closed)
Patch Set: remove fields proposed by eroman Created 4 years, 2 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') | net/proxy/proxy_resolver_v8_tracing_wrapper.cc » ('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"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 TEST_F(ProxyResolverV8TracingTest, Simple) { 159 TEST_F(ProxyResolverV8TracingTest, Simple) {
160 MockCachingHostResolver host_resolver; 160 MockCachingHostResolver host_resolver;
161 MockBindings mock_bindings(&host_resolver); 161 MockBindings mock_bindings(&host_resolver);
162 162
163 std::unique_ptr<ProxyResolverV8Tracing> resolver = 163 std::unique_ptr<ProxyResolverV8Tracing> resolver =
164 CreateResolver(mock_bindings.CreateBindings(), "simple.js"); 164 CreateResolver(mock_bindings.CreateBindings(), "simple.js");
165 165
166 TestCompletionCallback callback; 166 TestCompletionCallback callback;
167 ProxyInfo proxy_info; 167 ProxyInfo proxy_info;
168 std::unique_ptr<ProxyResolver::Request> req;
168 169
169 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 170 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
170 callback.callback(), NULL, 171 callback.callback(), &req,
171 mock_bindings.CreateBindings()); 172 mock_bindings.CreateBindings());
172 173
173 EXPECT_THAT(callback.WaitForResult(), IsOk()); 174 EXPECT_THAT(callback.WaitForResult(), IsOk());
174 175
175 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI()); 176 EXPECT_EQ("foo:99", proxy_info.proxy_server().ToURI());
176 177
177 EXPECT_EQ(0u, host_resolver.num_resolve()); 178 EXPECT_EQ(0u, host_resolver.num_resolve());
178 179
179 // There were no alerts or errors. 180 // There were no alerts or errors.
180 EXPECT_TRUE(mock_bindings.GetAlerts().empty()); 181 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
181 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 182 EXPECT_TRUE(mock_bindings.GetErrors().empty());
182 } 183 }
183 184
184 TEST_F(ProxyResolverV8TracingTest, JavascriptError) { 185 TEST_F(ProxyResolverV8TracingTest, JavascriptError) {
185 MockCachingHostResolver host_resolver; 186 MockCachingHostResolver host_resolver;
186 MockBindings mock_bindings(&host_resolver); 187 MockBindings mock_bindings(&host_resolver);
187 188
188 std::unique_ptr<ProxyResolverV8Tracing> resolver = 189 std::unique_ptr<ProxyResolverV8Tracing> resolver =
189 CreateResolver(mock_bindings.CreateBindings(), "error.js"); 190 CreateResolver(mock_bindings.CreateBindings(), "error.js");
190 191
191 TestCompletionCallback callback; 192 TestCompletionCallback callback;
192 ProxyInfo proxy_info; 193 ProxyInfo proxy_info;
193 194
195 std::unique_ptr<ProxyResolver::Request> req;
194 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info, 196 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info,
195 callback.callback(), NULL, 197 callback.callback(), &req,
196 mock_bindings.CreateBindings()); 198 mock_bindings.CreateBindings());
197 199
198 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_PAC_SCRIPT_FAILED)); 200 EXPECT_THAT(callback.WaitForResult(), IsError(ERR_PAC_SCRIPT_FAILED));
199 201
200 EXPECT_EQ(0u, host_resolver.num_resolve()); 202 EXPECT_EQ(0u, host_resolver.num_resolve());
201 203
202 // Check the output -- there was 1 alert and 1 javascript error. 204 // Check the output -- there was 1 alert and 1 javascript error.
203 ASSERT_EQ(1u, mock_bindings.GetAlerts().size()); 205 ASSERT_EQ(1u, mock_bindings.GetAlerts().size());
204 EXPECT_EQ("Prepare to DIE!", mock_bindings.GetAlerts()[0]); 206 EXPECT_EQ("Prepare to DIE!", mock_bindings.GetAlerts()[0]);
205 ASSERT_EQ(1u, mock_bindings.GetErrors().size()); 207 ASSERT_EQ(1u, mock_bindings.GetErrors().size());
206 EXPECT_EQ(5, mock_bindings.GetErrors()[0].first); 208 EXPECT_EQ(5, mock_bindings.GetErrors()[0].first);
207 EXPECT_EQ("Uncaught TypeError: Cannot read property 'split' of null", 209 EXPECT_EQ("Uncaught TypeError: Cannot read property 'split' of null",
208 mock_bindings.GetErrors()[0].second); 210 mock_bindings.GetErrors()[0].second);
209 } 211 }
210 212
211 TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) { 213 TEST_F(ProxyResolverV8TracingTest, TooManyAlerts) {
212 MockCachingHostResolver host_resolver; 214 MockCachingHostResolver host_resolver;
213 MockBindings mock_bindings(&host_resolver); 215 MockBindings mock_bindings(&host_resolver);
214 216
215 std::unique_ptr<ProxyResolverV8Tracing> resolver = 217 std::unique_ptr<ProxyResolverV8Tracing> resolver =
216 CreateResolver(mock_bindings.CreateBindings(), "too_many_alerts.js"); 218 CreateResolver(mock_bindings.CreateBindings(), "too_many_alerts.js");
217 219
218 TestCompletionCallback callback; 220 TestCompletionCallback callback;
219 ProxyInfo proxy_info; 221 ProxyInfo proxy_info;
220 222
223 std::unique_ptr<ProxyResolver::Request> req;
221 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 224 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
222 callback.callback(), NULL, 225 callback.callback(), &req,
223 mock_bindings.CreateBindings()); 226 mock_bindings.CreateBindings());
224 227
225 EXPECT_THAT(callback.WaitForResult(), IsOk()); 228 EXPECT_THAT(callback.WaitForResult(), IsOk());
226 229
227 // Iteration1 does a DNS resolve 230 // Iteration1 does a DNS resolve
228 // Iteration2 exceeds the alert buffer 231 // Iteration2 exceeds the alert buffer
229 // Iteration3 runs in blocking mode and completes 232 // Iteration3 runs in blocking mode and completes
230 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 233 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
231 234
232 EXPECT_EQ(1u, host_resolver.num_resolve()); 235 EXPECT_EQ(1u, host_resolver.num_resolve());
(...skipping 14 matching lines...) Expand all
247 TEST_F(ProxyResolverV8TracingTest, TooManyEmptyAlerts) { 250 TEST_F(ProxyResolverV8TracingTest, TooManyEmptyAlerts) {
248 MockCachingHostResolver host_resolver; 251 MockCachingHostResolver host_resolver;
249 MockBindings mock_bindings(&host_resolver); 252 MockBindings mock_bindings(&host_resolver);
250 253
251 std::unique_ptr<ProxyResolverV8Tracing> resolver = CreateResolver( 254 std::unique_ptr<ProxyResolverV8Tracing> resolver = CreateResolver(
252 mock_bindings.CreateBindings(), "too_many_empty_alerts.js"); 255 mock_bindings.CreateBindings(), "too_many_empty_alerts.js");
253 256
254 TestCompletionCallback callback; 257 TestCompletionCallback callback;
255 ProxyInfo proxy_info; 258 ProxyInfo proxy_info;
256 259
260 std::unique_ptr<ProxyResolver::Request> req;
257 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 261 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
258 callback.callback(), NULL, 262 callback.callback(), &req,
259 mock_bindings.CreateBindings()); 263 mock_bindings.CreateBindings());
260 264
261 EXPECT_THAT(callback.WaitForResult(), IsOk()); 265 EXPECT_THAT(callback.WaitForResult(), IsOk());
262 266
263 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI()); 267 EXPECT_EQ("foo:3", proxy_info.proxy_server().ToURI());
264 268
265 EXPECT_EQ(1u, host_resolver.num_resolve()); 269 EXPECT_EQ(1u, host_resolver.num_resolve());
266 270
267 // No errors. 271 // No errors.
268 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 272 EXPECT_TRUE(mock_bindings.GetErrors().empty());
(...skipping 24 matching lines...) Expand all
293 host_resolver.rules()->AddRuleForAddressFamily( 297 host_resolver.rules()->AddRuleForAddressFamily(
294 "*", ADDRESS_FAMILY_IPV4, "122.133.144.155"); 298 "*", ADDRESS_FAMILY_IPV4, "122.133.144.155");
295 host_resolver.rules()->AddRule("*", "133.122.100.200"); 299 host_resolver.rules()->AddRule("*", "133.122.100.200");
296 300
297 std::unique_ptr<ProxyResolverV8Tracing> resolver = 301 std::unique_ptr<ProxyResolverV8Tracing> resolver =
298 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 302 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
299 303
300 TestCompletionCallback callback; 304 TestCompletionCallback callback;
301 ProxyInfo proxy_info; 305 ProxyInfo proxy_info;
302 306
307 std::unique_ptr<ProxyResolver::Request> req;
303 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 308 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
304 callback.callback(), NULL, 309 callback.callback(), &req,
305 mock_bindings.CreateBindings()); 310 mock_bindings.CreateBindings());
306 311
307 EXPECT_THAT(callback.WaitForResult(), IsOk()); 312 EXPECT_THAT(callback.WaitForResult(), IsOk());
308 313
309 // The test does 13 DNS resolution, however only 7 of them are unique. 314 // The test does 13 DNS resolution, however only 7 of them are unique.
310 EXPECT_EQ(7u, host_resolver.num_resolve()); 315 EXPECT_EQ(7u, host_resolver.num_resolve());
311 316
312 const char* kExpectedResult = 317 const char* kExpectedResult =
313 "122.133.144.155-" // myIpAddress() 318 "122.133.144.155-" // myIpAddress()
314 "null-" // dnsResolve('') 319 "null-" // dnsResolve('')
(...skipping 30 matching lines...) Expand all
345 host_resolver.rules()->AddRule("foopy", "166.155.144.11"); 350 host_resolver.rules()->AddRule("foopy", "166.155.144.11");
346 host_resolver.rules()->AddRule("*", "122.133.144.155"); 351 host_resolver.rules()->AddRule("*", "122.133.144.155");
347 352
348 std::unique_ptr<ProxyResolverV8Tracing> resolver = 353 std::unique_ptr<ProxyResolverV8Tracing> resolver =
349 CreateResolver(mock_bindings.CreateBindings(), "simple_dns.js"); 354 CreateResolver(mock_bindings.CreateBindings(), "simple_dns.js");
350 355
351 TestCompletionCallback callback1; 356 TestCompletionCallback callback1;
352 TestCompletionCallback callback2; 357 TestCompletionCallback callback2;
353 ProxyInfo proxy_info; 358 ProxyInfo proxy_info;
354 359
360 std::unique_ptr<ProxyResolver::Request> req;
355 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info, 361 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
356 callback1.callback(), NULL, 362 callback1.callback(), &req,
357 mock_bindings.CreateBindings()); 363 mock_bindings.CreateBindings());
358 364
359 EXPECT_THAT(callback1.WaitForResult(), IsOk()); 365 EXPECT_THAT(callback1.WaitForResult(), IsOk());
360 366
361 // The test does 2 DNS resolutions. 367 // The test does 2 DNS resolutions.
362 EXPECT_EQ(2u, host_resolver.num_resolve()); 368 EXPECT_EQ(2u, host_resolver.num_resolve());
363 369
364 // The first request took 2 restarts, hence on g_iteration=3. 370 // The first request took 2 restarts, hence on g_iteration=3.
365 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI()); 371 EXPECT_EQ("166.155.144.11:3", proxy_info.proxy_server().ToURI());
366 372
373 std::unique_ptr<ProxyResolver::Request> req2;
367 resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info, 374 resolver->GetProxyForURL(GURL("http://foopy/req2"), &proxy_info,
368 callback2.callback(), NULL, 375 callback2.callback(), &req2,
369 mock_bindings.CreateBindings()); 376 mock_bindings.CreateBindings());
370 377
371 EXPECT_THAT(callback2.WaitForResult(), IsOk()); 378 EXPECT_THAT(callback2.WaitForResult(), IsOk());
372 379
373 EXPECT_EQ(4u, host_resolver.num_resolve()); 380 EXPECT_EQ(4u, host_resolver.num_resolve());
374 381
375 // This time no restarts were required, so g_iteration incremented by 1. 382 // This time no restarts were required, so g_iteration incremented by 1.
376 EXPECT_EQ("166.155.144.11:4", proxy_info.proxy_server().ToURI()); 383 EXPECT_EQ("166.155.144.11:4", proxy_info.proxy_server().ToURI());
377 384
378 // There were no alerts or errors. 385 // There were no alerts or errors.
(...skipping 11 matching lines...) Expand all
390 host_resolver.rules()->AddRule("host1", "166.155.144.11"); 397 host_resolver.rules()->AddRule("host1", "166.155.144.11");
391 host_resolver.rules()->AddRule("crazy4", "133.199.111.4"); 398 host_resolver.rules()->AddRule("crazy4", "133.199.111.4");
392 host_resolver.rules()->AddRule("*", "122.133.144.155"); 399 host_resolver.rules()->AddRule("*", "122.133.144.155");
393 400
394 std::unique_ptr<ProxyResolverV8Tracing> resolver = 401 std::unique_ptr<ProxyResolverV8Tracing> resolver =
395 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects1.js"); 402 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects1.js");
396 403
397 TestCompletionCallback callback; 404 TestCompletionCallback callback;
398 ProxyInfo proxy_info; 405 ProxyInfo proxy_info;
399 406
407 std::unique_ptr<ProxyResolver::Request> req;
400 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 408 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
401 callback.callback(), NULL, 409 callback.callback(), &req,
402 mock_bindings.CreateBindings()); 410 mock_bindings.CreateBindings());
403 EXPECT_THAT(callback.WaitForResult(), IsOk()); 411 EXPECT_THAT(callback.WaitForResult(), IsOk());
404 412
405 // The script itself only does 2 DNS resolves per execution, however it 413 // The script itself only does 2 DNS resolves per execution, however it
406 // constructs the hostname using a global counter which changes on each 414 // constructs the hostname using a global counter which changes on each
407 // invocation. 415 // invocation.
408 EXPECT_EQ(3u, host_resolver.num_resolve()); 416 EXPECT_EQ(3u, host_resolver.num_resolve());
409 417
410 EXPECT_EQ("166.155.144.11-133.199.111.4:100", 418 EXPECT_EQ("166.155.144.11-133.199.111.4:100",
411 proxy_info.proxy_server().ToURI()); 419 proxy_info.proxy_server().ToURI());
(...skipping 17 matching lines...) Expand all
429 host_resolver.rules()->AddRule("host3", "166.155.144.33"); 437 host_resolver.rules()->AddRule("host3", "166.155.144.33");
430 host_resolver.rules()->AddRule("host4", "166.155.144.44"); 438 host_resolver.rules()->AddRule("host4", "166.155.144.44");
431 host_resolver.rules()->AddRule("*", "122.133.144.155"); 439 host_resolver.rules()->AddRule("*", "122.133.144.155");
432 440
433 std::unique_ptr<ProxyResolverV8Tracing> resolver = 441 std::unique_ptr<ProxyResolverV8Tracing> resolver =
434 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects2.js"); 442 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects2.js");
435 443
436 TestCompletionCallback callback; 444 TestCompletionCallback callback;
437 ProxyInfo proxy_info; 445 ProxyInfo proxy_info;
438 446
447 std::unique_ptr<ProxyResolver::Request> req;
439 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 448 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
440 callback.callback(), NULL, 449 callback.callback(), &req,
441 mock_bindings.CreateBindings()); 450 mock_bindings.CreateBindings());
442 EXPECT_THAT(callback.WaitForResult(), IsOk()); 451 EXPECT_THAT(callback.WaitForResult(), IsOk());
443 452
444 EXPECT_EQ(3u, host_resolver.num_resolve()); 453 EXPECT_EQ(3u, host_resolver.num_resolve());
445 454
446 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI()); 455 EXPECT_EQ("166.155.144.44:100", proxy_info.proxy_server().ToURI());
447 456
448 // There were no alerts or errors. 457 // There were no alerts or errors.
449 EXPECT_TRUE(mock_bindings.GetAlerts().empty()); 458 EXPECT_TRUE(mock_bindings.GetAlerts().empty());
450 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 459 EXPECT_TRUE(mock_bindings.GetErrors().empty());
451 } 460 }
452 461
453 // This test runs a weird PAC script that yields a never ending sequence 462 // This test runs a weird PAC script that yields a never ending sequence
454 // of DNS resolves when restarting. Running it will hit the maximum 463 // of DNS resolves when restarting. Running it will hit the maximum
455 // DNS resolves per request limit (20) after which every DNS resolve will 464 // DNS resolves per request limit (20) after which every DNS resolve will
456 // fail. 465 // fail.
457 TEST_F(ProxyResolverV8TracingTest, InfiniteDNSSequence) { 466 TEST_F(ProxyResolverV8TracingTest, InfiniteDNSSequence) {
458 MockCachingHostResolver host_resolver; 467 MockCachingHostResolver host_resolver;
459 MockBindings mock_bindings(&host_resolver); 468 MockBindings mock_bindings(&host_resolver);
460 469
461 host_resolver.rules()->AddRule("host*", "166.155.144.11"); 470 host_resolver.rules()->AddRule("host*", "166.155.144.11");
462 host_resolver.rules()->AddRule("*", "122.133.144.155"); 471 host_resolver.rules()->AddRule("*", "122.133.144.155");
463 472
464 std::unique_ptr<ProxyResolverV8Tracing> resolver = 473 std::unique_ptr<ProxyResolverV8Tracing> resolver =
465 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects3.js"); 474 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects3.js");
466 475
467 TestCompletionCallback callback; 476 TestCompletionCallback callback;
468 ProxyInfo proxy_info; 477 ProxyInfo proxy_info;
469 478
479 std::unique_ptr<ProxyResolver::Request> req;
470 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 480 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
471 callback.callback(), NULL, 481 callback.callback(), &req,
472 mock_bindings.CreateBindings()); 482 mock_bindings.CreateBindings());
473 EXPECT_THAT(callback.WaitForResult(), IsOk()); 483 EXPECT_THAT(callback.WaitForResult(), IsOk());
474 484
475 EXPECT_EQ(20u, host_resolver.num_resolve()); 485 EXPECT_EQ(20u, host_resolver.num_resolve());
476 486
477 EXPECT_EQ( 487 EXPECT_EQ(
478 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 488 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
479 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 489 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
480 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 490 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
481 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-" 491 "166.155.144.11-166.155.144.11-166.155.144.11-166.155.144.11-"
(...skipping 18 matching lines...) Expand all
500 510
501 host_resolver.rules()->AddRule("host*", "166.155.144.11"); 511 host_resolver.rules()->AddRule("host*", "166.155.144.11");
502 host_resolver.rules()->AddRule("*", "122.133.144.155"); 512 host_resolver.rules()->AddRule("*", "122.133.144.155");
503 513
504 std::unique_ptr<ProxyResolverV8Tracing> resolver = 514 std::unique_ptr<ProxyResolverV8Tracing> resolver =
505 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects4.js"); 515 CreateResolver(mock_bindings.CreateBindings(), "global_sideffects4.js");
506 516
507 TestCompletionCallback callback; 517 TestCompletionCallback callback;
508 ProxyInfo proxy_info; 518 ProxyInfo proxy_info;
509 519
520 std::unique_ptr<ProxyResolver::Request> req;
510 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 521 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
511 callback.callback(), NULL, 522 callback.callback(), &req,
512 mock_bindings.CreateBindings()); 523 mock_bindings.CreateBindings());
513 EXPECT_THAT(callback.WaitForResult(), IsOk()); 524 EXPECT_THAT(callback.WaitForResult(), IsOk());
514 525
515 EXPECT_EQ(20u, host_resolver.num_resolve()); 526 EXPECT_EQ(20u, host_resolver.num_resolve());
516 527
517 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI()); 528 EXPECT_EQ("null21:34", proxy_info.proxy_server().ToURI());
518 529
519 // No errors. 530 // No errors.
520 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 531 EXPECT_TRUE(mock_bindings.GetErrors().empty());
521 532
(...skipping 18 matching lines...) Expand all
540 551
541 host_resolver.rules()->ClearRules(); 552 host_resolver.rules()->ClearRules();
542 host_resolver.GetHostCache()->clear(); 553 host_resolver.GetHostCache()->clear();
543 554
544 host_resolver.rules()->AddRule("host1", "145.88.13.3"); 555 host_resolver.rules()->AddRule("host1", "145.88.13.3");
545 host_resolver.rules()->AddRule("host2", "137.89.8.45"); 556 host_resolver.rules()->AddRule("host2", "137.89.8.45");
546 557
547 TestCompletionCallback callback; 558 TestCompletionCallback callback;
548 ProxyInfo proxy_info; 559 ProxyInfo proxy_info;
549 560
561 std::unique_ptr<ProxyResolver::Request> req;
550 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 562 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
551 callback.callback(), NULL, 563 callback.callback(), &req,
552 mock_bindings.CreateBindings()); 564 mock_bindings.CreateBindings());
553 EXPECT_THAT(callback.WaitForResult(), IsOk()); 565 EXPECT_THAT(callback.WaitForResult(), IsOk());
554 566
555 // Fetched host1 and host2 again, since the ones done during initialization 567 // Fetched host1 and host2 again, since the ones done during initialization
556 // should not have been cached. 568 // should not have been cached.
557 EXPECT_EQ(4u, host_resolver.num_resolve()); 569 EXPECT_EQ(4u, host_resolver.num_resolve());
558 570
559 EXPECT_EQ("91.13.12.1-91.13.12.2-145.88.13.3-137.89.8.45:99", 571 EXPECT_EQ("91.13.12.1-91.13.12.2-145.88.13.3-137.89.8.45:99",
560 proxy_info.proxy_server().ToURI()); 572 proxy_info.proxy_server().ToURI());
561 573
(...skipping 24 matching lines...) Expand all
586 MockCachingHostResolver host_resolver; 598 MockCachingHostResolver host_resolver;
587 MockBindings mock_bindings(&host_resolver); 599 MockBindings mock_bindings(&host_resolver);
588 600
589 host_resolver.rules()->AddSimulatedFailure("*"); 601 host_resolver.rules()->AddSimulatedFailure("*");
590 602
591 std::unique_ptr<ProxyResolverV8Tracing> resolver = 603 std::unique_ptr<ProxyResolverV8Tracing> resolver =
592 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 604 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
593 605
594 const size_t kNumRequests = 5; 606 const size_t kNumRequests = 5;
595 ProxyInfo proxy_info[kNumRequests]; 607 ProxyInfo proxy_info[kNumRequests];
596 ProxyResolver::RequestHandle request[kNumRequests]; 608 std::unique_ptr<ProxyResolver::Request> request[kNumRequests];
597 609
598 for (size_t i = 0; i < kNumRequests; ++i) { 610 for (size_t i = 0; i < kNumRequests; ++i) {
599 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info[i], 611 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info[i],
600 base::Bind(&CrashCallback), &request[i], 612 base::Bind(&CrashCallback), &request[i],
601 mock_bindings.CreateBindings()); 613 mock_bindings.CreateBindings());
602 } 614 }
603 615
604 for (size_t i = 0; i < kNumRequests; ++i) { 616 for (size_t i = 0; i < kNumRequests; ++i) {
605 resolver->CancelRequest(request[i]); 617 request[i].reset();
606 } 618 }
607 } 619 }
608 620
609 // Note the execution order for this test can vary. Since multiple 621 // Note the execution order for this test can vary. Since multiple
610 // threads are involved, the cancellation may be received a different 622 // threads are involved, the cancellation may be received a different
611 // times. 623 // times.
612 TEST_F(ProxyResolverV8TracingTest, CancelSome) { 624 TEST_F(ProxyResolverV8TracingTest, CancelSome) {
613 MockCachingHostResolver host_resolver; 625 MockCachingHostResolver host_resolver;
614 MockBindings mock_bindings(&host_resolver); 626 MockBindings mock_bindings(&host_resolver);
615 627
616 host_resolver.rules()->AddSimulatedFailure("*"); 628 host_resolver.rules()->AddSimulatedFailure("*");
617 629
618 std::unique_ptr<ProxyResolverV8Tracing> resolver = 630 std::unique_ptr<ProxyResolverV8Tracing> resolver =
619 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 631 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
620 632
621 ProxyInfo proxy_info1; 633 ProxyInfo proxy_info1;
622 ProxyInfo proxy_info2; 634 ProxyInfo proxy_info2;
623 ProxyResolver::RequestHandle request1; 635 std::unique_ptr<ProxyResolver::Request> request1;
624 ProxyResolver::RequestHandle request2; 636 std::unique_ptr<ProxyResolver::Request> request2;
625 TestCompletionCallback callback; 637 TestCompletionCallback callback;
626 638
627 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1, 639 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info1,
628 base::Bind(&CrashCallback), &request1, 640 base::Bind(&CrashCallback), &request1,
629 mock_bindings.CreateBindings()); 641 mock_bindings.CreateBindings());
630 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info2, 642 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info2,
631 callback.callback(), &request2, 643 callback.callback(), &request2,
632 mock_bindings.CreateBindings()); 644 mock_bindings.CreateBindings());
633 645
634 resolver->CancelRequest(request1); 646 request1.reset();
635 647
636 EXPECT_THAT(callback.WaitForResult(), IsOk()); 648 EXPECT_THAT(callback.WaitForResult(), IsOk());
637 } 649 }
638 650
639 // Cancel a request after it has finished running on the worker thread, and has 651 // Cancel a request after it has finished running on the worker thread, and has
640 // posted a task the completion task back to origin thread. 652 // posted a task the completion task back to origin thread.
641 TEST_F(ProxyResolverV8TracingTest, CancelWhilePendingCompletionTask) { 653 TEST_F(ProxyResolverV8TracingTest, CancelWhilePendingCompletionTask) {
642 MockCachingHostResolver host_resolver; 654 MockCachingHostResolver host_resolver;
643 MockBindings mock_bindings(&host_resolver); 655 MockBindings mock_bindings(&host_resolver);
644 656
645 host_resolver.rules()->AddSimulatedFailure("*"); 657 host_resolver.rules()->AddSimulatedFailure("*");
646 658
647 std::unique_ptr<ProxyResolverV8Tracing> resolver = 659 std::unique_ptr<ProxyResolverV8Tracing> resolver =
648 CreateResolver(mock_bindings.CreateBindings(), "error.js"); 660 CreateResolver(mock_bindings.CreateBindings(), "error.js");
649 661
650 ProxyInfo proxy_info1; 662 ProxyInfo proxy_info1;
651 ProxyInfo proxy_info2; 663 ProxyInfo proxy_info2;
652 ProxyResolver::RequestHandle request1; 664 std::unique_ptr<ProxyResolver::Request> request1;
653 ProxyResolver::RequestHandle request2; 665 std::unique_ptr<ProxyResolver::Request> request2;
654 TestCompletionCallback callback; 666 TestCompletionCallback callback;
655 667
656 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info1, 668 resolver->GetProxyForURL(GURL("http://throw-an-error/"), &proxy_info1,
657 base::Bind(&CrashCallback), &request1, 669 base::Bind(&CrashCallback), &request1,
658 mock_bindings.CreateBindings()); 670 mock_bindings.CreateBindings());
659 671
660 // Wait until the first request has finished running on the worker thread. 672 // Wait until the first request has finished running on the worker thread.
661 // Cancel the first request, while it is running its completion task on 673 // Cancel the first request, while it is running its completion task on
662 // the origin thread. 674 // the origin thread. Reset deletes Request opject which cancels the request.
663 mock_bindings.RunOnError(base::Bind(&ProxyResolverV8Tracing::CancelRequest, 675 mock_bindings.RunOnError(
664 base::Unretained(resolver.get()), 676 base::Bind(&std::unique_ptr<ProxyResolver::Request>::reset,
665 request1)); 677 base::Unretained(&request1), nullptr));
666 678
667 // Start another request, to make sure it is able to complete. 679 // Start another request, to make sure it is able to complete.
668 resolver->GetProxyForURL(GURL("http://i-have-no-idea-what-im-doing/"), 680 resolver->GetProxyForURL(GURL("http://i-have-no-idea-what-im-doing/"),
669 &proxy_info2, callback.callback(), &request2, 681 &proxy_info2, callback.callback(), &request2,
670 mock_bindings.CreateBindings()); 682 mock_bindings.CreateBindings());
671 683
672 EXPECT_THAT(callback.WaitForResult(), IsOk()); 684 EXPECT_THAT(callback.WaitForResult(), IsOk());
673 685
674 EXPECT_EQ("i-approve-this-message:42", proxy_info2.proxy_server().ToURI()); 686 EXPECT_EQ("i-approve-this-message:42", proxy_info2.proxy_server().ToURI());
675 } 687 }
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 // when the request has an outstanding DNS request in flight. 771 // when the request has an outstanding DNS request in flight.
760 TEST_F(ProxyResolverV8TracingTest, CancelWhileOutstandingNonBlockingDns) { 772 TEST_F(ProxyResolverV8TracingTest, CancelWhileOutstandingNonBlockingDns) {
761 BlockableHostResolver host_resolver; 773 BlockableHostResolver host_resolver;
762 MockBindings mock_bindings(&host_resolver); 774 MockBindings mock_bindings(&host_resolver);
763 775
764 std::unique_ptr<ProxyResolverV8Tracing> resolver = 776 std::unique_ptr<ProxyResolverV8Tracing> resolver =
765 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 777 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
766 778
767 ProxyInfo proxy_info1; 779 ProxyInfo proxy_info1;
768 ProxyInfo proxy_info2; 780 ProxyInfo proxy_info2;
769 ProxyResolver::RequestHandle request1; 781 std::unique_ptr<ProxyResolver::Request> request1;
770 ProxyResolver::RequestHandle request2; 782 std::unique_ptr<ProxyResolver::Request> request2;
771 783
772 resolver->GetProxyForURL(GURL("http://foo/req1"), &proxy_info1, 784 resolver->GetProxyForURL(GURL("http://foo/req1"), &proxy_info1,
773 base::Bind(&CrashCallback), &request1, 785 base::Bind(&CrashCallback), &request1,
774 mock_bindings.CreateBindings()); 786 mock_bindings.CreateBindings());
775 787
776 host_resolver.WaitUntilRequestIsReceived(); 788 host_resolver.WaitUntilRequestIsReceived();
777 789
778 resolver->GetProxyForURL(GURL("http://foo/req2"), &proxy_info2, 790 resolver->GetProxyForURL(GURL("http://foo/req2"), &proxy_info2,
779 base::Bind(&CrashCallback), &request2, 791 base::Bind(&CrashCallback), &request2,
780 mock_bindings.CreateBindings()); 792 mock_bindings.CreateBindings());
781 793
782 host_resolver.WaitUntilRequestIsReceived(); 794 host_resolver.WaitUntilRequestIsReceived();
783 795
784 resolver->CancelRequest(request1); 796 request1.reset();
785 resolver->CancelRequest(request2); 797 request2.reset();
786 798
787 EXPECT_EQ(2, host_resolver.num_cancelled_requests()); 799 EXPECT_EQ(2, host_resolver.num_cancelled_requests());
788 800
789 // After leaving this scope, the ProxyResolver is destroyed. 801 // After leaving this scope, the ProxyResolver is destroyed.
790 // This should not cause any problems, as the outstanding work 802 // This should not cause any problems, as the outstanding work
791 // should have been cancelled. 803 // should have been cancelled.
792 } 804 }
793 805
794 void CancelRequestAndPause(ProxyResolverV8Tracing* resolver, 806 void CancelRequestAndPause(std::unique_ptr<ProxyResolver::Request>* request) {
795 ProxyResolver::RequestHandle request) { 807 request->reset();
796 resolver->CancelRequest(request);
797 808
798 // Sleep for a little bit. This makes it more likely for the worker 809 // Sleep for a little bit. This makes it more likely for the worker
799 // thread to have returned from its call, and serves as a regression 810 // thread to have returned from its call, and serves as a regression
800 // test for http://crbug.com/173373. 811 // test for http://crbug.com/173373.
801 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30)); 812 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(30));
802 } 813 }
803 814
804 // In non-blocking mode, the worker thread actually does block for 815 // In non-blocking mode, the worker thread actually does block for
805 // a short time to see if the result is in the DNS cache. Test 816 // a short time to see if the result is in the DNS cache. Test
806 // cancellation while the worker thread is waiting on this event. 817 // cancellation while the worker thread is waiting on this event.
807 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) { 818 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns) {
808 BlockableHostResolver host_resolver; 819 BlockableHostResolver host_resolver;
809 MockBindings mock_bindings(&host_resolver); 820 MockBindings mock_bindings(&host_resolver);
810 821
811 std::unique_ptr<ProxyResolverV8Tracing> resolver = 822 std::unique_ptr<ProxyResolverV8Tracing> resolver =
812 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 823 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
813 824
814 ProxyInfo proxy_info; 825 ProxyInfo proxy_info;
815 ProxyResolver::RequestHandle request; 826 std::unique_ptr<ProxyResolver::Request> request;
816 827
817 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 828 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
818 base::Bind(&CrashCallback), &request, 829 base::Bind(&CrashCallback), &request,
819 mock_bindings.CreateBindings()); 830 mock_bindings.CreateBindings());
820 831
821 host_resolver.SetAction( 832 host_resolver.SetAction(base::Bind(CancelRequestAndPause, &request));
822 base::Bind(CancelRequestAndPause, resolver.get(), request));
823 833
824 host_resolver.WaitUntilRequestIsReceived(); 834 host_resolver.WaitUntilRequestIsReceived();
825 } 835 }
826 836
827 // Cancel the request while there is a pending DNS request, however before 837 // Cancel the request while there is a pending DNS request, however before
828 // the request is sent to the host resolver. 838 // the request is sent to the host resolver.
829 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns2) { 839 TEST_F(ProxyResolverV8TracingTest, CancelWhileBlockedInNonBlockingDns2) {
830 MockCachingHostResolver host_resolver; 840 MockCachingHostResolver host_resolver;
831 MockBindings mock_bindings(&host_resolver); 841 MockBindings mock_bindings(&host_resolver);
832 842
833 std::unique_ptr<ProxyResolverV8Tracing> resolver = 843 std::unique_ptr<ProxyResolverV8Tracing> resolver =
834 CreateResolver(mock_bindings.CreateBindings(), "dns.js"); 844 CreateResolver(mock_bindings.CreateBindings(), "dns.js");
835 845
836 ProxyInfo proxy_info; 846 ProxyInfo proxy_info;
837 ProxyResolver::RequestHandle request; 847 std::unique_ptr<ProxyResolver::Request> request;
838 848
839 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info, 849 resolver->GetProxyForURL(GURL("http://foo/"), &proxy_info,
840 base::Bind(&CrashCallback), &request, 850 base::Bind(&CrashCallback), &request,
841 mock_bindings.CreateBindings()); 851 mock_bindings.CreateBindings());
842 852
843 // Wait a bit, so the DNS task has hopefully been posted. The test will 853 // Wait a bit, so the DNS task has hopefully been posted. The test will
844 // work whatever the delay is here, but it is most useful if the delay 854 // work whatever the delay is here, but it is most useful if the delay
845 // is large enough to allow a task to be posted back. 855 // is large enough to allow a task to be posted back.
846 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 856 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10));
847 resolver->CancelRequest(request); 857 request.reset();
848 858
849 EXPECT_EQ(0u, host_resolver.num_resolve()); 859 EXPECT_EQ(0u, host_resolver.num_resolve());
850 } 860 }
851 861
852 TEST_F(ProxyResolverV8TracingTest, 862 TEST_F(ProxyResolverV8TracingTest,
853 CancelCreateResolverWhileOutstandingBlockingDns) { 863 CancelCreateResolverWhileOutstandingBlockingDns) {
854 BlockableHostResolver host_resolver; 864 BlockableHostResolver host_resolver;
855 MockBindings mock_bindings(&host_resolver); 865 MockBindings mock_bindings(&host_resolver);
856 866
857 std::unique_ptr<ProxyResolverV8TracingFactory> factory( 867 std::unique_ptr<ProxyResolverV8TracingFactory> factory(
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 921
912 host_resolver.rules()->AddRule("host1", "182.111.0.222"); 922 host_resolver.rules()->AddRule("host1", "182.111.0.222");
913 host_resolver.rules()->AddRule("host2", "111.33.44.55"); 923 host_resolver.rules()->AddRule("host2", "111.33.44.55");
914 924
915 std::unique_ptr<ProxyResolverV8Tracing> resolver = 925 std::unique_ptr<ProxyResolverV8Tracing> resolver =
916 CreateResolver(mock_bindings.CreateBindings(), "terminate.js"); 926 CreateResolver(mock_bindings.CreateBindings(), "terminate.js");
917 927
918 TestCompletionCallback callback; 928 TestCompletionCallback callback;
919 ProxyInfo proxy_info; 929 ProxyInfo proxy_info;
920 930
931 std::unique_ptr<ProxyResolver::Request> req;
921 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info, 932 resolver->GetProxyForURL(GURL("http://foopy/req1"), &proxy_info,
922 callback.callback(), NULL, 933 callback.callback(), &req,
923 mock_bindings.CreateBindings()); 934 mock_bindings.CreateBindings());
924 EXPECT_THAT(callback.WaitForResult(), IsOk()); 935 EXPECT_THAT(callback.WaitForResult(), IsOk());
925 936
926 // The test does 2 DNS resolutions. 937 // The test does 2 DNS resolutions.
927 EXPECT_EQ(2u, host_resolver.num_resolve()); 938 EXPECT_EQ(2u, host_resolver.num_resolve());
928 939
929 EXPECT_EQ("foopy:3", proxy_info.proxy_server().ToURI()); 940 EXPECT_EQ("foopy:3", proxy_info.proxy_server().ToURI());
930 941
931 // No errors or alerts. 942 // No errors or alerts.
932 EXPECT_TRUE(mock_bindings.GetErrors().empty()); 943 EXPECT_TRUE(mock_bindings.GetErrors().empty());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 995
985 ProxyResolverV8Tracing* resolver[] = { 996 ProxyResolverV8Tracing* resolver[] = {
986 resolver0.get(), resolver1.get(), resolver2.get(), resolver3.get(), 997 resolver0.get(), resolver1.get(), resolver2.get(), resolver3.get(),
987 }; 998 };
988 999
989 const size_t kNumResolvers = arraysize(resolver); 1000 const size_t kNumResolvers = arraysize(resolver);
990 const size_t kNumIterations = 20; 1001 const size_t kNumIterations = 20;
991 const size_t kNumResults = kNumResolvers * kNumIterations; 1002 const size_t kNumResults = kNumResolvers * kNumIterations;
992 TestCompletionCallback callback[kNumResults]; 1003 TestCompletionCallback callback[kNumResults];
993 ProxyInfo proxy_info[kNumResults]; 1004 ProxyInfo proxy_info[kNumResults];
1005 std::unique_ptr<ProxyResolver::Request> request[kNumResults];
994 1006
995 for (size_t i = 0; i < kNumResults; ++i) { 1007 for (size_t i = 0; i < kNumResults; ++i) {
996 size_t resolver_i = i % kNumResolvers; 1008 size_t resolver_i = i % kNumResolvers;
997 resolver[resolver_i]->GetProxyForURL( 1009 resolver[resolver_i]->GetProxyForURL(
998 GURL("http://foo/"), &proxy_info[i], callback[i].callback(), NULL, 1010 GURL("http://foo/"), &proxy_info[i], callback[i].callback(),
999 resolver_i == 3 ? mock_bindings3.CreateBindings() 1011 &request[i], resolver_i == 3 ? mock_bindings3.CreateBindings()
1000 : mock_bindings0.CreateBindings()); 1012 : mock_bindings0.CreateBindings());
1001 } 1013 }
1002 1014
1003 // ------------------------ 1015 // ------------------------
1004 // Verify all of the results. 1016 // Verify all of the results.
1005 // ------------------------ 1017 // ------------------------
1006 1018
1007 const char* kExpectedForDnsJs = 1019 const char* kExpectedForDnsJs =
1008 "122.133.144.155-" // myIpAddress() 1020 "122.133.144.155-" // myIpAddress()
1009 "null-" // dnsResolve('') 1021 "null-" // dnsResolve('')
1010 "__1_192.168.1.1-" // dnsResolveEx('host1') 1022 "__1_192.168.1.1-" // dnsResolveEx('host1')
(...skipping 24 matching lines...) Expand all
1035 proxy_uri.substr(0, proxy_uri.find(':') + 1)); 1047 proxy_uri.substr(0, proxy_uri.find(':') + 1));
1036 } else { 1048 } else {
1037 NOTREACHED(); 1049 NOTREACHED();
1038 } 1050 }
1039 } 1051 }
1040 } 1052 }
1041 1053
1042 } // namespace 1054 } // namespace
1043 1055
1044 } // namespace net 1056 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/proxy_resolver_v8_tracing.cc ('k') | net/proxy/proxy_resolver_v8_tracing_wrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698