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

Side by Side Diff: net/dns/mdns_client_unittest.cc

Issue 17922002: Add an explicit way of forcing the MDnsClient to listen on the network (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 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
« net/dns/mdns_client.h ('K') | « net/dns/mdns_client_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 <queue> 5 #include <queue>
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "net/base/rand_callback.h" 9 #include "net/base/rand_callback.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 bool set_; 294 bool set_;
295 std::string name_; 295 std::string name_;
296 std::string ptrdomain_; 296 std::string ptrdomain_;
297 int ttl_; 297 int ttl_;
298 }; 298 };
299 299
300 class MDnsTest : public ::testing::Test { 300 class MDnsTest : public ::testing::Test {
301 public: 301 public:
302 MDnsTest(); 302 MDnsTest();
303 virtual ~MDnsTest(); 303 virtual ~MDnsTest();
304 virtual void SetUp() OVERRIDE;
304 virtual void TearDown() OVERRIDE; 305 virtual void TearDown() OVERRIDE;
305 void DeleteTransaction(); 306 void DeleteTransaction();
306 void DeleteBothListeners(); 307 void DeleteBothListeners();
307 void RunFor(base::TimeDelta time_period); 308 void RunFor(base::TimeDelta time_period);
308 void Stop(); 309 void Stop();
309 310
310 MOCK_METHOD2(MockableRecordCallback, void(MDnsTransaction::Result result, 311 MOCK_METHOD2(MockableRecordCallback, void(MDnsTransaction::Result result,
311 const RecordParsed* record)); 312 const RecordParsed* record));
312 313
313 MOCK_METHOD2(MockableRecordCallback2, void(MDnsTransaction::Result result, 314 MOCK_METHOD2(MockableRecordCallback2, void(MDnsTransaction::Result result,
(...skipping 26 matching lines...) Expand all
340 341
341 MDnsTest::MDnsTest() { 342 MDnsTest::MDnsTest() {
342 socket_factory_ = new StrictMock<MockMDnsSocketFactory>(); 343 socket_factory_ = new StrictMock<MockMDnsSocketFactory>();
343 test_client_.reset(new MDnsClientImpl( 344 test_client_.reset(new MDnsClientImpl(
344 scoped_ptr<MDnsConnection::SocketFactory>(socket_factory_))); 345 scoped_ptr<MDnsConnection::SocketFactory>(socket_factory_)));
345 } 346 }
346 347
347 MDnsTest::~MDnsTest() { 348 MDnsTest::~MDnsTest() {
348 } 349 }
349 350
351 void MDnsTest::SetUp() {
352 test_client_->StartListening();
353 }
354
350 void MDnsTest::TearDown() { 355 void MDnsTest::TearDown() {
351 base::MessageLoop::current()->RunUntilIdle();
352
353 ASSERT_FALSE(test_client_->IsListeningForTests());
354
355 base::MessageLoop::current()->AssertIdle();
356 } 356 }
357 357
358 void MDnsTest::SimulatePacketReceive(const char* packet, unsigned size) { 358 void MDnsTest::SimulatePacketReceive(const char* packet, unsigned size) {
359 socket_factory_->SimulateReceive(packet, size); 359 socket_factory_->SimulateReceive(packet, size);
360 } 360 }
361 361
362 void MDnsTest::ExpectPacket( 362 void MDnsTest::ExpectPacket(
363 const char* packet, 363 const char* packet,
364 unsigned size) { 364 unsigned size) {
365 EXPECT_CALL(*socket_factory_, OnSendTo(std::string(packet, size))) 365 EXPECT_CALL(*socket_factory_, OnSendTo(std::string(packet, size)))
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 dns_protocol::kTypePTR, "_privet._tcp.local", &delegate_privet); 401 dns_protocol::kTypePTR, "_privet._tcp.local", &delegate_privet);
402 scoped_ptr<MDnsListener> listener_printer = test_client_->CreateListener( 402 scoped_ptr<MDnsListener> listener_printer = test_client_->CreateListener(
403 dns_protocol::kTypePTR, "_printer._tcp.local", &delegate_printer); 403 dns_protocol::kTypePTR, "_printer._tcp.local", &delegate_printer);
404 scoped_ptr<MDnsListener> listener_ptr = test_client_->CreateListener( 404 scoped_ptr<MDnsListener> listener_ptr = test_client_->CreateListener(
405 dns_protocol::kTypePTR, "", &delegate_ptr); 405 dns_protocol::kTypePTR, "", &delegate_ptr);
406 406
407 ASSERT_TRUE(listener_privet->Start()); 407 ASSERT_TRUE(listener_privet->Start());
408 ASSERT_TRUE(listener_printer->Start()); 408 ASSERT_TRUE(listener_printer->Start());
409 ASSERT_TRUE(listener_ptr->Start()); 409 ASSERT_TRUE(listener_ptr->Start());
410 410
411 ASSERT_TRUE(test_client_->IsListeningForTests());
412
413 // Send the same packet twice to ensure no records are double-counted. 411 // Send the same packet twice to ensure no records are double-counted.
414 412
415 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 413 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
416 .Times(Exactly(1)) 414 .Times(Exactly(1))
417 .WillOnce(Invoke( 415 .WillOnce(Invoke(
418 &record_privet, 416 &record_privet,
419 &PtrRecordCopyContainer::SaveWithDummyArg)); 417 &PtrRecordCopyContainer::SaveWithDummyArg));
420 418
421 EXPECT_CALL(delegate_printer, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 419 EXPECT_CALL(delegate_printer, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
422 .Times(Exactly(1)) 420 .Times(Exactly(1))
423 .WillOnce(Invoke( 421 .WillOnce(Invoke(
424 &record_printer, 422 &record_printer,
425 &PtrRecordCopyContainer::SaveWithDummyArg)); 423 &PtrRecordCopyContainer::SaveWithDummyArg));
426 424
427 EXPECT_CALL(delegate_ptr, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 425 EXPECT_CALL(delegate_ptr, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
428 .Times(Exactly(2)); 426 .Times(Exactly(2));
429 427
430 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 428 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
431 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 429 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
432 430
433 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local", 431 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local",
434 "hello._privet._tcp.local")); 432 "hello._privet._tcp.local"));
435 433
436 EXPECT_TRUE(record_printer.IsRecordWith("_printer._tcp.local", 434 EXPECT_TRUE(record_printer.IsRecordWith("_printer._tcp.local",
437 "hello._printer._tcp.local")); 435 "hello._printer._tcp.local"));
438 436
439 listener_privet.reset(); 437 listener_privet.reset();
440 listener_printer.reset(); 438 listener_printer.reset();
441 439
442 ASSERT_TRUE(test_client_->IsListeningForTests());
443
444 EXPECT_CALL(delegate_ptr, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 440 EXPECT_CALL(delegate_ptr, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
445 .Times(Exactly(2)); 441 .Times(Exactly(2));
446 442
447 SimulatePacketReceive(kSamplePacket2, sizeof(kSamplePacket2)); 443 SimulatePacketReceive(kSamplePacket2, sizeof(kSamplePacket2));
448 } 444 }
449 445
450 TEST_F(MDnsTest, PassiveListenersCacheCleanup) { 446 TEST_F(MDnsTest, PassiveListenersCacheCleanup) {
451 StrictMock<MockListenerDelegate> delegate_privet; 447 StrictMock<MockListenerDelegate> delegate_privet;
452 448
453 PtrRecordCopyContainer record_privet; 449 PtrRecordCopyContainer record_privet;
454 PtrRecordCopyContainer record_privet2; 450 PtrRecordCopyContainer record_privet2;
455 451
456 scoped_ptr<MDnsListener> listener_privet = test_client_->CreateListener( 452 scoped_ptr<MDnsListener> listener_privet = test_client_->CreateListener(
457 dns_protocol::kTypePTR, "_privet._tcp.local", &delegate_privet); 453 dns_protocol::kTypePTR, "_privet._tcp.local", &delegate_privet);
458 454
459 ASSERT_TRUE(listener_privet->Start()); 455 ASSERT_TRUE(listener_privet->Start());
460 456
461 ASSERT_TRUE(test_client_->IsListeningForTests());
462
463 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 457 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
464 .Times(Exactly(1)) 458 .Times(Exactly(1))
465 .WillOnce(Invoke( 459 .WillOnce(Invoke(
466 &record_privet, 460 &record_privet,
467 &PtrRecordCopyContainer::SaveWithDummyArg)); 461 &PtrRecordCopyContainer::SaveWithDummyArg));
468 462
469 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 463 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
470 464
471 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local", 465 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local",
472 "hello._privet._tcp.local")); 466 "hello._privet._tcp.local"));
(...skipping 14 matching lines...) Expand all
487 TEST_F(MDnsTest, MalformedPacket) { 481 TEST_F(MDnsTest, MalformedPacket) {
488 StrictMock<MockListenerDelegate> delegate_printer; 482 StrictMock<MockListenerDelegate> delegate_printer;
489 483
490 PtrRecordCopyContainer record_printer; 484 PtrRecordCopyContainer record_printer;
491 485
492 scoped_ptr<MDnsListener> listener_printer = test_client_->CreateListener( 486 scoped_ptr<MDnsListener> listener_printer = test_client_->CreateListener(
493 dns_protocol::kTypePTR, "_printer._tcp.local", &delegate_printer); 487 dns_protocol::kTypePTR, "_printer._tcp.local", &delegate_printer);
494 488
495 ASSERT_TRUE(listener_printer->Start()); 489 ASSERT_TRUE(listener_printer->Start());
496 490
497 ASSERT_TRUE(test_client_->IsListeningForTests());
498
499 EXPECT_CALL(delegate_printer, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 491 EXPECT_CALL(delegate_printer, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
500 .Times(Exactly(1)) 492 .Times(Exactly(1))
501 .WillOnce(Invoke( 493 .WillOnce(Invoke(
502 &record_printer, 494 &record_printer,
503 &PtrRecordCopyContainer::SaveWithDummyArg)); 495 &PtrRecordCopyContainer::SaveWithDummyArg));
504 496
505 // First, send unsalvagable packet to ensure we can deal with it. 497 // First, send unsalvagable packet to ensure we can deal with it.
506 SimulatePacketReceive(kCorruptedPacketUnsalvagable, 498 SimulatePacketReceive(kCorruptedPacketUnsalvagable,
507 sizeof(kCorruptedPacketUnsalvagable)); 499 sizeof(kCorruptedPacketUnsalvagable));
508 500
(...skipping 16 matching lines...) Expand all
525 test_client_->CreateTransaction( 517 test_client_->CreateTransaction(
526 dns_protocol::kTypePTR, "_privet._tcp.local", 518 dns_protocol::kTypePTR, "_privet._tcp.local",
527 MDnsTransaction::QUERY_NETWORK | 519 MDnsTransaction::QUERY_NETWORK |
528 MDnsTransaction::QUERY_CACHE | 520 MDnsTransaction::QUERY_CACHE |
529 MDnsTransaction::SINGLE_RESULT, 521 MDnsTransaction::SINGLE_RESULT,
530 base::Bind(&MDnsTest::MockableRecordCallback, 522 base::Bind(&MDnsTest::MockableRecordCallback,
531 base::Unretained(this))); 523 base::Unretained(this)));
532 524
533 ASSERT_TRUE(transaction_privet->Start()); 525 ASSERT_TRUE(transaction_privet->Start());
534 526
535 EXPECT_TRUE(test_client_->IsListeningForTests());
536
537 PtrRecordCopyContainer record_privet; 527 PtrRecordCopyContainer record_privet;
538 528
539 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _)) 529 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _))
540 .Times(Exactly(1)) 530 .Times(Exactly(1))
541 .WillOnce(Invoke(&record_privet, 531 .WillOnce(Invoke(&record_privet,
542 &PtrRecordCopyContainer::SaveWithDummyArg)); 532 &PtrRecordCopyContainer::SaveWithDummyArg));
543 533
544 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 534 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
545 535
546 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local", 536 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local",
547 "hello._privet._tcp.local")); 537 "hello._privet._tcp.local"));
548 } 538 }
549 539
550 TEST_F(MDnsTest, TransactionCacheOnlyNoResult) { 540 TEST_F(MDnsTest, TransactionCacheOnlyNoResult) {
551 scoped_ptr<MDnsTransaction> transaction_privet = 541 scoped_ptr<MDnsTransaction> transaction_privet =
552 test_client_->CreateTransaction( 542 test_client_->CreateTransaction(
553 dns_protocol::kTypePTR, "_privet._tcp.local", 543 dns_protocol::kTypePTR, "_privet._tcp.local",
554 MDnsTransaction::QUERY_CACHE | 544 MDnsTransaction::QUERY_CACHE |
555 MDnsTransaction::SINGLE_RESULT, 545 MDnsTransaction::SINGLE_RESULT,
556 base::Bind(&MDnsTest::MockableRecordCallback, 546 base::Bind(&MDnsTest::MockableRecordCallback,
557 base::Unretained(this))); 547 base::Unretained(this)));
558 548
559 EXPECT_CALL(*this, 549 EXPECT_CALL(*this,
560 MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS, _)) 550 MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS, _))
561 .Times(Exactly(1)); 551 .Times(Exactly(1));
562 552
563 ASSERT_TRUE(transaction_privet->Start()); 553 ASSERT_TRUE(transaction_privet->Start());
564
565 EXPECT_FALSE(test_client_->IsListeningForTests());
566 } 554 }
567 555
568 TEST_F(MDnsTest, TransactionWithCache) { 556 TEST_F(MDnsTest, TransactionWithCache) {
569 // Listener to force the client to listen 557 // Listener to force the client to listen
570 StrictMock<MockListenerDelegate> delegate_irrelevant; 558 StrictMock<MockListenerDelegate> delegate_irrelevant;
571 scoped_ptr<MDnsListener> listener_irrelevant = test_client_->CreateListener( 559 scoped_ptr<MDnsListener> listener_irrelevant = test_client_->CreateListener(
572 dns_protocol::kTypeA, "codereview.chromium.local", 560 dns_protocol::kTypeA, "codereview.chromium.local",
573 &delegate_irrelevant); 561 &delegate_irrelevant);
574 562
575 ASSERT_TRUE(listener_irrelevant->Start()); 563 ASSERT_TRUE(listener_irrelevant->Start());
576 564
577 EXPECT_TRUE(test_client_->IsListeningForTests());
578
579 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 565 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
580 566
581 567
582 PtrRecordCopyContainer record_privet; 568 PtrRecordCopyContainer record_privet;
583 569
584 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _)) 570 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _))
585 .WillOnce(Invoke(&record_privet, 571 .WillOnce(Invoke(&record_privet,
586 &PtrRecordCopyContainer::SaveWithDummyArg)); 572 &PtrRecordCopyContainer::SaveWithDummyArg));
587 573
588 scoped_ptr<MDnsTransaction> transaction_privet = 574 scoped_ptr<MDnsTransaction> transaction_privet =
(...skipping 15 matching lines...) Expand all
604 StrictMock<MockListenerDelegate> delegate_privet; 590 StrictMock<MockListenerDelegate> delegate_privet;
605 591
606 PtrRecordCopyContainer record_privet; 592 PtrRecordCopyContainer record_privet;
607 593
608 scoped_ptr<MDnsListener> listener_privet = test_client_->CreateListener( 594 scoped_ptr<MDnsListener> listener_privet = test_client_->CreateListener(
609 dns_protocol::kTypePTR, "_privet._tcp.local", 595 dns_protocol::kTypePTR, "_privet._tcp.local",
610 &delegate_privet); 596 &delegate_privet);
611 597
612 ASSERT_TRUE(listener_privet->Start()); 598 ASSERT_TRUE(listener_privet->Start());
613 599
614 ASSERT_TRUE(test_client_->IsListeningForTests());
615
616 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 600 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
617 .Times(Exactly(1)) 601 .Times(Exactly(1))
618 .WillOnce(Invoke( 602 .WillOnce(Invoke(
619 &record_privet, 603 &record_privet,
620 &PtrRecordCopyContainer::SaveWithDummyArg)); 604 &PtrRecordCopyContainer::SaveWithDummyArg));
621 605
622 SimulatePacketReceive(kSamplePacketAdditionalOnly, sizeof(kSamplePacket1)); 606 SimulatePacketReceive(kSamplePacketAdditionalOnly, sizeof(kSamplePacket1));
623 607
624 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local", 608 EXPECT_TRUE(record_privet.IsRecordWith("_privet._tcp.local",
625 "hello._privet._tcp.local")); 609 "hello._privet._tcp.local"));
626 } 610 }
627 611
628 TEST_F(MDnsTest, TransactionTimeout) { 612 TEST_F(MDnsTest, TransactionTimeout) {
629 ExpectPacket(kQueryPacketPrivet, sizeof(kQueryPacketPrivet)); 613 ExpectPacket(kQueryPacketPrivet, sizeof(kQueryPacketPrivet));
630 614
631 scoped_ptr<MDnsTransaction> transaction_privet = 615 scoped_ptr<MDnsTransaction> transaction_privet =
632 test_client_->CreateTransaction( 616 test_client_->CreateTransaction(
633 dns_protocol::kTypePTR, "_privet._tcp.local", 617 dns_protocol::kTypePTR, "_privet._tcp.local",
634 MDnsTransaction::QUERY_NETWORK | 618 MDnsTransaction::QUERY_NETWORK |
635 MDnsTransaction::QUERY_CACHE | 619 MDnsTransaction::QUERY_CACHE |
636 MDnsTransaction::SINGLE_RESULT, 620 MDnsTransaction::SINGLE_RESULT,
637 base::Bind(&MDnsTest::MockableRecordCallback, 621 base::Bind(&MDnsTest::MockableRecordCallback,
638 base::Unretained(this))); 622 base::Unretained(this)));
639 623
640 ASSERT_TRUE(transaction_privet->Start()); 624 ASSERT_TRUE(transaction_privet->Start());
641 625
642 EXPECT_TRUE(test_client_->IsListeningForTests());
643
644 EXPECT_CALL(*this, 626 EXPECT_CALL(*this,
645 MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS, NULL)) 627 MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS, NULL))
646 .Times(Exactly(1)) 628 .Times(Exactly(1))
647 .WillOnce(InvokeWithoutArgs(this, &MDnsTest::Stop)); 629 .WillOnce(InvokeWithoutArgs(this, &MDnsTest::Stop));
648 630
649 RunFor(base::TimeDelta::FromSeconds(4)); 631 RunFor(base::TimeDelta::FromSeconds(4));
650 } 632 }
651 633
652 TEST_F(MDnsTest, TransactionMultipleRecords) { 634 TEST_F(MDnsTest, TransactionMultipleRecords) {
653 ExpectPacket(kQueryPacketPrivet, sizeof(kQueryPacketPrivet)); 635 ExpectPacket(kQueryPacketPrivet, sizeof(kQueryPacketPrivet));
654 636
655 scoped_ptr<MDnsTransaction> transaction_privet = 637 scoped_ptr<MDnsTransaction> transaction_privet =
656 test_client_->CreateTransaction( 638 test_client_->CreateTransaction(
657 dns_protocol::kTypePTR, "_privet._tcp.local", 639 dns_protocol::kTypePTR, "_privet._tcp.local",
658 MDnsTransaction::QUERY_NETWORK | 640 MDnsTransaction::QUERY_NETWORK |
659 MDnsTransaction::QUERY_CACHE , 641 MDnsTransaction::QUERY_CACHE ,
660 base::Bind(&MDnsTest::MockableRecordCallback, 642 base::Bind(&MDnsTest::MockableRecordCallback,
661 base::Unretained(this))); 643 base::Unretained(this)));
662 644
663 ASSERT_TRUE(transaction_privet->Start()); 645 ASSERT_TRUE(transaction_privet->Start());
664 646
665 EXPECT_TRUE(test_client_->IsListeningForTests());
666
667 PtrRecordCopyContainer record_privet; 647 PtrRecordCopyContainer record_privet;
668 PtrRecordCopyContainer record_privet2; 648 PtrRecordCopyContainer record_privet2;
669 649
670 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _)) 650 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _))
671 .Times(Exactly(2)) 651 .Times(Exactly(2))
672 .WillOnce(Invoke(&record_privet, 652 .WillOnce(Invoke(&record_privet,
673 &PtrRecordCopyContainer::SaveWithDummyArg)) 653 &PtrRecordCopyContainer::SaveWithDummyArg))
674 .WillOnce(Invoke(&record_privet2, 654 .WillOnce(Invoke(&record_privet2,
675 &PtrRecordCopyContainer::SaveWithDummyArg)); 655 &PtrRecordCopyContainer::SaveWithDummyArg));
676 656
(...skipping 18 matching lines...) Expand all
695 transaction_ = test_client_->CreateTransaction( 675 transaction_ = test_client_->CreateTransaction(
696 dns_protocol::kTypePTR, "_privet._tcp.local", 676 dns_protocol::kTypePTR, "_privet._tcp.local",
697 MDnsTransaction::QUERY_NETWORK | 677 MDnsTransaction::QUERY_NETWORK |
698 MDnsTransaction::QUERY_CACHE | 678 MDnsTransaction::QUERY_CACHE |
699 MDnsTransaction::SINGLE_RESULT, 679 MDnsTransaction::SINGLE_RESULT,
700 base::Bind(&MDnsTest::MockableRecordCallback, 680 base::Bind(&MDnsTest::MockableRecordCallback,
701 base::Unretained(this))); 681 base::Unretained(this)));
702 682
703 ASSERT_TRUE(transaction_->Start()); 683 ASSERT_TRUE(transaction_->Start());
704 684
705 EXPECT_TRUE(test_client_->IsListeningForTests());
706
707 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS, 685 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_NO_RESULTS,
708 NULL)) 686 NULL))
709 .Times(Exactly(1)) 687 .Times(Exactly(1))
710 .WillOnce(DoAll(InvokeWithoutArgs(this, &MDnsTest::DeleteTransaction), 688 .WillOnce(DoAll(InvokeWithoutArgs(this, &MDnsTest::DeleteTransaction),
711 InvokeWithoutArgs(this, &MDnsTest::Stop))); 689 InvokeWithoutArgs(this, &MDnsTest::Stop)));
712 690
713 RunFor(base::TimeDelta::FromSeconds(4)); 691 RunFor(base::TimeDelta::FromSeconds(4));
714 692
715 EXPECT_EQ(NULL, transaction_.get()); 693 EXPECT_EQ(NULL, transaction_.get());
716 } 694 }
717 695
718 TEST_F(MDnsTest, TransactionReentrantDeleteFromCache) { 696 TEST_F(MDnsTest, TransactionReentrantDeleteFromCache) {
719 StrictMock<MockListenerDelegate> delegate_irrelevant; 697 StrictMock<MockListenerDelegate> delegate_irrelevant;
720 scoped_ptr<MDnsListener> listener_irrelevant = test_client_->CreateListener( 698 scoped_ptr<MDnsListener> listener_irrelevant = test_client_->CreateListener(
721 dns_protocol::kTypeA, "codereview.chromium.local", 699 dns_protocol::kTypeA, "codereview.chromium.local",
722 &delegate_irrelevant); 700 &delegate_irrelevant);
723 ASSERT_TRUE(listener_irrelevant->Start()); 701 ASSERT_TRUE(listener_irrelevant->Start());
724 702
725 ASSERT_TRUE(test_client_->IsListeningForTests());
726
727 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 703 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
728 704
729 transaction_ = test_client_->CreateTransaction( 705 transaction_ = test_client_->CreateTransaction(
730 dns_protocol::kTypePTR, "_privet._tcp.local", 706 dns_protocol::kTypePTR, "_privet._tcp.local",
731 MDnsTransaction::QUERY_NETWORK | 707 MDnsTransaction::QUERY_NETWORK |
732 MDnsTransaction::QUERY_CACHE, 708 MDnsTransaction::QUERY_CACHE,
733 base::Bind(&MDnsTest::MockableRecordCallback, 709 base::Bind(&MDnsTest::MockableRecordCallback,
734 base::Unretained(this))); 710 base::Unretained(this)));
735 711
736 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _)) 712 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, _))
(...skipping 28 matching lines...) Expand all
765 .Times(Exactly(1)); 741 .Times(Exactly(1));
766 742
767 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD, 743 EXPECT_CALL(*this, MockableRecordCallback(MDnsTransaction::RESULT_RECORD,
768 _)) 744 _))
769 .Times(Exactly(1)) 745 .Times(Exactly(1))
770 .WillOnce(IgnoreResult(InvokeWithoutArgs(transaction2.get(), 746 .WillOnce(IgnoreResult(InvokeWithoutArgs(transaction2.get(),
771 &MDnsTransaction::Start))); 747 &MDnsTransaction::Start)));
772 748
773 ASSERT_TRUE(transaction1->Start()); 749 ASSERT_TRUE(transaction1->Start());
774 750
775 EXPECT_TRUE(test_client_->IsListeningForTests());
776
777 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 751 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
778 } 752 }
779 753
780 // In order to reliably test reentrant listener deletes, we create two listeners 754 // In order to reliably test reentrant listener deletes, we create two listeners
781 // and have each of them delete both, so we're guaranteed to try and deliver a 755 // and have each of them delete both, so we're guaranteed to try and deliver a
782 // callback to at least one deleted listener. 756 // callback to at least one deleted listener.
783 757
784 TEST_F(MDnsTest, ListenerReentrantDelete) { 758 TEST_F(MDnsTest, ListenerReentrantDelete) {
785 StrictMock<MockListenerDelegate> delegate_privet; 759 StrictMock<MockListenerDelegate> delegate_privet;
786 760
787 listener1_ = test_client_->CreateListener( 761 listener1_ = test_client_->CreateListener(
788 dns_protocol::kTypePTR, "_privet._tcp.local", 762 dns_protocol::kTypePTR, "_privet._tcp.local",
789 &delegate_privet); 763 &delegate_privet);
790 764
791 listener2_ = test_client_->CreateListener( 765 listener2_ = test_client_->CreateListener(
792 dns_protocol::kTypePTR, "_privet._tcp.local", 766 dns_protocol::kTypePTR, "_privet._tcp.local",
793 &delegate_privet); 767 &delegate_privet);
794 768
795 ASSERT_TRUE(listener1_->Start()); 769 ASSERT_TRUE(listener1_->Start());
796 770
797 ASSERT_TRUE(listener2_->Start()); 771 ASSERT_TRUE(listener2_->Start());
798 772
799 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _)) 773 EXPECT_CALL(delegate_privet, OnRecordUpdate(MDnsListener::RECORD_ADDED, _))
800 .Times(Exactly(1)) 774 .Times(Exactly(1))
801 .WillOnce(InvokeWithoutArgs(this, &MDnsTest::DeleteBothListeners)); 775 .WillOnce(InvokeWithoutArgs(this, &MDnsTest::DeleteBothListeners));
802 776
803 EXPECT_TRUE(test_client_->IsListeningForTests());
804
805 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1)); 777 SimulatePacketReceive(kSamplePacket1, sizeof(kSamplePacket1));
806 778
807 EXPECT_EQ(NULL, listener1_.get()); 779 EXPECT_EQ(NULL, listener1_.get());
808 EXPECT_EQ(NULL, listener2_.get()); 780 EXPECT_EQ(NULL, listener2_.get());
809 } 781 }
810 782
811 ACTION_P(SaveIPAddress, ip_container) { 783 ACTION_P(SaveIPAddress, ip_container) {
812 ::testing::StaticAssertTypeEq<const RecordParsed*, arg1_type>(); 784 ::testing::StaticAssertTypeEq<const RecordParsed*, arg1_type>();
813 ::testing::StaticAssertTypeEq<IPAddressNumber*, ip_container_type>(); 785 ::testing::StaticAssertTypeEq<IPAddressNumber*, ip_container_type>();
814 786
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 961
990 ASSERT_TRUE(InitConnection()); 962 ASSERT_TRUE(InitConnection());
991 963
992 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED)); 964 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
993 callback.Run(ERR_SOCKET_NOT_CONNECTED); 965 callback.Run(ERR_SOCKET_NOT_CONNECTED);
994 } 966 }
995 967
996 } // namespace 968 } // namespace
997 969
998 } // namespace net 970 } // namespace net
OLDNEW
« net/dns/mdns_client.h ('K') | « net/dns/mdns_client_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698