| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_proxy_client_socket.h" | 5 #include "net/spdy/spdy_proxy_client_socket.h" |
| 6 | 6 |
| 7 #include <memory> |
| 7 #include <utility> | 8 #include <utility> |
| 8 | 9 |
| 9 #include "base/bind.h" | 10 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 11 #include "base/macros.h" | 12 #include "base/macros.h" |
| 12 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
| 13 #include "base/strings/utf_string_conversions.h" | 14 #include "base/strings/utf_string_conversions.h" |
| 14 #include "net/base/address_list.h" | 15 #include "net/base/address_list.h" |
| 15 #include "net/base/test_completion_callback.h" | 16 #include "net/base/test_completion_callback.h" |
| 16 #include "net/base/winsock_init.h" | 17 #include "net/base/winsock_init.h" |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 AddAuthToCache(); | 425 AddAuthToCache(); |
| 425 | 426 |
| 426 AssertConnectSucceeds(); | 427 AssertConnectSucceeds(); |
| 427 | 428 |
| 428 AssertConnectionEstablished(); | 429 AssertConnectionEstablished(); |
| 429 } | 430 } |
| 430 | 431 |
| 431 TEST_F(SpdyProxyClientSocketTest, ConnectRedirects) { | 432 TEST_F(SpdyProxyClientSocketTest, ConnectRedirects) { |
| 432 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 433 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 433 SpdySerializedFrame rst( | 434 SpdySerializedFrame rst( |
| 434 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 435 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 435 MockWrite writes[] = { | 436 MockWrite writes[] = { |
| 436 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 437 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 437 }; | 438 }; |
| 438 | 439 |
| 439 SpdySerializedFrame resp(ConstructConnectRedirectReplyFrame()); | 440 SpdySerializedFrame resp(ConstructConnectRedirectReplyFrame()); |
| 440 MockRead reads[] = { | 441 MockRead reads[] = { |
| 441 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 442 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 442 }; | 443 }; |
| 443 | 444 |
| 444 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 445 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 AssertConnectFails(ERR_CONNECTION_CLOSED); | 480 AssertConnectFails(ERR_CONNECTION_CLOSED); |
| 480 | 481 |
| 481 ASSERT_FALSE(sock_->IsConnected()); | 482 ASSERT_FALSE(sock_->IsConnected()); |
| 482 } | 483 } |
| 483 | 484 |
| 484 // ----------- WasEverUsed | 485 // ----------- WasEverUsed |
| 485 | 486 |
| 486 TEST_F(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) { | 487 TEST_F(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) { |
| 487 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 488 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 488 SpdySerializedFrame rst( | 489 SpdySerializedFrame rst( |
| 489 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 490 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 490 MockWrite writes[] = { | 491 MockWrite writes[] = { |
| 491 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 492 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 492 }; | 493 }; |
| 493 | 494 |
| 494 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 495 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 495 MockRead reads[] = { | 496 MockRead reads[] = { |
| 496 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 497 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 497 }; | 498 }; |
| 498 | 499 |
| 499 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 500 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 | 971 |
| 971 ResumeAndRun(); | 972 ResumeAndRun(); |
| 972 | 973 |
| 973 ASSERT_EQ(0, read_callback_.WaitForResult()); | 974 ASSERT_EQ(0, read_callback_.WaitForResult()); |
| 974 } | 975 } |
| 975 | 976 |
| 976 // Reading from a disconnected socket is an error | 977 // Reading from a disconnected socket is an error |
| 977 TEST_F(SpdyProxyClientSocketTest, ReadOnDisconnectSocketReturnsNotConnected) { | 978 TEST_F(SpdyProxyClientSocketTest, ReadOnDisconnectSocketReturnsNotConnected) { |
| 978 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 979 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 979 SpdySerializedFrame rst( | 980 SpdySerializedFrame rst( |
| 980 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 981 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 981 MockWrite writes[] = { | 982 MockWrite writes[] = { |
| 982 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 983 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 983 }; | 984 }; |
| 984 | 985 |
| 985 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 986 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 986 MockRead reads[] = { | 987 MockRead reads[] = { |
| 987 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 988 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 988 }; | 989 }; |
| 989 | 990 |
| 990 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 991 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1055 ResumeAndRun(); | 1056 ResumeAndRun(); |
| 1056 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); | 1057 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); |
| 1057 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, | 1058 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, |
| 1058 sock_->Write(buf.get(), buf->size(), CompletionCallback())); | 1059 sock_->Write(buf.get(), buf->size(), CompletionCallback())); |
| 1059 } | 1060 } |
| 1060 | 1061 |
| 1061 // Calling Write() on a disconnected socket is an error. | 1062 // Calling Write() on a disconnected socket is an error. |
| 1062 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { | 1063 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { |
| 1063 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1064 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1064 SpdySerializedFrame rst( | 1065 SpdySerializedFrame rst( |
| 1065 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1066 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1066 MockWrite writes[] = { | 1067 MockWrite writes[] = { |
| 1067 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 1068 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 1068 }; | 1069 }; |
| 1069 | 1070 |
| 1070 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1071 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1071 SpdySerializedFrame msg1(ConstructBodyFrame(kMsg1, kLen1)); | 1072 SpdySerializedFrame msg1(ConstructBodyFrame(kMsg1, kLen1)); |
| 1072 MockRead reads[] = { | 1073 MockRead reads[] = { |
| 1073 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 1074 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 1074 }; | 1075 }; |
| 1075 | 1076 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1116 CloseSpdySession(ERR_ABORTED, std::string()); | 1117 CloseSpdySession(ERR_ABORTED, std::string()); |
| 1117 | 1118 |
| 1118 EXPECT_THAT(write_callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); | 1119 EXPECT_THAT(write_callback_.WaitForResult(), IsError(ERR_CONNECTION_CLOSED)); |
| 1119 } | 1120 } |
| 1120 | 1121 |
| 1121 // If the socket is Disconnected with a pending Write(), the callback | 1122 // If the socket is Disconnected with a pending Write(), the callback |
| 1122 // should not be called. | 1123 // should not be called. |
| 1123 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) { | 1124 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) { |
| 1124 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1125 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1125 SpdySerializedFrame rst( | 1126 SpdySerializedFrame rst( |
| 1126 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1127 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1127 MockWrite writes[] = { | 1128 MockWrite writes[] = { |
| 1128 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 1129 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 1129 }; | 1130 }; |
| 1130 | 1131 |
| 1131 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1132 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1132 MockRead reads[] = { | 1133 MockRead reads[] = { |
| 1133 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 1134 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 1134 }; | 1135 }; |
| 1135 | 1136 |
| 1136 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 1137 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1150 | 1151 |
| 1151 // Let the RST_STREAM write while |rst| is in-scope. | 1152 // Let the RST_STREAM write while |rst| is in-scope. |
| 1152 base::RunLoop().RunUntilIdle(); | 1153 base::RunLoop().RunUntilIdle(); |
| 1153 } | 1154 } |
| 1154 | 1155 |
| 1155 // If the socket is Disconnected with a pending Read(), the callback | 1156 // If the socket is Disconnected with a pending Read(), the callback |
| 1156 // should not be called. | 1157 // should not be called. |
| 1157 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) { | 1158 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) { |
| 1158 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1159 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1159 SpdySerializedFrame rst( | 1160 SpdySerializedFrame rst( |
| 1160 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1161 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1161 MockWrite writes[] = { | 1162 MockWrite writes[] = { |
| 1162 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), | 1163 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 3), |
| 1163 }; | 1164 }; |
| 1164 | 1165 |
| 1165 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1166 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1166 MockRead reads[] = { | 1167 MockRead reads[] = { |
| 1167 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), | 1168 CreateMockRead(resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), |
| 1168 }; | 1169 }; |
| 1169 | 1170 |
| 1170 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 1171 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1189 // If the socket is Reset when both a read and write are pending, | 1190 // If the socket is Reset when both a read and write are pending, |
| 1190 // both should be called back. | 1191 // both should be called back. |
| 1191 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { | 1192 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { |
| 1192 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1193 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1193 MockWrite writes[] = { | 1194 MockWrite writes[] = { |
| 1194 CreateMockWrite(conn, 0, SYNCHRONOUS), | 1195 CreateMockWrite(conn, 0, SYNCHRONOUS), |
| 1195 }; | 1196 }; |
| 1196 | 1197 |
| 1197 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1198 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1198 SpdySerializedFrame rst( | 1199 SpdySerializedFrame rst( |
| 1199 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1200 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1200 MockRead reads[] = { | 1201 MockRead reads[] = { |
| 1201 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), | 1202 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), |
| 1202 CreateMockRead(rst, 3, ASYNC), MockRead(ASYNC, 0, 4) // EOF | 1203 CreateMockRead(rst, 3, ASYNC), MockRead(ASYNC, 0, 4) // EOF |
| 1203 }; | 1204 }; |
| 1204 | 1205 |
| 1205 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 1206 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| 1206 | 1207 |
| 1207 AssertConnectSucceeds(); | 1208 AssertConnectSucceeds(); |
| 1208 | 1209 |
| 1209 EXPECT_TRUE(sock_->IsConnected()); | 1210 EXPECT_TRUE(sock_->IsConnected()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1226 | 1227 |
| 1227 // Let the RST_STREAM write while |rst| is in-scope. | 1228 // Let the RST_STREAM write while |rst| is in-scope. |
| 1228 base::RunLoop().RunUntilIdle(); | 1229 base::RunLoop().RunUntilIdle(); |
| 1229 } | 1230 } |
| 1230 | 1231 |
| 1231 // Makes sure the proxy client socket's source gets the expected NetLog events | 1232 // Makes sure the proxy client socket's source gets the expected NetLog events |
| 1232 // and only the expected NetLog events (No SpdySession events). | 1233 // and only the expected NetLog events (No SpdySession events). |
| 1233 TEST_F(SpdyProxyClientSocketTest, NetLog) { | 1234 TEST_F(SpdyProxyClientSocketTest, NetLog) { |
| 1234 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1235 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1235 SpdySerializedFrame rst( | 1236 SpdySerializedFrame rst( |
| 1236 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1237 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1237 MockWrite writes[] = { | 1238 MockWrite writes[] = { |
| 1238 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 5), | 1239 CreateMockWrite(conn, 0, SYNCHRONOUS), CreateMockWrite(rst, 5), |
| 1239 }; | 1240 }; |
| 1240 | 1241 |
| 1241 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1242 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1242 SpdySerializedFrame msg1(ConstructBodyFrame(kMsg1, kLen1)); | 1243 SpdySerializedFrame msg1(ConstructBodyFrame(kMsg1, kLen1)); |
| 1243 MockRead reads[] = { | 1244 MockRead reads[] = { |
| 1244 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), | 1245 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), |
| 1245 CreateMockRead(msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), | 1246 CreateMockRead(msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), |
| 1246 }; | 1247 }; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1319 // read callback causes the socket to be deleted, the write callback should | 1320 // read callback causes the socket to be deleted, the write callback should |
| 1320 // not be called. | 1321 // not be called. |
| 1321 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) { | 1322 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) { |
| 1322 SpdySerializedFrame conn(ConstructConnectRequestFrame()); | 1323 SpdySerializedFrame conn(ConstructConnectRequestFrame()); |
| 1323 MockWrite writes[] = { | 1324 MockWrite writes[] = { |
| 1324 CreateMockWrite(conn, 0, SYNCHRONOUS), | 1325 CreateMockWrite(conn, 0, SYNCHRONOUS), |
| 1325 }; | 1326 }; |
| 1326 | 1327 |
| 1327 SpdySerializedFrame resp(ConstructConnectReplyFrame()); | 1328 SpdySerializedFrame resp(ConstructConnectReplyFrame()); |
| 1328 SpdySerializedFrame rst( | 1329 SpdySerializedFrame rst( |
| 1329 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1330 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1330 MockRead reads[] = { | 1331 MockRead reads[] = { |
| 1331 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), | 1332 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), |
| 1332 CreateMockRead(rst, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), | 1333 CreateMockRead(rst, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), |
| 1333 }; | 1334 }; |
| 1334 | 1335 |
| 1335 Initialize(reads, arraysize(reads), writes, arraysize(writes)); | 1336 Initialize(reads, arraysize(reads), writes, arraysize(writes)); |
| 1336 | 1337 |
| 1337 AssertConnectSucceeds(); | 1338 AssertConnectSucceeds(); |
| 1338 | 1339 |
| 1339 EXPECT_TRUE(sock_->IsConnected()); | 1340 EXPECT_TRUE(sock_->IsConnected()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1354 | 1355 |
| 1355 EXPECT_FALSE(sock_.get()); | 1356 EXPECT_FALSE(sock_.get()); |
| 1356 EXPECT_TRUE(read_callback.have_result()); | 1357 EXPECT_TRUE(read_callback.have_result()); |
| 1357 EXPECT_FALSE(write_callback_.have_result()); | 1358 EXPECT_FALSE(write_callback_.have_result()); |
| 1358 | 1359 |
| 1359 // Let the RST_STREAM write while |rst| is in-scope. | 1360 // Let the RST_STREAM write while |rst| is in-scope. |
| 1360 base::RunLoop().RunUntilIdle(); | 1361 base::RunLoop().RunUntilIdle(); |
| 1361 } | 1362 } |
| 1362 | 1363 |
| 1363 } // namespace net | 1364 } // namespace net |
| OLD | NEW |