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

Side by Side Diff: net/tools/quic/quic_spdy_server_stream_test.cc

Issue 1413373013: Quic streams honor RST_STREAM + NO_ERROR on the write side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@106851267
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « net/tools/quic/end_to_end_test.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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/tools/quic/quic_spdy_server_stream.h" 5 #include "net/tools/quic/quic_spdy_server_stream.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_piece.h" 8 #include "base/strings/string_piece.h"
9 #include "net/quic/quic_connection.h" 9 #include "net/quic/quic_connection.h"
10 #include "net/quic/quic_flags.h" 10 #include "net/quic/quic_flags.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 return stream->content_length_; 70 return stream->content_length_;
71 } 71 }
72 72
73 static const SpdyHeaderBlock& headers(QuicSpdyServerStream* stream) { 73 static const SpdyHeaderBlock& headers(QuicSpdyServerStream* stream) {
74 return stream->request_headers_; 74 return stream->request_headers_;
75 } 75 }
76 }; 76 };
77 77
78 namespace { 78 namespace {
79 79
80 class QuicSpdyServerStreamTest : public ::testing::Test { 80 class QuicSpdyServerStreamTest : public ::testing::TestWithParam<QuicVersion> {
81 public: 81 public:
82 QuicSpdyServerStreamTest() 82 QuicSpdyServerStreamTest()
83 : connection_( 83 : connection_(
84 new StrictMock<MockConnection>(&helper_, Perspective::IS_SERVER)), 84 new StrictMock<MockConnection>(&helper_,
85 Perspective::IS_SERVER,
86 SupportedVersions(GetParam()))),
85 session_(connection_), 87 session_(connection_),
86 body_("hello world") { 88 body_("hello world") {
87 SpdyHeaderBlock request_headers; 89 SpdyHeaderBlock request_headers;
88 request_headers[":host"] = ""; 90 request_headers[":host"] = "";
89 request_headers[":authority"] = ""; 91 request_headers[":authority"] = "";
90 request_headers[":path"] = "/"; 92 request_headers[":path"] = "/";
91 request_headers[":method"] = "POST"; 93 request_headers[":method"] = "POST";
92 request_headers[":version"] = "HTTP/1.1"; 94 request_headers[":version"] = "HTTP/1.1";
93 request_headers["content-length"] = "11"; 95 request_headers["content-length"] = "11";
94 96
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 QuicConsumedData ConsumeAllData( 139 QuicConsumedData ConsumeAllData(
138 QuicStreamId /*id*/, 140 QuicStreamId /*id*/,
139 const QuicIOVector& data, 141 const QuicIOVector& data,
140 QuicStreamOffset /*offset*/, 142 QuicStreamOffset /*offset*/,
141 bool fin, 143 bool fin,
142 FecProtection /*fec_protection_*/, 144 FecProtection /*fec_protection_*/,
143 QuicAckListenerInterface* /*ack_notifier_delegate*/) { 145 QuicAckListenerInterface* /*ack_notifier_delegate*/) {
144 return QuicConsumedData(data.total_length, fin); 146 return QuicConsumedData(data.total_length, fin);
145 } 147 }
146 148
147 TEST_F(QuicSpdyServerStreamTest, TestFraming) { 149 INSTANTIATE_TEST_CASE_P(Tests,
150 QuicSpdyServerStreamTest,
151 ::testing::ValuesIn(QuicSupportedVersions()));
152
153 TEST_P(QuicSpdyServerStreamTest, TestFraming) {
148 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 154 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
149 WillRepeatedly(Invoke(ConsumeAllData)); 155 WillRepeatedly(Invoke(ConsumeAllData));
150 stream_->OnStreamHeaders(headers_string_); 156 stream_->OnStreamHeaders(headers_string_);
151 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 157 stream_->OnStreamHeadersComplete(false, headers_string_.size());
152 stream_->OnStreamFrame( 158 stream_->OnStreamFrame(
153 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 159 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
154 EXPECT_EQ("11", StreamHeadersValue("content-length")); 160 EXPECT_EQ("11", StreamHeadersValue("content-length"));
155 EXPECT_EQ("/", StreamHeadersValue(":path")); 161 EXPECT_EQ("/", StreamHeadersValue(":path"));
156 EXPECT_EQ("POST", StreamHeadersValue(":method")); 162 EXPECT_EQ("POST", StreamHeadersValue(":method"));
157 EXPECT_EQ(body_, StreamBody()); 163 EXPECT_EQ(body_, StreamBody());
158 } 164 }
159 165
160 TEST_F(QuicSpdyServerStreamTest, TestFramingOnePacket) { 166 TEST_P(QuicSpdyServerStreamTest, TestFramingOnePacket) {
161 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 167 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
162 WillRepeatedly(Invoke(ConsumeAllData)); 168 WillRepeatedly(Invoke(ConsumeAllData));
163 169
164 stream_->OnStreamHeaders(headers_string_); 170 stream_->OnStreamHeaders(headers_string_);
165 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 171 stream_->OnStreamHeadersComplete(false, headers_string_.size());
166 stream_->OnStreamFrame( 172 stream_->OnStreamFrame(
167 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 173 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
168 EXPECT_EQ("11", StreamHeadersValue("content-length")); 174 EXPECT_EQ("11", StreamHeadersValue("content-length"));
169 EXPECT_EQ("/", StreamHeadersValue(":path")); 175 EXPECT_EQ("/", StreamHeadersValue(":path"));
170 EXPECT_EQ("POST", StreamHeadersValue(":method")); 176 EXPECT_EQ("POST", StreamHeadersValue(":method"));
171 EXPECT_EQ(body_, StreamBody()); 177 EXPECT_EQ(body_, StreamBody());
172 } 178 }
173 179
174 TEST_F(QuicSpdyServerStreamTest, TestFramingExtraData) { 180 TEST_P(QuicSpdyServerStreamTest, TestFramingExtraData) {
175 string large_body = "hello world!!!!!!"; 181 string large_body = "hello world!!!!!!";
176 182
177 // We'll automatically write out an error (headers + body) 183 // We'll automatically write out an error (headers + body)
178 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()). 184 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(AnyNumber()).
179 WillRepeatedly(Invoke(ConsumeAllData)); 185 WillRepeatedly(Invoke(ConsumeAllData));
186 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
180 187
181 stream_->OnStreamHeaders(headers_string_); 188 stream_->OnStreamHeaders(headers_string_);
182 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 189 stream_->OnStreamHeadersComplete(false, headers_string_.size());
183 stream_->OnStreamFrame( 190 stream_->OnStreamFrame(
184 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 191 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
185 // Content length is still 11. This will register as an error and we won't 192 // Content length is still 11. This will register as an error and we won't
186 // accept the bytes. 193 // accept the bytes.
187 stream_->OnStreamFrame( 194 stream_->OnStreamFrame(
188 QuicStreamFrame(stream_->id(), /*fin=*/false, body_.size(), large_body)); 195 QuicStreamFrame(stream_->id(), /*fin=*/true, body_.size(), large_body));
189 EXPECT_EQ("11", StreamHeadersValue("content-length")); 196 EXPECT_EQ("11", StreamHeadersValue("content-length"));
190 EXPECT_EQ("/", StreamHeadersValue(":path")); 197 EXPECT_EQ("/", StreamHeadersValue(":path"));
191 EXPECT_EQ("POST", StreamHeadersValue(":method")); 198 EXPECT_EQ("POST", StreamHeadersValue(":method"));
192 } 199 }
193 200
194 TEST_F(QuicSpdyServerStreamTest, TestSendResponse) { 201 TEST_P(QuicSpdyServerStreamTest, TestSendResponse) {
195 SpdyHeaderBlock* request_headers = stream_->mutable_headers(); 202 SpdyHeaderBlock* request_headers = stream_->mutable_headers();
196 (*request_headers)[":path"] = "/foo"; 203 (*request_headers)[":path"] = "/foo";
197 (*request_headers)[":authority"] = ""; 204 (*request_headers)[":authority"] = "";
198 (*request_headers)[":version"] = "HTTP/1.1"; 205 (*request_headers)[":version"] = "HTTP/1.1";
199 (*request_headers)[":method"] = "GET"; 206 (*request_headers)[":method"] = "GET";
200 207
201 response_headers_[":version"] = "HTTP/1.1"; 208 response_headers_[":version"] = "HTTP/1.1";
202 response_headers_[":status"] = "200 OK"; 209 response_headers_[":status"] = "200 OK";
203 response_headers_["content-length"] = "3"; 210 response_headers_["content-length"] = "3";
211 stream_->set_fin_received(true);
204 212
205 InSequence s; 213 InSequence s;
206 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr)); 214 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
207 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1). 215 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
208 WillOnce(Return(QuicConsumedData(3, true))); 216 WillOnce(Return(QuicConsumedData(3, true)));
209 217
210 QuicSpdyServerStreamPeer::SendResponse(stream_); 218 QuicSpdyServerStreamPeer::SendResponse(stream_);
211 if (!FLAGS_quic_implement_stop_reading) { 219 if (!FLAGS_quic_implement_stop_reading) {
212 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 220 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
213 } else { 221 } else {
214 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 222 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
215 } 223 }
216 EXPECT_TRUE(stream_->reading_stopped()); 224 EXPECT_TRUE(stream_->reading_stopped());
217 EXPECT_TRUE(stream_->write_side_closed()); 225 EXPECT_TRUE(stream_->write_side_closed());
218 } 226 }
219 227
220 TEST_F(QuicSpdyServerStreamTest, TestSendErrorResponse) { 228 TEST_P(QuicSpdyServerStreamTest, TestSendErrorResponse) {
229 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
230
221 response_headers_[":version"] = "HTTP/1.1"; 231 response_headers_[":version"] = "HTTP/1.1";
222 response_headers_[":status"] = "500 Server Error"; 232 response_headers_[":status"] = "500 Server Error";
223 response_headers_["content-length"] = "3"; 233 response_headers_["content-length"] = "3";
234 stream_->set_fin_received(true);
224 235
225 InSequence s; 236 InSequence s;
226 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr)); 237 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
227 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1). 238 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)).Times(1).
228 WillOnce(Return(QuicConsumedData(3, true))); 239 WillOnce(Return(QuicConsumedData(3, true)));
229 240
230 QuicSpdyServerStreamPeer::SendErrorResponse(stream_); 241 QuicSpdyServerStreamPeer::SendErrorResponse(stream_);
231 if (!FLAGS_quic_implement_stop_reading) { 242 if (!FLAGS_quic_implement_stop_reading) {
232 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 243 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
233 } else { 244 } else {
234 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 245 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
235 } 246 }
236 EXPECT_TRUE(stream_->reading_stopped()); 247 EXPECT_TRUE(stream_->reading_stopped());
237 EXPECT_TRUE(stream_->write_side_closed()); 248 EXPECT_TRUE(stream_->write_side_closed());
238 } 249 }
239 250
240 TEST_F(QuicSpdyServerStreamTest, InvalidMultipleContentLength) { 251 TEST_P(QuicSpdyServerStreamTest, InvalidMultipleContentLength) {
252 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
253
241 SpdyHeaderBlock request_headers; 254 SpdyHeaderBlock request_headers;
242 // \000 is a way to write the null byte when followed by a literal digit. 255 // \000 is a way to write the null byte when followed by a literal digit.
243 request_headers["content-length"] = StringPiece("11\00012", 5); 256 request_headers["content-length"] = StringPiece("11\00012", 5);
244 257
245 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 258 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
246 259
247 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 260 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
248 .Times(AnyNumber()) 261 .Times(AnyNumber())
249 .WillRepeatedly(Invoke(ConsumeAllData)); 262 .WillRepeatedly(Invoke(ConsumeAllData));
263 stream_->OnStreamHeaders(headers_string_);
264 stream_->OnStreamHeadersComplete(true, headers_string_.size());
250 265
251 stream_->OnStreamHeaders(headers_string_); 266 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
252 stream_->OnStreamHeadersComplete(false, headers_string_.size());
253
254 if (!FLAGS_quic_implement_stop_reading) {
255 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
256 } else {
257 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
258 }
259 EXPECT_TRUE(stream_->reading_stopped()); 267 EXPECT_TRUE(stream_->reading_stopped());
260 EXPECT_TRUE(stream_->write_side_closed()); 268 EXPECT_TRUE(stream_->write_side_closed());
261 } 269 }
262 270
263 TEST_F(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) { 271 TEST_P(QuicSpdyServerStreamTest, InvalidLeadingNullContentLength) {
272 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
273
264 SpdyHeaderBlock request_headers; 274 SpdyHeaderBlock request_headers;
265 // \000 is a way to write the null byte when followed by a literal digit. 275 // \000 is a way to write the null byte when followed by a literal digit.
266 request_headers["content-length"] = StringPiece("\00012", 3); 276 request_headers["content-length"] = StringPiece("\00012", 3);
267 277
268 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 278 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
269 279
270 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 280 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
271 .Times(AnyNumber()) 281 .Times(AnyNumber())
272 .WillRepeatedly(Invoke(ConsumeAllData)); 282 .WillRepeatedly(Invoke(ConsumeAllData));
283 stream_->OnStreamHeaders(headers_string_);
284 stream_->OnStreamHeadersComplete(true, headers_string_.size());
273 285
274 stream_->OnStreamHeaders(headers_string_); 286 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
275 stream_->OnStreamHeadersComplete(false, headers_string_.size());
276
277 if (!FLAGS_quic_implement_stop_reading) {
278 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
279 } else {
280 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
281 }
282 EXPECT_TRUE(stream_->reading_stopped()); 287 EXPECT_TRUE(stream_->reading_stopped());
283 EXPECT_TRUE(stream_->write_side_closed()); 288 EXPECT_TRUE(stream_->write_side_closed());
284 } 289 }
285 290
286 TEST_F(QuicSpdyServerStreamTest, ValidMultipleContentLength) { 291 TEST_P(QuicSpdyServerStreamTest, ValidMultipleContentLength) {
287 SpdyHeaderBlock request_headers; 292 SpdyHeaderBlock request_headers;
288 // \000 is a way to write the null byte when followed by a literal digit. 293 // \000 is a way to write the null byte when followed by a literal digit.
289 request_headers["content-length"] = StringPiece("11\00011", 5); 294 request_headers["content-length"] = StringPiece("11\00011", 5);
290 295
291 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 296 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
292 297
293 stream_->OnStreamHeaders(headers_string_); 298 stream_->OnStreamHeaders(headers_string_);
294 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 299 stream_->OnStreamHeadersComplete(false, headers_string_.size());
295 300
296 EXPECT_EQ(11, QuicSpdyServerStreamPeer::content_length(stream_)); 301 EXPECT_EQ(11, QuicSpdyServerStreamPeer::content_length(stream_));
297 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 302 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
298 EXPECT_FALSE(stream_->reading_stopped()); 303 EXPECT_FALSE(stream_->reading_stopped());
299 EXPECT_FALSE(stream_->write_side_closed()); 304 EXPECT_FALSE(stream_->write_side_closed());
300 } 305 }
301 306
302 TEST_F(QuicSpdyServerStreamTest, InvalidHeadersWithFin) { 307 TEST_P(QuicSpdyServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
308 response_headers_[":version"] = "HTTP/1.1";
309 response_headers_[":status"] = "500 Server Error";
310 response_headers_["content-length"] = "3";
311
312 InSequence s;
313
314 EXPECT_CALL(session_, WritevData(kHeadersStreamId, _, 0, false, _, nullptr));
315 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _))
316 .Times(1)
317 .WillOnce(Return(QuicConsumedData(3, true)));
318 if (GetParam() > QUIC_VERSION_28) {
319 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
320 } else {
321 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
322 }
323 EXPECT_FALSE(stream_->fin_received());
324 QuicSpdyServerStreamPeer::SendErrorResponse(stream_);
325 EXPECT_TRUE(stream_->reading_stopped());
326 EXPECT_TRUE(stream_->write_side_closed());
327 }
328
329 TEST_P(QuicSpdyServerStreamTest, DoNotSendQuicRstStreamNoErrorWithRstReceived) {
330 response_headers_[":version"] = "HTTP/1.1";
331 response_headers_[":status"] = "500 Server Error";
332 response_headers_["content-length"] = "3";
333
334 InSequence s;
335 EXPECT_FALSE(stream_->reading_stopped());
336
337 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
338 EXPECT_CALL(session_, SendRstStream(_, QUIC_RST_ACKNOWLEDGEMENT, _)).Times(1);
339 QuicRstStreamFrame rst_frame(stream_->id(), QUIC_STREAM_CANCELLED, 1234);
340 stream_->OnStreamReset(rst_frame);
341
342 EXPECT_TRUE(stream_->reading_stopped());
343 EXPECT_TRUE(stream_->write_side_closed());
344 }
345
346 TEST_P(QuicSpdyServerStreamTest, InvalidHeadersWithFin) {
303 char arr[] = { 347 char arr[] = {
304 0x3a, 0x68, 0x6f, 0x73, // :hos 348 0x3a, 0x68, 0x6f, 0x73, // :hos
305 0x74, 0x00, 0x00, 0x00, // t... 349 0x74, 0x00, 0x00, 0x00, // t...
306 0x00, 0x00, 0x00, 0x00, // .... 350 0x00, 0x00, 0x00, 0x00, // ....
307 0x07, 0x3a, 0x6d, 0x65, // .:me 351 0x07, 0x3a, 0x6d, 0x65, // .:me
308 0x74, 0x68, 0x6f, 0x64, // thod 352 0x74, 0x68, 0x6f, 0x64, // thod
309 0x00, 0x00, 0x00, 0x03, // .... 353 0x00, 0x00, 0x00, 0x03, // ....
310 0x47, 0x45, 0x54, 0x00, // GET. 354 0x47, 0x45, 0x54, 0x00, // GET.
311 0x00, 0x00, 0x05, 0x3a, // ...: 355 0x00, 0x00, 0x05, 0x3a, // ...:
312 0x70, 0x61, 0x74, 0x68, // path 356 0x70, 0x61, 0x74, 0x68, // path
(...skipping 13 matching lines...) Expand all
326 StringPiece data(arr, arraysize(arr)); 370 StringPiece data(arr, arraysize(arr));
327 QuicStreamFrame frame(stream_->id(), true, 0, data); 371 QuicStreamFrame frame(stream_->id(), true, 0, data);
328 // Verify that we don't crash when we get a invalid headers in stream frame. 372 // Verify that we don't crash when we get a invalid headers in stream frame.
329 stream_->OnStreamFrame(frame); 373 stream_->OnStreamFrame(frame);
330 } 374 }
331 375
332 } // namespace 376 } // namespace
333 } // namespace test 377 } // namespace test
334 } // namespace tools 378 } // namespace tools
335 } // namespace net 379 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/end_to_end_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698