OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_factory_mojo.h" | 5 #include "net/proxy/proxy_resolver_factory_mojo.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <queue> | 10 #include <queue> |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "net/base/test_completion_callback.h" | 24 #include "net/base/test_completion_callback.h" |
25 #include "net/dns/host_resolver.h" | 25 #include "net/dns/host_resolver.h" |
26 #include "net/log/test_net_log.h" | 26 #include "net/log/test_net_log.h" |
27 #include "net/proxy/mojo_proxy_resolver_factory.h" | 27 #include "net/proxy/mojo_proxy_resolver_factory.h" |
28 #include "net/proxy/mojo_proxy_type_converters.h" | 28 #include "net/proxy/mojo_proxy_type_converters.h" |
29 #include "net/proxy/proxy_info.h" | 29 #include "net/proxy/proxy_info.h" |
30 #include "net/proxy/proxy_resolver.h" | 30 #include "net/proxy/proxy_resolver.h" |
31 #include "net/proxy/proxy_resolver_error_observer.h" | 31 #include "net/proxy/proxy_resolver_error_observer.h" |
32 #include "net/proxy/proxy_resolver_script_data.h" | 32 #include "net/proxy/proxy_resolver_script_data.h" |
33 #include "net/test/event_waiter.h" | 33 #include "net/test/event_waiter.h" |
| 34 #include "net/test/gtest_util.h" |
| 35 #include "testing/gmock/include/gmock/gmock.h" |
34 #include "testing/gtest/include/gtest/gtest.h" | 36 #include "testing/gtest/include/gtest/gtest.h" |
35 #include "url/gurl.h" | 37 #include "url/gurl.h" |
36 | 38 |
| 39 using net::test::IsError; |
| 40 using net::test::IsOk; |
| 41 |
37 namespace net { | 42 namespace net { |
38 | 43 |
39 namespace { | 44 namespace { |
40 | 45 |
41 const char kScriptData[] = "FooBarBaz"; | 46 const char kScriptData[] = "FooBarBaz"; |
42 const char kExampleUrl[] = "http://www.example.com"; | 47 const char kExampleUrl[] = "http://www.example.com"; |
43 | 48 |
44 struct CreateProxyResolverAction { | 49 struct CreateProxyResolverAction { |
45 enum Action { | 50 enum Action { |
46 COMPLETE, | 51 COMPLETE, |
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 } | 733 } |
729 | 734 |
730 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL) { | 735 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL) { |
731 const GURL url(kExampleUrl); | 736 const GURL url(kExampleUrl); |
732 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 737 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
733 url, ProxyServersFromPacString("DIRECT"))); | 738 url, ProxyServersFromPacString("DIRECT"))); |
734 CreateProxyResolver(); | 739 CreateProxyResolver(); |
735 net_log_.Clear(); | 740 net_log_.Clear(); |
736 | 741 |
737 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 742 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
738 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 743 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
739 EXPECT_EQ(OK, request->WaitForResult()); | 744 EXPECT_THAT(request->WaitForResult(), IsOk()); |
740 | 745 |
741 EXPECT_EQ("DIRECT", request->results().ToPacString()); | 746 EXPECT_EQ("DIRECT", request->results().ToPacString()); |
742 | 747 |
743 TestNetLogEntry::List entries; | 748 TestNetLogEntry::List entries; |
744 net_log_.GetEntries(&entries); | 749 net_log_.GetEntries(&entries); |
745 CheckCapturedNetLogEntries(url.spec(), entries); | 750 CheckCapturedNetLogEntries(url.spec(), entries); |
746 entries.clear(); | 751 entries.clear(); |
747 request->net_log().GetEntries(&entries); | 752 request->net_log().GetEntries(&entries); |
748 CheckCapturedNetLogEntries(url.spec(), entries); | 753 CheckCapturedNetLogEntries(url.spec(), entries); |
749 } | 754 } |
750 | 755 |
751 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleResults) { | 756 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleResults) { |
752 static const char kPacString[] = | 757 static const char kPacString[] = |
753 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" | 758 "PROXY foo1:80;DIRECT;SOCKS foo2:1234;" |
754 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; | 759 "SOCKS5 foo3:1080;HTTPS foo4:443;QUIC foo6:8888"; |
755 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 760 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
756 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); | 761 GURL(kExampleUrl), ProxyServersFromPacString(kPacString))); |
757 CreateProxyResolver(); | 762 CreateProxyResolver(); |
758 | 763 |
759 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 764 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
760 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 765 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
761 EXPECT_EQ(OK, request->WaitForResult()); | 766 EXPECT_THAT(request->WaitForResult(), IsOk()); |
762 | 767 |
763 EXPECT_EQ(kPacString, request->results().ToPacString()); | 768 EXPECT_EQ(kPacString, request->results().ToPacString()); |
764 } | 769 } |
765 | 770 |
766 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Error) { | 771 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Error) { |
767 mock_proxy_resolver_.AddGetProxyAction( | 772 mock_proxy_resolver_.AddGetProxyAction( |
768 GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); | 773 GetProxyForUrlAction::ReturnError(GURL(kExampleUrl), ERR_UNEXPECTED)); |
769 CreateProxyResolver(); | 774 CreateProxyResolver(); |
770 | 775 |
771 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 776 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
772 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 777 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
773 EXPECT_EQ(ERR_UNEXPECTED, request->WaitForResult()); | 778 EXPECT_THAT(request->WaitForResult(), IsError(ERR_UNEXPECTED)); |
774 | 779 |
775 EXPECT_TRUE(request->results().is_empty()); | 780 EXPECT_TRUE(request->results().is_empty()); |
776 } | 781 } |
777 | 782 |
778 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { | 783 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Cancel) { |
779 mock_proxy_resolver_.AddGetProxyAction( | 784 mock_proxy_resolver_.AddGetProxyAction( |
780 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); | 785 GetProxyForUrlAction::WaitForClientDisconnect(GURL(kExampleUrl))); |
781 CreateProxyResolver(); | 786 CreateProxyResolver(); |
782 | 787 |
783 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 788 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
784 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 789 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
785 request->Cancel(); | 790 request->Cancel(); |
786 | 791 |
787 // The Mojo request is still made. | 792 // The Mojo request is still made. |
788 mock_proxy_resolver_.WaitForNextRequest(); | 793 mock_proxy_resolver_.WaitForNextRequest(); |
789 } | 794 } |
790 | 795 |
791 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { | 796 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_MultipleRequests) { |
792 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 797 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
793 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 798 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
794 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 799 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
795 GURL("https://www.chromium.org"), | 800 GURL("https://www.chromium.org"), |
796 ProxyServersFromPacString("HTTPS foo:443"))); | 801 ProxyServersFromPacString("HTTPS foo:443"))); |
797 CreateProxyResolver(); | 802 CreateProxyResolver(); |
798 | 803 |
799 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 804 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
800 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 805 EXPECT_THAT(request1->Resolve(), IsError(ERR_IO_PENDING)); |
801 std::unique_ptr<Request> request2( | 806 std::unique_ptr<Request> request2( |
802 MakeRequest(GURL("https://www.chromium.org"))); | 807 MakeRequest(GURL("https://www.chromium.org"))); |
803 EXPECT_EQ(ERR_IO_PENDING, request2->Resolve()); | 808 EXPECT_THAT(request2->Resolve(), IsError(ERR_IO_PENDING)); |
804 | 809 |
805 EXPECT_EQ(OK, request1->WaitForResult()); | 810 EXPECT_THAT(request1->WaitForResult(), IsOk()); |
806 EXPECT_EQ(OK, request2->WaitForResult()); | 811 EXPECT_THAT(request2->WaitForResult(), IsOk()); |
807 | 812 |
808 EXPECT_EQ("DIRECT", request1->results().ToPacString()); | 813 EXPECT_EQ("DIRECT", request1->results().ToPacString()); |
809 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); | 814 EXPECT_EQ("HTTPS foo:443", request2->results().ToPacString()); |
810 } | 815 } |
811 | 816 |
812 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Disconnect) { | 817 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_Disconnect) { |
813 mock_proxy_resolver_.AddGetProxyAction( | 818 mock_proxy_resolver_.AddGetProxyAction( |
814 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); | 819 GetProxyForUrlAction::Disconnect(GURL(kExampleUrl))); |
815 CreateProxyResolver(); | 820 CreateProxyResolver(); |
816 { | 821 { |
817 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 822 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
818 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 823 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
819 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->WaitForResult()); | 824 EXPECT_THAT(request->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
820 EXPECT_TRUE(request->results().is_empty()); | 825 EXPECT_TRUE(request->results().is_empty()); |
821 } | 826 } |
822 | 827 |
823 { | 828 { |
824 // Calling GetProxyForURL after a disconnect should fail. | 829 // Calling GetProxyForURL after a disconnect should fail. |
825 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 830 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
826 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request->Resolve()); | 831 EXPECT_THAT(request->Resolve(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
827 } | 832 } |
828 } | 833 } |
829 | 834 |
830 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_ClientClosed) { | 835 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_ClientClosed) { |
831 mock_proxy_resolver_.AddGetProxyAction( | 836 mock_proxy_resolver_.AddGetProxyAction( |
832 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); | 837 GetProxyForUrlAction::DropRequest(GURL(kExampleUrl))); |
833 CreateProxyResolver(); | 838 CreateProxyResolver(); |
834 | 839 |
835 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); | 840 std::unique_ptr<Request> request1(MakeRequest(GURL(kExampleUrl))); |
836 EXPECT_EQ(ERR_IO_PENDING, request1->Resolve()); | 841 EXPECT_THAT(request1->Resolve(), IsError(ERR_IO_PENDING)); |
837 | 842 |
838 EXPECT_EQ(ERR_PAC_SCRIPT_TERMINATED, request1->WaitForResult()); | 843 EXPECT_THAT(request1->WaitForResult(), IsError(ERR_PAC_SCRIPT_TERMINATED)); |
839 } | 844 } |
840 | 845 |
841 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { | 846 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DeleteInCallback) { |
842 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( | 847 mock_proxy_resolver_.AddGetProxyAction(GetProxyForUrlAction::ReturnServers( |
843 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); | 848 GURL(kExampleUrl), ProxyServersFromPacString("DIRECT"))); |
844 CreateProxyResolver(); | 849 CreateProxyResolver(); |
845 | 850 |
846 ProxyInfo results; | 851 ProxyInfo results; |
847 TestCompletionCallback callback; | 852 TestCompletionCallback callback; |
848 ProxyResolver::RequestHandle handle; | 853 ProxyResolver::RequestHandle handle; |
(...skipping 27 matching lines...) Expand all Loading... |
876 &handle, net_log))); | 881 &handle, net_log))); |
877 on_delete_callback_.WaitForResult(); | 882 on_delete_callback_.WaitForResult(); |
878 } | 883 } |
879 | 884 |
880 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { | 885 TEST_F(ProxyResolverFactoryMojoTest, GetProxyForURL_DnsRequest) { |
881 mock_proxy_resolver_.AddGetProxyAction( | 886 mock_proxy_resolver_.AddGetProxyAction( |
882 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); | 887 GetProxyForUrlAction::MakeDnsRequest(GURL(kExampleUrl))); |
883 CreateProxyResolver(); | 888 CreateProxyResolver(); |
884 | 889 |
885 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); | 890 std::unique_ptr<Request> request(MakeRequest(GURL(kExampleUrl))); |
886 EXPECT_EQ(ERR_IO_PENDING, request->Resolve()); | 891 EXPECT_THAT(request->Resolve(), IsError(ERR_IO_PENDING)); |
887 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); | 892 EXPECT_EQ(LOAD_STATE_RESOLVING_PROXY_FOR_URL, request->load_state()); |
888 | 893 |
889 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); | 894 host_resolver_.waiter().WaitForEvent(MockHostResolver::DNS_REQUEST); |
890 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); | 895 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT, request->load_state()); |
891 mock_proxy_resolver_.ClearBlockedClients(); | 896 mock_proxy_resolver_.ClearBlockedClients(); |
892 request->WaitForResult(); | 897 request->WaitForResult(); |
893 } | 898 } |
894 | 899 |
895 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { | 900 TEST_F(ProxyResolverFactoryMojoTest, DeleteResolver) { |
896 CreateProxyResolver(); | 901 CreateProxyResolver(); |
897 proxy_resolver_mojo_.reset(); | 902 proxy_resolver_mojo_.reset(); |
898 on_delete_callback_.WaitForResult(); | 903 on_delete_callback_.WaitForResult(); |
899 } | 904 } |
900 } // namespace net | 905 } // namespace net |
OLD | NEW |