| 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 <cstddef> | 9 #include <cstddef> |
| 10 #include <limits> | 10 #include <limits> |
| (...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), | 987 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), |
| 988 NO_MORE_DATA_TO_SEND)); | 988 NO_MORE_DATA_TO_SEND)); |
| 989 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 989 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
| 990 | 990 |
| 991 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); | 991 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 992 | 992 |
| 993 EXPECT_TRUE(data.AllWriteDataConsumed()); | 993 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 994 EXPECT_TRUE(data.AllReadDataConsumed()); | 994 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 995 } | 995 } |
| 996 | 996 |
| 997 TEST_F(SpdyStreamTest, InformationalHeaders) { |
| 998 SpdySerializedFrame req( |
| 999 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1000 AddWrite(req); |
| 1001 |
| 1002 SpdyHeaderBlock informational_headers; |
| 1003 informational_headers[":status"] = "100"; |
| 1004 SpdySerializedFrame informational_response( |
| 1005 spdy_util_.ConstructSpdyResponseHeaders( |
| 1006 1, std::move(informational_headers), false)); |
| 1007 AddRead(informational_response); |
| 1008 |
| 1009 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1010 AddRead(reply); |
| 1011 |
| 1012 SpdySerializedFrame body( |
| 1013 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true)); |
| 1014 AddRead(body); |
| 1015 |
| 1016 AddReadEOF(); |
| 1017 |
| 1018 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |
| 1019 GetNumWrites()); |
| 1020 MockConnect connect_data(SYNCHRONOUS, OK); |
| 1021 data.set_connect_data(connect_data); |
| 1022 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1023 |
| 1024 AddSSLSocketData(); |
| 1025 |
| 1026 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); |
| 1027 |
| 1028 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
| 1029 SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); |
| 1030 ASSERT_TRUE(stream); |
| 1031 |
| 1032 StreamDelegateDoNothing delegate(stream); |
| 1033 stream->SetDelegate(&delegate); |
| 1034 |
| 1035 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
| 1036 |
| 1037 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 1038 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), |
| 1039 NO_MORE_DATA_TO_SEND)); |
| 1040 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
| 1041 |
| 1042 EXPECT_THAT(delegate.WaitForClose(), IsOk()); |
| 1043 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
| 1044 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), |
| 1045 delegate.TakeReceivedData()); |
| 1046 |
| 1047 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 1048 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 1049 } |
| 1050 |
| 1051 TEST_F(SpdyStreamTest, StatusMustBeNumber) { |
| 1052 SpdySerializedFrame req( |
| 1053 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1054 AddWrite(req); |
| 1055 |
| 1056 SpdyHeaderBlock incorrect_headers; |
| 1057 incorrect_headers[":status"] = "nan"; |
| 1058 SpdySerializedFrame reply(spdy_util_.ConstructSpdyResponseHeaders( |
| 1059 1, std::move(incorrect_headers), false)); |
| 1060 AddRead(reply); |
| 1061 |
| 1062 SpdySerializedFrame rst( |
| 1063 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 1064 AddWrite(rst); |
| 1065 |
| 1066 AddReadEOF(); |
| 1067 |
| 1068 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |
| 1069 GetNumWrites()); |
| 1070 MockConnect connect_data(SYNCHRONOUS, OK); |
| 1071 data.set_connect_data(connect_data); |
| 1072 session_deps_.socket_factory->AddSocketDataProvider(&data); |
| 1073 |
| 1074 AddSSLSocketData(); |
| 1075 |
| 1076 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); |
| 1077 |
| 1078 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
| 1079 SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); |
| 1080 ASSERT_TRUE(stream); |
| 1081 |
| 1082 StreamDelegateDoNothing delegate(stream); |
| 1083 stream->SetDelegate(&delegate); |
| 1084 |
| 1085 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
| 1086 |
| 1087 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 1088 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), |
| 1089 NO_MORE_DATA_TO_SEND)); |
| 1090 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
| 1091 |
| 1092 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1093 |
| 1094 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 1095 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 1096 } |
| 1097 |
| 997 // Call IncreaseSendWindowSize on a stream with a large enough delta to overflow | 1098 // Call IncreaseSendWindowSize on a stream with a large enough delta to overflow |
| 998 // an int32_t. The SpdyStream should handle that case gracefully. | 1099 // an int32_t. The SpdyStream should handle that case gracefully. |
| 999 TEST_F(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { | 1100 TEST_F(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { |
| 1000 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 1101 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 1001 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); | 1102 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); |
| 1002 AddWrite(req); | 1103 AddWrite(req); |
| 1003 | 1104 |
| 1004 AddReadPause(); | 1105 AddReadPause(); |
| 1005 | 1106 |
| 1006 // Triggered by the overflowing call to IncreaseSendWindowSize | 1107 // Triggered by the overflowing call to IncreaseSendWindowSize |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1302 EXPECT_EQ(response_len, stream->raw_received_bytes()); | 1403 EXPECT_EQ(response_len, stream->raw_received_bytes()); |
| 1303 | 1404 |
| 1304 // FIN | 1405 // FIN |
| 1305 data.Resume(); | 1406 data.Resume(); |
| 1306 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 1407 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
| 1307 } | 1408 } |
| 1308 | 1409 |
| 1309 } // namespace test | 1410 } // namespace test |
| 1310 | 1411 |
| 1311 } // namespace net | 1412 } // namespace net |
| OLD | NEW |