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

Side by Side Diff: net/websockets/websocket_stream_test.cc

Issue 1545233002: Convert Pass()→std::move() in //net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 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
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 "net/websockets/websocket_stream.h" 5 #include "net/websockets/websocket_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 // any read/write data and so can't benefit from it anyway. The arrays are not 44 // any read/write data and so can't benefit from it anyway. The arrays are not
45 // copied. It is up to the caller to ensure they stay in scope until the test 45 // copied. It is up to the caller to ensure they stay in scope until the test
46 // ends. 46 // ends.
47 template <size_t reads_count, size_t writes_count> 47 template <size_t reads_count, size_t writes_count>
48 scoped_ptr<SequencedSocketData> BuildSocketData( 48 scoped_ptr<SequencedSocketData> BuildSocketData(
49 MockRead(&reads)[reads_count], 49 MockRead(&reads)[reads_count],
50 MockWrite(&writes)[writes_count]) { 50 MockWrite(&writes)[writes_count]) {
51 scoped_ptr<SequencedSocketData> socket_data( 51 scoped_ptr<SequencedSocketData> socket_data(
52 new SequencedSocketData(reads, reads_count, writes, writes_count)); 52 new SequencedSocketData(reads, reads_count, writes, writes_count));
53 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 53 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
54 return socket_data.Pass(); 54 return socket_data;
55 } 55 }
56 56
57 // Builder for a SequencedSocketData that expects nothing. This does not 57 // Builder for a SequencedSocketData that expects nothing. This does not
58 // set the connect data, so the calling code must do that explicitly. 58 // set the connect data, so the calling code must do that explicitly.
59 scoped_ptr<SequencedSocketData> BuildNullSocketData() { 59 scoped_ptr<SequencedSocketData> BuildNullSocketData() {
60 return make_scoped_ptr(new SequencedSocketData(NULL, 0, NULL, 0)); 60 return make_scoped_ptr(new SequencedSocketData(NULL, 0, NULL, 0));
61 } 61 }
62 62
63 class MockWeakTimer : public base::MockTimer, 63 class MockWeakTimer : public base::MockTimer,
64 public base::SupportsWeakPtr<MockWeakTimer> { 64 public base::SupportsWeakPtr<MockWeakTimer> {
(...skipping 26 matching lines...) Expand all
91 const std::string& socket_path, 91 const std::string& socket_path,
92 const std::vector<std::string>& sub_protocols, 92 const std::vector<std::string>& sub_protocols,
93 const url::Origin& origin, 93 const url::Origin& origin,
94 const std::string& extra_request_headers, 94 const std::string& extra_request_headers,
95 const std::string& response_body, 95 const std::string& response_body,
96 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) { 96 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) {
97 url_request_context_host_.SetExpectations( 97 url_request_context_host_.SetExpectations(
98 WebSocketStandardRequest(socket_path, socket_host, origin, 98 WebSocketStandardRequest(socket_path, socket_host, origin,
99 extra_request_headers), 99 extra_request_headers),
100 response_body); 100 response_body);
101 CreateAndConnectStream(socket_url, sub_protocols, origin, timer.Pass()); 101 CreateAndConnectStream(socket_url, sub_protocols, origin, std::move(timer));
102 } 102 }
103 103
104 // |extra_request_headers| and |extra_response_headers| must end in "\r\n" or 104 // |extra_request_headers| and |extra_response_headers| must end in "\r\n" or
105 // errors like "Unable to perform synchronous IO while stopped" will occur. 105 // errors like "Unable to perform synchronous IO while stopped" will occur.
106 void CreateAndConnectStandard( 106 void CreateAndConnectStandard(
107 const std::string& socket_url, 107 const std::string& socket_url,
108 const std::string& socket_host, 108 const std::string& socket_host,
109 const std::string& socket_path, 109 const std::string& socket_path,
110 const std::vector<std::string>& sub_protocols, 110 const std::vector<std::string>& sub_protocols,
111 const url::Origin& origin, 111 const url::Origin& origin,
112 const std::string& extra_request_headers, 112 const std::string& extra_request_headers,
113 const std::string& extra_response_headers, 113 const std::string& extra_response_headers,
114 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) { 114 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) {
115 CreateAndConnectCustomResponse( 115 CreateAndConnectCustomResponse(
116 socket_url, socket_host, socket_path, sub_protocols, origin, 116 socket_url, socket_host, socket_path, sub_protocols, origin,
117 extra_request_headers, 117 extra_request_headers,
118 WebSocketStandardResponse(extra_response_headers), timer.Pass()); 118 WebSocketStandardResponse(extra_response_headers), std::move(timer));
119 } 119 }
120 120
121 void CreateAndConnectRawExpectations( 121 void CreateAndConnectRawExpectations(
122 const std::string& socket_url, 122 const std::string& socket_url,
123 const std::vector<std::string>& sub_protocols, 123 const std::vector<std::string>& sub_protocols,
124 const url::Origin& origin, 124 const url::Origin& origin,
125 scoped_ptr<SequencedSocketData> socket_data, 125 scoped_ptr<SequencedSocketData> socket_data,
126 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) { 126 scoped_ptr<base::Timer> timer = scoped_ptr<base::Timer>()) {
127 AddRawExpectations(socket_data.Pass()); 127 AddRawExpectations(std::move(socket_data));
128 CreateAndConnectStream(socket_url, sub_protocols, origin, timer.Pass()); 128 CreateAndConnectStream(socket_url, sub_protocols, origin, std::move(timer));
129 } 129 }
130 130
131 // Add additional raw expectations for sockets created before the final one. 131 // Add additional raw expectations for sockets created before the final one.
132 void AddRawExpectations(scoped_ptr<SequencedSocketData> socket_data) { 132 void AddRawExpectations(scoped_ptr<SequencedSocketData> socket_data) {
133 url_request_context_host_.AddRawExpectations(socket_data.Pass()); 133 url_request_context_host_.AddRawExpectations(std::move(socket_data));
134 } 134 }
135 }; 135 };
136 136
137 // There are enough tests of the Sec-WebSocket-Extensions header that they 137 // There are enough tests of the Sec-WebSocket-Extensions header that they
138 // deserve their own test fixture. 138 // deserve their own test fixture.
139 class WebSocketStreamCreateExtensionTest : public WebSocketStreamCreateTest { 139 class WebSocketStreamCreateExtensionTest : public WebSocketStreamCreateTest {
140 public: 140 public:
141 // Performs a standard connect, with the value of the Sec-WebSocket-Extensions 141 // Performs a standard connect, with the value of the Sec-WebSocket-Extensions
142 // header in the response set to |extensions_header_value|. Runs the event 142 // header in the response set to |extensions_header_value|. Runs the event
143 // loop to allow the connect to complete. 143 // loop to allow the connect to complete.
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 EXPECT_FALSE(request_info_); 797 EXPECT_FALSE(request_info_);
798 EXPECT_FALSE(response_info_); 798 EXPECT_FALSE(response_info_);
799 } 799 }
800 800
801 // Connect failure must look just like negotiation failure. 801 // Connect failure must look just like negotiation failure.
802 TEST_F(WebSocketStreamCreateTest, ConnectionFailure) { 802 TEST_F(WebSocketStreamCreateTest, ConnectionFailure) {
803 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData()); 803 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData());
804 socket_data->set_connect_data( 804 socket_data->set_connect_data(
805 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED)); 805 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED));
806 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 806 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
807 LocalhostOrigin(), socket_data.Pass()); 807 LocalhostOrigin(), std::move(socket_data));
808 WaitUntilConnectDone(); 808 WaitUntilConnectDone();
809 EXPECT_TRUE(has_failed()); 809 EXPECT_TRUE(has_failed());
810 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_REFUSED", 810 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_REFUSED",
811 failure_message()); 811 failure_message());
812 EXPECT_FALSE(request_info_); 812 EXPECT_FALSE(request_info_);
813 EXPECT_FALSE(response_info_); 813 EXPECT_FALSE(response_info_);
814 } 814 }
815 815
816 // Connect timeout must look just like any other failure. 816 // Connect timeout must look just like any other failure.
817 TEST_F(WebSocketStreamCreateTest, ConnectionTimeout) { 817 TEST_F(WebSocketStreamCreateTest, ConnectionTimeout) {
818 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData()); 818 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData());
819 socket_data->set_connect_data( 819 socket_data->set_connect_data(
820 MockConnect(ASYNC, ERR_CONNECTION_TIMED_OUT)); 820 MockConnect(ASYNC, ERR_CONNECTION_TIMED_OUT));
821 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 821 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
822 LocalhostOrigin(), socket_data.Pass()); 822 LocalhostOrigin(), std::move(socket_data));
823 WaitUntilConnectDone(); 823 WaitUntilConnectDone();
824 EXPECT_TRUE(has_failed()); 824 EXPECT_TRUE(has_failed());
825 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT", 825 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT",
826 failure_message()); 826 failure_message());
827 } 827 }
828 828
829 // The server doesn't respond to the opening handshake. 829 // The server doesn't respond to the opening handshake.
830 TEST_F(WebSocketStreamCreateTest, HandshakeTimeout) { 830 TEST_F(WebSocketStreamCreateTest, HandshakeTimeout) {
831 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData()); 831 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData());
832 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING)); 832 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING));
833 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false)); 833 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false));
834 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr(); 834 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr();
835 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 835 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
836 LocalhostOrigin(), socket_data.Pass(), 836 LocalhostOrigin(), std::move(socket_data),
837 timer.Pass()); 837 std::move(timer));
838 EXPECT_FALSE(has_failed()); 838 EXPECT_FALSE(has_failed());
839 ASSERT_TRUE(weak_timer.get()); 839 ASSERT_TRUE(weak_timer.get());
840 EXPECT_TRUE(weak_timer->IsRunning()); 840 EXPECT_TRUE(weak_timer->IsRunning());
841 841
842 weak_timer->Fire(); 842 weak_timer->Fire();
843 WaitUntilConnectDone(); 843 WaitUntilConnectDone();
844 844
845 EXPECT_TRUE(has_failed()); 845 EXPECT_TRUE(has_failed());
846 EXPECT_EQ("WebSocket opening handshake timed out", failure_message()); 846 EXPECT_EQ("WebSocket opening handshake timed out", failure_message());
847 ASSERT_TRUE(weak_timer.get()); 847 ASSERT_TRUE(weak_timer.get());
848 EXPECT_FALSE(weak_timer->IsRunning()); 848 EXPECT_FALSE(weak_timer->IsRunning());
849 } 849 }
850 850
851 // When the connection establishes the timer should be stopped. 851 // When the connection establishes the timer should be stopped.
852 TEST_F(WebSocketStreamCreateTest, HandshakeTimerOnSuccess) { 852 TEST_F(WebSocketStreamCreateTest, HandshakeTimerOnSuccess) {
853 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false)); 853 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false));
854 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr(); 854 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr();
855 855
856 CreateAndConnectStandard("ws://localhost/", "localhost", "/", 856 CreateAndConnectStandard("ws://localhost/", "localhost", "/",
857 NoSubProtocols(), LocalhostOrigin(), "", "", 857 NoSubProtocols(), LocalhostOrigin(), "", "",
858 timer.Pass()); 858 std::move(timer));
859 ASSERT_TRUE(weak_timer); 859 ASSERT_TRUE(weak_timer);
860 EXPECT_TRUE(weak_timer->IsRunning()); 860 EXPECT_TRUE(weak_timer->IsRunning());
861 861
862 WaitUntilConnectDone(); 862 WaitUntilConnectDone();
863 EXPECT_FALSE(has_failed()); 863 EXPECT_FALSE(has_failed());
864 EXPECT_TRUE(stream_); 864 EXPECT_TRUE(stream_);
865 ASSERT_TRUE(weak_timer); 865 ASSERT_TRUE(weak_timer);
866 EXPECT_FALSE(weak_timer->IsRunning()); 866 EXPECT_FALSE(weak_timer->IsRunning());
867 } 867 }
868 868
869 // When the connection fails the timer should be stopped. 869 // When the connection fails the timer should be stopped.
870 TEST_F(WebSocketStreamCreateTest, HandshakeTimerOnFailure) { 870 TEST_F(WebSocketStreamCreateTest, HandshakeTimerOnFailure) {
871 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData()); 871 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData());
872 socket_data->set_connect_data( 872 socket_data->set_connect_data(
873 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED)); 873 MockConnect(SYNCHRONOUS, ERR_CONNECTION_REFUSED));
874 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false)); 874 scoped_ptr<MockWeakTimer> timer(new MockWeakTimer(false, false));
875 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr(); 875 base::WeakPtr<MockWeakTimer> weak_timer = timer->AsWeakPtr();
876 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 876 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
877 LocalhostOrigin(), socket_data.Pass(), 877 LocalhostOrigin(), std::move(socket_data),
878 timer.Pass()); 878 std::move(timer));
879 ASSERT_TRUE(weak_timer.get()); 879 ASSERT_TRUE(weak_timer.get());
880 EXPECT_TRUE(weak_timer->IsRunning()); 880 EXPECT_TRUE(weak_timer->IsRunning());
881 881
882 WaitUntilConnectDone(); 882 WaitUntilConnectDone();
883 EXPECT_TRUE(has_failed()); 883 EXPECT_TRUE(has_failed());
884 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_REFUSED", 884 EXPECT_EQ("Error in connection establishment: net::ERR_CONNECTION_REFUSED",
885 failure_message()); 885 failure_message());
886 ASSERT_TRUE(weak_timer.get()); 886 ASSERT_TRUE(weak_timer.get());
887 EXPECT_FALSE(weak_timer->IsRunning()); 887 EXPECT_FALSE(weak_timer->IsRunning());
888 } 888 }
889 889
890 // Cancellation during connect works. 890 // Cancellation during connect works.
891 TEST_F(WebSocketStreamCreateTest, CancellationDuringConnect) { 891 TEST_F(WebSocketStreamCreateTest, CancellationDuringConnect) {
892 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData()); 892 scoped_ptr<SequencedSocketData> socket_data(BuildNullSocketData());
893 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING)); 893 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, ERR_IO_PENDING));
894 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 894 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
895 LocalhostOrigin(), socket_data.Pass()); 895 LocalhostOrigin(), std::move(socket_data));
896 stream_request_.reset(); 896 stream_request_.reset();
897 // WaitUntilConnectDone doesn't work in this case. 897 // WaitUntilConnectDone doesn't work in this case.
898 base::RunLoop().RunUntilIdle(); 898 base::RunLoop().RunUntilIdle();
899 EXPECT_FALSE(has_failed()); 899 EXPECT_FALSE(has_failed());
900 EXPECT_FALSE(stream_); 900 EXPECT_FALSE(stream_);
901 } 901 }
902 902
903 // Cancellation during write of the request headers works. 903 // Cancellation during write of the request headers works.
904 TEST_F(WebSocketStreamCreateTest, CancellationDuringWrite) { 904 TEST_F(WebSocketStreamCreateTest, CancellationDuringWrite) {
905 // First write never completes. 905 // First write never completes.
(...skipping 19 matching lines...) Expand all
925 TEST_F(WebSocketStreamCreateTest, CancellationDuringRead) { 925 TEST_F(WebSocketStreamCreateTest, CancellationDuringRead) {
926 std::string request = 926 std::string request =
927 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), ""); 927 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), "");
928 MockWrite writes[] = {MockWrite(ASYNC, 0, request.c_str())}; 928 MockWrite writes[] = {MockWrite(ASYNC, 0, request.c_str())};
929 MockRead reads[] = { 929 MockRead reads[] = {
930 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 1), 930 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 1),
931 }; 931 };
932 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes)); 932 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes));
933 SequencedSocketData* socket_data_raw_ptr = socket_data.get(); 933 SequencedSocketData* socket_data_raw_ptr = socket_data.get();
934 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 934 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
935 LocalhostOrigin(), socket_data.Pass()); 935 LocalhostOrigin(), std::move(socket_data));
936 base::RunLoop().RunUntilIdle(); 936 base::RunLoop().RunUntilIdle();
937 EXPECT_TRUE(socket_data_raw_ptr->AllReadDataConsumed()); 937 EXPECT_TRUE(socket_data_raw_ptr->AllReadDataConsumed());
938 stream_request_.reset(); 938 stream_request_.reset();
939 // WaitUntilConnectDone doesn't work in this case. 939 // WaitUntilConnectDone doesn't work in this case.
940 base::RunLoop().RunUntilIdle(); 940 base::RunLoop().RunUntilIdle();
941 EXPECT_FALSE(has_failed()); 941 EXPECT_FALSE(has_failed());
942 EXPECT_FALSE(stream_); 942 EXPECT_FALSE(stream_);
943 EXPECT_TRUE(request_info_); 943 EXPECT_TRUE(request_info_);
944 EXPECT_FALSE(response_info_); 944 EXPECT_FALSE(response_info_);
945 } 945 }
(...skipping 20 matching lines...) Expand all
966 // log the console message "Connection closed before receiving a handshake 966 // log the console message "Connection closed before receiving a handshake
967 // response". 967 // response".
968 TEST_F(WebSocketStreamCreateTest, NoResponse) { 968 TEST_F(WebSocketStreamCreateTest, NoResponse) {
969 std::string request = 969 std::string request =
970 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), ""); 970 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), "");
971 MockWrite writes[] = {MockWrite(ASYNC, request.data(), request.size(), 0)}; 971 MockWrite writes[] = {MockWrite(ASYNC, request.data(), request.size(), 0)};
972 MockRead reads[] = {MockRead(ASYNC, 0, 1)}; 972 MockRead reads[] = {MockRead(ASYNC, 0, 1)};
973 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes)); 973 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes));
974 SequencedSocketData* socket_data_raw_ptr = socket_data.get(); 974 SequencedSocketData* socket_data_raw_ptr = socket_data.get();
975 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 975 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
976 LocalhostOrigin(), socket_data.Pass()); 976 LocalhostOrigin(), std::move(socket_data));
977 base::RunLoop().RunUntilIdle(); 977 base::RunLoop().RunUntilIdle();
978 EXPECT_TRUE(socket_data_raw_ptr->AllReadDataConsumed()); 978 EXPECT_TRUE(socket_data_raw_ptr->AllReadDataConsumed());
979 EXPECT_TRUE(has_failed()); 979 EXPECT_TRUE(has_failed());
980 EXPECT_FALSE(stream_); 980 EXPECT_FALSE(stream_);
981 EXPECT_FALSE(response_info_); 981 EXPECT_FALSE(response_info_);
982 EXPECT_EQ("Connection closed before receiving a handshake response", 982 EXPECT_EQ("Connection closed before receiving a handshake response",
983 failure_message()); 983 failure_message());
984 } 984 }
985 985
986 TEST_F(WebSocketStreamCreateTest, SelfSignedCertificateFailure) { 986 TEST_F(WebSocketStreamCreateTest, SelfSignedCertificateFailure) {
987 ssl_data_.push_back(make_scoped_ptr( 987 ssl_data_.push_back(make_scoped_ptr(
988 new SSLSocketDataProvider(ASYNC, ERR_CERT_AUTHORITY_INVALID))); 988 new SSLSocketDataProvider(ASYNC, ERR_CERT_AUTHORITY_INVALID)));
989 ssl_data_[0]->cert = 989 ssl_data_[0]->cert =
990 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der"); 990 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der");
991 ASSERT_TRUE(ssl_data_[0]->cert.get()); 991 ASSERT_TRUE(ssl_data_[0]->cert.get());
992 scoped_ptr<SequencedSocketData> raw_socket_data(BuildNullSocketData()); 992 scoped_ptr<SequencedSocketData> raw_socket_data(BuildNullSocketData());
993 CreateAndConnectRawExpectations("wss://localhost/", NoSubProtocols(), 993 CreateAndConnectRawExpectations("wss://localhost/", NoSubProtocols(),
994 LocalhostOrigin(), raw_socket_data.Pass()); 994 LocalhostOrigin(),
995 std::move(raw_socket_data));
995 // WaitUntilConnectDone doesn't work in this case. 996 // WaitUntilConnectDone doesn't work in this case.
996 base::RunLoop().RunUntilIdle(); 997 base::RunLoop().RunUntilIdle();
997 EXPECT_FALSE(has_failed()); 998 EXPECT_FALSE(has_failed());
998 ASSERT_TRUE(ssl_error_callbacks_); 999 ASSERT_TRUE(ssl_error_callbacks_);
999 ssl_error_callbacks_->CancelSSLRequest(ERR_CERT_AUTHORITY_INVALID, 1000 ssl_error_callbacks_->CancelSSLRequest(ERR_CERT_AUTHORITY_INVALID,
1000 &ssl_info_); 1001 &ssl_info_);
1001 WaitUntilConnectDone(); 1002 WaitUntilConnectDone();
1002 EXPECT_TRUE(has_failed()); 1003 EXPECT_TRUE(has_failed());
1003 } 1004 }
1004 1005
1005 TEST_F(WebSocketStreamCreateTest, SelfSignedCertificateSuccess) { 1006 TEST_F(WebSocketStreamCreateTest, SelfSignedCertificateSuccess) {
1006 scoped_ptr<SSLSocketDataProvider> ssl_data( 1007 scoped_ptr<SSLSocketDataProvider> ssl_data(
1007 new SSLSocketDataProvider(ASYNC, ERR_CERT_AUTHORITY_INVALID)); 1008 new SSLSocketDataProvider(ASYNC, ERR_CERT_AUTHORITY_INVALID));
1008 ssl_data->cert = 1009 ssl_data->cert =
1009 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der"); 1010 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der");
1010 ASSERT_TRUE(ssl_data->cert.get()); 1011 ASSERT_TRUE(ssl_data->cert.get());
1011 ssl_data_.push_back(ssl_data.Pass()); 1012 ssl_data_.push_back(std::move(ssl_data));
1012 ssl_data.reset(new SSLSocketDataProvider(ASYNC, OK)); 1013 ssl_data.reset(new SSLSocketDataProvider(ASYNC, OK));
1013 ssl_data_.push_back(ssl_data.Pass()); 1014 ssl_data_.push_back(std::move(ssl_data));
1014 url_request_context_host_.AddRawExpectations(BuildNullSocketData()); 1015 url_request_context_host_.AddRawExpectations(BuildNullSocketData());
1015 CreateAndConnectStandard("wss://localhost/", "localhost", "/", 1016 CreateAndConnectStandard("wss://localhost/", "localhost", "/",
1016 NoSubProtocols(), LocalhostOrigin(), "", ""); 1017 NoSubProtocols(), LocalhostOrigin(), "", "");
1017 // WaitUntilConnectDone doesn't work in this case. 1018 // WaitUntilConnectDone doesn't work in this case.
1018 base::RunLoop().RunUntilIdle(); 1019 base::RunLoop().RunUntilIdle();
1019 ASSERT_TRUE(ssl_error_callbacks_); 1020 ASSERT_TRUE(ssl_error_callbacks_);
1020 ssl_error_callbacks_->ContinueSSLRequest(); 1021 ssl_error_callbacks_->ContinueSSLRequest();
1021 WaitUntilConnectDone(); 1022 WaitUntilConnectDone();
1022 EXPECT_FALSE(has_failed()); 1023 EXPECT_FALSE(has_failed());
1023 EXPECT_TRUE(stream_); 1024 EXPECT_TRUE(stream_);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 std::string request = 1155 std::string request =
1155 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), ""); 1156 WebSocketStandardRequest("/", "localhost", LocalhostOrigin(), "");
1156 MockRead reads[] = { 1157 MockRead reads[] = {
1157 MockRead(SYNCHRONOUS, 1, kTruncatedResponse), 1158 MockRead(SYNCHRONOUS, 1, kTruncatedResponse),
1158 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 2), 1159 MockRead(SYNCHRONOUS, ERR_CONNECTION_CLOSED, 2),
1159 }; 1160 };
1160 MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, request.c_str())}; 1161 MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, request.c_str())};
1161 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes)); 1162 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes));
1162 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 1163 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
1163 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 1164 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
1164 LocalhostOrigin(), socket_data.Pass()); 1165 LocalhostOrigin(), std::move(socket_data));
1165 WaitUntilConnectDone(); 1166 WaitUntilConnectDone();
1166 EXPECT_TRUE(has_failed()); 1167 EXPECT_TRUE(has_failed());
1167 } 1168 }
1168 1169
1169 TEST_F(WebSocketStreamCreateTest, HandleErrTunnelConnectionFailed) { 1170 TEST_F(WebSocketStreamCreateTest, HandleErrTunnelConnectionFailed) {
1170 static const char kConnectRequest[] = 1171 static const char kConnectRequest[] =
1171 "CONNECT localhost:80 HTTP/1.1\r\n" 1172 "CONNECT localhost:80 HTTP/1.1\r\n"
1172 "Host: localhost:80\r\n" 1173 "Host: localhost:80\r\n"
1173 "Proxy-Connection: keep-alive\r\n" 1174 "Proxy-Connection: keep-alive\r\n"
1174 "\r\n"; 1175 "\r\n";
1175 1176
1176 static const char kProxyResponse[] = 1177 static const char kProxyResponse[] =
1177 "HTTP/1.1 403 Forbidden\r\n" 1178 "HTTP/1.1 403 Forbidden\r\n"
1178 "Content-Type: text/html\r\n" 1179 "Content-Type: text/html\r\n"
1179 "Content-Length: 9\r\n" 1180 "Content-Length: 9\r\n"
1180 "Connection: keep-alive\r\n" 1181 "Connection: keep-alive\r\n"
1181 "\r\n" 1182 "\r\n"
1182 "Forbidden"; 1183 "Forbidden";
1183 1184
1184 MockRead reads[] = {MockRead(SYNCHRONOUS, 1, kProxyResponse)}; 1185 MockRead reads[] = {MockRead(SYNCHRONOUS, 1, kProxyResponse)};
1185 MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, kConnectRequest)}; 1186 MockWrite writes[] = {MockWrite(SYNCHRONOUS, 0, kConnectRequest)};
1186 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes)); 1187 scoped_ptr<SequencedSocketData> socket_data(BuildSocketData(reads, writes));
1187 url_request_context_host_.SetProxyConfig("https=proxy:8000"); 1188 url_request_context_host_.SetProxyConfig("https=proxy:8000");
1188 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(), 1189 CreateAndConnectRawExpectations("ws://localhost/", NoSubProtocols(),
1189 LocalhostOrigin(), socket_data.Pass()); 1190 LocalhostOrigin(), std::move(socket_data));
1190 WaitUntilConnectDone(); 1191 WaitUntilConnectDone();
1191 EXPECT_TRUE(has_failed()); 1192 EXPECT_TRUE(has_failed());
1192 EXPECT_EQ("Establishing a tunnel via proxy server failed.", 1193 EXPECT_EQ("Establishing a tunnel via proxy server failed.",
1193 failure_message()); 1194 failure_message());
1194 } 1195 }
1195 1196
1196 } // namespace 1197 } // namespace
1197 } // namespace net 1198 } // namespace net
OLDNEW
« no previous file with comments | « net/websockets/websocket_stream_create_test_base.cc ('k') | net/websockets/websocket_test_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698