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

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

Issue 1784903003: Remove FEC from send path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@114770052
Patch Set: Restore accidentally removed OnRttChanged call Created 4 years, 9 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
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_simple_server_stream.h" 5 #include "net/tools/quic/quic_simple_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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 explicit MockQuicSimpleServerSession(QuicConnection* connection, 87 explicit MockQuicSimpleServerSession(QuicConnection* connection,
88 MockQuicServerSessionVisitor* owner, 88 MockQuicServerSessionVisitor* owner,
89 QuicCryptoServerConfig* crypto_config) 89 QuicCryptoServerConfig* crypto_config)
90 : QuicSimpleServerSession(::net::test::DefaultQuicConfig(), 90 : QuicSimpleServerSession(::net::test::DefaultQuicConfig(),
91 connection, 91 connection,
92 owner, 92 owner,
93 crypto_config) { 93 crypto_config) {
94 set_max_open_incoming_streams(kMaxStreamsForTest); 94 set_max_open_incoming_streams(kMaxStreamsForTest);
95 set_max_open_outgoing_streams(kMaxStreamsForTest); 95 set_max_open_outgoing_streams(kMaxStreamsForTest);
96 ON_CALL(*this, WritevData(_, _, _, _, _, _)) 96 ON_CALL(*this, WritevData(_, _, _, _, _))
97 .WillByDefault(testing::Return(QuicConsumedData(0, false))); 97 .WillByDefault(testing::Return(QuicConsumedData(0, false)));
98 } 98 }
99 99
100 ~MockQuicSimpleServerSession() override {} 100 ~MockQuicSimpleServerSession() override {}
101 101
102 MOCK_METHOD2(OnConnectionClosed, 102 MOCK_METHOD2(OnConnectionClosed,
103 void(QuicErrorCode error, ConnectionCloseSource source)); 103 void(QuicErrorCode error, ConnectionCloseSource source));
104 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id)); 104 MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id));
105 MOCK_METHOD6(WritevData, 105 MOCK_METHOD5(WritevData,
106 QuicConsumedData(QuicStreamId id, 106 QuicConsumedData(QuicStreamId id,
107 QuicIOVector data, 107 QuicIOVector data,
108 QuicStreamOffset offset, 108 QuicStreamOffset offset,
109 bool fin, 109 bool fin,
110 FecProtection fec_protection,
111 QuicAckListenerInterface*)); 110 QuicAckListenerInterface*));
112 MOCK_METHOD2(OnStreamHeaders, 111 MOCK_METHOD2(OnStreamHeaders,
113 void(QuicStreamId stream_id, StringPiece headers_data)); 112 void(QuicStreamId stream_id, StringPiece headers_data));
114 MOCK_METHOD2(OnStreamHeadersPriority, 113 MOCK_METHOD2(OnStreamHeadersPriority,
115 void(QuicStreamId stream_id, SpdyPriority priority)); 114 void(QuicStreamId stream_id, SpdyPriority priority));
116 MOCK_METHOD3(OnStreamHeadersComplete, 115 MOCK_METHOD3(OnStreamHeadersComplete,
117 void(QuicStreamId stream_id, bool fin, size_t frame_len)); 116 void(QuicStreamId stream_id, bool fin, size_t frame_len));
118 MOCK_METHOD5(WriteHeaders, 117 MOCK_METHOD5(WriteHeaders,
119 size_t(QuicStreamId id, 118 size_t(QuicStreamId id,
120 const SpdyHeaderBlock& headers, 119 const SpdyHeaderBlock& headers,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 QuicSimpleServerStreamPeer* stream_; // Owned by session_. 201 QuicSimpleServerStreamPeer* stream_; // Owned by session_.
203 string headers_string_; 202 string headers_string_;
204 string body_; 203 string body_;
205 }; 204 };
206 205
207 INSTANTIATE_TEST_CASE_P(Tests, 206 INSTANTIATE_TEST_CASE_P(Tests,
208 QuicSimpleServerStreamTest, 207 QuicSimpleServerStreamTest,
209 ::testing::ValuesIn(QuicSupportedVersions())); 208 ::testing::ValuesIn(QuicSupportedVersions()));
210 209
211 TEST_P(QuicSimpleServerStreamTest, TestFraming) { 210 TEST_P(QuicSimpleServerStreamTest, TestFraming) {
212 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 211 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
213 .Times(AnyNumber()) 212 .Times(AnyNumber())
214 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData)); 213 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
215 stream_->OnStreamHeaders(headers_string_); 214 stream_->OnStreamHeaders(headers_string_);
216 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 215 stream_->OnStreamHeadersComplete(false, headers_string_.size());
217 stream_->OnStreamFrame( 216 stream_->OnStreamFrame(
218 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 217 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
219 EXPECT_EQ("11", StreamHeadersValue("content-length")); 218 EXPECT_EQ("11", StreamHeadersValue("content-length"));
220 EXPECT_EQ("/", StreamHeadersValue(":path")); 219 EXPECT_EQ("/", StreamHeadersValue(":path"));
221 EXPECT_EQ("POST", StreamHeadersValue(":method")); 220 EXPECT_EQ("POST", StreamHeadersValue(":method"));
222 EXPECT_EQ(body_, StreamBody()); 221 EXPECT_EQ(body_, StreamBody());
223 } 222 }
224 223
225 TEST_P(QuicSimpleServerStreamTest, TestFramingOnePacket) { 224 TEST_P(QuicSimpleServerStreamTest, TestFramingOnePacket) {
226 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 225 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
227 .Times(AnyNumber()) 226 .Times(AnyNumber())
228 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData)); 227 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
229 228
230 stream_->OnStreamHeaders(headers_string_); 229 stream_->OnStreamHeaders(headers_string_);
231 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 230 stream_->OnStreamHeadersComplete(false, headers_string_.size());
232 stream_->OnStreamFrame( 231 stream_->OnStreamFrame(
233 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 232 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
234 EXPECT_EQ("11", StreamHeadersValue("content-length")); 233 EXPECT_EQ("11", StreamHeadersValue("content-length"));
235 EXPECT_EQ("/", StreamHeadersValue(":path")); 234 EXPECT_EQ("/", StreamHeadersValue(":path"));
236 EXPECT_EQ("POST", StreamHeadersValue(":method")); 235 EXPECT_EQ("POST", StreamHeadersValue(":method"));
237 EXPECT_EQ(body_, StreamBody()); 236 EXPECT_EQ(body_, StreamBody());
238 } 237 }
239 238
240 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorInStopReading) { 239 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorInStopReading) {
241 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 240 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
242 .Times(AnyNumber()) 241 .Times(AnyNumber())
243 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData)); 242 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
244 243
245 EXPECT_FALSE(stream_->fin_received()); 244 EXPECT_FALSE(stream_->fin_received());
246 EXPECT_FALSE(stream_->rst_received()); 245 EXPECT_FALSE(stream_->rst_received());
247 246
248 stream_->set_fin_sent(true); 247 stream_->set_fin_sent(true);
249 stream_->CloseWriteSide(); 248 stream_->CloseWriteSide();
250 249
251 if (GetParam() > QUIC_VERSION_28) { 250 if (GetParam() > QUIC_VERSION_28) {
252 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1); 251 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
253 } else { 252 } else {
254 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 253 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
255 } 254 }
256 stream_->StopReading(); 255 stream_->StopReading();
257 } 256 }
258 257
259 TEST_P(QuicSimpleServerStreamTest, TestFramingExtraData) { 258 TEST_P(QuicSimpleServerStreamTest, TestFramingExtraData) {
260 string large_body = "hello world!!!!!!"; 259 string large_body = "hello world!!!!!!";
261 260
262 // We'll automatically write out an error (headers + body) 261 // We'll automatically write out an error (headers + body)
263 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _)); 262 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
264 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 263 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
265 .WillOnce(Invoke(MockQuicSpdySession::ConsumeAllData)); 264 .WillOnce(Invoke(MockQuicSpdySession::ConsumeAllData));
266 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 265 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
267 266
268 stream_->OnStreamHeaders(headers_string_); 267 stream_->OnStreamHeaders(headers_string_);
269 stream_->OnStreamHeadersComplete(false, headers_string_.size()); 268 stream_->OnStreamHeadersComplete(false, headers_string_.size());
270 stream_->OnStreamFrame( 269 stream_->OnStreamFrame(
271 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_)); 270 QuicStreamFrame(stream_->id(), /*fin=*/false, /*offset=*/0, body_));
272 // Content length is still 11. This will register as an error and we won't 271 // Content length is still 11. This will register as an error and we won't
273 // accept the bytes. 272 // accept the bytes.
274 stream_->OnStreamFrame( 273 stream_->OnStreamFrame(
(...skipping 16 matching lines...) Expand all
291 response_headers_[":status"] = "200 OK"; 290 response_headers_[":status"] = "200 OK";
292 response_headers_["content-length"] = "5"; 291 response_headers_["content-length"] = "5";
293 string body = "Yummm"; 292 string body = "Yummm";
294 QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar", 293 QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
295 response_headers_, body); 294 response_headers_, body);
296 295
297 stream_->set_fin_received(true); 296 stream_->set_fin_received(true);
298 297
299 InSequence s; 298 InSequence s;
300 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr)); 299 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
301 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 300 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
302 .Times(1) 301 .Times(1)
303 .WillOnce(Return(QuicConsumedData( 302 .WillOnce(Return(QuicConsumedData(
304 strlen(QuicSimpleServerStream::kErrorResponseBody), true))); 303 strlen(QuicSimpleServerStream::kErrorResponseBody), true)));
305 304
306 QuicSimpleServerStreamPeer::SendResponse(stream_); 305 QuicSimpleServerStreamPeer::SendResponse(stream_);
307 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 306 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
308 EXPECT_TRUE(stream_->reading_stopped()); 307 EXPECT_TRUE(stream_->reading_stopped());
309 EXPECT_TRUE(stream_->write_side_closed()); 308 EXPECT_TRUE(stream_->write_side_closed());
310 } 309 }
311 310
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 response_headers_[":version"] = "HTTP/1.1"; 347 response_headers_[":version"] = "HTTP/1.1";
349 response_headers_[":status"] = "200"; 348 response_headers_[":status"] = "200";
350 response_headers_["content-length"] = "5"; 349 response_headers_["content-length"] = "5";
351 string body = "Yummm"; 350 string body = "Yummm";
352 QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar", 351 QuicInMemoryCache::GetInstance()->AddResponse("www.google.com", "/bar",
353 response_headers_, body); 352 response_headers_, body);
354 stream_->set_fin_received(true); 353 stream_->set_fin_received(true);
355 354
356 InSequence s; 355 InSequence s;
357 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr)); 356 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
358 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 357 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
359 .Times(1) 358 .Times(1)
360 .WillOnce(Return(QuicConsumedData(body.length(), true))); 359 .WillOnce(Return(QuicConsumedData(body.length(), true)));
361 360
362 QuicSimpleServerStreamPeer::SendResponse(stream_); 361 QuicSimpleServerStreamPeer::SendResponse(stream_);
363 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 362 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
364 EXPECT_TRUE(stream_->reading_stopped()); 363 EXPECT_TRUE(stream_->reading_stopped());
365 EXPECT_TRUE(stream_->write_side_closed()); 364 EXPECT_TRUE(stream_->write_side_closed());
366 } 365 }
367 366
368 TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) { 367 TEST_P(QuicSimpleServerStreamTest, SendReponseWithPushResources) {
(...skipping 18 matching lines...) Expand all
387 (*request_headers)[":authority"] = host; 386 (*request_headers)[":authority"] = host;
388 (*request_headers)[":version"] = "HTTP/1.1"; 387 (*request_headers)[":version"] = "HTTP/1.1";
389 (*request_headers)[":method"] = "GET"; 388 (*request_headers)[":method"] = "GET";
390 389
391 stream_->set_fin_received(true); 390 stream_->set_fin_received(true);
392 InSequence s; 391 InSequence s;
393 EXPECT_CALL(session_, PromisePushResources(host + request_path, _, 392 EXPECT_CALL(session_, PromisePushResources(host + request_path, _,
394 ::net::test::kClientDataStreamId1, 393 ::net::test::kClientDataStreamId1,
395 *request_headers)); 394 *request_headers));
396 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr)); 395 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, false, _, nullptr));
397 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 396 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
398 .Times(1) 397 .Times(1)
399 .WillOnce(Return(QuicConsumedData(body.length(), true))); 398 .WillOnce(Return(QuicConsumedData(body.length(), true)));
400 QuicSimpleServerStreamPeer::SendResponse(stream_); 399 QuicSimpleServerStreamPeer::SendResponse(stream_);
401 } 400 }
402 401
403 TEST_P(QuicSimpleServerStreamTest, PushResponseOnClientInitiatedStream) { 402 TEST_P(QuicSimpleServerStreamTest, PushResponseOnClientInitiatedStream) {
404 // Calling PushResponse() on a client initialted stream is never supposed to 403 // Calling PushResponse() on a client initialted stream is never supposed to
405 // happen. 404 // happen.
406 SpdyHeaderBlock headers; 405 SpdyHeaderBlock headers;
407 EXPECT_DFATAL(stream_->PushResponse(headers), 406 EXPECT_DFATAL(stream_->PushResponse(headers),
(...skipping 25 matching lines...) Expand all
433 response_headers_["content-length"] = "5"; 432 response_headers_["content-length"] = "5";
434 const string kBody = "Hello"; 433 const string kBody = "Hello";
435 QuicInMemoryCache::GetInstance()->AddResponse(kHost, kPath, response_headers_, 434 QuicInMemoryCache::GetInstance()->AddResponse(kHost, kPath, response_headers_,
436 kBody); 435 kBody);
437 436
438 // Call PushResponse() should trigger stream to fetch response from cache 437 // Call PushResponse() should trigger stream to fetch response from cache
439 // and send it back. 438 // and send it back.
440 EXPECT_CALL(session_, 439 EXPECT_CALL(session_,
441 WriteHeaders(kServerInitiatedStreamId, _, false, 440 WriteHeaders(kServerInitiatedStreamId, _, false,
442 server_initiated_stream->priority(), nullptr)); 441 server_initiated_stream->priority(), nullptr));
443 EXPECT_CALL(session_, WritevData(kServerInitiatedStreamId, _, _, _, _, _)) 442 EXPECT_CALL(session_, WritevData(kServerInitiatedStreamId, _, _, _, _))
444 .Times(1) 443 .Times(1)
445 .WillOnce(Return(QuicConsumedData(kBody.size(), true))); 444 .WillOnce(Return(QuicConsumedData(kBody.size(), true)));
446 server_initiated_stream->PushResponse(headers); 445 server_initiated_stream->PushResponse(headers);
447 EXPECT_EQ(kPath, QuicSimpleServerStreamPeer::headers( 446 EXPECT_EQ(kPath, QuicSimpleServerStreamPeer::headers(
448 server_initiated_stream)[":path"] 447 server_initiated_stream)[":path"]
449 .as_string()); 448 .as_string());
450 EXPECT_EQ("GET", QuicSimpleServerStreamPeer::headers( 449 EXPECT_EQ("GET", QuicSimpleServerStreamPeer::headers(
451 server_initiated_stream)[":method"] 450 server_initiated_stream)[":method"]
452 .as_string()); 451 .as_string());
453 } 452 }
454 453
455 TEST_P(QuicSimpleServerStreamTest, TestSendErrorResponse) { 454 TEST_P(QuicSimpleServerStreamTest, TestSendErrorResponse) {
456 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 455 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
457 456
458 response_headers_[":version"] = "HTTP/1.1"; 457 response_headers_[":version"] = "HTTP/1.1";
459 response_headers_[":status"] = "500 Server Error"; 458 response_headers_[":status"] = "500 Server Error";
460 response_headers_["content-length"] = "3"; 459 response_headers_["content-length"] = "3";
461 stream_->set_fin_received(true); 460 stream_->set_fin_received(true);
462 461
463 InSequence s; 462 InSequence s;
464 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _)); 463 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
465 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 464 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
466 .Times(1) 465 .Times(1)
467 .WillOnce(Return(QuicConsumedData(3, true))); 466 .WillOnce(Return(QuicConsumedData(3, true)));
468 467
469 QuicSimpleServerStreamPeer::SendErrorResponse(stream_); 468 QuicSimpleServerStreamPeer::SendErrorResponse(stream_);
470 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_)); 469 EXPECT_FALSE(ReliableQuicStreamPeer::read_side_closed(stream_));
471 EXPECT_TRUE(stream_->reading_stopped()); 470 EXPECT_TRUE(stream_->reading_stopped());
472 EXPECT_TRUE(stream_->write_side_closed()); 471 EXPECT_TRUE(stream_->write_side_closed());
473 } 472 }
474 473
475 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) { 474 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
476 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 475 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
477 476
478 SpdyHeaderBlock request_headers; 477 SpdyHeaderBlock request_headers;
479 // \000 is a way to write the null byte when followed by a literal digit. 478 // \000 is a way to write the null byte when followed by a literal digit.
480 request_headers["content-length"] = StringPiece("11\00012", 5); 479 request_headers["content-length"] = StringPiece("11\00012", 5);
481 480
482 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 481 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
483 482
484 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _)); 483 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
485 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 484 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
486 .Times(AnyNumber()) 485 .Times(AnyNumber())
487 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData)); 486 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
488 stream_->OnStreamHeaders(headers_string_); 487 stream_->OnStreamHeaders(headers_string_);
489 stream_->OnStreamHeadersComplete(true, headers_string_.size()); 488 stream_->OnStreamHeadersComplete(true, headers_string_.size());
490 489
491 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 490 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
492 EXPECT_TRUE(stream_->reading_stopped()); 491 EXPECT_TRUE(stream_->reading_stopped());
493 EXPECT_TRUE(stream_->write_side_closed()); 492 EXPECT_TRUE(stream_->write_side_closed());
494 } 493 }
495 494
496 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) { 495 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
497 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 496 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
498 497
499 SpdyHeaderBlock request_headers; 498 SpdyHeaderBlock request_headers;
500 // \000 is a way to write the null byte when followed by a literal digit. 499 // \000 is a way to write the null byte when followed by a literal digit.
501 request_headers["content-length"] = StringPiece("\00012", 3); 500 request_headers["content-length"] = StringPiece("\00012", 3);
502 501
503 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers); 502 headers_string_ = SpdyUtils::SerializeUncompressedHeaders(request_headers);
504 503
505 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _)); 504 EXPECT_CALL(session_, WriteHeaders(_, _, _, _, _));
506 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 505 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
507 .Times(AnyNumber()) 506 .Times(AnyNumber())
508 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData)); 507 .WillRepeatedly(Invoke(MockQuicSpdySession::ConsumeAllData));
509 stream_->OnStreamHeaders(headers_string_); 508 stream_->OnStreamHeaders(headers_string_);
510 stream_->OnStreamHeadersComplete(true, headers_string_.size()); 509 stream_->OnStreamHeadersComplete(true, headers_string_.size());
511 510
512 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_)); 511 EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream_));
513 EXPECT_TRUE(stream_->reading_stopped()); 512 EXPECT_TRUE(stream_->reading_stopped());
514 EXPECT_TRUE(stream_->write_side_closed()); 513 EXPECT_TRUE(stream_->write_side_closed());
515 } 514 }
516 515
(...skipping 13 matching lines...) Expand all
530 EXPECT_FALSE(stream_->write_side_closed()); 529 EXPECT_FALSE(stream_->write_side_closed());
531 } 530 }
532 531
533 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) { 532 TEST_P(QuicSimpleServerStreamTest, SendQuicRstStreamNoErrorWithEarlyResponse) {
534 response_headers_[":version"] = "HTTP/1.1"; 533 response_headers_[":version"] = "HTTP/1.1";
535 response_headers_[":status"] = "500 Server Error"; 534 response_headers_[":status"] = "500 Server Error";
536 response_headers_["content-length"] = "3"; 535 response_headers_["content-length"] = "3";
537 536
538 InSequence s; 537 InSequence s;
539 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, _, _, _)); 538 EXPECT_CALL(session_, WriteHeaders(stream_->id(), _, _, _, _));
540 EXPECT_CALL(session_, WritevData(_, _, _, _, _, _)) 539 EXPECT_CALL(session_, WritevData(_, _, _, _, _))
541 .Times(1) 540 .Times(1)
542 .WillOnce(Return(QuicConsumedData(3, true))); 541 .WillOnce(Return(QuicConsumedData(3, true)));
543 if (GetParam() > QUIC_VERSION_28) { 542 if (GetParam() > QUIC_VERSION_28) {
544 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1); 543 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(1);
545 } else { 544 } else {
546 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0); 545 EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _)).Times(0);
547 } 546 }
548 EXPECT_FALSE(stream_->fin_received()); 547 EXPECT_FALSE(stream_->fin_received());
549 QuicSimpleServerStreamPeer::SendErrorResponse(stream_); 548 QuicSimpleServerStreamPeer::SendErrorResponse(stream_);
550 EXPECT_TRUE(stream_->reading_stopped()); 549 EXPECT_TRUE(stream_->reading_stopped());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 }; 594 };
596 StringPiece data(arr, arraysize(arr)); 595 StringPiece data(arr, arraysize(arr));
597 QuicStreamFrame frame(stream_->id(), true, 0, data); 596 QuicStreamFrame frame(stream_->id(), true, 0, data);
598 // Verify that we don't crash when we get a invalid headers in stream frame. 597 // Verify that we don't crash when we get a invalid headers in stream frame.
599 stream_->OnStreamFrame(frame); 598 stream_->OnStreamFrame(frame);
600 } 599 }
601 600
602 } // namespace 601 } // namespace
603 } // namespace test 602 } // namespace test
604 } // namespace net 603 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_simple_server_session_test.cc ('k') | net/tools/quic/test_tools/quic_test_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698