OLD | NEW |
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/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b", 83)->Resolve()); | 728 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b", 83)->Resolve()); |
729 | 729 |
730 EXPECT_TRUE(proc_->WaitFor(1u)); | 730 EXPECT_TRUE(proc_->WaitFor(1u)); |
731 | 731 |
732 // Triggering an IP address change. | 732 // Triggering an IP address change. |
733 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 733 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
734 | 734 |
735 // |MyHandler| will send quit message once all the requests have finished. | 735 // |MyHandler| will send quit message once all the requests have finished. |
736 MessageLoop::current()->Run(); | 736 MessageLoop::current()->Run(); |
737 | 737 |
738 EXPECT_EQ(ERR_ABORTED, requests_[0]->result()); | 738 EXPECT_EQ(ERR_NETWORK_CHANGED, requests_[0]->result()); |
739 EXPECT_EQ(ERR_IO_PENDING, requests_[1]->result()); | 739 EXPECT_EQ(ERR_IO_PENDING, requests_[1]->result()); |
740 EXPECT_EQ(ERR_IO_PENDING, requests_[2]->result()); | 740 EXPECT_EQ(ERR_IO_PENDING, requests_[2]->result()); |
741 EXPECT_EQ(ERR_IO_PENDING, requests_[3]->result()); | 741 EXPECT_EQ(ERR_IO_PENDING, requests_[3]->result()); |
742 // Clean up. | 742 // Clean up. |
743 proc_->SignalMultiple(requests_.size()); | 743 proc_->SignalMultiple(requests_.size()); |
744 } | 744 } |
745 | 745 |
746 TEST_F(HostResolverImplTest, StartWithinCallback) { | 746 TEST_F(HostResolverImplTest, StartWithinCallback) { |
747 struct MyHandler : public Handler { | 747 struct MyHandler : public Handler { |
748 virtual void Handle(Request* req) OVERRIDE { | 748 virtual void Handle(Request* req) OVERRIDE { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 823 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
824 MessageLoop::current()->RunUntilIdle(); // Notification happens async. | 824 MessageLoop::current()->RunUntilIdle(); // Notification happens async. |
825 | 825 |
826 // Resolve "host1" again -- this time it won't be served from cache, so it | 826 // Resolve "host1" again -- this time it won't be served from cache, so it |
827 // will complete asynchronously. | 827 // will complete asynchronously. |
828 req = CreateRequest("host1", 80); | 828 req = CreateRequest("host1", 80); |
829 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); | 829 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); |
830 EXPECT_EQ(OK, req->WaitForResult()); | 830 EXPECT_EQ(OK, req->WaitForResult()); |
831 } | 831 } |
832 | 832 |
833 // Test that IP address changes send ERR_ABORTED to pending requests. | 833 // Test that IP address changes send ERR_NETWORK_CHANGED to pending requests. |
834 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) { | 834 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) { |
835 Request* req = CreateRequest("host1", 70); | 835 Request* req = CreateRequest("host1", 70); |
836 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); | 836 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); |
837 | 837 |
838 EXPECT_TRUE(proc_->WaitFor(1u)); | 838 EXPECT_TRUE(proc_->WaitFor(1u)); |
839 // Triggering an IP address change. | 839 // Triggering an IP address change. |
840 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 840 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
841 MessageLoop::current()->RunUntilIdle(); // Notification happens async. | 841 MessageLoop::current()->RunUntilIdle(); // Notification happens async. |
842 proc_->SignalAll(); | 842 proc_->SignalAll(); |
843 | 843 |
844 EXPECT_EQ(ERR_ABORTED, req->WaitForResult()); | 844 EXPECT_EQ(ERR_NETWORK_CHANGED, req->WaitForResult()); |
845 EXPECT_EQ(0u, resolver_->GetHostCache()->size()); | 845 EXPECT_EQ(0u, resolver_->GetHostCache()->size()); |
846 } | 846 } |
847 | 847 |
848 // Obey pool constraints after IP address has changed. | 848 // Obey pool constraints after IP address has changed. |
849 TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) { | 849 TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) { |
850 // Runs at most one job at a time. | 850 // Runs at most one job at a time. |
851 CreateSerialResolver(); | 851 CreateSerialResolver(); |
852 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a")->Resolve()); | 852 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("a")->Resolve()); |
853 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b")->Resolve()); | 853 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("b")->Resolve()); |
854 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("c")->Resolve()); | 854 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("c")->Resolve()); |
855 | 855 |
856 EXPECT_TRUE(proc_->WaitFor(1u)); | 856 EXPECT_TRUE(proc_->WaitFor(1u)); |
857 // Triggering an IP address change. | 857 // Triggering an IP address change. |
858 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 858 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
859 MessageLoop::current()->RunUntilIdle(); // Notification happens async. | 859 MessageLoop::current()->RunUntilIdle(); // Notification happens async. |
860 proc_->SignalMultiple(3u); // Let the false-start go so that we can catch it. | 860 proc_->SignalMultiple(3u); // Let the false-start go so that we can catch it. |
861 | 861 |
862 EXPECT_EQ(ERR_ABORTED, requests_[0]->WaitForResult()); | 862 EXPECT_EQ(ERR_NETWORK_CHANGED, requests_[0]->WaitForResult()); |
863 | 863 |
864 EXPECT_EQ(1u, num_running_jobs()); | 864 EXPECT_EQ(1u, num_running_jobs()); |
865 | 865 |
866 EXPECT_FALSE(requests_[1]->completed()); | 866 EXPECT_FALSE(requests_[1]->completed()); |
867 EXPECT_FALSE(requests_[2]->completed()); | 867 EXPECT_FALSE(requests_[2]->completed()); |
868 | 868 |
869 EXPECT_EQ(OK, requests_[2]->WaitForResult()); | 869 EXPECT_EQ(OK, requests_[2]->WaitForResult()); |
870 EXPECT_EQ(OK, requests_[1]->result()); | 870 EXPECT_EQ(OK, requests_[1]->result()); |
871 } | 871 } |
872 | 872 |
(...skipping 21 matching lines...) Expand all Loading... |
894 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("bbb")->Resolve()); | 894 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("bbb")->Resolve()); |
895 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("eee")->Resolve()); | 895 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("eee")->Resolve()); |
896 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ccc")->Resolve()); | 896 EXPECT_EQ(ERR_IO_PENDING, CreateRequest("ccc")->Resolve()); |
897 | 897 |
898 // Wait until all are blocked; | 898 // Wait until all are blocked; |
899 EXPECT_TRUE(proc_->WaitFor(3u)); | 899 EXPECT_TRUE(proc_->WaitFor(3u)); |
900 // Trigger an IP address change. | 900 // Trigger an IP address change. |
901 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 901 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
902 // This should abort all running jobs. | 902 // This should abort all running jobs. |
903 MessageLoop::current()->RunUntilIdle(); | 903 MessageLoop::current()->RunUntilIdle(); |
904 EXPECT_EQ(ERR_ABORTED, requests_[0]->result()); | 904 EXPECT_EQ(ERR_NETWORK_CHANGED, requests_[0]->result()); |
905 EXPECT_EQ(ERR_ABORTED, requests_[1]->result()); | 905 EXPECT_EQ(ERR_NETWORK_CHANGED, requests_[1]->result()); |
906 EXPECT_EQ(ERR_ABORTED, requests_[2]->result()); | 906 EXPECT_EQ(ERR_NETWORK_CHANGED, requests_[2]->result()); |
907 ASSERT_EQ(6u, requests_.size()); | 907 ASSERT_EQ(6u, requests_.size()); |
908 // Unblock all calls to proc. | 908 // Unblock all calls to proc. |
909 proc_->SignalMultiple(requests_.size()); | 909 proc_->SignalMultiple(requests_.size()); |
910 // Run until the re-started requests finish. | 910 // Run until the re-started requests finish. |
911 EXPECT_EQ(OK, requests_[3]->WaitForResult()); | 911 EXPECT_EQ(OK, requests_[3]->WaitForResult()); |
912 EXPECT_EQ(OK, requests_[4]->WaitForResult()); | 912 EXPECT_EQ(OK, requests_[4]->WaitForResult()); |
913 EXPECT_EQ(OK, requests_[5]->WaitForResult()); | 913 EXPECT_EQ(OK, requests_[5]->WaitForResult()); |
914 // Verify that results of aborted Jobs were not cached. | 914 // Verify that results of aborted Jobs were not cached. |
915 EXPECT_EQ(6u, proc_->GetCaptureList().size()); | 915 EXPECT_EQ(6u, proc_->GetCaptureList().size()); |
916 EXPECT_EQ(3u, resolver_->GetHostCache()->size()); | 916 EXPECT_EQ(3u, resolver_->GetHostCache()->size()); |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1472 // Make |proc_| default to failures. | 1472 // Make |proc_| default to failures. |
1473 proc_->AddRuleForAllFamilies("", ""); | 1473 proc_->AddRuleForAllFamilies("", ""); |
1474 | 1474 |
1475 // DnsTask should still be enabled. | 1475 // DnsTask should still be enabled. |
1476 Request* req = CreateRequest("ok_last", 80); | 1476 Request* req = CreateRequest("ok_last", 80); |
1477 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); | 1477 EXPECT_EQ(ERR_IO_PENDING, req->Resolve()); |
1478 EXPECT_EQ(OK, req->WaitForResult()); | 1478 EXPECT_EQ(OK, req->WaitForResult()); |
1479 } | 1479 } |
1480 | 1480 |
1481 } // namespace net | 1481 } // namespace net |
OLD | NEW |