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

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

Issue 1852423004: Implement SpdySerializedFrame move semantics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « net/spdy/spdy_stream.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 #include <cstddef> 8 #include <cstddef>
9 #include <limits> 9 #include <limits>
10 #include <string> 10 #include <string>
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 void RunResumeAfterUnstallRequestResponseTest( 96 void RunResumeAfterUnstallRequestResponseTest(
97 const UnstallFunction& unstall_function); 97 const UnstallFunction& unstall_function);
98 98
99 void RunResumeAfterUnstallBidirectionalTest( 99 void RunResumeAfterUnstallBidirectionalTest(
100 const UnstallFunction& unstall_function); 100 const UnstallFunction& unstall_function);
101 101
102 // Add{Read,Write}() populates lists that are eventually passed to a 102 // Add{Read,Write}() populates lists that are eventually passed to a
103 // SocketData class. |frame| must live for the whole test. 103 // SocketData class. |frame| must live for the whole test.
104 104
105 void AddRead(const SpdyFrame& frame) { 105 void AddRead(const SpdySerializedFrame& frame) {
106 reads_.push_back(CreateMockRead(frame, offset_++)); 106 reads_.push_back(CreateMockRead(frame, offset_++));
107 } 107 }
108 108
109 void AddWrite(const SpdyFrame& frame) { 109 void AddWrite(const SpdySerializedFrame& frame) {
110 writes_.push_back(CreateMockWrite(frame, offset_++)); 110 writes_.push_back(CreateMockWrite(frame, offset_++));
111 } 111 }
112 112
113 void AddReadEOF() { 113 void AddReadEOF() {
114 reads_.push_back(MockRead(ASYNC, 0, offset_++)); 114 reads_.push_back(MockRead(ASYNC, 0, offset_++));
115 } 115 }
116 116
117 void AddWritePause() { 117 void AddWritePause() {
118 writes_.push_back(MockWrite(ASYNC, ERR_IO_PENDING, offset_++)); 118 writes_.push_back(MockWrite(ASYNC, ERR_IO_PENDING, offset_++));
119 } 119 }
(...skipping 27 matching lines...) Expand all
147 147
148 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend, 148 INSTANTIATE_TEST_CASE_P(ProtoPlusDepend,
149 SpdyStreamTest, 149 SpdyStreamTest,
150 testing::Values(kTestCaseSPDY31, 150 testing::Values(kTestCaseSPDY31,
151 kTestCaseHTTP2NoPriorityDependencies, 151 kTestCaseHTTP2NoPriorityDependencies,
152 kTestCaseHTTP2PriorityDependencies)); 152 kTestCaseHTTP2PriorityDependencies));
153 153
154 TEST_P(SpdyStreamTest, SendDataAfterOpen) { 154 TEST_P(SpdyStreamTest, SendDataAfterOpen) {
155 GURL url(kStreamUrl); 155 GURL url(kStreamUrl);
156 156
157 scoped_ptr<SpdyFrame> req( 157 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
158 spdy_util_.ConstructSpdyPost( 158 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
159 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
160 AddWrite(*req); 159 AddWrite(*req);
161 160
162 scoped_ptr<SpdyFrame> resp( 161 scoped_ptr<SpdySerializedFrame> resp(
163 spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 162 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
164 AddRead(*resp); 163 AddRead(*resp);
165 164
166 scoped_ptr<SpdyFrame> msg( 165 scoped_ptr<SpdySerializedFrame> msg(
167 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 166 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
168 AddWrite(*msg); 167 AddWrite(*msg);
169 168
170 scoped_ptr<SpdyFrame> echo( 169 scoped_ptr<SpdySerializedFrame> echo(
171 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 170 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
172 AddRead(*echo); 171 AddRead(*echo);
173 172
174 AddReadEOF(); 173 AddReadEOF();
175 174
176 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 175 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
177 GetNumWrites()); 176 GetNumWrites());
178 MockConnect connect_data(SYNCHRONOUS, OK); 177 MockConnect connect_data(SYNCHRONOUS, OK);
179 data.set_connect_data(connect_data); 178 data.set_connect_data(connect_data);
180 179
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 const SpdyHeaderBlock& trailers() const { return trailers_; } 223 const SpdyHeaderBlock& trailers() const { return trailers_; }
225 224
226 private: 225 private:
227 SpdyHeaderBlock trailers_; 226 SpdyHeaderBlock trailers_;
228 }; 227 };
229 228
230 // Regression test for crbug.com/481033. 229 // Regression test for crbug.com/481033.
231 TEST_P(SpdyStreamTest, Trailers) { 230 TEST_P(SpdyStreamTest, Trailers) {
232 GURL url(kStreamUrl); 231 GURL url(kStreamUrl);
233 232
234 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyPost( 233 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
235 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0)); 234 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
236 AddWrite(*req); 235 AddWrite(*req);
237 236
238 scoped_ptr<SpdyFrame> msg( 237 scoped_ptr<SpdySerializedFrame> msg(
239 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true)); 238 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true));
240 AddWrite(*msg); 239 AddWrite(*msg);
241 240
242 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 241 scoped_ptr<SpdySerializedFrame> resp(
242 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
243 AddRead(*resp); 243 AddRead(*resp);
244 244
245 scoped_ptr<SpdyFrame> echo( 245 scoped_ptr<SpdySerializedFrame> echo(
246 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 246 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
247 AddRead(*echo); 247 AddRead(*echo);
248 248
249 SpdyHeaderBlock late_headers; 249 SpdyHeaderBlock late_headers;
250 late_headers["foo"] = "bar"; 250 late_headers["foo"] = "bar";
251 scoped_ptr<SpdyFrame> trailers( 251 scoped_ptr<SpdySerializedFrame> trailers(
252 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, false)); 252 spdy_util_.ConstructSpdyResponseHeaders(1, late_headers, false));
253 AddRead(*trailers); 253 AddRead(*trailers);
254 254
255 AddReadEOF(); 255 AddReadEOF();
256 256
257 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 257 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
258 GetNumWrites()); 258 GetNumWrites());
259 MockConnect connect_data(SYNCHRONOUS, OK); 259 MockConnect connect_data(SYNCHRONOUS, OK);
260 data.set_connect_data(connect_data); 260 data.set_connect_data(connect_data);
261 261
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 339
340 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 340 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
341 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha")); 341 EXPECT_EQ("beta", delegate.GetResponseHeaderValue("alpha"));
342 342
343 EXPECT_TRUE(spdy_session == NULL); 343 EXPECT_TRUE(spdy_session == NULL);
344 } 344 }
345 345
346 TEST_P(SpdyStreamTest, StreamError) { 346 TEST_P(SpdyStreamTest, StreamError) {
347 GURL url(kStreamUrl); 347 GURL url(kStreamUrl);
348 348
349 scoped_ptr<SpdyFrame> req( 349 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
350 spdy_util_.ConstructSpdyPost( 350 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
351 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
352 AddWrite(*req); 351 AddWrite(*req);
353 352
354 scoped_ptr<SpdyFrame> resp( 353 scoped_ptr<SpdySerializedFrame> resp(
355 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 354 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
356 AddRead(*resp); 355 AddRead(*resp);
357 356
358 scoped_ptr<SpdyFrame> msg( 357 scoped_ptr<SpdySerializedFrame> msg(
359 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 358 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
360 AddWrite(*msg); 359 AddWrite(*msg);
361 360
362 scoped_ptr<SpdyFrame> echo( 361 scoped_ptr<SpdySerializedFrame> echo(
363 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 362 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
364 AddRead(*echo); 363 AddRead(*echo);
365 364
366 AddReadEOF(); 365 AddReadEOF();
367 366
368 BoundTestNetLog log; 367 BoundTestNetLog log;
369 368
370 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 369 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
371 GetNumWrites()); 370 GetNumWrites());
372 MockConnect connect_data(SYNCHRONOUS, OK); 371 MockConnect connect_data(SYNCHRONOUS, OK);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 415 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
417 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 416 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
418 } 417 }
419 418
420 // Make sure that large blocks of data are properly split up into 419 // Make sure that large blocks of data are properly split up into
421 // frame-sized chunks for a request/response (i.e., an HTTP-like) 420 // frame-sized chunks for a request/response (i.e., an HTTP-like)
422 // stream. 421 // stream.
423 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) { 422 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) {
424 GURL url(kStreamUrl); 423 GURL url(kStreamUrl);
425 424
426 scoped_ptr<SpdyFrame> req( 425 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
427 spdy_util_.ConstructSpdyPost( 426 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
428 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
429 AddWrite(*req); 427 AddWrite(*req);
430 428
431 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 429 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
432 scoped_ptr<SpdyFrame> chunk( 430 scoped_ptr<SpdySerializedFrame> chunk(spdy_util_.ConstructSpdyBodyFrame(
433 spdy_util_.ConstructSpdyBodyFrame( 431 1, chunk_data.data(), chunk_data.length(), false));
434 1, chunk_data.data(), chunk_data.length(), false));
435 AddWrite(*chunk); 432 AddWrite(*chunk);
436 AddWrite(*chunk); 433 AddWrite(*chunk);
437 434
438 scoped_ptr<SpdyFrame> last_chunk( 435 scoped_ptr<SpdySerializedFrame> last_chunk(spdy_util_.ConstructSpdyBodyFrame(
439 spdy_util_.ConstructSpdyBodyFrame( 436 1, chunk_data.data(), chunk_data.length(), true));
440 1, chunk_data.data(), chunk_data.length(), true));
441 AddWrite(*last_chunk); 437 AddWrite(*last_chunk);
442 438
443 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 439 scoped_ptr<SpdySerializedFrame> resp(
440 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
444 AddRead(*resp); 441 AddRead(*resp);
445 442
446 AddReadEOF(); 443 AddReadEOF();
447 444
448 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 445 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
449 GetNumWrites()); 446 GetNumWrites());
450 MockConnect connect_data(SYNCHRONOUS, OK); 447 MockConnect connect_data(SYNCHRONOUS, OK);
451 data.set_connect_data(connect_data); 448 data.set_connect_data(connect_data);
452 449
453 session_deps_.socket_factory->AddSocketDataProvider(&data); 450 session_deps_.socket_factory->AddSocketDataProvider(&data);
(...skipping 25 matching lines...) Expand all
479 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 476 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
480 EXPECT_TRUE(data.AllWriteDataConsumed()); 477 EXPECT_TRUE(data.AllWriteDataConsumed());
481 } 478 }
482 479
483 // Make sure that large blocks of data are properly split up into 480 // Make sure that large blocks of data are properly split up into
484 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like) 481 // frame-sized chunks for a bidirectional (i.e., non-HTTP-like)
485 // stream. 482 // stream.
486 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) { 483 TEST_P(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) {
487 GURL url(kStreamUrl); 484 GURL url(kStreamUrl);
488 485
489 scoped_ptr<SpdyFrame> req( 486 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
490 spdy_util_.ConstructSpdyPost( 487 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
491 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
492 AddWrite(*req); 488 AddWrite(*req);
493 489
494 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyPostSynReply(NULL, 0)); 490 scoped_ptr<SpdySerializedFrame> resp(
491 spdy_util_.ConstructSpdyPostSynReply(NULL, 0));
495 AddRead(*resp); 492 AddRead(*resp);
496 493
497 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 494 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
498 scoped_ptr<SpdyFrame> chunk( 495 scoped_ptr<SpdySerializedFrame> chunk(spdy_util_.ConstructSpdyBodyFrame(
499 spdy_util_.ConstructSpdyBodyFrame( 496 1, chunk_data.data(), chunk_data.length(), false));
500 1, chunk_data.data(), chunk_data.length(), false));
501 AddWrite(*chunk); 497 AddWrite(*chunk);
502 AddWrite(*chunk); 498 AddWrite(*chunk);
503 AddWrite(*chunk); 499 AddWrite(*chunk);
504 500
505 AddReadEOF(); 501 AddReadEOF();
506 502
507 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 503 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
508 GetNumWrites()); 504 GetNumWrites());
509 MockConnect connect_data(SYNCHRONOUS, OK); 505 MockConnect connect_data(SYNCHRONOUS, OK);
510 data.set_connect_data(connect_data); 506 data.set_connect_data(connect_data);
(...skipping 26 matching lines...) Expand all
537 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); 533 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey()));
538 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); 534 EXPECT_EQ(std::string(), delegate.TakeReceivedData());
539 EXPECT_TRUE(data.AllWriteDataConsumed()); 535 EXPECT_TRUE(data.AllWriteDataConsumed());
540 } 536 }
541 537
542 // Receiving a header with uppercase ASCII should result in a protocol 538 // Receiving a header with uppercase ASCII should result in a protocol
543 // error. 539 // error.
544 TEST_P(SpdyStreamTest, UpperCaseHeaders) { 540 TEST_P(SpdyStreamTest, UpperCaseHeaders) {
545 GURL url(kStreamUrl); 541 GURL url(kStreamUrl);
546 542
547 scoped_ptr<SpdyFrame> syn( 543 scoped_ptr<SpdySerializedFrame> syn(
548 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 544 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
549 AddWrite(*syn); 545 AddWrite(*syn);
550 546
551 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; 547 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"};
552 scoped_ptr<SpdyFrame> 548 scoped_ptr<SpdySerializedFrame> reply(
553 reply(spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1)); 549 spdy_util_.ConstructSpdyGetSynReply(kExtraHeaders, 1, 1));
554 AddRead(*reply); 550 AddRead(*reply);
555 551
556 scoped_ptr<SpdyFrame> rst( 552 scoped_ptr<SpdySerializedFrame> rst(
557 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 553 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
558 AddWrite(*rst); 554 AddWrite(*rst);
559 555
560 AddReadEOF(); 556 AddReadEOF();
561 557
562 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 558 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
563 GetNumWrites()); 559 GetNumWrites());
564 MockConnect connect_data(SYNCHRONOUS, OK); 560 MockConnect connect_data(SYNCHRONOUS, OK);
565 data.set_connect_data(connect_data); 561 data.set_connect_data(connect_data);
566 562
(...skipping 19 matching lines...) Expand all
586 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec()); 582 EXPECT_EQ(kStreamUrl, stream->GetUrlFromHeaders().spec());
587 583
588 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate.WaitForClose()); 584 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, delegate.WaitForClose());
589 } 585 }
590 586
591 // Receiving a header with uppercase ASCII should result in a protocol 587 // Receiving a header with uppercase ASCII should result in a protocol
592 // error even for a push stream. 588 // error even for a push stream.
593 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) { 589 TEST_P(SpdyStreamTest, UpperCaseHeadersOnPush) {
594 GURL url(kStreamUrl); 590 GURL url(kStreamUrl);
595 591
596 scoped_ptr<SpdyFrame> syn( 592 scoped_ptr<SpdySerializedFrame> syn(
597 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 593 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
598 AddWrite(*syn); 594 AddWrite(*syn);
599 595
600 scoped_ptr<SpdyFrame> 596 scoped_ptr<SpdySerializedFrame> reply(
601 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 597 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
602 AddRead(*reply); 598 AddRead(*reply);
603 599
604 const char* const extra_headers[] = {"X-UpperCase", "yes"}; 600 const char* const extra_headers[] = {"X-UpperCase", "yes"};
605 scoped_ptr<SpdyFrame> 601 scoped_ptr<SpdySerializedFrame> push(
606 push(spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl)); 602 spdy_util_.ConstructSpdyPush(extra_headers, 1, 2, 1, kStreamUrl));
607 AddRead(*push); 603 AddRead(*push);
608 604
609 scoped_ptr<SpdyFrame> rst( 605 scoped_ptr<SpdySerializedFrame> rst(
610 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 606 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
611 AddWrite(*rst); 607 AddWrite(*rst);
612 608
613 AddReadPause(); 609 AddReadPause();
614 610
615 AddReadEOF(); 611 AddReadEOF();
616 612
617 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 613 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
618 GetNumWrites()); 614 GetNumWrites());
619 MockConnect connect_data(SYNCHRONOUS, OK); 615 MockConnect connect_data(SYNCHRONOUS, OK);
(...skipping 29 matching lines...) Expand all
649 data.Resume(); 645 data.Resume();
650 646
651 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 647 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
652 } 648 }
653 649
654 // Receiving a header with uppercase ASCII in a HEADERS frame should 650 // Receiving a header with uppercase ASCII in a HEADERS frame should
655 // result in a protocol error. 651 // result in a protocol error.
656 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) { 652 TEST_P(SpdyStreamTest, UpperCaseHeadersInHeadersFrame) {
657 GURL url(kStreamUrl); 653 GURL url(kStreamUrl);
658 654
659 scoped_ptr<SpdyFrame> syn( 655 scoped_ptr<SpdySerializedFrame> syn(
660 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 656 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
661 AddWrite(*syn); 657 AddWrite(*syn);
662 658
663 scoped_ptr<SpdyFrame> 659 scoped_ptr<SpdySerializedFrame> reply(
664 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 660 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
665 AddRead(*reply); 661 AddRead(*reply);
666 662
667 scoped_ptr<SpdyFrame> 663 scoped_ptr<SpdySerializedFrame> push(
668 push(spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 664 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
669 AddRead(*push); 665 AddRead(*push);
670 666
671 AddReadPause(); 667 AddReadPause();
672 668
673 SpdyHeaderBlock late_headers; 669 SpdyHeaderBlock late_headers;
674 late_headers["X-UpperCase"] = "yes"; 670 late_headers["X-UpperCase"] = "yes";
675 scoped_ptr<SpdyFrame> headers_frame( 671 scoped_ptr<SpdySerializedFrame> headers_frame(
676 spdy_util_.ConstructSpdyReply(2, late_headers)); 672 spdy_util_.ConstructSpdyReply(2, late_headers));
677 AddRead(*headers_frame); 673 AddRead(*headers_frame);
678 674
679 AddWritePause(); 675 AddWritePause();
680 676
681 scoped_ptr<SpdyFrame> rst( 677 scoped_ptr<SpdySerializedFrame> rst(
682 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 678 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
683 AddWrite(*rst); 679 AddWrite(*rst);
684 680
685 AddReadEOF(); 681 AddReadEOF();
686 682
687 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 683 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
688 GetNumWrites()); 684 GetNumWrites());
689 MockConnect connect_data(SYNCHRONOUS, OK); 685 MockConnect connect_data(SYNCHRONOUS, OK);
690 data.set_connect_data(connect_data); 686 data.set_connect_data(connect_data);
691 687
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 data.Resume(); 721 data.Resume();
726 722
727 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 723 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
728 } 724 }
729 725
730 // Receiving a duplicate header in a HEADERS frame should result in a 726 // Receiving a duplicate header in a HEADERS frame should result in a
731 // protocol error. 727 // protocol error.
732 TEST_P(SpdyStreamTest, DuplicateHeaders) { 728 TEST_P(SpdyStreamTest, DuplicateHeaders) {
733 GURL url(kStreamUrl); 729 GURL url(kStreamUrl);
734 730
735 scoped_ptr<SpdyFrame> syn( 731 scoped_ptr<SpdySerializedFrame> syn(
736 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 732 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
737 AddWrite(*syn); 733 AddWrite(*syn);
738 734
739 scoped_ptr<SpdyFrame> 735 scoped_ptr<SpdySerializedFrame> reply(
740 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 736 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
741 AddRead(*reply); 737 AddRead(*reply);
742 738
743 scoped_ptr<SpdyFrame> 739 scoped_ptr<SpdySerializedFrame> push(
744 push(spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl)); 740 spdy_util_.ConstructSpdyPush(NULL, 0, 2, 1, kStreamUrl));
745 AddRead(*push); 741 AddRead(*push);
746 742
747 AddReadPause(); 743 AddReadPause();
748 744
749 SpdyHeaderBlock late_headers; 745 SpdyHeaderBlock late_headers;
750 late_headers[spdy_util_.GetStatusKey()] = "500 Server Error"; 746 late_headers[spdy_util_.GetStatusKey()] = "500 Server Error";
751 scoped_ptr<SpdyFrame> headers_frame( 747 scoped_ptr<SpdySerializedFrame> headers_frame(
752 spdy_util_.ConstructSpdyReply(2, late_headers)); 748 spdy_util_.ConstructSpdyReply(2, late_headers));
753 AddRead(*headers_frame); 749 AddRead(*headers_frame);
754 750
755 AddReadPause(); 751 AddReadPause();
756 752
757 scoped_ptr<SpdyFrame> rst( 753 scoped_ptr<SpdySerializedFrame> rst(
758 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 754 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
759 AddWrite(*rst); 755 AddWrite(*rst);
760 756
761 AddReadEOF(); 757 AddReadEOF();
762 758
763 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 759 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
764 GetNumWrites()); 760 GetNumWrites());
765 MockConnect connect_data(SYNCHRONOUS, OK); 761 MockConnect connect_data(SYNCHRONOUS, OK);
766 data.set_connect_data(connect_data); 762 data.set_connect_data(connect_data);
767 763
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 796
801 data.Resume(); 797 data.Resume();
802 798
803 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 799 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
804 } 800 }
805 801
806 // Call IncreaseSendWindowSize on a stream with a large enough delta 802 // Call IncreaseSendWindowSize on a stream with a large enough delta
807 // to overflow an int32_t. The SpdyStream should handle that case 803 // to overflow an int32_t. The SpdyStream should handle that case
808 // gracefully. 804 // gracefully.
809 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) { 805 TEST_P(SpdyStreamTest, IncreaseSendWindowSizeOverflow) {
810 scoped_ptr<SpdyFrame> req( 806 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
811 spdy_util_.ConstructSpdyPost( 807 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
812 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
813 AddWrite(*req); 808 AddWrite(*req);
814 809
815 AddReadPause(); 810 AddReadPause();
816 811
817 // Triggered by the overflowing call to IncreaseSendWindowSize 812 // Triggered by the overflowing call to IncreaseSendWindowSize
818 // below. 813 // below.
819 scoped_ptr<SpdyFrame> rst( 814 scoped_ptr<SpdySerializedFrame> rst(
820 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); 815 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR));
821 AddWrite(*rst); 816 AddWrite(*rst);
822 817
823 AddReadEOF(); 818 AddReadEOF();
824 819
825 BoundTestNetLog log; 820 BoundTestNetLog log;
826 821
827 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 822 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
828 GetNumWrites()); 823 GetNumWrites());
829 MockConnect connect_data(SYNCHRONOUS, OK); 824 MockConnect connect_data(SYNCHRONOUS, OK);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 EXPECT_FALSE(stream->send_stalled_by_flow_control()); 888 EXPECT_FALSE(stream->send_stalled_by_flow_control());
894 } 889 }
895 890
896 // Given an unstall function, runs a test to make sure that a 891 // Given an unstall function, runs a test to make sure that a
897 // request/response (i.e., an HTTP-like) stream resumes after a stall 892 // request/response (i.e., an HTTP-like) stream resumes after a stall
898 // and unstall. 893 // and unstall.
899 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest( 894 void SpdyStreamTest::RunResumeAfterUnstallRequestResponseTest(
900 const UnstallFunction& unstall_function) { 895 const UnstallFunction& unstall_function) {
901 GURL url(kStreamUrl); 896 GURL url(kStreamUrl);
902 897
903 scoped_ptr<SpdyFrame> req( 898 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
904 spdy_util_.ConstructSpdyPost( 899 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
905 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
906 AddWrite(*req); 900 AddWrite(*req);
907 901
908 scoped_ptr<SpdyFrame> body( 902 scoped_ptr<SpdySerializedFrame> body(
909 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true)); 903 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, true));
910 AddWrite(*body); 904 AddWrite(*body);
911 905
912 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 906 scoped_ptr<SpdySerializedFrame> resp(
907 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
913 AddRead(*resp); 908 AddRead(*resp);
914 909
915 AddReadEOF(); 910 AddReadEOF();
916 911
917 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 912 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
918 GetNumWrites()); 913 GetNumWrites());
919 MockConnect connect_data(SYNCHRONOUS, OK); 914 MockConnect connect_data(SYNCHRONOUS, OK);
920 data.set_connect_data(connect_data); 915 data.set_connect_data(connect_data);
921 916
922 session_deps_.socket_factory->AddSocketDataProvider(&data); 917 session_deps_.socket_factory->AddSocketDataProvider(&data);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
969 base::Bind(&AdjustStreamSendWindowSize)); 964 base::Bind(&AdjustStreamSendWindowSize));
970 } 965 }
971 966
972 // Given an unstall function, runs a test to make sure that a 967 // Given an unstall function, runs a test to make sure that a
973 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall 968 // bidirectional (i.e., non-HTTP-like) stream resumes after a stall
974 // and unstall. 969 // and unstall.
975 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest( 970 void SpdyStreamTest::RunResumeAfterUnstallBidirectionalTest(
976 const UnstallFunction& unstall_function) { 971 const UnstallFunction& unstall_function) {
977 GURL url(kStreamUrl); 972 GURL url(kStreamUrl);
978 973
979 scoped_ptr<SpdyFrame> req( 974 scoped_ptr<SpdySerializedFrame> req(spdy_util_.ConstructSpdyPost(
980 spdy_util_.ConstructSpdyPost( 975 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
981 kStreamUrl, 1, kPostBodyLength, LOWEST, NULL, 0));
982 AddWrite(*req); 976 AddWrite(*req);
983 977
984 AddReadPause(); 978 AddReadPause();
985 979
986 scoped_ptr<SpdyFrame> resp(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 980 scoped_ptr<SpdySerializedFrame> resp(
981 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
987 AddRead(*resp); 982 AddRead(*resp);
988 983
989 scoped_ptr<SpdyFrame> msg( 984 scoped_ptr<SpdySerializedFrame> msg(
990 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 985 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
991 AddWrite(*msg); 986 AddWrite(*msg);
992 987
993 scoped_ptr<SpdyFrame> echo( 988 scoped_ptr<SpdySerializedFrame> echo(
994 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 989 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
995 AddRead(*echo); 990 AddRead(*echo);
996 991
997 AddReadEOF(); 992 AddReadEOF();
998 993
999 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 994 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
1000 GetNumWrites()); 995 GetNumWrites());
1001 MockConnect connect_data(SYNCHRONOUS, OK); 996 MockConnect connect_data(SYNCHRONOUS, OK);
1002 data.set_connect_data(connect_data); 997 data.set_connect_data(connect_data);
1003 998
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 1048
1054 TEST_P(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) { 1049 TEST_P(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) {
1055 RunResumeAfterUnstallBidirectionalTest( 1050 RunResumeAfterUnstallBidirectionalTest(
1056 base::Bind(&AdjustStreamSendWindowSize)); 1051 base::Bind(&AdjustStreamSendWindowSize));
1057 } 1052 }
1058 1053
1059 // Test calculation of amount of bytes received from network. 1054 // Test calculation of amount of bytes received from network.
1060 TEST_P(SpdyStreamTest, ReceivedBytes) { 1055 TEST_P(SpdyStreamTest, ReceivedBytes) {
1061 GURL url(kStreamUrl); 1056 GURL url(kStreamUrl);
1062 1057
1063 scoped_ptr<SpdyFrame> syn( 1058 scoped_ptr<SpdySerializedFrame> syn(
1064 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 1059 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
1065 AddWrite(*syn); 1060 AddWrite(*syn);
1066 1061
1067 AddReadPause(); 1062 AddReadPause();
1068 1063
1069 scoped_ptr<SpdyFrame> 1064 scoped_ptr<SpdySerializedFrame> reply(
1070 reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 1065 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
1071 AddRead(*reply); 1066 AddRead(*reply);
1072 1067
1073 AddReadPause(); 1068 AddReadPause();
1074 1069
1075 scoped_ptr<SpdyFrame> msg( 1070 scoped_ptr<SpdySerializedFrame> msg(
1076 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false)); 1071 spdy_util_.ConstructSpdyBodyFrame(1, kPostBody, kPostBodyLength, false));
1077 AddRead(*msg); 1072 AddRead(*msg);
1078 1073
1079 AddReadPause(); 1074 AddReadPause();
1080 1075
1081 AddReadEOF(); 1076 AddReadEOF();
1082 1077
1083 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), 1078 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(),
1084 GetNumWrites()); 1079 GetNumWrites());
1085 MockConnect connect_data(SYNCHRONOUS, OK); 1080 MockConnect connect_data(SYNCHRONOUS, OK);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 EXPECT_EQ(response_len, stream->raw_received_bytes()); 1124 EXPECT_EQ(response_len, stream->raw_received_bytes());
1130 1125
1131 // FIN 1126 // FIN
1132 data.Resume(); 1127 data.Resume();
1133 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 1128 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
1134 } 1129 }
1135 1130
1136 } // namespace test 1131 } // namespace test
1137 1132
1138 } // namespace net 1133 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | net/spdy/spdy_test_util_common.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698