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

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

Issue 2156643002: Move ~1000 SpdySerializedFrame instances from heap to stack in tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « net/spdy/spdy_session_unittest.cc ('k') | net/spdy/spdy_test_util_common.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 }; 147 };
148 148
149 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, 149 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend,
150 SpdyStreamTest, 150 SpdyStreamTest,
151 testing::Values(kTestCaseNoPriorityDependencies, 151 testing::Values(kTestCaseNoPriorityDependencies,
152 kTestCasePriorityDependencies)); 152 kTestCasePriorityDependencies));
153 153
154 TEST_P(SpdyStreamTest, SendDataAfterOpen) { 154 TEST_P(SpdyStreamTest, SendDataAfterOpen) {
155 GURL url(kStreamUrl); 155 GURL url(kStreamUrl);
156 156
157 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 157 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
158 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 158 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
159 AddWrite(*req); 159 AddWrite(req);
160 160
161 std::unique_ptr<SpdySerializedFrame> resp( 161 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
162 spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 162 AddRead(resp);
163 AddRead(*resp);
164 163
165 std::unique_ptr<SpdySerializedFrame> msg( 164 SpdySerializedFrame msg(
166 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 165 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
167 AddWrite(*msg); 166 AddWrite(msg);
168 167
169 std::unique_ptr<SpdySerializedFrame> echo( 168 SpdySerializedFrame echo(
170 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 169 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
171 AddRead(*echo); 170 AddRead(echo);
172 171
173 AddReadEOF(); 172 AddReadEOF();
174 173
175 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 174 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
176 GetNumWrites()); 175 GetNumWrites());
177 MockConnect connect_data(SYNCHRONOUS, OK); 176 MockConnect connect_data(SYNCHRONOUS, OK);
178 data.set_connect_data(connect_data); 177 data.set_connect_data(connect_data);
179 178
180 session_deps_.socket_factory->AddSocketDataProvider(&data); 179 session_deps_.socket_factory->AddSocketDataProvider(&data);
181 180
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 const SpdyHeaderBlock& trailers() const { return trailers_; } 222 const SpdyHeaderBlock& trailers() const { return trailers_; }
224 223
225 private: 224 private:
226 SpdyHeaderBlock trailers_; 225 SpdyHeaderBlock trailers_;
227 }; 226 };
228 227
229 // Regression test for crbug.com/481033. 228 // Regression test for crbug.com/481033.
230 TEST_P(SpdyStreamTest, Trailers) { 229 TEST_P(SpdyStreamTest, Trailers) {
231 GURL url(kStreamUrl); 230 GURL url(kStreamUrl);
232 231
233 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 232 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
234 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 233 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
235 AddWrite(*req); 234 AddWrite(req);
236 235
237 std::unique_ptr<SpdySerializedFrame> msg( 236 SpdySerializedFrame msg(
238 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true)); 237 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true));
239 AddWrite(*msg); 238 AddWrite(msg);
240 239
241 std::unique_ptr<SpdySerializedFrame> resp( 240 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
242 spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 241 AddRead(resp);
243 AddRead(*resp);
244 242
245 std::unique_ptr<SpdySerializedFrame> echo( 243 SpdySerializedFrame echo(
246 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 244 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
247 AddRead(*echo); 245 AddRead(echo);
248 246
249 SpdyHeaderBlock late_headers; 247 SpdyHeaderBlock late_headers;
250 late_headers["foo"] = "bar"; 248 late_headers["foo"] = "bar";
251 std::unique_ptr<SpdySerializedFrame> trailers( 249 SpdySerializedFrame trailers(spdy_util_.ConstructSpdyResponseHeaders(
252 spdy_util_.ConstructSpdyResponseHeaders(1, std::move(late_headers), 250 1, std::move(late_headers), false));
253 false)); 251 AddRead(trailers);
254 AddRead(*trailers);
255 252
256 AddReadEOF(); 253 AddReadEOF();
257 254
258 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 255 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
259 GetNumWrites()); 256 GetNumWrites());
260 MockConnect connect_data(SYNCHRONOUS, OK); 257 MockConnect connect_data(SYNCHRONOUS, OK);
261 data.set_connect_data(connect_data); 258 data.set_connect_data(connect_data);
262 259
263 session_deps_.socket_factory->AddSocketDataProvider(&data); 260 session_deps_.socket_factory->AddSocketDataProvider(&data);
264 261
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 351
355 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 352 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
356 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha")); 353 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha"));
357 354
358 EXPECT_FALSE(spdy_session); 355 EXPECT_FALSE(spdy_session);
359 } 356 }
360 357
361 TEST_P(SpdyStreamTest, StreamError) { 358 TEST_P(SpdyStreamTest, StreamError) {
362 GURL url(kStreamUrl); 359 GURL url(kStreamUrl);
363 360
364 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 361 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
365 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 362 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
366 AddWrite(*req); 363 AddWrite(req);
367 364
368 std::unique_ptr<SpdySerializedFrame> resp( 365 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
369 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 366 AddRead(resp);
370 AddRead(*resp);
371 367
372 std::unique_ptr<SpdySerializedFrame> msg( 368 SpdySerializedFrame msg(
373 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 369 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
374 AddWrite(*msg); 370 AddWrite(msg);
375 371
376 std::unique_ptr<SpdySerializedFrame> echo( 372 SpdySerializedFrame echo(
377 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 373 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
378 AddRead(*echo); 374 AddRead(echo);
379 375
380 AddReadEOF(); 376 AddReadEOF();
381 377
382 BoundTestNetLog log; 378 BoundTestNetLog log;
383 379
384 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 380 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
385 GetNumWrites()); 381 GetNumWrites());
386 MockConnect connect_data(SYNCHRONOUS, OK); 382 MockConnect connect_data(SYNCHRONOUS, OK);
387 data.set_connect_data(connect_data); 383 data.set_connect_data(connect_data);
388 384
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 426 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
431 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 427 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
432 } 428 }
433 429
434 // Make sure that large blocks of data are properly split up into 430 // Make sure that large blocks of data are properly split up into
435 // frame-sized chunks for a request/response (i.e., an HTTP-like) 431 // frame-sized chunks for a request/response (i.e., an HTTP-like)
436 // stream. 432 // stream.
437 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) { 433 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) {
438 GURL url(kStreamUrl); 434 GURL url(kStreamUrl);
439 435
440 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 436 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
441 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 437 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
442 AddWrite(*req); 438 AddWrite(req);
443 439
444 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 440 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
445 std::unique_ptr<SpdySerializedFrame> chunk(spdy_util_.ConstructSpdyBodyFrame( 441 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame(
446 1, chunk_data.data(), chunk_data.length(), false)); 442 1, chunk_data.data(), chunk_data.length(), false));
447 AddWrite(*chunk); 443 AddWrite(chunk);
448 AddWrite(*chunk); 444 AddWrite(chunk);
449 445
450 std::unique_ptr<SpdySerializedFrame> last_chunk( 446 SpdySerializedFrame last_chunk(spdy_util_.ConstructSpdyDataFrame(
451 spdy_util_.ConstructSpdyBodyFrame(1, chunk_data.data(), 447 1, chunk_data.data(), chunk_data.length(), true));
452 chunk_data.length(), true)); 448 AddWrite(last_chunk);
453 AddWrite(*last_chunk);
454 449
455 std::unique_ptr<SpdySerializedFrame> resp( 450 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
456 spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 451 AddRead(resp);
457 AddRead(*resp);
458 452
459 AddReadEOF(); 453 AddReadEOF();
460 454
461 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 455 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
462 GetNumWrites()); 456 GetNumWrites());
463 MockConnect connect_data(SYNCHRONOUS, OK); 457 MockConnect connect_data(SYNCHRONOUS, OK);
464 data.set_connect_data(connect_data); 458 data.set_connect_data(connect_data);
465 459
466 session_deps_.socket_factory->AddSocketDataProvider(&data); 460 session_deps_.socket_factory->AddSocketDataProvider(&data);
467 461
(...skipping 24 matching lines...) Expand all
492 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 486 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
493 EXPECT_TRUE(data.AllWriteDataConsumed()); 487 EXPECT_TRUE(data.AllWriteDataConsumed());
494 } 488 }
495 489
496 // Make sure that large blocks of data are properly split up into 490 // Make sure that large blocks of data are properly split up into
497 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like) 491 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like)
498 // stream. 492 // stream.
499 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) { 493 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) {
500 GURL url(kStreamUrl); 494 GURL url(kStreamUrl);
501 495
502 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 496 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
503 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 497 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
504 AddWrite(*req); 498 AddWrite(req);
505 499
506 std::unique_ptr<SpdySerializedFrame> resp( 500 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
507 spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 501 AddRead(resp);
508 AddRead(*resp);
509 502
510 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 503 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
511 std::unique_ptr<SpdySerializedFrame> chunk(spdy_util_.ConstructSpdyBodyFrame( 504 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame(
512 1, chunk_data.data(), chunk_data.length(), false)); 505 1, chunk_data.data(), chunk_data.length(), false));
513 AddWrite(*chunk); 506 AddWrite(chunk);
514 AddWrite(*chunk); 507 AddWrite(chunk);
515 AddWrite(*chunk); 508 AddWrite(chunk);
516 509
517 AddReadEOF(); 510 AddReadEOF();
518 511
519 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 512 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
520 GetNumWrites()); 513 GetNumWrites());
521 MockConnect connect_data(SYNCHRONOUS, OK); 514 MockConnect connect_data(SYNCHRONOUS, OK);
522 data.set_connect_data(connect_data); 515 data.set_connect_data(connect_data);
523 516
524 session_deps_.socket_factory->AddSocketDataProvider(&data); 517 session_deps_.socket_factory->AddSocketDataProvider(&data);
525 518
(...skipping 23 matching lines...) Expand all
549 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 542 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
550 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 543 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
551 EXPECT_TRUE(data.AllWriteDataConsumed()); 544 EXPECT_TRUE(data.AllWriteDataConsumed());
552 } 545 }
553 546
554 // Receiving a header with uppercase ASCII should result in a protocol 547 // Receiving a header with uppercase ASCII should result in a protocol
555 // error. 548 // error.
556 TEST_P(SpdyStreamTest, UpperCaseHeaders) { 549 TEST_P(SpdyStreamTest, UpperCaseHeaders) {
557 GURL url(kStreamUrl); 550 GURL url(kStreamUrl);
558 551
559 std::unique_ptr<SpdySerializedFrame> syn( 552 SpdySerializedFrame syn(
560 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 553 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
561 AddWrite(*syn); 554 AddWrite(syn);
562 555
563 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 556 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
564 std::unique_ptr<SpdySerializedFrame> reply( 557 SpdySerializedFrame reply(
565 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 558 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
566 AddRead(*reply); 559 AddRead(reply);
567 560
568 std::unique_ptr<SpdySerializedFrame> rst( 561 SpdySerializedFrame rst(
569 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 562 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
570 AddWrite(*rst); 563 AddWrite(rst);
571 564
572 AddReadEOF(); 565 AddReadEOF();
573 566
574 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 567 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
575 GetNumWrites()); 568 GetNumWrites());
576 MockConnect connect_data(SYNCHRONOUS, OK); 569 MockConnect connect_data(SYNCHRONOUS, OK);
577 data.set_connect_data(connect_data); 570 data.set_connect_data(connect_data);
578 571
579 session_deps_.socket_factory->AddSocketDataProvider(&data); 572 session_deps_.socket_factory->AddSocketDataProvider(&data);
580 573
(...skipping 17 matching lines...) Expand all
598 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 591 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
599 592
600 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR)); 593 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_PROTOCOL_ERROR));
601 } 594 }
602 595
603 // Receiving a header with uppercase ASCII should result in a protocol 596 // Receiving a header with uppercase ASCII should result in a protocol
604 // error even for a push stream. 597 // error even for a push stream.
605 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) { 598 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) {
606 GURL url(kStreamUrl); 599 GURL url(kStreamUrl);
607 600
608 std::unique_ptr<SpdySerializedFrame> syn( 601 SpdySerializedFrame syn(
609 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 602 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
610 AddWrite(*syn); 603 AddWrite(syn);
611 604
612 std::unique_ptr<SpdySerializedFrame> reply( 605 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
613 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 606 AddRead(reply);
614 AddRead(*reply);
615 607
616 const char* const extra_headers[] = {"X-UpperCase", "yes"}; 608 const char* const extra_headers[] = {"X-UpperCase", "yes"};
617 std::unique_ptr<SpdySerializedFrame> push( 609 SpdySerializedFrame push(
618 spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl)); 610 spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl));
619 AddRead(*push); 611 AddRead(push);
620 612
621 std::unique_ptr<SpdySerializedFrame> rst( 613 SpdySerializedFrame rst(
622 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 614 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
623 AddWrite(*rst); 615 AddWrite(rst);
624 616
625 AddReadPause(); 617 AddReadPause();
626 618
627 AddReadEOF(); 619 AddReadEOF();
628 620
629 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 621 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
630 GetNumWrites()); 622 GetNumWrites());
631 MockConnect connect_data(SYNCHRONOUS, OK); 623 MockConnect connect_data(SYNCHRONOUS, OK);
632 data.set_connect_data(connect_data); 624 data.set_connect_data(connect_data);
633 625
(...skipping 27 matching lines...) Expand all
661 data.Resume(); 653 data.Resume();
662 654
663 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); 655 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
664 } 656 }
665 657
666 // Receiving a header with uppercase ASCII in a HEADERS frame should 658 // Receiving a header with uppercase ASCII in a HEADERS frame should
667 // result in a protocol error. 659 // result in a protocol error.
668 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) { 660 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) {
669 GURL url(kStreamUrl); 661 GURL url(kStreamUrl);
670 662
671 std::unique_ptr<SpdySerializedFrame> syn( 663 SpdySerializedFrame syn(
672 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 664 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
673 AddWrite(*syn); 665 AddWrite(syn);
674 666
675 std::unique_ptr<SpdySerializedFrame> reply( 667 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
676 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 668 AddRead(reply);
677 AddRead(*reply);
678 669
679 std::unique_ptr<SpdySerializedFrame> push( 670 SpdySerializedFrame push(
680 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 671 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
681 AddRead(*push); 672 AddRead(push);
682 673
683 AddReadPause(); 674 AddReadPause();
684 675
685 SpdyHeaderBlock late_headers; 676 SpdyHeaderBlock late_headers;
686 late_headers["X-UpperCase"] = "yes"; 677 late_headers["X-UpperCase"] = "yes";
687 std::unique_ptr<SpdySerializedFrame> headers_frame( 678 SpdySerializedFrame headers_frame(
688 spdy_util_.ConstructSpdyReply(2, std::move(late_headers))); 679 spdy_util_.ConstructSpdyReply(2, std::move(late_headers)));
689 AddRead(*headers_frame); 680 AddRead(headers_frame);
690 681
691 AddWritePause(); 682 AddWritePause();
692 683
693 std::unique_ptr<SpdySerializedFrame> rst( 684 SpdySerializedFrame rst(
694 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 685 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
695 AddWrite(*rst); 686 AddWrite(rst);
696 687
697 AddReadEOF(); 688 AddReadEOF();
698 689
699 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 690 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
700 GetNumWrites()); 691 GetNumWrites());
701 MockConnect connect_data(SYNCHRONOUS, OK); 692 MockConnect connect_data(SYNCHRONOUS, OK);
702 data.set_connect_data(connect_data); 693 data.set_connect_data(connect_data);
703 694
704 session_deps_.socket_factory->AddSocketDataProvider(&data); 695 session_deps_.socket_factory->AddSocketDataProvider(&data);
705 696
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 data.Resume(); 728 data.Resume();
738 729
739 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); 730 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
740 } 731 }
741 732
742 // Receiving a duplicate header in a HEADERS frame should result in a 733 // Receiving a duplicate header in a HEADERS frame should result in a
743 // protocol error. 734 // protocol error.
744 TEST_P(SpdyStreamTest, DuplicateHeaders) { 735 TEST_P(SpdyStreamTest, DuplicateHeaders) {
745 GURL url(kStreamUrl); 736 GURL url(kStreamUrl);
746 737
747 std::unique_ptr<SpdySerializedFrame> syn( 738 SpdySerializedFrame syn(
748 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 739 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
749 AddWrite(*syn); 740 AddWrite(syn);
750 741
751 std::unique_ptr<SpdySerializedFrame> reply( 742 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
752 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 743 AddRead(reply);
753 AddRead(*reply);
754 744
755 std::unique_ptr<SpdySerializedFrame> push( 745 SpdySerializedFrame push(
756 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 746 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
757 AddRead(*push); 747 AddRead(push);
758 748
759 AddReadPause(); 749 AddReadPause();
760 750
761 SpdyHeaderBlock late_headers; 751 SpdyHeaderBlock late_headers;
762 late_headers[spdy_util_.GetStatusKey()] = "500 Server Error"; 752 late_headers[spdy_util_.GetStatusKey()] = "500 Server Error";
763 std::unique_ptr<SpdySerializedFrame> headers_frame( 753 SpdySerializedFrame headers_frame(
764 spdy_util_.ConstructSpdyReply(2, std::move(late_headers))); 754 spdy_util_.ConstructSpdyReply(2, std::move(late_headers)));
765 AddRead(*headers_frame); 755 AddRead(headers_frame);
766 756
767 AddReadPause(); 757 AddReadPause();
768 758
769 std::unique_ptr<SpdySerializedFrame> rst( 759 SpdySerializedFrame rst(
770 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 760 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
771 AddWrite(*rst); 761 AddWrite(rst);
772 762
773 AddReadEOF(); 763 AddReadEOF();
774 764
775 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 765 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
776 GetNumWrites()); 766 GetNumWrites());
777 MockConnect connect_data(SYNCHRONOUS, OK); 767 MockConnect connect_data(SYNCHRONOUS, OK);
778 data.set_connect_data(connect_data); 768 data.set_connect_data(connect_data);
779 769
780 session_deps_.socket_factory->AddSocketDataProvider(&data); 770 session_deps_.socket_factory->AddSocketDataProvider(&data);
781 771
(...skipping 30 matching lines...) Expand all
812 802
813 data.Resume(); 803 data.Resume();
814 804
815 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); 805 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
816 } 806 }
817 807
818 // Call IncreaseSendWindowSize on a stream with a large enough delta 808 // Call IncreaseSendWindowSize on a stream with a large enough delta
819 // to overflow an int32_t. The SpdyStream should handle that case 809 // to overflow an int32_t. The SpdyStream should handle that case
820 // gracefully. 810 // gracefully.
821 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { 811 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) {
822 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 812 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
823 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 813 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
824 AddWrite(*req); 814 AddWrite(req);
825 815
826 AddReadPause(); 816 AddReadPause();
827 817
828 // Triggered by the overflowing call to IncreaseSendWindowSize 818 // Triggered by the overflowing call to IncreaseSendWindowSize
829 // below. 819 // below.
830 std::unique_ptr<SpdySerializedFrame> rst( 820 SpdySerializedFrame rst(
831 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 821 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
832 AddWrite(*rst); 822 AddWrite(rst);
833 823
834 AddReadEOF(); 824 AddReadEOF();
835 825
836 BoundTestNetLog log; 826 BoundTestNetLog log;
837 827
838 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 828 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
839 GetNumWrites()); 829 GetNumWrites());
840 MockConnect connect_data(SYNCHRONOUS, OK); 830 MockConnect connect_data(SYNCHRONOUS, OK);
841 data.set_connect_data(connect_data); 831 data.set_connect_data(connect_data);
842 832
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 EXPECT_FALSE(stream->send_stalled_by_flow_control()); 894 EXPECT_FALSE(stream->send_stalled_by_flow_control());
905 } 895 }
906 896
907 // Given an unstall function, runs a test to make sure that a 897 // Given an unstall function, runs a test to make sure that a
908 // request/response (i.e., an HTTP-like) stream resumes after a stall 898 // request/response (i.e., an HTTP-like) stream resumes after a stall
909 // and unstall. 899 // and unstall.
910 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest( 900 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest(
911 const UnstallFunction& unstall_function) { 901 const UnstallFunction& unstall_function) {
912 GURL url(kStreamUrl); 902 GURL url(kStreamUrl);
913 903
914 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 904 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
915 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 905 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
916 AddWrite(*req); 906 AddWrite(req);
917 907
918 std::unique_ptr<SpdySerializedFrame> body( 908 SpdySerializedFrame body(
919 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true)); 909 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, true));
920 AddWrite(*body); 910 AddWrite(body);
921 911
922 std::unique_ptr<SpdySerializedFrame> resp( 912 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
923 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 913 AddRead(resp);
924 AddRead(*resp);
925 914
926 AddReadEOF(); 915 AddReadEOF();
927 916
928 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 917 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
929 GetNumWrites()); 918 GetNumWrites());
930 MockConnect connect_data(SYNCHRONOUS, OK); 919 MockConnect connect_data(SYNCHRONOUS, OK);
931 data.set_connect_data(connect_data); 920 data.set_connect_data(connect_data);
932 921
933 session_deps_.socket_factory->AddSocketDataProvider(&data); 922 session_deps_.socket_factory->AddSocketDataProvider(&data);
934 923
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 base::Bind(&AdjustStreamSendWindowSize)); 969 base::Bind(&AdjustStreamSendWindowSize));
981 } 970 }
982 971
983 // Given an unstall function, runs a test to make sure that a 972 // Given an unstall function, runs a test to make sure that a
984 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall 973 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall
985 // and unstall. 974 // and unstall.
986 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest( 975 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest(
987 const UnstallFunction& unstall_function) { 976 const UnstallFunction& unstall_function) {
988 GURL url(kStreamUrl); 977 GURL url(kStreamUrl);
989 978
990 std::unique_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost( 979 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost(
991 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 980 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
992 AddWrite(*req); 981 AddWrite(req);
993 982
994 AddReadPause(); 983 AddReadPause();
995 984
996 std::unique_ptr<SpdySerializedFrame> resp( 985 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
997 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 986 AddRead(resp);
998 AddRead(*resp);
999 987
1000 std::unique_ptr<SpdySerializedFrame> msg( 988 SpdySerializedFrame msg(
1001 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 989 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
1002 AddWrite(*msg); 990 AddWrite(msg);
1003 991
1004 std::unique_ptr<SpdySerializedFrame> echo( 992 SpdySerializedFrame echo(
1005 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 993 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
1006 AddRead(*echo); 994 AddRead(echo);
1007 995
1008 AddReadEOF(); 996 AddReadEOF();
1009 997
1010 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 998 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
1011 GetNumWrites()); 999 GetNumWrites());
1012 MockConnect connect_data(SYNCHRONOUS, OK); 1000 MockConnect connect_data(SYNCHRONOUS, OK);
1013 data.set_connect_data(connect_data); 1001 data.set_connect_data(connect_data);
1014 1002
1015 session_deps_.socket_factory->AddSocketDataProvider(&data); 1003 session_deps_.socket_factory->AddSocketDataProvider(&data);
1016 1004
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 1052
1065 TEST_P(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) { 1053 TEST_P(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) {
1066 RunResumeAfterUnstallBidirectionalTest( 1054 RunResumeAfterUnstallBidirectionalTest(
1067 base::Bind(&AdjustStreamSendWindowSize)); 1055 base::Bind(&AdjustStreamSendWindowSize));
1068 } 1056 }
1069 1057
1070 // Test calculation of amount of bytes received from network. 1058 // Test calculation of amount of bytes received from network.
1071 TEST_P(SpdyStreamTest, ReceivedBytes) { 1059 TEST_P(SpdyStreamTest, ReceivedBytes) {
1072 GURL url(kStreamUrl); 1060 GURL url(kStreamUrl);
1073 1061
1074 std::unique_ptr<SpdySerializedFrame> syn( 1062 SpdySerializedFrame syn(
1075 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 1063 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
1076 AddWrite(*syn); 1064 AddWrite(syn);
1077 1065
1078 AddReadPause(); 1066 AddReadPause();
1079 1067
1080 std::unique_ptr<SpdySerializedFrame> reply( 1068 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1081 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1069 AddRead(reply);
1082 AddRead(*reply);
1083 1070
1084 AddReadPause(); 1071 AddReadPause();
1085 1072
1086 std::unique_ptr<SpdySerializedFrame> msg( 1073 SpdySerializedFrame msg(
1087 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 1074 spdy_util_.ConstructSpdyDataFrame(1, kPostBody, kPostBodyLength, false));
1088 AddRead(*msg); 1075 AddRead(msg);
1089 1076
1090 AddReadPause(); 1077 AddReadPause();
1091 1078
1092 AddReadEOF(); 1079 AddReadEOF();
1093 1080
1094 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 1081 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
1095 GetNumWrites()); 1082 GetNumWrites());
1096 MockConnect connect_data(SYNCHRONOUS, OK); 1083 MockConnect connect_data(SYNCHRONOUS, OK);
1097 data.set_connect_data(connect_data); 1084 data.set_connect_data(connect_data);
1098 1085
(...skipping 11 matching lines...) Expand all
1110 1097
1111 EXPECT_FALSE(stream->HasUrlFromHeaders()); 1098 EXPECT_FALSE(stream->HasUrlFromHeaders());
1112 1099
1113 std::unique_ptr<SpdyHeaderBlock> headers( 1100 std::unique_ptr<SpdyHeaderBlock> headers(
1114 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kStreamUrl))); 1101 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kStreamUrl)));
1115 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), 1102 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers),
1116 NO_MORE_DATA_TO_SEND)); 1103 NO_MORE_DATA_TO_SEND));
1117 EXPECT_TRUE(stream->HasUrlFromHeaders()); 1104 EXPECT_TRUE(stream->HasUrlFromHeaders());
1118 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 1105 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
1119 1106
1120 int64_t reply_frame_len = reply->size(); 1107 int64_t reply_frame_len = reply.size();
1121 int64_t data_header_len = SpdyConstants::GetDataFrameMinimumSize(HTTP2); 1108 int64_t data_header_len = SpdyConstants::GetDataFrameMinimumSize(HTTP2);
1122 int64_t data_frame_len = data_header_len + kPostBodyLength; 1109 int64_t data_frame_len = data_header_len + kPostBodyLength;
1123 int64_t response_len = reply_frame_len + data_frame_len; 1110 int64_t response_len = reply_frame_len + data_frame_len;
1124 1111
1125 EXPECT_EQ(0, stream->raw_received_bytes()); 1112 EXPECT_EQ(0, stream->raw_received_bytes());
1126 1113
1127 // SYN 1114 // SYN
1128 data.RunUntilPaused(); 1115 data.RunUntilPaused();
1129 EXPECT_EQ(0, stream->raw_received_bytes()); 1116 EXPECT_EQ(0, stream->raw_received_bytes());
1130 1117
1131 // REPLY 1118 // REPLY
1132 data.Resume(); 1119 data.Resume();
1133 data.RunUntilPaused(); 1120 data.RunUntilPaused();
1134 EXPECT_EQ(reply_frame_len, stream->raw_received_bytes()); 1121 EXPECT_EQ(reply_frame_len, stream->raw_received_bytes());
1135 1122
1136 // DATA 1123 // DATA
1137 data.Resume(); 1124 data.Resume();
1138 data.RunUntilPaused(); 1125 data.RunUntilPaused();
1139 EXPECT_EQ(response_len, stream->raw_received_bytes()); 1126 EXPECT_EQ(response_len, stream->raw_received_bytes());
1140 1127
1141 // FIN 1128 // FIN
1142 data.Resume(); 1129 data.Resume();
1143 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); 1130 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED));
1144 } 1131 }
1145 1132
1146 } // namespace test 1133 } // namespace test
1147 1134
1148 } // namespace net 1135 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_unittest.cc ('k') | net/spdy/spdy_test_util_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698