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

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

Issue 310563002: Revert 273680 "Defer SpdySession destruction to support closing ..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « trunk/src/net/spdy/spdy_proxy_client_socket.cc ('k') | trunk/src/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) 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/spdy/spdy_proxy_client_socket.h" 5 #include "net/spdy/spdy_proxy_client_socket.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "net/base/address_list.h" 10 #include "net/base/address_list.h"
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 proxy_host_port_(kProxyHost, kProxyPort), 157 proxy_host_port_(kProxyHost, kProxyPort),
158 endpoint_host_port_pair_(kOriginHost, kOriginPort), 158 endpoint_host_port_pair_(kOriginHost, kOriginPort),
159 proxy_(ProxyServer::SCHEME_HTTPS, proxy_host_port_), 159 proxy_(ProxyServer::SCHEME_HTTPS, proxy_host_port_),
160 endpoint_spdy_session_key_(endpoint_host_port_pair_, 160 endpoint_spdy_session_key_(endpoint_host_port_pair_,
161 proxy_, 161 proxy_,
162 PRIVACY_MODE_DISABLED) { 162 PRIVACY_MODE_DISABLED) {
163 session_deps_.net_log = net_log_.bound().net_log(); 163 session_deps_.net_log = net_log_.bound().net_log();
164 } 164 }
165 165
166 void SpdyProxyClientSocketTest::TearDown() { 166 void SpdyProxyClientSocketTest::TearDown() {
167 sock_.reset(NULL);
167 if (session_.get() != NULL) 168 if (session_.get() != NULL)
168 session_->spdy_session_pool()->CloseAllSessions(); 169 session_->spdy_session_pool()->CloseAllSessions();
169 170
170 // Empty the current queue. 171 // Empty the current queue.
171 base::MessageLoop::current()->RunUntilIdle(); 172 base::MessageLoop::current()->RunUntilIdle();
172 PlatformTest::TearDown(); 173 PlatformTest::TearDown();
173 } 174 }
174 175
175 void SpdyProxyClientSocketTest::Initialize(MockRead* reads, 176 void SpdyProxyClientSocketTest::Initialize(MockRead* reads,
176 size_t reads_count, 177 size_t reads_count,
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 441 Initialize(reads, arraysize(reads), writes, arraysize(writes));
441 AddAuthToCache(); 442 AddAuthToCache();
442 443
443 AssertConnectSucceeds(); 444 AssertConnectSucceeds();
444 445
445 AssertConnectionEstablished(); 446 AssertConnectionEstablished();
446 } 447 }
447 448
448 TEST_P(SpdyProxyClientSocketTest, ConnectRedirects) { 449 TEST_P(SpdyProxyClientSocketTest, ConnectRedirects) {
449 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 450 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
450 scoped_ptr<SpdyFrame> rst(
451 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
452 MockWrite writes[] = { 451 MockWrite writes[] = {
453 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 452 CreateMockWrite(*conn, 0, SYNCHRONOUS),
454 }; 453 };
455 454
456 scoped_ptr<SpdyFrame> resp(ConstructConnectRedirectReplyFrame()); 455 scoped_ptr<SpdyFrame> resp(ConstructConnectRedirectReplyFrame());
457 MockRead reads[] = { 456 MockRead reads[] = {
458 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), // EOF 457 CreateMockRead(*resp, 1, ASYNC),
458 MockRead(ASYNC, 0, 2), // EOF
459 }; 459 };
460 460
461 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 461 Initialize(reads, arraysize(reads), writes, arraysize(writes));
462 462
463 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 463 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
464 464
465 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 465 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
466 ASSERT_TRUE(response != NULL); 466 ASSERT_TRUE(response != NULL);
467 467
468 const HttpResponseHeaders* headers = response->headers.get(); 468 const HttpResponseHeaders* headers = response->headers.get();
469 ASSERT_EQ(302, headers->response_code()); 469 ASSERT_EQ(302, headers->response_code());
470 ASSERT_FALSE(headers->HasHeader("set-cookie")); 470 ASSERT_FALSE(headers->HasHeader("set-cookie"));
471 ASSERT_TRUE(headers->HasHeaderValue("content-length", "0")); 471 ASSERT_TRUE(headers->HasHeaderValue("content-length", "0"));
472 472
473 std::string location; 473 std::string location;
474 ASSERT_TRUE(headers->IsRedirect(&location)); 474 ASSERT_TRUE(headers->IsRedirect(&location));
475 ASSERT_EQ(location, kRedirectUrl); 475 ASSERT_EQ(location, kRedirectUrl);
476
477 // Let the RST_STREAM write while |rst| is in-scope.
478 base::MessageLoop::current()->RunUntilIdle();
479 } 476 }
480 477
481 TEST_P(SpdyProxyClientSocketTest, ConnectFails) { 478 TEST_P(SpdyProxyClientSocketTest, ConnectFails) {
482 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 479 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
483 MockWrite writes[] = { 480 MockWrite writes[] = {
484 CreateMockWrite(*conn, 0, SYNCHRONOUS), 481 CreateMockWrite(*conn, 0, SYNCHRONOUS),
485 }; 482 };
486 483
487 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 484 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
488 MockRead reads[] = { 485 MockRead reads[] = {
489 MockRead(ASYNC, 0, 1), // EOF 486 MockRead(ASYNC, 0, 1), // EOF
490 }; 487 };
491 488
492 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 489 Initialize(reads, arraysize(reads), writes, arraysize(writes));
493 490
494 ASSERT_FALSE(sock_->IsConnected()); 491 ASSERT_FALSE(sock_->IsConnected());
495 492
496 AssertConnectFails(ERR_CONNECTION_CLOSED); 493 AssertConnectFails(ERR_CONNECTION_CLOSED);
497 494
498 ASSERT_FALSE(sock_->IsConnected()); 495 ASSERT_FALSE(sock_->IsConnected());
499 } 496 }
500 497
501 // ----------- WasEverUsed 498 // ----------- WasEverUsed
502 499
503 TEST_P(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) { 500 TEST_P(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) {
504 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 501 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
505 scoped_ptr<SpdyFrame> rst(
506 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
507 MockWrite writes[] = { 502 MockWrite writes[] = {
508 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 503 CreateMockWrite(*conn, 0, SYNCHRONOUS),
509 }; 504 };
510 505
511 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 506 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
512 MockRead reads[] = { 507 MockRead reads[] = {
513 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), // EOF 508 CreateMockRead(*resp, 1, ASYNC),
509 MockRead(ASYNC, 0, 2), // EOF
514 }; 510 };
515 511
516 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 512 Initialize(reads, arraysize(reads), writes, arraysize(writes));
517 513
518 EXPECT_FALSE(sock_->WasEverUsed()); 514 EXPECT_FALSE(sock_->WasEverUsed());
519 AssertConnectSucceeds(); 515 AssertConnectSucceeds();
520 EXPECT_TRUE(sock_->WasEverUsed()); 516 EXPECT_TRUE(sock_->WasEverUsed());
521 sock_->Disconnect(); 517 sock_->Disconnect();
522 EXPECT_TRUE(sock_->WasEverUsed()); 518 EXPECT_TRUE(sock_->WasEverUsed());
523
524 // Let the RST_STREAM write while |rst| is in-scope.
525 base::MessageLoop::current()->RunUntilIdle();
526 } 519 }
527 520
528 // ----------- GetPeerAddress 521 // ----------- GetPeerAddress
529 522
530 TEST_P(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) { 523 TEST_P(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) {
531 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 524 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
532 MockWrite writes[] = { 525 MockWrite writes[] = {
533 CreateMockWrite(*conn, 0, SYNCHRONOUS), 526 CreateMockWrite(*conn, 0, SYNCHRONOUS),
534 }; 527 };
535 528
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 980
988 Run(1); 981 Run(1);
989 982
990 ASSERT_EQ(0, read_callback_.WaitForResult()); 983 ASSERT_EQ(0, read_callback_.WaitForResult());
991 } 984 }
992 985
993 // Reading from a disconnected socket is an error 986 // Reading from a disconnected socket is an error
994 TEST_P(SpdyProxyClientSocketTest, 987 TEST_P(SpdyProxyClientSocketTest,
995 ReadOnDisconnectSocketReturnsNotConnected) { 988 ReadOnDisconnectSocketReturnsNotConnected) {
996 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 989 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
997 scoped_ptr<SpdyFrame> rst(
998 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
999 MockWrite writes[] = { 990 MockWrite writes[] = {
1000 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 991 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1001 }; 992 };
1002 993
1003 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 994 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
1004 MockRead reads[] = { 995 MockRead reads[] = {
1005 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), // EOF 996 CreateMockRead(*resp, 1, ASYNC),
997 MockRead(ASYNC, 0, 2), // EOF
1006 }; 998 };
1007 999
1008 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1000 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1009 1001
1010 AssertConnectSucceeds(); 1002 AssertConnectSucceeds();
1011 1003
1012 sock_->Disconnect(); 1004 sock_->Disconnect();
1013 1005
1014 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, 1006 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1015 sock_->Read(NULL, 1, CompletionCallback())); 1007 sock_->Read(NULL, 1, CompletionCallback()));
1016
1017 // Let the RST_STREAM write while |rst| is in-scope.
1018 base::MessageLoop::current()->RunUntilIdle();
1019 } 1008 }
1020 1009
1021 // Reading buffered data from an already closed socket should return 1010 // Reading buffered data from an already closed socket should return
1022 // buffered data, then 0. 1011 // buffered data, then 0.
1023 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) { 1012 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) {
1024 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1013 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1025 MockWrite writes[] = { 1014 MockWrite writes[] = {
1026 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1015 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1027 }; 1016 };
1028 1017
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 1061
1073 Run(1); // Read EOF which will close the stream 1062 Run(1); // Read EOF which will close the stream
1074 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1063 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1075 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1064 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1076 sock_->Write(buf.get(), buf->size(), CompletionCallback())); 1065 sock_->Write(buf.get(), buf->size(), CompletionCallback()));
1077 } 1066 }
1078 1067
1079 // Calling Write() on a disconnected socket is an error 1068 // Calling Write() on a disconnected socket is an error
1080 TEST_P(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { 1069 TEST_P(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) {
1081 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1070 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1082 scoped_ptr<SpdyFrame> rst(
1083 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1084 MockWrite writes[] = { 1071 MockWrite writes[] = {
1085 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 1072 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1086 }; 1073 };
1087 1074
1088 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1075 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
1089 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1076 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1090 MockRead reads[] = { 1077 MockRead reads[] = {
1091 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), // EOF 1078 CreateMockRead(*resp, 1, ASYNC),
1079 MockRead(ASYNC, 0, 2), // EOF
1092 }; 1080 };
1093 1081
1094 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1082 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1095 1083
1096 AssertConnectSucceeds(); 1084 AssertConnectSucceeds();
1097 1085
1098 sock_->Disconnect(); 1086 sock_->Disconnect();
1099 1087
1100 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1088 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1101 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1089 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1102 sock_->Write(buf.get(), buf->size(), CompletionCallback())); 1090 sock_->Write(buf.get(), buf->size(), CompletionCallback()));
1103
1104 // Let the RST_STREAM write while |rst| is in-scope.
1105 base::MessageLoop::current()->RunUntilIdle();
1106 } 1091 }
1107 1092
1108 // If the socket is closed with a pending Write(), the callback 1093 // If the socket is closed with a pending Write(), the callback
1109 // should be called with ERR_CONNECTION_CLOSED. 1094 // should be called with ERR_CONNECTION_CLOSED.
1110 TEST_P(SpdyProxyClientSocketTest, WritePendingOnClose) { 1095 TEST_P(SpdyProxyClientSocketTest, WritePendingOnClose) {
1111 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1096 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1112 MockWrite writes[] = { 1097 MockWrite writes[] = {
1113 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1098 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1114 MockWrite(ASYNC, ERR_ABORTED, 2), 1099 MockWrite(ASYNC, ERR_ABORTED, 2),
1115 }; 1100 };
(...skipping 16 matching lines...) Expand all
1132 1117
1133 CloseSpdySession(ERR_ABORTED, std::string()); 1118 CloseSpdySession(ERR_ABORTED, std::string());
1134 1119
1135 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult()); 1120 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult());
1136 } 1121 }
1137 1122
1138 // If the socket is Disconnected with a pending Write(), the callback 1123 // If the socket is Disconnected with a pending Write(), the callback
1139 // should not be called. 1124 // should not be called.
1140 TEST_P(SpdyProxyClientSocketTest, DisconnectWithWritePending) { 1125 TEST_P(SpdyProxyClientSocketTest, DisconnectWithWritePending) {
1141 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1126 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1142 scoped_ptr<SpdyFrame> rst(
1143 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1144 MockWrite writes[] = { 1127 MockWrite writes[] = {
1145 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 1128 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1146 MockWrite(SYNCHRONOUS, 0, 3), // EOF 1129 MockWrite(SYNCHRONOUS, 0, 2), // EOF
1147 }; 1130 };
1148 1131
1149 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1132 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
1150 MockRead reads[] = { 1133 MockRead reads[] = {
1151 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 4), // EOF 1134 CreateMockRead(*resp, 1, ASYNC),
1135 MockRead(ASYNC, 0, 3), // EOF
1152 }; 1136 };
1153 1137
1154 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1138 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1155 1139
1156 AssertConnectSucceeds(); 1140 AssertConnectSucceeds();
1157 1141
1158 EXPECT_TRUE(sock_->IsConnected()); 1142 EXPECT_TRUE(sock_->IsConnected());
1159 1143
1160 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1144 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1161 EXPECT_EQ(ERR_IO_PENDING, 1145 EXPECT_EQ(ERR_IO_PENDING,
1162 sock_->Write(buf.get(), buf->size(), write_callback_.callback())); 1146 sock_->Write(buf.get(), buf->size(), write_callback_.callback()));
1163 1147
1164 sock_->Disconnect(); 1148 sock_->Disconnect();
1165 1149
1166 EXPECT_FALSE(sock_->IsConnected()); 1150 EXPECT_FALSE(sock_->IsConnected());
1167 EXPECT_FALSE(write_callback_.have_result()); 1151 EXPECT_FALSE(write_callback_.have_result());
1168
1169 // Let the RST_STREAM write while |rst| is in-scope.
1170 base::MessageLoop::current()->RunUntilIdle();
1171 } 1152 }
1172 1153
1173 // If the socket is Disconnected with a pending Read(), the callback 1154 // If the socket is Disconnected with a pending Read(), the callback
1174 // should not be called. 1155 // should not be called.
1175 TEST_P(SpdyProxyClientSocketTest, DisconnectWithReadPending) { 1156 TEST_P(SpdyProxyClientSocketTest, DisconnectWithReadPending) {
1176 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1157 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1177 scoped_ptr<SpdyFrame> rst(
1178 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1179 MockWrite writes[] = { 1158 MockWrite writes[] = {
1180 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 2), 1159 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1181 }; 1160 };
1182 1161
1183 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1162 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
1184 MockRead reads[] = { 1163 MockRead reads[] = {
1185 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, 0, 3), // EOF 1164 CreateMockRead(*resp, 1, ASYNC),
1165 MockRead(ASYNC, 0, 2), // EOF
1186 }; 1166 };
1187 1167
1188 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1168 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1189 1169
1190 AssertConnectSucceeds(); 1170 AssertConnectSucceeds();
1191 1171
1192 EXPECT_TRUE(sock_->IsConnected()); 1172 EXPECT_TRUE(sock_->IsConnected());
1193 1173
1194 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1174 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1195 ASSERT_EQ(ERR_IO_PENDING, 1175 ASSERT_EQ(ERR_IO_PENDING,
1196 sock_->Read(buf.get(), kLen1, read_callback_.callback())); 1176 sock_->Read(buf.get(), kLen1, read_callback_.callback()));
1197 1177
1198 sock_->Disconnect(); 1178 sock_->Disconnect();
1199 1179
1200 EXPECT_FALSE(sock_->IsConnected()); 1180 EXPECT_FALSE(sock_->IsConnected());
1201 EXPECT_FALSE(read_callback_.have_result()); 1181 EXPECT_FALSE(read_callback_.have_result());
1202
1203 // Let the RST_STREAM write while |rst| is in-scope.
1204 base::MessageLoop::current()->RunUntilIdle();
1205 } 1182 }
1206 1183
1207 // If the socket is Reset when both a read and write are pending, 1184 // If the socket is Reset when both a read and write are pending,
1208 // both should be called back. 1185 // both should be called back.
1209 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { 1186 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePending) {
1210 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1187 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1211 MockWrite writes[] = { 1188 MockWrite writes[] = {
1212 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1189 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1213 MockWrite(ASYNC, ERR_ABORTED, 3), 1190 MockWrite(ASYNC, ERR_ABORTED, 3),
1214 }; 1191 };
(...skipping 21 matching lines...) Expand all
1236 EXPECT_EQ( 1213 EXPECT_EQ(
1237 ERR_IO_PENDING, 1214 ERR_IO_PENDING,
1238 sock_->Write( 1215 sock_->Write(
1239 write_buf.get(), write_buf->size(), write_callback_.callback())); 1216 write_buf.get(), write_buf->size(), write_callback_.callback()));
1240 1217
1241 Run(2); 1218 Run(2);
1242 1219
1243 EXPECT_TRUE(sock_.get()); 1220 EXPECT_TRUE(sock_.get());
1244 EXPECT_TRUE(read_callback_.have_result()); 1221 EXPECT_TRUE(read_callback_.have_result());
1245 EXPECT_TRUE(write_callback_.have_result()); 1222 EXPECT_TRUE(write_callback_.have_result());
1246
1247 // Let the RST_STREAM write while |rst| is in-scope.
1248 base::MessageLoop::current()->RunUntilIdle();
1249 } 1223 }
1250 1224
1251 // Makes sure the proxy client socket's source gets the expected NetLog events 1225 // Makes sure the proxy client socket's source gets the expected NetLog events
1252 // and only the expected NetLog events (No SpdySession events). 1226 // and only the expected NetLog events (No SpdySession events).
1253 TEST_P(SpdyProxyClientSocketTest, NetLog) { 1227 TEST_P(SpdyProxyClientSocketTest, NetLog) {
1254 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1228 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame());
1255 scoped_ptr<SpdyFrame> rst(
1256 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1257 MockWrite writes[] = { 1229 MockWrite writes[] = {
1258 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 1230 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1259 }; 1231 };
1260 1232
1261 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1233 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame());
1262 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1234 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1263 MockRead reads[] = { 1235 MockRead reads[] = {
1264 CreateMockRead(*resp, 1, ASYNC), CreateMockRead(*msg1, 2, ASYNC), 1236 CreateMockRead(*resp, 1, ASYNC),
1265 MockRead(ASYNC, 0, 4), // EOF 1237 CreateMockRead(*msg1, 2, ASYNC),
1238 MockRead(ASYNC, 0, 3), // EOF
1266 }; 1239 };
1267 1240
1268 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1241 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1269 1242
1270 AssertConnectSucceeds(); 1243 AssertConnectSucceeds();
1271 1244
1272 Run(1); // SpdySession consumes the next read and sends it to 1245 Run(1); // SpdySession consumes the next read and sends it to
1273 // sock_ to be buffered. 1246 // sock_ to be buffered.
1274 AssertSyncReadEquals(kMsg1, kLen1); 1247 AssertSyncReadEquals(kMsg1, kLen1);
1275 1248
(...skipping 19 matching lines...) Expand all
1295 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS)); 1268 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS));
1296 EXPECT_TRUE(LogContainsEvent(entry_list, 6, 1269 EXPECT_TRUE(LogContainsEvent(entry_list, 6,
1297 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, 1270 NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS,
1298 NetLog::PHASE_NONE)); 1271 NetLog::PHASE_NONE));
1299 EXPECT_TRUE(LogContainsEndEvent(entry_list, 7, 1272 EXPECT_TRUE(LogContainsEndEvent(entry_list, 7,
1300 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS)); 1273 NetLog::TYPE_HTTP_TRANSACTION_TUNNEL_READ_HEADERS));
1301 EXPECT_TRUE(LogContainsEvent(entry_list, 8, 1274 EXPECT_TRUE(LogContainsEvent(entry_list, 8,
1302 NetLog::TYPE_SOCKET_BYTES_RECEIVED, 1275 NetLog::TYPE_SOCKET_BYTES_RECEIVED,
1303 NetLog::PHASE_NONE)); 1276 NetLog::PHASE_NONE));
1304 EXPECT_TRUE(LogContainsEndEvent(entry_list, 9, NetLog::TYPE_SOCKET_ALIVE)); 1277 EXPECT_TRUE(LogContainsEndEvent(entry_list, 9, NetLog::TYPE_SOCKET_ALIVE));
1305
1306 // Let the RST_STREAM write while |rst| is in-scope.
1307 base::MessageLoop::current()->RunUntilIdle();
1308 } 1278 }
1309 1279
1310 // CompletionCallback that causes the SpdyProxyClientSocket to be 1280 // CompletionCallback that causes the SpdyProxyClientSocket to be
1311 // deleted when Run is invoked. 1281 // deleted when Run is invoked.
1312 class DeleteSockCallback : public TestCompletionCallbackBase { 1282 class DeleteSockCallback : public TestCompletionCallbackBase {
1313 public: 1283 public:
1314 explicit DeleteSockCallback(scoped_ptr<SpdyProxyClientSocket>* sock) 1284 explicit DeleteSockCallback(scoped_ptr<SpdyProxyClientSocket>* sock)
1315 : sock_(sock), 1285 : sock_(sock),
1316 callback_(base::Bind(&DeleteSockCallback::OnComplete, 1286 callback_(base::Bind(&DeleteSockCallback::OnComplete,
1317 base::Unretained(this))) { 1287 base::Unretained(this))) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 EXPECT_EQ( 1339 EXPECT_EQ(
1370 ERR_IO_PENDING, 1340 ERR_IO_PENDING,
1371 sock_->Write( 1341 sock_->Write(
1372 write_buf.get(), write_buf->size(), write_callback_.callback())); 1342 write_buf.get(), write_buf->size(), write_callback_.callback()));
1373 1343
1374 Run(1); 1344 Run(1);
1375 1345
1376 EXPECT_FALSE(sock_.get()); 1346 EXPECT_FALSE(sock_.get());
1377 EXPECT_TRUE(read_callback.have_result()); 1347 EXPECT_TRUE(read_callback.have_result());
1378 EXPECT_FALSE(write_callback_.have_result()); 1348 EXPECT_FALSE(write_callback_.have_result());
1379
1380 // Let the RST_STREAM write while |rst| is in-scope.
1381 base::MessageLoop::current()->RunUntilIdle();
1382 } 1349 }
1383 1350
1384 } // namespace net 1351 } // namespace net
OLDNEW
« no previous file with comments | « trunk/src/net/spdy/spdy_proxy_client_socket.cc ('k') | trunk/src/net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698