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

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

Issue 3417010: Integrate the SpdyProxyClientSocket into the HttpStreamRequest... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Rebasing again Created 10 years, 2 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 924 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 935 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
936 MockRead reads[] = { 936 MockRead reads[] = {
937 CreateMockRead(*resp, 1, true), 937 CreateMockRead(*resp, 1, true),
938 MockRead(true, 0, 2), // EOF 938 MockRead(true, 0, 2), // EOF
939 }; 939 };
940 940
941 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 941 Initialize(reads, arraysize(reads), writes, arraysize(writes));
942 942
943 AssertConnectSucceeds(); 943 AssertConnectSucceeds();
944 944
945 sock_->Disconnect(); 945 Run(1);
946 946
947 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL)); 947 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL));
948 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL)); 948 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL));
949 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL)); 949 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL));
950 } 950 }
951 951
952 // Read pending when socket is closed should return 0
953 TEST_F(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) {
954 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
955 MockWrite writes[] = {
956 CreateMockWrite(*conn, 0, false),
957 };
958
959 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
960 MockRead reads[] = {
961 CreateMockRead(*resp, 1, true),
962 MockRead(true, 0, 2), // EOF
963 };
964
965 Initialize(reads, arraysize(reads), writes, arraysize(writes));
966
967 AssertConnectSucceeds();
968
969 AssertReadStarts(kMsg1, kLen1);
970
971 Run(1);
972
973 ASSERT_EQ(0, read_callback_.WaitForResult());
974 }
975
976 // Reading from a disconnected socket is an error
977 TEST_F(SpdyProxyClientSocketTest, ReadOnDisconnectSocketReturnsNotConnected) {
978 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
979 MockWrite writes[] = {
980 CreateMockWrite(*conn, 0, false),
981 };
982
983 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
984 MockRead reads[] = {
985 CreateMockRead(*resp, 1, true),
986 MockRead(true, 0, 2), // EOF
987 };
988
989 Initialize(reads, arraysize(reads), writes, arraysize(writes));
990
991 AssertConnectSucceeds();
992
993 sock_->Disconnect();
994
995 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Read(NULL, 1, NULL));
996 }
997
998 // Reading buffered data from an already closed socket should return
999 // buffered data, then 0.
1000 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) {
1001 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1002 MockWrite writes[] = {
1003 CreateMockWrite(*conn, 0, false),
1004 };
1005
1006 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1007 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1008 MockRead reads[] = {
1009 CreateMockRead(*resp, 1, true),
1010 CreateMockRead(*msg1, 2, true),
1011 MockRead(true, 0, 3), // EOF
1012 };
1013
1014 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1015
1016 AssertConnectSucceeds();
1017
1018 Run(2);
1019
1020 AssertSyncReadEquals(kMsg1, kLen1);
1021 ASSERT_EQ(0, sock_->Read(NULL, 1, NULL));
1022 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL));
1023 // Verify that read *still* returns ERR_CONNECTION_CLOSED
1024 ASSERT_EQ(ERR_CONNECTION_CLOSED, sock_->Read(NULL, 1, NULL));
1025 }
1026
952 // Calling Write() on a closed socket is an error 1027 // Calling Write() on a closed socket is an error
953 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) { 1028 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) {
954 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1029 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
955 MockWrite writes[] = { 1030 MockWrite writes[] = {
956 CreateMockWrite(*conn, 0, false), 1031 CreateMockWrite(*conn, 0, false),
957 }; 1032 };
958 1033
959 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1034 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
960 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1035 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
961 MockRead reads[] = { 1036 MockRead reads[] = {
962 CreateMockRead(*resp, 1, true), 1037 CreateMockRead(*resp, 1, true),
963 MockRead(true, 0, 2), // EOF 1038 MockRead(true, 0, 2), // EOF
964 }; 1039 };
965 1040
966 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1041 Initialize(reads, arraysize(reads), writes, arraysize(writes));
967 1042
968 AssertConnectSucceeds(); 1043 AssertConnectSucceeds();
969 1044
970 Run(1); // Read EOF which will close the stream 1045 Run(1); // Read EOF which will close the stream
971 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1046 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
972 EXPECT_EQ(ERR_CONNECTION_CLOSED, sock_->Write(buf, buf->size(), NULL)); 1047 EXPECT_EQ(ERR_CONNECTION_CLOSED, sock_->Write(buf, buf->size(), NULL));
973 } 1048 }
974 1049
975 // ----------- Pending read/write when closed 1050 // Calling Write() on a disconnected socket is an error
1051 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) {
1052 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1053 MockWrite writes[] = {
1054 CreateMockWrite(*conn, 0, false),
1055 };
1056
1057 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1058 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1059 MockRead reads[] = {
1060 CreateMockRead(*resp, 1, true),
1061 MockRead(true, 0, 2), // EOF
1062 };
1063
1064 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1065
1066 AssertConnectSucceeds();
1067
1068 sock_->Disconnect();
1069
1070 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1071 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->Write(buf, buf->size(), NULL));
1072 }
976 1073
977 // If the socket is closed with a pending Write(), the callback 1074 // If the socket is closed with a pending Write(), the callback
1075 // should be called with ERR_CONNECTION_CLOSED.
1076 TEST_F(SpdyProxyClientSocketTest, WritePendingOnClose) {
1077 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1078 MockWrite writes[] = {
1079 CreateMockWrite(*conn, 0, false),
1080 MockWrite(true, ERR_IO_PENDING, 2),
1081 };
1082
1083 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1084 MockRead reads[] = {
1085 CreateMockRead(*resp, 1, true),
1086 MockRead(true, 0, 3), // EOF
1087 };
1088
1089 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1090
1091 AssertConnectSucceeds();
1092
1093 EXPECT_TRUE(sock_->IsConnected());
1094
1095 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1096 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_));
1097
1098 Run(1);
1099
1100 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult());
1101 }
1102
1103 // If the socket is Disconnected with a pending Write(), the callback
978 // should not be called. 1104 // should not be called.
979 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) { 1105 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) {
980 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1106 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
981 MockWrite writes[] = { 1107 MockWrite writes[] = {
982 CreateMockWrite(*conn, 0, false), 1108 CreateMockWrite(*conn, 0, false),
983 MockWrite(false, 0, 2), // EOF 1109 MockWrite(false, 0, 2), // EOF
984 }; 1110 };
985 1111
986 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1112 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
987 MockRead reads[] = { 1113 MockRead reads[] = {
988 CreateMockRead(*resp, 1, true), 1114 CreateMockRead(*resp, 1, true),
989 MockRead(true, 0, 3), // EOF 1115 MockRead(true, 0, 3), // EOF
990 }; 1116 };
991 1117
992 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1118 Initialize(reads, arraysize(reads), writes, arraysize(writes));
993 1119
994 AssertConnectSucceeds(); 1120 AssertConnectSucceeds();
995 1121
996 EXPECT_TRUE(sock_->IsConnected()); 1122 EXPECT_TRUE(sock_->IsConnected());
997 1123
998 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1124 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
999 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_)); 1125 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), &write_callback_));
1000 1126
1001 sock_->Disconnect(); 1127 sock_->Disconnect();
1002 1128
1003 EXPECT_FALSE(sock_->IsConnected()); 1129 EXPECT_FALSE(sock_->IsConnected());
1004 EXPECT_FALSE(write_callback_.have_result()); 1130 EXPECT_FALSE(write_callback_.have_result());
1005 } 1131 }
1006 1132
1007 // If the socket is closed with a pending Read(), the callback 1133 // If the socket is Disconnected with a pending Read(), the callback
1008 // should not be called. 1134 // should not be called.
1009 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) { 1135 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) {
1010 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1136 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1011 MockWrite writes[] = { 1137 MockWrite writes[] = {
1012 CreateMockWrite(*conn, 0, false), 1138 CreateMockWrite(*conn, 0, false),
1013 }; 1139 };
1014 1140
1015 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1141 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1016 MockRead reads[] = { 1142 MockRead reads[] = {
1017 CreateMockRead(*resp, 1, true), 1143 CreateMockRead(*resp, 1, true),
1018 MockRead(true, 0, 2), // EOF 1144 MockRead(true, 0, 2), // EOF
1019 }; 1145 };
1020 1146
1021 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1147 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1022 1148
1023 AssertConnectSucceeds(); 1149 AssertConnectSucceeds();
1024 1150
1025 EXPECT_TRUE(sock_->IsConnected()); 1151 EXPECT_TRUE(sock_->IsConnected());
1026 1152
1027 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1153 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1028 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, kLen1, &read_callback_)); 1154 ASSERT_EQ(ERR_IO_PENDING, sock_->Read(buf, kLen1, &read_callback_));
1029 1155
1030 sock_->Disconnect(); 1156 sock_->Disconnect();
1031 1157
1032 EXPECT_FALSE(sock_->IsConnected()); 1158 EXPECT_FALSE(sock_->IsConnected());
1033 EXPECT_FALSE(read_callback_.have_result()); 1159 EXPECT_FALSE(read_callback_.have_result());
1034 } 1160 }
1035 1161
1036 } // namespace net 1162 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698