| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |