| OLD | NEW | 
|     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/spdy/spdy_stream.h" |     5 #include "net/spdy/spdy_stream.h" | 
|     6  |     6  | 
|     7 #include <stdint.h> |     7 #include <stdint.h> | 
|     8  |     8  | 
|     9 #include <algorithm> |     9 #include <algorithm> | 
|    10 #include <cstddef> |    10 #include <cstddef> | 
| (...skipping 1068 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1079   EXPECT_EQ(std::string(kPostBody, kPostBodyLength), |  1079   EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 
|  1080             delegate.TakeReceivedData()); |  1080             delegate.TakeReceivedData()); | 
|  1081  |  1081  | 
|  1082   // Finish async network reads and writes. |  1082   // Finish async network reads and writes. | 
|  1083   base::RunLoop().RunUntilIdle(); |  1083   base::RunLoop().RunUntilIdle(); | 
|  1084  |  1084  | 
|  1085   EXPECT_TRUE(data.AllWriteDataConsumed()); |  1085   EXPECT_TRUE(data.AllWriteDataConsumed()); | 
|  1086   EXPECT_TRUE(data.AllReadDataConsumed()); |  1086   EXPECT_TRUE(data.AllReadDataConsumed()); | 
|  1087 } |  1087 } | 
|  1088  |  1088  | 
|  1089 TEST_F(SpdyStreamTest, StatusMustStartWithNumber) { |  1089 TEST_F(SpdyStreamTest, StatusMustBeNumber) { | 
|  1090   SpdySerializedFrame req( |  1090   SpdySerializedFrame req( | 
|  1091       spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |  1091       spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 
|  1092   AddWrite(req); |  1092   AddWrite(req); | 
|  1093  |  1093  | 
|  1094   SpdyHeaderBlock incorrect_headers; |  1094   SpdyHeaderBlock incorrect_headers; | 
|  1095   incorrect_headers[":status"] = "nan"; |  1095   incorrect_headers[":status"] = "nan"; | 
|  1096   SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( |  1096   SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( | 
|  1097       1, std::move(incorrect_headers), false)); |  1097       1, std::move(incorrect_headers), false)); | 
|  1098   AddRead(reply); |  1098   AddRead(reply); | 
|  1099  |  1099  | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
|  1129  |  1129  | 
|  1130   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); |  1130   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); | 
|  1131  |  1131  | 
|  1132   // Finish async network reads and writes. |  1132   // Finish async network reads and writes. | 
|  1133   base::RunLoop().RunUntilIdle(); |  1133   base::RunLoop().RunUntilIdle(); | 
|  1134  |  1134  | 
|  1135   EXPECT_TRUE(data.AllWriteDataConsumed()); |  1135   EXPECT_TRUE(data.AllWriteDataConsumed()); | 
|  1136   EXPECT_TRUE(data.AllReadDataConsumed()); |  1136   EXPECT_TRUE(data.AllReadDataConsumed()); | 
|  1137 } |  1137 } | 
|  1138  |  1138  | 
|  1139 TEST_F(SpdyStreamTest, StatusCanHaveExtraText) { |  1139 TEST_F(SpdyStreamTest, StatusCannotHaveExtraText) { | 
|  1140   SpdySerializedFrame req( |  1140   SpdySerializedFrame req( | 
|  1141       spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |  1141       spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 
|  1142   AddWrite(req); |  1142   AddWrite(req); | 
|  1143  |  1143  | 
|  1144   SpdyHeaderBlock headers_with_status_text; |  1144   SpdyHeaderBlock headers_with_status_text; | 
|  1145   headers_with_status_text[":status"] = |  1145   headers_with_status_text[":status"] = | 
|  1146       "200 Some random extra text describing status"; |  1146       "200 Some random extra text describing status"; | 
|  1147   SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( |  1147   SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( | 
|  1148       1, std::move(headers_with_status_text), false)); |  1148       1, std::move(headers_with_status_text), false)); | 
|  1149   AddRead(reply); |  1149   AddRead(reply); | 
|  1150  |  1150  | 
|  1151   SpdySerializedFrame body( |  1151   SpdySerializedFrame body( | 
|  1152       spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true)); |  1152       spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true)); | 
|  1153   AddRead(body); |  1153   AddRead(body); | 
|  1154  |  1154  | 
 |  1155   SpdySerializedFrame rst( | 
 |  1156       spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); | 
 |  1157   AddWrite(rst); | 
 |  1158  | 
|  1155   AddReadEOF(); |  1159   AddReadEOF(); | 
|  1156  |  1160  | 
|  1157   SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |  1161   SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), | 
|  1158                            GetNumWrites()); |  1162                            GetNumWrites()); | 
|  1159   MockConnect connect_data(SYNCHRONOUS, OK); |  1163   MockConnect connect_data(SYNCHRONOUS, OK); | 
|  1160   data.set_connect_data(connect_data); |  1164   data.set_connect_data(connect_data); | 
|  1161   session_deps_.socket_factory->AddSocketDataProvider(&data); |  1165   session_deps_.socket_factory->AddSocketDataProvider(&data); | 
|  1162  |  1166  | 
|  1163   AddSSLSocketData(); |  1167   AddSSLSocketData(); | 
|  1164  |  1168  | 
|  1165   base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); |  1169   base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); | 
|  1166  |  1170  | 
|  1167   base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |  1171   base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 
|  1168       SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); |  1172       SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); | 
|  1169   ASSERT_TRUE(stream); |  1173   ASSERT_TRUE(stream); | 
|  1170  |  1174  | 
|  1171   StreamDelegateDoNothing delegate(stream); |  1175   StreamDelegateDoNothing delegate(stream); | 
|  1172   stream->SetDelegate(&delegate); |  1176   stream->SetDelegate(&delegate); | 
|  1173  |  1177  | 
|  1174   EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |  1178   EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 
|  1175  |  1179  | 
|  1176   SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |  1180   SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 
|  1177   EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), |  1181   EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), | 
|  1178                                                        NO_MORE_DATA_TO_SEND)); |  1182                                                        NO_MORE_DATA_TO_SEND)); | 
|  1179   EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |  1183   EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 
|  1180  |  1184  | 
|  1181   EXPECT_THAT(delegate.WaitForClose(), IsOk()); |  1185   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); | 
|  1182   EXPECT_EQ("200 Some random extra text describing status", |  | 
|  1183             delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |  | 
|  1184   EXPECT_EQ(std::string(kPostBody, kPostBodyLength), |  | 
|  1185             delegate.TakeReceivedData()); |  | 
|  1186  |  1186  | 
|  1187   // Finish async network reads and writes. |  1187   // Finish async network reads and writes. | 
|  1188   base::RunLoop().RunUntilIdle(); |  1188   base::RunLoop().RunUntilIdle(); | 
 |  1189  | 
 |  1190   EXPECT_TRUE(data.AllWriteDataConsumed()); | 
 |  1191   EXPECT_TRUE(data.AllReadDataConsumed()); | 
 |  1192 } | 
 |  1193  | 
 |  1194 TEST_F(SpdyStreamTest, StatusMustBePresent) { | 
 |  1195   SpdySerializedFrame req( | 
 |  1196       spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 
 |  1197   AddWrite(req); | 
 |  1198  | 
 |  1199   SpdyHeaderBlock headers_without_status; | 
 |  1200   SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( | 
 |  1201       1, std::move(headers_without_status), false)); | 
 |  1202   AddRead(reply); | 
 |  1203  | 
 |  1204   SpdySerializedFrame body( | 
 |  1205       spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true)); | 
 |  1206   AddRead(body); | 
 |  1207  | 
 |  1208   SpdySerializedFrame rst( | 
 |  1209       spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); | 
 |  1210   AddWrite(rst); | 
 |  1211  | 
 |  1212   AddReadEOF(); | 
 |  1213  | 
 |  1214   SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), | 
 |  1215                            GetNumWrites()); | 
 |  1216   MockConnect connect_data(SYNCHRONOUS, OK); | 
 |  1217   data.set_connect_data(connect_data); | 
 |  1218   session_deps_.socket_factory->AddSocketDataProvider(&data); | 
 |  1219  | 
 |  1220   AddSSLSocketData(); | 
 |  1221  | 
 |  1222   base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); | 
 |  1223  | 
 |  1224   base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 
 |  1225       SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); | 
 |  1226   ASSERT_TRUE(stream); | 
 |  1227  | 
 |  1228   StreamDelegateDoNothing delegate(stream); | 
 |  1229   stream->SetDelegate(&delegate); | 
 |  1230  | 
 |  1231   EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 
 |  1232  | 
 |  1233   SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 
 |  1234   EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), | 
 |  1235                                                        NO_MORE_DATA_TO_SEND)); | 
 |  1236   EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 
 |  1237  | 
 |  1238   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); | 
 |  1239  | 
 |  1240   // Finish async network reads and writes. | 
 |  1241   base::RunLoop().RunUntilIdle(); | 
|  1189  |  1242  | 
|  1190   EXPECT_TRUE(data.AllWriteDataConsumed()); |  1243   EXPECT_TRUE(data.AllWriteDataConsumed()); | 
|  1191   EXPECT_TRUE(data.AllReadDataConsumed()); |  1244   EXPECT_TRUE(data.AllReadDataConsumed()); | 
|  1192 } |  1245 } | 
|  1193  |  1246  | 
|  1194 // Call IncreaseSendWindowSize on a stream with a large enough delta to overflow |  1247 // Call IncreaseSendWindowSize on a stream with a large enough delta to overflow | 
|  1195 // an int32_t. The SpdyStream should handle that case gracefully. |  1248 // an int32_t. The SpdyStream should handle that case gracefully. | 
|  1196 TEST_F(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { |  1249 TEST_F(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { | 
|  1197   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |  1250   SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 
|  1198       kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); |  1251       kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); | 
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1499   EXPECT_EQ(response_len, stream->raw_received_bytes()); |  1552   EXPECT_EQ(response_len, stream->raw_received_bytes()); | 
|  1500  |  1553  | 
|  1501   // FIN |  1554   // FIN | 
|  1502   data.Resume(); |  1555   data.Resume(); | 
|  1503   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |  1556   EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 
|  1504 } |  1557 } | 
|  1505  |  1558  | 
|  1506 }  // namespace test |  1559 }  // namespace test | 
|  1507  |  1560  | 
|  1508 }  // namespace net |  1561 }  // namespace net | 
| OLD | NEW |