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

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

Issue 247503002: SPDY: RST_STREAM and GO_AWAY status checking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | « net/spdy/spdy_framer.cc ('k') | no next file » | 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 <algorithm> 5 #include <algorithm>
6 #include <iostream> 6 #include <iostream>
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 0xde, 0xad, 0xbe, 0xef, 1067 0xde, 0xad, 0xbe, 0xef,
1068 0xde, 0xad, 0xbe, 0xef, 1068 0xde, 0xad, 0xbe, 0xef,
1069 1069
1070 0x00, 0x00, 0x00, 0x01, // DATA on Stream #1 1070 0x00, 0x00, 0x00, 0x01, // DATA on Stream #1
1071 0x00, 0x00, 0x00, 0x04, 1071 0x00, 0x00, 0x00, 0x04,
1072 0xde, 0xad, 0xbe, 0xef, 1072 0xde, 0xad, 0xbe, 0xef,
1073 1073
1074 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #1 1074 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #1
1075 0x00, 0x00, 0x00, 0x08, 1075 0x00, 0x00, 0x00, 0x08,
1076 0x00, 0x00, 0x00, 0x01, 1076 0x00, 0x00, 0x00, 0x01,
1077 0x00, 0x00, 0x00, 0x00, 1077 0x00, 0x00, 0x00, 0x05, // RST_STREAM_CANCEL
1078 1078
1079 0x00, 0x00, 0x00, 0x03, // DATA on Stream #3 1079 0x00, 0x00, 0x00, 0x03, // DATA on Stream #3
1080 0x00, 0x00, 0x00, 0x00, 1080 0x00, 0x00, 0x00, 0x00,
1081 1081
1082 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #3 1082 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #3
1083 0x00, 0x00, 0x00, 0x08, 1083 0x00, 0x00, 0x00, 0x08,
1084 0x00, 0x00, 0x00, 0x03, 1084 0x00, 0x00, 0x00, 0x03,
1085 0x00, 0x00, 0x00, 0x00, 1085 0x00, 0x00, 0x00, 0x05, // RST_STREAM_CANCEL
1086 }; 1086 };
1087 1087
1088 const unsigned char kV3Input[] = { 1088 const unsigned char kV3Input[] = {
1089 0x80, spdy_version_ch_, 0x00, 0x01, // SYN Stream #1 1089 0x80, spdy_version_ch_, 0x00, 0x01, // SYN Stream #1
1090 0x00, 0x00, 0x00, 0x1a, 1090 0x00, 0x00, 0x00, 0x1a,
1091 0x00, 0x00, 0x00, 0x01, 1091 0x00, 0x00, 0x00, 0x01,
1092 0x00, 0x00, 0x00, 0x00, 1092 0x00, 0x00, 0x00, 0x00,
1093 0x00, 0x00, 0x00, 0x00, 1093 0x00, 0x00, 0x00, 0x00,
1094 0x00, 0x01, 0x00, 0x00, 1094 0x00, 0x01, 0x00, 0x00,
1095 0x00, 0x02, 'h', 'h', 1095 0x00, 0x02, 'h', 'h',
(...skipping 30 matching lines...) Expand all
1126 0xde, 0xad, 0xbe, 0xef, 1126 0xde, 0xad, 0xbe, 0xef,
1127 0xde, 0xad, 0xbe, 0xef, 1127 0xde, 0xad, 0xbe, 0xef,
1128 1128
1129 0x00, 0x00, 0x00, 0x01, // DATA on Stream #1 1129 0x00, 0x00, 0x00, 0x01, // DATA on Stream #1
1130 0x00, 0x00, 0x00, 0x04, 1130 0x00, 0x00, 0x00, 0x04,
1131 0xde, 0xad, 0xbe, 0xef, 1131 0xde, 0xad, 0xbe, 0xef,
1132 1132
1133 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #1 1133 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #1
1134 0x00, 0x00, 0x00, 0x08, 1134 0x00, 0x00, 0x00, 0x08,
1135 0x00, 0x00, 0x00, 0x01, 1135 0x00, 0x00, 0x00, 0x01,
1136 0x00, 0x00, 0x00, 0x00, 1136 0x00, 0x00, 0x00, 0x05, // RST_STREAM_CANCEL
1137 1137
1138 0x00, 0x00, 0x00, 0x03, // DATA on Stream #3 1138 0x00, 0x00, 0x00, 0x03, // DATA on Stream #3
1139 0x00, 0x00, 0x00, 0x00, 1139 0x00, 0x00, 0x00, 0x00,
1140 1140
1141 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #3 1141 0x80, spdy_version_ch_, 0x00, 0x03, // RST_STREAM on Stream #3
1142 0x00, 0x00, 0x00, 0x08, 1142 0x00, 0x00, 0x00, 0x08,
1143 0x00, 0x00, 0x00, 0x03, 1143 0x00, 0x00, 0x00, 0x03,
1144 0x00, 0x00, 0x00, 0x00, 1144 0x00, 0x00, 0x00, 0x05, // RST_STREAM_CANCEL
1145 }; 1145 };
1146 1146
1147 // SYN_STREAM doesn't exist in SPDY4, so instead we send 1147 // SYN_STREAM doesn't exist in SPDY4, so instead we send
1148 // HEADERS frames with PRIORITY and END_HEADERS set. 1148 // HEADERS frames with PRIORITY and END_HEADERS set.
1149 const unsigned char kV4Input[] = { 1149 const unsigned char kV4Input[] = {
1150 0x00, 0x05, 0x01, 0x0c, // HEADERS: PRIORITY | END_HEADERS 1150 0x00, 0x05, 0x01, 0x0c, // HEADERS: PRIORITY | END_HEADERS
1151 0x00, 0x00, 0x00, 0x01, // Stream 1 1151 0x00, 0x00, 0x00, 0x01, // Stream 1
1152 0x00, 0x00, 0x00, 0x00, // Priority 0 1152 0x00, 0x00, 0x00, 0x00, // Priority 0
1153 0x82, // :method: GET 1153 0x82, // :method: GET
1154 1154
(...skipping 16 matching lines...) Expand all
1171 0x00, 0x00, 0x00, 0x03, 1171 0x00, 0x00, 0x00, 0x03,
1172 0xde, 0xad, 0xbe, 0xef, 1172 0xde, 0xad, 0xbe, 0xef,
1173 0xde, 0xad, 0xbe, 0xef, 1173 0xde, 0xad, 0xbe, 0xef,
1174 1174
1175 0x00, 0x04, 0x00, 0x00, // DATA on Stream #1 1175 0x00, 0x04, 0x00, 0x00, // DATA on Stream #1
1176 0x00, 0x00, 0x00, 0x01, 1176 0x00, 0x00, 0x00, 0x01,
1177 0xde, 0xad, 0xbe, 0xef, 1177 0xde, 0xad, 0xbe, 0xef,
1178 1178
1179 0x00, 0x04, 0x03, 0x00, // RST_STREAM on Stream #1 1179 0x00, 0x04, 0x03, 0x00, // RST_STREAM on Stream #1
1180 0x00, 0x00, 0x00, 0x01, 1180 0x00, 0x00, 0x00, 0x01,
1181 0x00, 0x00, 0x00, 0x00, 1181 0x00, 0x00, 0x00, 0x08, // RST_STREAM_CANCEL
1182 1182
1183 0x00, 0x00, 0x00, 0x00, // DATA on Stream #3 1183 0x00, 0x00, 0x00, 0x00, // DATA on Stream #3
1184 0x00, 0x00, 0x00, 0x03, 1184 0x00, 0x00, 0x00, 0x03,
1185 1185
1186 0x00, 0x0f, 0x03, 0x00, // RST_STREAM on Stream #3 1186 0x00, 0x0f, 0x03, 0x00, // RST_STREAM on Stream #3
1187 0x00, 0x00, 0x00, 0x03, 1187 0x00, 0x00, 0x00, 0x03,
1188 0x00, 0x00, 0x00, 0x00, 1188 0x00, 0x00, 0x00, 0x08, // RST_STREAM_CANCEL
1189 0x52, 0x45, 0x53, 0x45, // opaque data 1189 0x52, 0x45, 0x53, 0x45, // opaque data
1190 0x54, 0x53, 0x54, 0x52, 1190 0x54, 0x53, 0x54, 0x52,
1191 0x45, 0x41, 0x4d, 1191 0x45, 0x41, 0x4d,
1192 }; 1192 };
1193 1193
1194 TestSpdyVisitor visitor(spdy_version_); 1194 TestSpdyVisitor visitor(spdy_version_);
1195 if (IsSpdy2()) { 1195 if (IsSpdy2()) {
1196 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input)); 1196 visitor.SimulateInFramer(kV2Input, sizeof(kV2Input));
1197 } else if (IsSpdy3()) { 1197 } else if (IsSpdy3()) {
1198 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input)); 1198 visitor.SimulateInFramer(kV3Input, sizeof(kV3Input));
(...skipping 3686 matching lines...) Expand 10 before | Expand all | Expand 10 after
4885 const unsigned char kV4RstStreamNumStatusCodes[] = { 4885 const unsigned char kV4RstStreamNumStatusCodes[] = {
4886 0x00, 0x04, 0x03, 0x00, 4886 0x00, 0x04, 0x03, 0x00,
4887 0x00, 0x00, 0x00, 0x01, 4887 0x00, 0x00, 0x00, 0x01,
4888 0x00, 0x00, 0x00, kRstStreamStatusTooHigh 4888 0x00, 0x00, 0x00, kRstStreamStatusTooHigh
4889 }; 4889 };
4890 4890
4891 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 4891 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
4892 SpdyFramer framer(spdy_version_); 4892 SpdyFramer framer(spdy_version_);
4893 framer.set_visitor(&visitor); 4893 framer.set_visitor(&visitor);
4894 4894
4895 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_INVALID));
4896 if (IsSpdy4()) { 4895 if (IsSpdy4()) {
4896 EXPECT_CALL(visitor, OnError(_));
4897 framer.ProcessInput(reinterpret_cast<const char*>(kV4RstStreamInvalid), 4897 framer.ProcessInput(reinterpret_cast<const char*>(kV4RstStreamInvalid),
4898 arraysize(kV4RstStreamInvalid)); 4898 arraysize(kV4RstStreamInvalid));
4899 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4900 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
4901 << SpdyFramer::ErrorCodeToString(framer.error_code());
4899 } else { 4902 } else {
4903 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_INVALID));
4900 framer.ProcessInput(reinterpret_cast<const char*>(kV3RstStreamInvalid), 4904 framer.ProcessInput(reinterpret_cast<const char*>(kV3RstStreamInvalid),
4901 arraysize(kV3RstStreamInvalid)); 4905 arraysize(kV3RstStreamInvalid));
4906 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4907 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4908 << SpdyFramer::ErrorCodeToString(framer.error_code());
4902 } 4909 }
4903 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4904 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4905 << SpdyFramer::ErrorCodeToString(framer.error_code());
4906 4910
4907 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_INVALID)); 4911
4912 framer.Reset();
4913
4908 if (IsSpdy4()) { 4914 if (IsSpdy4()) {
4915 EXPECT_CALL(visitor, OnError(_));
4909 framer.ProcessInput( 4916 framer.ProcessInput(
4910 reinterpret_cast<const char*>(kV4RstStreamNumStatusCodes), 4917 reinterpret_cast<const char*>(kV4RstStreamNumStatusCodes),
4911 arraysize(kV4RstStreamNumStatusCodes)); 4918 arraysize(kV4RstStreamNumStatusCodes));
4919 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
4920 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
4921 << SpdyFramer::ErrorCodeToString(framer.error_code());
4912 } else { 4922 } else {
4923 EXPECT_CALL(visitor, OnRstStream(1, RST_STREAM_INVALID));
4913 framer.ProcessInput( 4924 framer.ProcessInput(
4914 reinterpret_cast<const char*>(kV3RstStreamNumStatusCodes), 4925 reinterpret_cast<const char*>(kV3RstStreamNumStatusCodes),
4915 arraysize(kV3RstStreamNumStatusCodes)); 4926 arraysize(kV3RstStreamNumStatusCodes));
4927 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4928 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4929 << SpdyFramer::ErrorCodeToString(framer.error_code());
4916 } 4930 }
4917 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4918 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4919 << SpdyFramer::ErrorCodeToString(framer.error_code());
4920 } 4931 }
4921 4932
4922 // Tests handling of a GOAWAY frame with out-of-bounds stream ID. 4933 // Tests handling of a GOAWAY frame with out-of-bounds stream ID.
4923 TEST_P(SpdyFramerTest, GoAwayStreamIdBounds) { 4934 TEST_P(SpdyFramerTest, GoAwayStreamIdBounds) {
4924 const unsigned char kV2FrameData[] = { 4935 const unsigned char kV2FrameData[] = {
4925 0x80, spdy_version_ch_, 0x00, 0x07, 4936 0x80, spdy_version_ch_, 0x00, 0x07,
4926 0x00, 0x00, 0x00, 0x04, 4937 0x00, 0x00, 0x00, 0x04,
4927 0xff, 0xff, 0xff, 0xff, 4938 0xff, 0xff, 0xff, 0xff,
4928 }; 4939 };
4929 const unsigned char kV3FrameData[] = { 4940 const unsigned char kV3FrameData[] = {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4975 SpdyBlockedIR blocked_ir(0); 4986 SpdyBlockedIR blocked_ir(0);
4976 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); 4987 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir));
4977 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); 4988 framer.ProcessInput(frame->data(), framer.GetBlockedSize());
4978 4989
4979 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4990 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4980 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4991 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4981 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4992 << SpdyFramer::ErrorCodeToString(framer.error_code());
4982 } 4993 }
4983 4994
4984 } // namespace net 4995 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698