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

Side by Side Diff: net/spdy/spdy_proxy_client_socket_unittest.cc

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.cc ('k') | net/spdy/spdy_session.h » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/spdy/spdy_proxy_client_socket.h" 5 #include "net/spdy/spdy_proxy_client_socket.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "net/base/address_list.h" 8 #include "net/base/address_list.h"
9 #include "net/base/net_log.h" 9 #include "net/base/net_log.h"
10 #include "net/base/net_log_unittest.h" 10 #include "net/base/net_log_unittest.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 AuthCredentials(kFoo, kBar), 93 AuthCredentials(kFoo, kBar),
94 "/"); 94 "/");
95 } 95 }
96 96
97 void Run(int steps) { 97 void Run(int steps) {
98 data_->StopAfter(steps); 98 data_->StopAfter(steps);
99 data_->Run(); 99 data_->Run();
100 } 100 }
101 101
102 scoped_ptr<SpdyProxyClientSocket> sock_; 102 scoped_ptr<SpdyProxyClientSocket> sock_;
103 TestOldCompletionCallback read_callback_; 103 TestCompletionCallback read_callback_;
104 TestOldCompletionCallback write_callback_; 104 TestOldCompletionCallback read_callback_old_;
105 TestCompletionCallback write_callback_;
105 scoped_refptr<DeterministicSocketData> data_; 106 scoped_refptr<DeterministicSocketData> data_;
106 107
107 private: 108 private:
108 scoped_refptr<HttpNetworkSession> session_; 109 scoped_refptr<HttpNetworkSession> session_;
109 scoped_refptr<IOBuffer> read_buf_; 110 scoped_refptr<IOBuffer> read_buf_;
110 SpdySessionDependencies session_deps_; 111 SpdySessionDependencies session_deps_;
111 MockConnect connect_data_; 112 MockConnect connect_data_;
112 scoped_refptr<SpdySession> spdy_session_; 113 scoped_refptr<SpdySession> spdy_session_;
113 scoped_refptr<SpdyStream> spdy_stream_; 114 scoped_refptr<SpdyStream> spdy_stream_;
114 spdy::SpdyFramer framer_; 115 spdy::SpdyFramer framer_;
115 116
116 std::string user_agent_; 117 std::string user_agent_;
117 GURL url_; 118 GURL url_;
118 HostPortPair proxy_host_port_; 119 HostPortPair proxy_host_port_;
119 HostPortPair endpoint_host_port_pair_; 120 HostPortPair endpoint_host_port_pair_;
120 ProxyServer proxy_; 121 ProxyServer proxy_;
121 HostPortProxyPair endpoint_host_port_proxy_pair_; 122 HostPortProxyPair endpoint_host_port_proxy_pair_;
122 scoped_refptr<TransportSocketParams> transport_params_; 123 scoped_refptr<TransportSocketParams> transport_params_;
123 124
124 DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocketTest); 125 DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocketTest);
125 }; 126 };
126 127
127 SpdyProxyClientSocketTest::SpdyProxyClientSocketTest() 128 SpdyProxyClientSocketTest::SpdyProxyClientSocketTest()
128 : sock_(NULL), 129 : sock_(NULL),
129 read_callback_(),
130 write_callback_(),
131 data_(NULL), 130 data_(NULL),
132 session_(NULL), 131 session_(NULL),
133 read_buf_(NULL), 132 read_buf_(NULL),
134 session_deps_(), 133 session_deps_(),
135 connect_data_(false, OK), 134 connect_data_(false, OK),
136 spdy_session_(NULL), 135 spdy_session_(NULL),
137 spdy_stream_(NULL), 136 spdy_stream_(NULL),
138 framer_(), 137 framer_(),
139 user_agent_(kUserAgent), 138 user_agent_(kUserAgent),
140 url_(kUrl), 139 url_(kUrl),
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } 204 }
206 205
207 scoped_refptr<IOBufferWithSize> SpdyProxyClientSocketTest::CreateBuffer( 206 scoped_refptr<IOBufferWithSize> SpdyProxyClientSocketTest::CreateBuffer(
208 const char* data, int size) { 207 const char* data, int size) {
209 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(size)); 208 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(size));
210 memcpy(buf->data(), data, size); 209 memcpy(buf->data(), data, size);
211 return buf; 210 return buf;
212 } 211 }
213 212
214 void SpdyProxyClientSocketTest::AssertConnectSucceeds() { 213 void SpdyProxyClientSocketTest::AssertConnectSucceeds() {
215 ASSERT_EQ(ERR_IO_PENDING, sock_->Connect(&read_callback_)); 214 ASSERT_EQ(ERR_IO_PENDING, sock_->Connect(read_callback_.callback()));
216 data_->Run(); 215 data_->Run();
217 ASSERT_EQ(OK, read_callback_.WaitForResult()); 216 ASSERT_EQ(OK, read_callback_.WaitForResult());
218 } 217 }
219 218
220 void SpdyProxyClientSocketTest::AssertConnectFails(int result) { 219 void SpdyProxyClientSocketTest::AssertConnectFails(int result) {
221 ASSERT_EQ(ERR_IO_PENDING, sock_->Connect(&read_callback_)); 220 ASSERT_EQ(ERR_IO_PENDING, sock_->Connect(read_callback_.callback()));
222 data_->Run(); 221 data_->Run();
223 ASSERT_EQ(result, read_callback_.WaitForResult()); 222 ASSERT_EQ(result, read_callback_.WaitForResult());
224 } 223 }
225 224
226 void SpdyProxyClientSocketTest::AssertConnectionEstablished() { 225 void SpdyProxyClientSocketTest::AssertConnectionEstablished() {
227 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 226 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
228 ASSERT_TRUE(response != NULL); 227 ASSERT_TRUE(response != NULL);
229 ASSERT_EQ(200, response->headers->response_code()); 228 ASSERT_EQ(200, response->headers->response_code());
230 ASSERT_EQ("Connection Established", response->headers->GetStatusText()); 229 ASSERT_EQ("Connection Established", response->headers->GetStatusText());
231 } 230 }
232 231
233 void SpdyProxyClientSocketTest::AssertSyncReadEquals(const char* data, 232 void SpdyProxyClientSocketTest::AssertSyncReadEquals(const char* data,
234 int len) { 233 int len) {
235 scoped_refptr<IOBuffer> buf(new IOBuffer(len)); 234 scoped_refptr<IOBuffer> buf(new IOBuffer(len));
236 ASSERT_EQ(len, sock_->Read(buf, len, NULL)); 235 ASSERT_EQ(len, sock_->Read(buf, len, CompletionCallback()));
237 ASSERT_EQ(std::string(data, len), std::string(buf->data(), len)); 236 ASSERT_EQ(std::string(data, len), std::string(buf->data(), len));
238 ASSERT_TRUE(sock_->IsConnected()); 237 ASSERT_TRUE(sock_->IsConnected());
239 } 238 }
240 239
241 void SpdyProxyClientSocketTest::AssertAsyncReadEquals(const char* data, 240 void SpdyProxyClientSocketTest::AssertAsyncReadEquals(const char* data,
242 int len) { 241 int len) {
243 data_->StopAfter(1); 242 data_->StopAfter(1);
244 // Issue the read, which will be completed asynchronously 243 // Issue the read, which will be completed asynchronously
245 scoped_refptr<IOBuffer> buf(new IOBuffer(len)); 244 scoped_refptr<IOBuffer> buf(new IOBuffer(len));
246 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, len, &read_callback_)); 245 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, len, read_callback_.callback()));
247 EXPECT_TRUE(sock_->IsConnected()); 246 EXPECT_TRUE(sock_->IsConnected());
248 data_->Run(); 247 data_->Run();
249 248
250 EXPECT_TRUE(sock_->IsConnected()); 249 EXPECT_TRUE(sock_->IsConnected());
251 250
252 // Now the read will return 251 // Now the read will return
253 EXPECT_EQ(len, read_callback_.WaitForResult()); 252 EXPECT_EQ(len, read_callback_.WaitForResult());
254 ASSERT_EQ(std::string(data, len), std::string(buf->data(), len)); 253 ASSERT_EQ(std::string(data, len), std::string(buf->data(), len));
255 } 254 }
256 255
257 void SpdyProxyClientSocketTest::AssertReadStarts(const char* data, int len) { 256 void SpdyProxyClientSocketTest::AssertReadStarts(const char* data, int len) {
258 data_->StopAfter(1); 257 data_->StopAfter(1);
259 // Issue the read, which will be completed asynchronously 258 // Issue the read, which will be completed asynchronously
260 read_buf_ = new IOBuffer(len); 259 read_buf_ = new IOBuffer(len);
261 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(read_buf_, len, &read_callback_)); 260 ASSERT_EQ(ERR_IO_PENDING,
261 sock_->Read(read_buf_, len, read_callback_.callback()));
262 EXPECT_TRUE(sock_->IsConnected()); 262 EXPECT_TRUE(sock_->IsConnected());
263 } 263 }
264 264
265 void SpdyProxyClientSocketTest::AssertReadReturns(const char* data, int len) { 265 void SpdyProxyClientSocketTest::AssertReadReturns(const char* data, int len) {
266 EXPECT_TRUE(sock_->IsConnected()); 266 EXPECT_TRUE(sock_->IsConnected());
267 267
268 // Now the read will return 268 // Now the read will return
269 EXPECT_EQ(len, read_callback_.WaitForResult()); 269 EXPECT_EQ(len, read_callback_.WaitForResult());
270 ASSERT_EQ(std::string(data, len), std::string(read_buf_->data(), len)); 270 ASSERT_EQ(std::string(data, len), std::string(read_buf_->data(), len));
271 } 271 }
272 272
273 void SpdyProxyClientSocketTest::AssertAsyncWriteSucceeds(const char* data, 273 void SpdyProxyClientSocketTest::AssertAsyncWriteSucceeds(const char* data,
274 int len) { 274 int len) {
275 AssertWriteReturns(data, len, ERR_IO_PENDING); 275 AssertWriteReturns(data, len, ERR_IO_PENDING);
276 data_->RunFor(1); 276 data_->RunFor(1);
277 AssertWriteLength(len); 277 AssertWriteLength(len);
278 } 278 }
279 279
280 void SpdyProxyClientSocketTest::AssertWriteReturns(const char* data, int len, 280 void SpdyProxyClientSocketTest::AssertWriteReturns(const char* data, int len,
281 int rv) { 281 int rv) {
282 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(data, len)); 282 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(data, len));
283 EXPECT_EQ(rv, sock_->Write(buf, buf->size(), &write_callback_)); 283 EXPECT_EQ(rv, sock_->Write(buf, buf->size(), write_callback_.callback()));
284 } 284 }
285 285
286 void SpdyProxyClientSocketTest::AssertWriteLength(int len) { 286 void SpdyProxyClientSocketTest::AssertWriteLength(int len) {
287 EXPECT_EQ(len, write_callback_.WaitForResult()); 287 EXPECT_EQ(len, write_callback_.WaitForResult());
288 } 288 }
289 289
290 void SpdyProxyClientSocketTest::AssertAsyncWriteWithReadsSucceeds( 290 void SpdyProxyClientSocketTest::AssertAsyncWriteWithReadsSucceeds(
291 const char* data, int len, int num_reads) { 291 const char* data, int len, int num_reads) {
292 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(data, len)); 292 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(data, len));
293 293
294 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_)); 294 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(),
295 write_callback_.callback()));
295 296
296 for (int i = 0; i < num_reads; i++) { 297 for (int i = 0; i < num_reads; i++) {
297 Run(1); 298 Run(1);
298 AssertSyncReadEquals(kMsg2, kLen2); 299 AssertSyncReadEquals(kMsg2, kLen2);
299 } 300 }
300 301
301 write_callback_.WaitForResult(); 302 write_callback_.WaitForResult();
302 } 303 }
303 304
304 // Constructs a standard SPDY SYN_STREAM frame for a CONNECT request. 305 // Constructs a standard SPDY SYN_STREAM frame for a CONNECT request.
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 535 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED);
535 536
536 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 537 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
537 ASSERT_TRUE(response != NULL); 538 ASSERT_TRUE(response != NULL);
538 ASSERT_EQ(407, response->headers->response_code()); 539 ASSERT_EQ(407, response->headers->response_code());
539 ASSERT_EQ("Proxy Authentication Required", 540 ASSERT_EQ("Proxy Authentication Required",
540 response->headers->GetStatusText()); 541 response->headers->GetStatusText());
541 542
542 AddAuthToCache(); 543 AddAuthToCache();
543 544
544 ASSERT_EQ(OK, sock_->RestartWithAuth(&read_callback_)); 545 ASSERT_EQ(OK, sock_->RestartWithAuth(&read_callback_old_));
545 // A SpdyProxyClientSocket sits on a single SPDY stream which can 546 // A SpdyProxyClientSocket sits on a single SPDY stream which can
546 // only be used for a single request/response. 547 // only be used for a single request/response.
547 ASSERT_FALSE(sock_->IsConnectedAndIdle()); 548 ASSERT_FALSE(sock_->IsConnectedAndIdle());
548 } 549 }
549 550
550 TEST_F(SpdyProxyClientSocketTest, ConnectFails) { 551 TEST_F(SpdyProxyClientSocketTest, ConnectFails) {
551 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 552 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
552 MockWrite writes[] = { 553 MockWrite writes[] = {
553 CreateMockWrite(*conn, 0, false), 554 CreateMockWrite(*conn, 0, false),
554 }; 555 };
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 }; 669 };
669 670
670 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 671 Initialize(reads, arraysize(reads), writes, arraysize(writes));
671 672
672 AssertConnectSucceeds(); 673 AssertConnectSucceeds();
673 674
674 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x'); 675 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x');
675 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(), 676 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(),
676 big_data.length())); 677 big_data.length()));
677 678
678 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_)); 679 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(),
680 write_callback_.callback()));
679 data_->RunFor(3); 681 data_->RunFor(3);
680 682
681 EXPECT_EQ(buf->size(), write_callback_.WaitForResult()); 683 EXPECT_EQ(buf->size(), write_callback_.WaitForResult());
682 } 684 }
683 685
684 // ----------- Read 686 // ----------- Read
685 687
686 TEST_F(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) { 688 TEST_F(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) {
687 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 689 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
688 MockWrite writes[] = { 690 MockWrite writes[] = {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 AssertConnectSucceeds(); 870 AssertConnectSucceeds();
869 871
870 Run(1); // SpdySession consumes the next read and sends it to 872 Run(1); // SpdySession consumes the next read and sends it to
871 // sock_ to be buffered. 873 // sock_ to be buffered.
872 // The payload from the single large data frame will be read across 874 // The payload from the single large data frame will be read across
873 // two different reads. 875 // two different reads.
874 AssertSyncReadEquals(kMsg33, kLen33); 876 AssertSyncReadEquals(kMsg33, kLen33);
875 877
876 // Now attempt to do a read of more data than remains buffered 878 // Now attempt to do a read of more data than remains buffered
877 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33)); 879 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33));
878 ASSERT_EQ(kLen3, sock_->Read(buf, kLen33, &read_callback_)); 880 ASSERT_EQ(kLen3, sock_->Read(buf, kLen33, read_callback_.callback()));
879 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3)); 881 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3));
880 ASSERT_TRUE(sock_->IsConnected()); 882 ASSERT_TRUE(sock_->IsConnected());
881 } 883 }
882 884
883 TEST_F(SpdyProxyClientSocketTest, ReadAuthResponseBody) { 885 TEST_F(SpdyProxyClientSocketTest, ReadAuthResponseBody) {
884 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 886 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
885 MockWrite writes[] = { 887 MockWrite writes[] = {
886 CreateMockWrite(*conn, 0, false), 888 CreateMockWrite(*conn, 0, false),
887 }; 889 };
888 890
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 CreateMockRead(*msg2, 3, true), 923 CreateMockRead(*msg2, 3, true),
922 MockRead(true, 0, 4), // EOF 924 MockRead(true, 0, 4), // EOF
923 }; 925 };
924 926
925 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 927 Initialize(reads, arraysize(reads), writes, arraysize(writes));
926 928
927 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 929 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
928 930
929 Run(2); // SpdySession consumes the next two reads and sends then to 931 Run(2); // SpdySession consumes the next two reads and sends then to
930 // sock_ to be buffered. 932 // sock_ to be buffered.
931 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Read(NULL, 1, NULL)); 933 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
934 sock_->Read(NULL, 1, CompletionCallback()));
932 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1 + kLen2)); 935 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1 + kLen2));
933 scoped_ptr<HttpStream> stream(sock_->CreateConnectResponseStream()); 936 scoped_ptr<HttpStream> stream(sock_->CreateConnectResponseStream());
934 stream->ReadResponseBody(buf, kLen1 + kLen2, &read_callback_); 937 stream->ReadResponseBody(buf, kLen1 + kLen2, &read_callback_old_);
935 } 938 }
936 939
937 // ----------- Reads and Writes 940 // ----------- Reads and Writes
938 941
939 TEST_F(SpdyProxyClientSocketTest, AsyncReadAroundWrite) { 942 TEST_F(SpdyProxyClientSocketTest, AsyncReadAroundWrite) {
940 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 943 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
941 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 944 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
942 MockWrite writes[] = { 945 MockWrite writes[] = {
943 CreateMockWrite(*conn, 0, false), 946 CreateMockWrite(*conn, 0, false),
944 CreateMockWrite(*msg2, 3, false), 947 CreateMockWrite(*msg2, 3, false),
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 MockRead(true, 0, 2), // EOF 1026 MockRead(true, 0, 2), // EOF
1024 }; 1027 };
1025 1028
1026 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1029 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1027 1030
1028 AssertConnectSucceeds(); 1031 AssertConnectSucceeds();
1029 1032
1030 Run(1); 1033 Run(1);
1031 1034
1032 ASSERT_FALSE(sock_->IsConnected()); 1035 ASSERT_FALSE(sock_->IsConnected());
1033 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 1036 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1034 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 1037 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1035 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 1038 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1036 ASSERT_FALSE(sock_->IsConnectedAndIdle()); 1039 ASSERT_FALSE(sock_->IsConnectedAndIdle());
1037 } 1040 }
1038 1041
1039 // Read pending when socket is closed should return 0 1042 // Read pending when socket is closed should return 0
1040 TEST_F(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) { 1043 TEST_F(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) {
1041 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1044 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1042 MockWrite writes[] = { 1045 MockWrite writes[] = {
1043 CreateMockWrite(*conn, 0, false), 1046 CreateMockWrite(*conn, 0, false),
1044 }; 1047 };
1045 1048
(...skipping 26 matching lines...) Expand all
1072 CreateMockRead(*resp, 1, true), 1075 CreateMockRead(*resp, 1, true),
1073 MockRead(true, 0, 2), // EOF 1076 MockRead(true, 0, 2), // EOF
1074 }; 1077 };
1075 1078
1076 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1079 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1077 1080
1078 AssertConnectSucceeds(); 1081 AssertConnectSucceeds();
1079 1082
1080 sock_->Disconnect(); 1083 sock_->Disconnect();
1081 1084
1082 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Read(NULL, 1, NULL)); 1085 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1086 sock_->Read(NULL, 1, CompletionCallback()));
1083 } 1087 }
1084 1088
1085 // Reading buffered data from an already closed socket should return 1089 // Reading buffered data from an already closed socket should return
1086 // buffered data, then 0. 1090 // buffered data, then 0.
1087 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) { 1091 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) {
1088 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1092 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1089 MockWrite writes[] = { 1093 MockWrite writes[] = {
1090 CreateMockWrite(*conn, 0, false), 1094 CreateMockWrite(*conn, 0, false),
1091 }; 1095 };
1092 1096
1093 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1097 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1094 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1098 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1095 MockRead reads[] = { 1099 MockRead reads[] = {
1096 CreateMockRead(*resp, 1, true), 1100 CreateMockRead(*resp, 1, true),
1097 CreateMockRead(*msg1, 2, true), 1101 CreateMockRead(*msg1, 2, true),
1098 MockRead(true, 0, 3), // EOF 1102 MockRead(true, 0, 3), // EOF
1099 }; 1103 };
1100 1104
1101 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1105 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1102 1106
1103 AssertConnectSucceeds(); 1107 AssertConnectSucceeds();
1104 1108
1105 Run(2); 1109 Run(2);
1106 1110
1107 ASSERT_FALSE(sock_->IsConnected()); 1111 ASSERT_FALSE(sock_->IsConnected());
1108 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1112 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1109 ASSERT_EQ(kLen1, sock_->Read(buf, kLen1, NULL)); 1113 ASSERT_EQ(kLen1, sock_->Read(buf, kLen1, CompletionCallback()));
1110 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1)); 1114 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1));
1111 1115
1112 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 1116 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1113 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 1117 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1114 sock_->Disconnect(); 1118 sock_->Disconnect();
1115 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Read(NULL, 1, NULL)); 1119 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1120 sock_->Read(NULL, 1, CompletionCallback()));
1116 } 1121 }
1117 1122
1118 // Calling Write() on a closed socket is an error 1123 // Calling Write() on a closed socket is an error
1119 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) { 1124 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) {
1120 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1125 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1121 MockWrite writes[] = { 1126 MockWrite writes[] = {
1122 CreateMockWrite(*conn, 0, false), 1127 CreateMockWrite(*conn, 0, false),
1123 }; 1128 };
1124 1129
1125 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1130 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1126 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1131 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1127 MockRead reads[] = { 1132 MockRead reads[] = {
1128 CreateMockRead(*resp, 1, true), 1133 CreateMockRead(*resp, 1, true),
1129 MockRead(true, 0, 2), // EOF 1134 MockRead(true, 0, 2), // EOF
1130 }; 1135 };
1131 1136
1132 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1137 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1133 1138
1134 AssertConnectSucceeds(); 1139 AssertConnectSucceeds();
1135 1140
1136 Run(1); // Read EOF which will close the stream 1141 Run(1); // Read EOF which will close the stream
1137 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1142 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1138 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Write(buf, buf->size(), NULL)); 1143 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1144 sock_->Write(buf, buf->size(), CompletionCallback()));
1139 } 1145 }
1140 1146
1141 // Calling Write() on a disconnected socket is an error 1147 // Calling Write() on a disconnected socket is an error
1142 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { 1148 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) {
1143 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1149 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1144 MockWrite writes[] = { 1150 MockWrite writes[] = {
1145 CreateMockWrite(*conn, 0, false), 1151 CreateMockWrite(*conn, 0, false),
1146 }; 1152 };
1147 1153
1148 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1154 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1149 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1155 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1150 MockRead reads[] = { 1156 MockRead reads[] = {
1151 CreateMockRead(*resp, 1, true), 1157 CreateMockRead(*resp, 1, true),
1152 MockRead(true, 0, 2), // EOF 1158 MockRead(true, 0, 2), // EOF
1153 }; 1159 };
1154 1160
1155 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1161 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1156 1162
1157 AssertConnectSucceeds(); 1163 AssertConnectSucceeds();
1158 1164
1159 sock_->Disconnect(); 1165 sock_->Disconnect();
1160 1166
1161 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1167 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1162 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Write(buf, buf->size(), NULL)); 1168 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1169 sock_->Write(buf, buf->size(), CompletionCallback()));
1163 } 1170 }
1164 1171
1165 // If the socket is closed with a pending Write(), the callback 1172 // If the socket is closed with a pending Write(), the callback
1166 // should be called with ERR_CONNECTION_CLOSED. 1173 // should be called with ERR_CONNECTION_CLOSED.
1167 TEST_F(SpdyProxyClientSocketTest, WritePendingOnClose) { 1174 TEST_F(SpdyProxyClientSocketTest, WritePendingOnClose) {
1168 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1175 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1169 MockWrite writes[] = { 1176 MockWrite writes[] = {
1170 CreateMockWrite(*conn, 0, false), 1177 CreateMockWrite(*conn, 0, false),
1171 MockWrite(true, ERR_IO_PENDING, 2), 1178 MockWrite(true, ERR_IO_PENDING, 2),
1172 }; 1179 };
1173 1180
1174 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1181 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1175 MockRead reads[] = { 1182 MockRead reads[] = {
1176 CreateMockRead(*resp, 1, true), 1183 CreateMockRead(*resp, 1, true),
1177 MockRead(true, 0, 3), // EOF 1184 MockRead(true, 0, 3), // EOF
1178 }; 1185 };
1179 1186
1180 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1187 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1181 1188
1182 AssertConnectSucceeds(); 1189 AssertConnectSucceeds();
1183 1190
1184 EXPECT_TRUE(sock_->IsConnected()); 1191 EXPECT_TRUE(sock_->IsConnected());
1185 1192
1186 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1193 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1187 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_)); 1194 EXPECT_EQ(ERR_IO_PENDING,
1195 sock_->Write(buf, buf->size(), write_callback_.callback()));
1188 1196
1189 Run(1); 1197 Run(1);
1190 1198
1191 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult()); 1199 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult());
1192 } 1200 }
1193 1201
1194 // If the socket is Disconnected with a pending Write(), the callback 1202 // If the socket is Disconnected with a pending Write(), the callback
1195 // should not be called. 1203 // should not be called.
1196 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) { 1204 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) {
1197 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1205 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1198 MockWrite writes[] = { 1206 MockWrite writes[] = {
1199 CreateMockWrite(*conn, 0, false), 1207 CreateMockWrite(*conn, 0, false),
1200 MockWrite(false, 0, 2), // EOF 1208 MockWrite(false, 0, 2), // EOF
1201 }; 1209 };
1202 1210
1203 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1211 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1204 MockRead reads[] = { 1212 MockRead reads[] = {
1205 CreateMockRead(*resp, 1, true), 1213 CreateMockRead(*resp, 1, true),
1206 MockRead(true, 0, 3), // EOF 1214 MockRead(true, 0, 3), // EOF
1207 }; 1215 };
1208 1216
1209 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1217 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1210 1218
1211 AssertConnectSucceeds(); 1219 AssertConnectSucceeds();
1212 1220
1213 EXPECT_TRUE(sock_->IsConnected()); 1221 EXPECT_TRUE(sock_->IsConnected());
1214 1222
1215 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1223 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1216 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_)); 1224 EXPECT_EQ(ERR_IO_PENDING,
1225 sock_->Write(buf, buf->size(), write_callback_.callback()));
1217 1226
1218 sock_->Disconnect(); 1227 sock_->Disconnect();
1219 1228
1220 EXPECT_FALSE(sock_->IsConnected()); 1229 EXPECT_FALSE(sock_->IsConnected());
1221 EXPECT_FALSE(write_callback_.have_result()); 1230 EXPECT_FALSE(write_callback_.have_result());
1222 } 1231 }
1223 1232
1224 // If the socket is Disconnected with a pending Read(), the callback 1233 // If the socket is Disconnected with a pending Read(), the callback
1225 // should not be called. 1234 // should not be called.
1226 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) { 1235 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) {
1227 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1236 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1228 MockWrite writes[] = { 1237 MockWrite writes[] = {
1229 CreateMockWrite(*conn, 0, false), 1238 CreateMockWrite(*conn, 0, false),
1230 }; 1239 };
1231 1240
1232 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1241 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1233 MockRead reads[] = { 1242 MockRead reads[] = {
1234 CreateMockRead(*resp, 1, true), 1243 CreateMockRead(*resp, 1, true),
1235 MockRead(true, 0, 2), // EOF 1244 MockRead(true, 0, 2), // EOF
1236 }; 1245 };
1237 1246
1238 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1247 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1239 1248
1240 AssertConnectSucceeds(); 1249 AssertConnectSucceeds();
1241 1250
1242 EXPECT_TRUE(sock_->IsConnected()); 1251 EXPECT_TRUE(sock_->IsConnected());
1243 1252
1244 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1253 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1245 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, kLen1, &read_callback_)); 1254 ASSERT_EQ(ERR_IO_PENDING,
1255 sock_->Read(buf, kLen1, read_callback_.callback()));
1246 1256
1247 sock_->Disconnect(); 1257 sock_->Disconnect();
1248 1258
1249 EXPECT_FALSE(sock_->IsConnected()); 1259 EXPECT_FALSE(sock_->IsConnected());
1250 EXPECT_FALSE(read_callback_.have_result()); 1260 EXPECT_FALSE(read_callback_.have_result());
1251 } 1261 }
1252 1262
1253 // If the socket is Reset when both a read and write are pending, 1263 // If the socket is Reset when both a read and write are pending,
1254 // both should be called back. 1264 // both should be called back.
1255 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { 1265 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) {
(...skipping 10 matching lines...) Expand all
1266 CreateMockRead(*rst, 3, true), 1276 CreateMockRead(*rst, 3, true),
1267 }; 1277 };
1268 1278
1269 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1279 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1270 1280
1271 AssertConnectSucceeds(); 1281 AssertConnectSucceeds();
1272 1282
1273 EXPECT_TRUE(sock_->IsConnected()); 1283 EXPECT_TRUE(sock_->IsConnected());
1274 1284
1275 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1)); 1285 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1));
1276 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(read_buf, kLen1, &read_callback_)); 1286 ASSERT_EQ(ERR_IO_PENDING,
1287 sock_->Read(read_buf, kLen1, read_callback_.callback()));
1277 1288
1278 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1)); 1289 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1));
1279 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf, write_buf->size(), 1290 EXPECT_EQ(ERR_IO_PENDING,
1280 &write_callback_)); 1291 sock_->Write(write_buf, write_buf->size(),
1292 write_callback_.callback()));
1281 1293
1282 Run(2); 1294 Run(2);
1283 1295
1284 EXPECT_TRUE(sock_.get()); 1296 EXPECT_TRUE(sock_.get());
1285 EXPECT_TRUE(read_callback_.have_result()); 1297 EXPECT_TRUE(read_callback_.have_result());
1286 EXPECT_TRUE(write_callback_.have_result()); 1298 EXPECT_TRUE(write_callback_.have_result());
1287 } 1299 }
1288 1300
1289 // CompletionCallback that causes the SpdyProxyClientSocket to be 1301 // CompletionCallback that causes the SpdyProxyClientSocket to be
1290 // deleted when Run is invoked. 1302 // deleted when Run is invoked.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 1337
1326 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1338 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1327 1339
1328 AssertConnectSucceeds(); 1340 AssertConnectSucceeds();
1329 1341
1330 EXPECT_TRUE(sock_->IsConnected()); 1342 EXPECT_TRUE(sock_->IsConnected());
1331 1343
1332 DeleteSockCallback read_callback(&sock_); 1344 DeleteSockCallback read_callback(&sock_);
1333 1345
1334 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1)); 1346 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1));
1335 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(read_buf, kLen1, &read_callback)); 1347 ASSERT_EQ(ERR_IO_PENDING,
1348 sock_->Read(read_buf, kLen1,
1349 base::Bind(&DeleteSockCallback::Run<int>,
1350 base::Unretained(&read_callback))));
1336 1351
1337 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1)); 1352 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1));
1338 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf, write_buf->size(), 1353 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf, write_buf->size(),
1339 &write_callback_)); 1354 write_callback_.callback()));
1340 1355
1341 Run(2); 1356 Run(2);
1342 1357
1343 EXPECT_FALSE(sock_.get()); 1358 EXPECT_FALSE(sock_.get());
1344 EXPECT_TRUE(read_callback.have_result()); 1359 EXPECT_TRUE(read_callback.have_result());
1345 EXPECT_FALSE(write_callback_.have_result()); 1360 EXPECT_FALSE(write_callback_.have_result());
1346 } 1361 }
1347 1362
1348 } // namespace net 1363 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_proxy_client_socket.cc ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698