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

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

Issue 10692155: Switch to TimeDelta interfaces for process waiting functions in net and ipc. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 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/dhcp_proxy_script_fetcher_win.cc ('k') | net/test/local_test_server.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/dhcp_proxy_script_fetcher_win.h" 5 #include "net/proxy/dhcp_proxy_script_fetcher_win.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 void PushBackAdapter(const std::string& adapter_name, 301 void PushBackAdapter(const std::string& adapter_name,
302 DhcpProxyScriptAdapterFetcher* fetcher) { 302 DhcpProxyScriptAdapterFetcher* fetcher) {
303 adapter_query_->mock_adapter_names_.push_back(adapter_name); 303 adapter_query_->mock_adapter_names_.push_back(adapter_name);
304 adapter_fetchers_.push_back(fetcher); 304 adapter_fetchers_.push_back(fetcher);
305 } 305 }
306 306
307 void ConfigureAndPushBackAdapter(const std::string& adapter_name, 307 void ConfigureAndPushBackAdapter(const std::string& adapter_name,
308 bool did_finish, 308 bool did_finish,
309 int result, 309 int result,
310 string16 pac_script, 310 string16 pac_script,
311 int fetch_delay_ms) { 311 base::TimeDelta fetch_delay) {
312 scoped_ptr<DummyDhcpProxyScriptAdapterFetcher> adapter_fetcher( 312 scoped_ptr<DummyDhcpProxyScriptAdapterFetcher> adapter_fetcher(
313 new DummyDhcpProxyScriptAdapterFetcher(url_request_context())); 313 new DummyDhcpProxyScriptAdapterFetcher(url_request_context()));
314 adapter_fetcher->Configure(did_finish, result, pac_script, fetch_delay_ms); 314 adapter_fetcher->Configure(
315 did_finish, result, pac_script, fetch_delay.InMilliseconds());
315 PushBackAdapter(adapter_name, adapter_fetcher.release()); 316 PushBackAdapter(adapter_name, adapter_fetcher.release());
316 } 317 }
317 318
318 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE { 319 DhcpProxyScriptAdapterFetcher* ImplCreateAdapterFetcher() OVERRIDE {
319 ++num_fetchers_created_; 320 ++num_fetchers_created_;
320 return adapter_fetchers_[next_adapter_fetcher_index_++]; 321 return adapter_fetchers_[next_adapter_fetcher_index_++];
321 } 322 }
322 323
323 virtual AdapterQuery* ImplCreateAdapterQuery() OVERRIDE { 324 virtual AdapterQuery* ImplCreateAdapterQuery() OVERRIDE {
324 DCHECK(adapter_query_); 325 DCHECK(adapter_query_);
325 return adapter_query_.get(); 326 return adapter_query_.get();
326 } 327 }
327 328
328 int ImplGetMaxWaitMs() OVERRIDE { 329 base::TimeDelta ImplGetMaxWait() OVERRIDE {
329 return max_wait_ms_; 330 return max_wait_;
330 } 331 }
331 332
332 void ImplOnGetCandidateAdapterNamesDone() OVERRIDE { 333 void ImplOnGetCandidateAdapterNamesDone() OVERRIDE {
333 worker_finished_event_.Signal(); 334 worker_finished_event_.Signal();
334 } 335 }
335 336
336 void ResetTestState() { 337 void ResetTestState() {
337 // Delete any adapter fetcher objects we didn't hand out. 338 // Delete any adapter fetcher objects we didn't hand out.
338 std::vector<DhcpProxyScriptAdapterFetcher*>::const_iterator it 339 std::vector<DhcpProxyScriptAdapterFetcher*>::const_iterator it
339 = adapter_fetchers_.begin(); 340 = adapter_fetchers_.begin();
340 for (; it != adapter_fetchers_.end(); ++it) { 341 for (; it != adapter_fetchers_.end(); ++it) {
341 if (num_fetchers_created_-- <= 0) { 342 if (num_fetchers_created_-- <= 0) {
342 delete (*it); 343 delete (*it);
343 } 344 }
344 } 345 }
345 346
346 next_adapter_fetcher_index_ = 0; 347 next_adapter_fetcher_index_ = 0;
347 num_fetchers_created_ = 0; 348 num_fetchers_created_ = 0;
348 adapter_fetchers_.clear(); 349 adapter_fetchers_.clear();
349 adapter_query_ = new MockAdapterQuery(); 350 adapter_query_ = new MockAdapterQuery();
350 max_wait_ms_ = TestTimeouts::tiny_timeout_ms(); 351 max_wait_ = TestTimeouts::tiny_timeout();
351 } 352 }
352 353
353 bool HasPendingFetchers() { 354 bool HasPendingFetchers() {
354 return num_pending_fetchers() > 0; 355 return num_pending_fetchers() > 0;
355 } 356 }
356 357
357 int next_adapter_fetcher_index_; 358 int next_adapter_fetcher_index_;
358 359
359 // Ownership gets transferred to the implementation class via 360 // Ownership gets transferred to the implementation class via
360 // ImplCreateAdapterFetcher, but any objects not handed out are 361 // ImplCreateAdapterFetcher, but any objects not handed out are
361 // deleted on destruction. 362 // deleted on destruction.
362 std::vector<DhcpProxyScriptAdapterFetcher*> adapter_fetchers_; 363 std::vector<DhcpProxyScriptAdapterFetcher*> adapter_fetchers_;
363 364
364 scoped_refptr<MockAdapterQuery> adapter_query_; 365 scoped_refptr<MockAdapterQuery> adapter_query_;
365 366
366 int max_wait_ms_; 367 base::TimeDelta max_wait_;
367 int num_fetchers_created_; 368 int num_fetchers_created_;
368 base::WaitableEvent worker_finished_event_; 369 base::WaitableEvent worker_finished_event_;
369 }; 370 };
370 371
371 class FetcherClient { 372 class FetcherClient {
372 public: 373 public:
373 FetcherClient() 374 FetcherClient()
374 : context_(new TestURLRequestContext), 375 : context_(new TestURLRequestContext),
375 fetcher_(context_.get()), 376 fetcher_(context_.get()),
376 finished_(false), 377 finished_(false),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 ASSERT_EQ(L"bingo", client->pac_text_); 433 ASSERT_EQ(L"bingo", client->pac_text_);
433 } 434 }
434 435
435 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredOneAdapter) { 436 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredOneAdapter) {
436 FetcherClient client; 437 FetcherClient client;
437 TestNormalCaseURLConfiguredOneAdapter(&client); 438 TestNormalCaseURLConfiguredOneAdapter(&client);
438 } 439 }
439 440
440 void TestNormalCaseURLConfiguredMultipleAdapters(FetcherClient* client) { 441 void TestNormalCaseURLConfiguredMultipleAdapters(FetcherClient* client) {
441 client->fetcher_.ConfigureAndPushBackAdapter( 442 client->fetcher_.ConfigureAndPushBackAdapter(
442 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 443 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"",
444 base::TimeDelta::FromMilliseconds(1));
443 client->fetcher_.ConfigureAndPushBackAdapter( 445 client->fetcher_.ConfigureAndPushBackAdapter(
444 "second", true, OK, L"bingo", 50); 446 "second", true, OK, L"bingo", base::TimeDelta::FromMilliseconds(50));
445 client->fetcher_.ConfigureAndPushBackAdapter( 447 client->fetcher_.ConfigureAndPushBackAdapter(
446 "third", true, OK, L"rocko", 1); 448 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1));
447 client->RunTest(); 449 client->RunTest();
448 client->RunMessageLoopUntilComplete(); 450 client->RunMessageLoopUntilComplete();
449 ASSERT_EQ(OK, client->result_); 451 ASSERT_EQ(OK, client->result_);
450 ASSERT_EQ(L"bingo", client->pac_text_); 452 ASSERT_EQ(L"bingo", client->pac_text_);
451 } 453 }
452 454
453 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredMultipleAdapters) { 455 TEST(DhcpProxyScriptFetcherWin, NormalCaseURLConfiguredMultipleAdapters) {
454 FetcherClient client; 456 FetcherClient client;
455 TestNormalCaseURLConfiguredMultipleAdapters(&client); 457 TestNormalCaseURLConfiguredMultipleAdapters(&client);
456 } 458 }
457 459
458 void TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout( 460 void TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(
459 FetcherClient* client) { 461 FetcherClient* client) {
460 client->fetcher_.ConfigureAndPushBackAdapter( 462 client->fetcher_.ConfigureAndPushBackAdapter(
461 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 463 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"",
464 base::TimeDelta::FromMilliseconds(1));
462 // This will time out. 465 // This will time out.
463 client->fetcher_.ConfigureAndPushBackAdapter( 466 client->fetcher_.ConfigureAndPushBackAdapter(
464 "second", false, ERR_IO_PENDING, L"bingo", 467 "second", false, ERR_IO_PENDING, L"bingo",
465 TestTimeouts::action_timeout_ms()); 468 TestTimeouts::action_timeout());
466 client->fetcher_.ConfigureAndPushBackAdapter( 469 client->fetcher_.ConfigureAndPushBackAdapter(
467 "third", true, OK, L"rocko", 1); 470 "third", true, OK, L"rocko", base::TimeDelta::FromMilliseconds(1));
468 client->RunTest(); 471 client->RunTest();
469 client->RunMessageLoopUntilComplete(); 472 client->RunMessageLoopUntilComplete();
470 ASSERT_EQ(OK, client->result_); 473 ASSERT_EQ(OK, client->result_);
471 ASSERT_EQ(L"rocko", client->pac_text_); 474 ASSERT_EQ(L"rocko", client->pac_text_);
472 } 475 }
473 476
474 TEST(DhcpProxyScriptFetcherWin, 477 TEST(DhcpProxyScriptFetcherWin,
475 NormalCaseURLConfiguredMultipleAdaptersWithTimeout) { 478 NormalCaseURLConfiguredMultipleAdaptersWithTimeout) {
476 FetcherClient client; 479 FetcherClient client;
477 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(&client); 480 TestNormalCaseURLConfiguredMultipleAdaptersWithTimeout(&client);
478 } 481 }
479 482
480 void TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout( 483 void TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(
481 FetcherClient* client) { 484 FetcherClient* client) {
482 client->fetcher_.ConfigureAndPushBackAdapter( 485 client->fetcher_.ConfigureAndPushBackAdapter(
483 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 486 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"",
487 base::TimeDelta::FromMilliseconds(1));
484 // This will time out. 488 // This will time out.
485 client->fetcher_.ConfigureAndPushBackAdapter( 489 client->fetcher_.ConfigureAndPushBackAdapter(
486 "second", false, ERR_IO_PENDING, L"bingo", 490 "second", false, ERR_IO_PENDING, L"bingo",
487 TestTimeouts::action_timeout_ms()); 491 TestTimeouts::action_timeout());
488 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such 492 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
489 // should be chosen. 493 // should be chosen.
490 client->fetcher_.ConfigureAndPushBackAdapter( 494 client->fetcher_.ConfigureAndPushBackAdapter(
491 "third", true, ERR_PAC_STATUS_NOT_OK, L"", 1); 495 "third", true, ERR_PAC_STATUS_NOT_OK, L"",
496 base::TimeDelta::FromMilliseconds(1));
492 client->fetcher_.ConfigureAndPushBackAdapter( 497 client->fetcher_.ConfigureAndPushBackAdapter(
493 "fourth", true, ERR_NOT_IMPLEMENTED, L"", 1); 498 "fourth", true, ERR_NOT_IMPLEMENTED, L"",
499 base::TimeDelta::FromMilliseconds(1));
494 client->RunTest(); 500 client->RunTest();
495 client->RunMessageLoopUntilComplete(); 501 client->RunMessageLoopUntilComplete();
496 ASSERT_EQ(ERR_PAC_STATUS_NOT_OK, client->result_); 502 ASSERT_EQ(ERR_PAC_STATUS_NOT_OK, client->result_);
497 ASSERT_EQ(L"", client->pac_text_); 503 ASSERT_EQ(L"", client->pac_text_);
498 } 504 }
499 505
500 TEST(DhcpProxyScriptFetcherWin, 506 TEST(DhcpProxyScriptFetcherWin,
501 FailureCaseURLConfiguredMultipleAdaptersWithTimeout) { 507 FailureCaseURLConfiguredMultipleAdaptersWithTimeout) {
502 FetcherClient client; 508 FetcherClient client;
503 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(&client); 509 TestFailureCaseURLConfiguredMultipleAdaptersWithTimeout(&client);
504 } 510 }
505 511
506 void TestFailureCaseNoURLConfigured(FetcherClient* client) { 512 void TestFailureCaseNoURLConfigured(FetcherClient* client) {
507 client->fetcher_.ConfigureAndPushBackAdapter( 513 client->fetcher_.ConfigureAndPushBackAdapter(
508 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 514 "most_preferred", true, ERR_PAC_NOT_IN_DHCP, L"",
515 base::TimeDelta::FromMilliseconds(1));
509 // This will time out. 516 // This will time out.
510 client->fetcher_.ConfigureAndPushBackAdapter( 517 client->fetcher_.ConfigureAndPushBackAdapter(
511 "second", false, ERR_IO_PENDING, L"bingo", 518 "second", false, ERR_IO_PENDING, L"bingo",
512 TestTimeouts::action_timeout_ms()); 519 TestTimeouts::action_timeout());
513 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such 520 // This is the first non-ERR_PAC_NOT_IN_DHCP error and as such
514 // should be chosen. 521 // should be chosen.
515 client->fetcher_.ConfigureAndPushBackAdapter( 522 client->fetcher_.ConfigureAndPushBackAdapter(
516 "third", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 523 "third", true, ERR_PAC_NOT_IN_DHCP, L"",
524 base::TimeDelta::FromMilliseconds(1));
517 client->RunTest(); 525 client->RunTest();
518 client->RunMessageLoopUntilComplete(); 526 client->RunMessageLoopUntilComplete();
519 ASSERT_EQ(ERR_PAC_NOT_IN_DHCP, client->result_); 527 ASSERT_EQ(ERR_PAC_NOT_IN_DHCP, client->result_);
520 ASSERT_EQ(L"", client->pac_text_); 528 ASSERT_EQ(L"", client->pac_text_);
521 } 529 }
522 530
523 TEST(DhcpProxyScriptFetcherWin, FailureCaseNoURLConfigured) { 531 TEST(DhcpProxyScriptFetcherWin, FailureCaseNoURLConfigured) {
524 FetcherClient client; 532 FetcherClient client;
525 TestFailureCaseNoURLConfigured(&client); 533 TestFailureCaseNoURLConfigured(&client);
526 } 534 }
(...skipping 10 matching lines...) Expand all
537 FetcherClient client; 545 FetcherClient client;
538 TestFailureCaseNoDhcpAdapters(&client); 546 TestFailureCaseNoDhcpAdapters(&client);
539 } 547 }
540 548
541 void TestShortCircuitLessPreferredAdapters(FetcherClient* client) { 549 void TestShortCircuitLessPreferredAdapters(FetcherClient* client) {
542 // Here we have a bunch of adapters; the first reports no PAC in DHCP, 550 // Here we have a bunch of adapters; the first reports no PAC in DHCP,
543 // the second responds quickly with a PAC file, the rest take a long 551 // the second responds quickly with a PAC file, the rest take a long
544 // time. Verify that we complete quickly and do not wait for the slow 552 // time. Verify that we complete quickly and do not wait for the slow
545 // adapters, i.e. we finish before timeout. 553 // adapters, i.e. we finish before timeout.
546 client->fetcher_.ConfigureAndPushBackAdapter( 554 client->fetcher_.ConfigureAndPushBackAdapter(
547 "1", true, ERR_PAC_NOT_IN_DHCP, L"", 1); 555 "1", true, ERR_PAC_NOT_IN_DHCP, L"",
556 base::TimeDelta::FromMilliseconds(1));
548 client->fetcher_.ConfigureAndPushBackAdapter( 557 client->fetcher_.ConfigureAndPushBackAdapter(
549 "2", true, OK, L"bingo", 1); 558 "2", true, OK, L"bingo",
559 base::TimeDelta::FromMilliseconds(1));
550 client->fetcher_.ConfigureAndPushBackAdapter( 560 client->fetcher_.ConfigureAndPushBackAdapter(
551 "3", true, OK, L"wrongo", TestTimeouts::action_max_timeout_ms()); 561 "3", true, OK, L"wrongo", TestTimeouts::action_max_timeout());
552 562
553 // Increase the timeout to ensure the short circuit mechanism has 563 // Increase the timeout to ensure the short circuit mechanism has
554 // time to kick in before the timeout waiting for more adapters kicks in. 564 // time to kick in before the timeout waiting for more adapters kicks in.
555 client->fetcher_.max_wait_ms_ = TestTimeouts::action_timeout_ms(); 565 client->fetcher_.max_wait_ = TestTimeouts::action_timeout();
556 566
557 PerfTimer timer; 567 PerfTimer timer;
558 client->RunTest(); 568 client->RunTest();
559 client->RunMessageLoopUntilComplete(); 569 client->RunMessageLoopUntilComplete();
560 ASSERT_TRUE(client->fetcher_.HasPendingFetchers()); 570 ASSERT_TRUE(client->fetcher_.HasPendingFetchers());
561 // Assert that the time passed is definitely less than the wait timer 571 // Assert that the time passed is definitely less than the wait timer
562 // timeout, to get a second signal that it was the shortcut mechanism 572 // timeout, to get a second signal that it was the shortcut mechanism
563 // (in OnFetcherDone) that kicked in, and not the timeout waiting for 573 // (in OnFetcherDone) that kicked in, and not the timeout waiting for
564 // more adapters. 574 // more adapters.
565 ASSERT_GT(base::TimeDelta::FromMilliseconds( 575 ASSERT_GT(client->fetcher_.max_wait_ - (client->fetcher_.max_wait_ / 10),
566 client->fetcher_.max_wait_ms_ - (client->fetcher_.max_wait_ms_ / 10)), 576 timer.Elapsed());
567 timer.Elapsed());
568 } 577 }
569 578
570 TEST(DhcpProxyScriptFetcherWin, ShortCircuitLessPreferredAdapters) { 579 TEST(DhcpProxyScriptFetcherWin, ShortCircuitLessPreferredAdapters) {
571 FetcherClient client; 580 FetcherClient client;
572 TestShortCircuitLessPreferredAdapters(&client); 581 TestShortCircuitLessPreferredAdapters(&client);
573 } 582 }
574 583
575 void TestImmediateCancel(FetcherClient* client) { 584 void TestImmediateCancel(FetcherClient* client) {
576 TestURLRequestContext context; 585 TestURLRequestContext context;
577 scoped_ptr<DummyDhcpProxyScriptAdapterFetcher> adapter_fetcher( 586 scoped_ptr<DummyDhcpProxyScriptAdapterFetcher> adapter_fetcher(
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 } 633 }
625 634
626 // Re-do the first test to make sure the last test that was run did 635 // Re-do the first test to make sure the last test that was run did
627 // not leave things in a bad state. 636 // not leave things in a bad state.
628 (*test_functions.begin())(&client); 637 (*test_functions.begin())(&client);
629 } 638 }
630 639
631 } // namespace 640 } // namespace
632 641
633 } // namespace net 642 } // namespace net
OLDNEW
« no previous file with comments | « net/proxy/dhcp_proxy_script_fetcher_win.cc ('k') | net/test/local_test_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698