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 <algorithm> | 9 #include <algorithm> |
10 #include <cstddef> | 10 #include <cstddef> |
11 #include <limits> | 11 #include <limits> |
12 #include <memory> | 12 #include <memory> |
13 #include <string> | |
14 #include <utility> | 13 #include <utility> |
15 #include <vector> | 14 #include <vector> |
16 | 15 |
17 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
18 #include "base/run_loop.h" | 17 #include "base/run_loop.h" |
19 #include "net/base/completion_callback.h" | 18 #include "net/base/completion_callback.h" |
20 #include "net/base/request_priority.h" | 19 #include "net/base/request_priority.h" |
21 #include "net/log/net_log_event_type.h" | 20 #include "net/log/net_log_event_type.h" |
22 #include "net/log/test_net_log.h" | 21 #include "net/log/test_net_log.h" |
23 #include "net/log/test_net_log_entry.h" | 22 #include "net/log/test_net_log_entry.h" |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 SpdyHeaderBlock headers( | 188 SpdyHeaderBlock headers( |
190 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); | 189 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); |
191 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), | 190 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), |
192 IsError(ERR_IO_PENDING)); | 191 IsError(ERR_IO_PENDING)); |
193 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 192 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
194 | 193 |
195 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 194 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
196 | 195 |
197 EXPECT_TRUE(delegate.send_headers_completed()); | 196 EXPECT_TRUE(delegate.send_headers_completed()); |
198 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 197 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
199 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 198 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
200 delegate.TakeReceivedData()); | 199 delegate.TakeReceivedData()); |
201 EXPECT_TRUE(data.AllWriteDataConsumed()); | 200 EXPECT_TRUE(data.AllWriteDataConsumed()); |
202 } | 201 } |
203 | 202 |
204 // Delegate that receives trailers. | 203 // Delegate that receives trailers. |
205 class StreamDelegateWithTrailers : public test::StreamDelegateWithBody { | 204 class StreamDelegateWithTrailers : public test::StreamDelegateWithBody { |
206 public: | 205 public: |
207 StreamDelegateWithTrailers(const base::WeakPtr<SpdyStream>& stream, | 206 StreamDelegateWithTrailers(const base::WeakPtr<SpdyStream>& stream, |
208 SpdyStringPiece data) | 207 SpdyStringPiece data) |
209 : StreamDelegateWithBody(stream, data) {} | 208 : StreamDelegateWithBody(stream, data) {} |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 IsError(ERR_IO_PENDING)); | 269 IsError(ERR_IO_PENDING)); |
271 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 270 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
272 | 271 |
273 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 272 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
274 | 273 |
275 EXPECT_TRUE(delegate.send_headers_completed()); | 274 EXPECT_TRUE(delegate.send_headers_completed()); |
276 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 275 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
277 const SpdyHeaderBlock& received_trailers = delegate.trailers(); | 276 const SpdyHeaderBlock& received_trailers = delegate.trailers(); |
278 SpdyHeaderBlock::const_iterator it = received_trailers.find("foo"); | 277 SpdyHeaderBlock::const_iterator it = received_trailers.find("foo"); |
279 EXPECT_EQ("bar", it->second); | 278 EXPECT_EQ("bar", it->second); |
280 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 279 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
281 delegate.TakeReceivedData()); | 280 delegate.TakeReceivedData()); |
282 EXPECT_TRUE(data.AllWriteDataConsumed()); | 281 EXPECT_TRUE(data.AllWriteDataConsumed()); |
283 } | 282 } |
284 | 283 |
285 TEST_F(SpdyStreamTest, PushedStream) { | 284 TEST_F(SpdyStreamTest, PushedStream) { |
286 SpdySerializedFrame req( | 285 SpdySerializedFrame req( |
287 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 286 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
288 AddWrite(req); | 287 AddWrite(req); |
289 | 288 |
290 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 289 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), | 416 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), |
418 IsError(ERR_IO_PENDING)); | 417 IsError(ERR_IO_PENDING)); |
419 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 418 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
420 | 419 |
421 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 420 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
422 | 421 |
423 const SpdyStreamId stream_id = delegate.stream_id(); | 422 const SpdyStreamId stream_id = delegate.stream_id(); |
424 | 423 |
425 EXPECT_TRUE(delegate.send_headers_completed()); | 424 EXPECT_TRUE(delegate.send_headers_completed()); |
426 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 425 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
427 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 426 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
428 delegate.TakeReceivedData()); | 427 delegate.TakeReceivedData()); |
429 EXPECT_TRUE(data.AllWriteDataConsumed()); | 428 EXPECT_TRUE(data.AllWriteDataConsumed()); |
430 | 429 |
431 // Check that the NetLog was filled reasonably. | 430 // Check that the NetLog was filled reasonably. |
432 TestNetLogEntry::List entries; | 431 TestNetLogEntry::List entries; |
433 log.GetEntries(&entries); | 432 log.GetEntries(&entries); |
434 EXPECT_LT(0u, entries.size()); | 433 EXPECT_LT(0u, entries.size()); |
435 | 434 |
436 // Check that we logged SPDY_STREAM_ERROR correctly. | 435 // Check that we logged SPDY_STREAM_ERROR correctly. |
437 int pos = ExpectLogContainsSomewhere( | 436 int pos = ExpectLogContainsSomewhere( |
438 entries, 0, NetLogEventType::HTTP2_STREAM_ERROR, NetLogEventPhase::NONE); | 437 entries, 0, NetLogEventType::HTTP2_STREAM_ERROR, NetLogEventPhase::NONE); |
439 | 438 |
440 int stream_id2; | 439 int stream_id2; |
441 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); | 440 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); |
442 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); | 441 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); |
443 } | 442 } |
444 | 443 |
445 // Make sure that large blocks of data are properly split up into frame-sized | 444 // Make sure that large blocks of data are properly split up into frame-sized |
446 // chunks for a request/response (i.e., an HTTP-like) stream. | 445 // chunks for a request/response (i.e., an HTTP-like) stream. |
447 TEST_F(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) { | 446 TEST_F(SpdyStreamTest, SendLargeDataAfterOpenRequestResponse) { |
448 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 447 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
449 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); | 448 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); |
450 AddWrite(req); | 449 AddWrite(req); |
451 | 450 |
452 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); | 451 SpdyString chunk_data(kMaxSpdyFrameChunkSize, 'x'); |
453 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame( | 452 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame( |
454 1, chunk_data.data(), chunk_data.length(), false)); | 453 1, chunk_data.data(), chunk_data.length(), false)); |
455 AddWrite(chunk); | 454 AddWrite(chunk); |
456 AddWrite(chunk); | 455 AddWrite(chunk); |
457 | 456 |
458 SpdySerializedFrame last_chunk(spdy_util_.ConstructSpdyDataFrame( | 457 SpdySerializedFrame last_chunk(spdy_util_.ConstructSpdyDataFrame( |
459 1, chunk_data.data(), chunk_data.length(), true)); | 458 1, chunk_data.data(), chunk_data.length(), true)); |
460 AddWrite(last_chunk); | 459 AddWrite(last_chunk); |
461 | 460 |
462 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 461 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
463 AddRead(resp); | 462 AddRead(resp); |
464 | 463 |
465 AddReadEOF(); | 464 AddReadEOF(); |
466 | 465 |
467 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), | 466 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |
468 GetNumWrites()); | 467 GetNumWrites()); |
469 MockConnect connect_data(SYNCHRONOUS, OK); | 468 MockConnect connect_data(SYNCHRONOUS, OK); |
470 data.set_connect_data(connect_data); | 469 data.set_connect_data(connect_data); |
471 session_deps_.socket_factory->AddSocketDataProvider(&data); | 470 session_deps_.socket_factory->AddSocketDataProvider(&data); |
472 | 471 |
473 AddSSLSocketData(); | 472 AddSSLSocketData(); |
474 | 473 |
475 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); | 474 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); |
476 | 475 |
477 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 476 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
478 SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); | 477 SPDY_REQUEST_RESPONSE_STREAM, session, url_, LOWEST, NetLogWithSource()); |
479 ASSERT_TRUE(stream); | 478 ASSERT_TRUE(stream); |
480 | 479 |
481 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x'); | 480 SpdyString body_data(3 * kMaxSpdyFrameChunkSize, 'x'); |
482 StreamDelegateWithBody delegate(stream, body_data); | 481 StreamDelegateWithBody delegate(stream, body_data); |
483 stream->SetDelegate(&delegate); | 482 stream->SetDelegate(&delegate); |
484 | 483 |
485 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 484 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
486 | 485 |
487 SpdyHeaderBlock headers( | 486 SpdyHeaderBlock headers( |
488 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); | 487 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); |
489 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), | 488 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), |
490 IsError(ERR_IO_PENDING)); | 489 IsError(ERR_IO_PENDING)); |
491 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 490 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
492 | 491 |
493 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 492 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
494 | 493 |
495 EXPECT_TRUE(delegate.send_headers_completed()); | 494 EXPECT_TRUE(delegate.send_headers_completed()); |
496 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 495 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
497 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); | 496 EXPECT_EQ(SpdyString(), delegate.TakeReceivedData()); |
498 EXPECT_TRUE(data.AllWriteDataConsumed()); | 497 EXPECT_TRUE(data.AllWriteDataConsumed()); |
499 } | 498 } |
500 | 499 |
501 // Make sure that large blocks of data are properly split up into frame-sized | 500 // Make sure that large blocks of data are properly split up into frame-sized |
502 // chunks for a bidirectional (i.e., non-HTTP-like) stream. | 501 // chunks for a bidirectional (i.e., non-HTTP-like) stream. |
503 TEST_F(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) { | 502 TEST_F(SpdyStreamTest, SendLargeDataAfterOpenBidirectional) { |
504 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 503 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
505 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); | 504 kDefaultUrl, 1, kPostBodyLength, LOWEST, nullptr, 0)); |
506 AddWrite(req); | 505 AddWrite(req); |
507 | 506 |
508 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 507 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
509 AddRead(resp); | 508 AddRead(resp); |
510 | 509 |
511 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); | 510 SpdyString chunk_data(kMaxSpdyFrameChunkSize, 'x'); |
512 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame( | 511 SpdySerializedFrame chunk(spdy_util_.ConstructSpdyDataFrame( |
513 1, chunk_data.data(), chunk_data.length(), false)); | 512 1, chunk_data.data(), chunk_data.length(), false)); |
514 AddWrite(chunk); | 513 AddWrite(chunk); |
515 AddWrite(chunk); | 514 AddWrite(chunk); |
516 AddWrite(chunk); | 515 AddWrite(chunk); |
517 | 516 |
518 AddReadEOF(); | 517 AddReadEOF(); |
519 | 518 |
520 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), | 519 SequencedSocketData data(GetReads(), GetNumReads(), GetWrites(), |
521 GetNumWrites()); | 520 GetNumWrites()); |
522 MockConnect connect_data(SYNCHRONOUS, OK); | 521 MockConnect connect_data(SYNCHRONOUS, OK); |
523 data.set_connect_data(connect_data); | 522 data.set_connect_data(connect_data); |
524 session_deps_.socket_factory->AddSocketDataProvider(&data); | 523 session_deps_.socket_factory->AddSocketDataProvider(&data); |
525 | 524 |
526 AddSSLSocketData(); | 525 AddSSLSocketData(); |
527 | 526 |
528 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); | 527 base::WeakPtr<SpdySession> session(CreateDefaultSpdySession()); |
529 | 528 |
530 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( | 529 base::WeakPtr<SpdyStream> stream = CreateStreamSynchronously( |
531 SPDY_BIDIRECTIONAL_STREAM, session, url_, LOWEST, NetLogWithSource()); | 530 SPDY_BIDIRECTIONAL_STREAM, session, url_, LOWEST, NetLogWithSource()); |
532 ASSERT_TRUE(stream); | 531 ASSERT_TRUE(stream); |
533 | 532 |
534 std::string body_data(3 * kMaxSpdyFrameChunkSize, 'x'); | 533 SpdyString body_data(3 * kMaxSpdyFrameChunkSize, 'x'); |
535 StreamDelegateSendImmediate delegate(stream, body_data); | 534 StreamDelegateSendImmediate delegate(stream, body_data); |
536 stream->SetDelegate(&delegate); | 535 stream->SetDelegate(&delegate); |
537 | 536 |
538 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 537 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
539 | 538 |
540 SpdyHeaderBlock headers( | 539 SpdyHeaderBlock headers( |
541 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); | 540 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kPostBodyLength)); |
542 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), | 541 EXPECT_THAT(stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND), |
543 IsError(ERR_IO_PENDING)); | 542 IsError(ERR_IO_PENDING)); |
544 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 543 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
545 | 544 |
546 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 545 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
547 | 546 |
548 EXPECT_TRUE(delegate.send_headers_completed()); | 547 EXPECT_TRUE(delegate.send_headers_completed()); |
549 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 548 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
550 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); | 549 EXPECT_EQ(SpdyString(), delegate.TakeReceivedData()); |
551 EXPECT_TRUE(data.AllWriteDataConsumed()); | 550 EXPECT_TRUE(data.AllWriteDataConsumed()); |
552 } | 551 } |
553 | 552 |
554 // Receiving a header with uppercase ASCII should result in a protocol error. | 553 // Receiving a header with uppercase ASCII should result in a protocol error. |
555 TEST_F(SpdyStreamTest, UpperCaseHeaders) { | 554 TEST_F(SpdyStreamTest, UpperCaseHeaders) { |
556 SpdySerializedFrame req( | 555 SpdySerializedFrame req( |
557 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 556 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
558 AddWrite(req); | 557 AddWrite(req); |
559 | 558 |
560 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; | 559 const char* const kExtraHeaders[] = {"X-UpperCase", "yes"}; |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 779 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
781 | 780 |
782 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 781 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
783 EXPECT_THAT( | 782 EXPECT_THAT( |
784 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND), | 783 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND), |
785 IsError(ERR_IO_PENDING)); | 784 IsError(ERR_IO_PENDING)); |
786 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 785 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
787 | 786 |
788 EXPECT_THAT(delegate.WaitForClose(), IsOk()); | 787 EXPECT_THAT(delegate.WaitForClose(), IsOk()); |
789 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 788 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
790 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 789 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
791 delegate.TakeReceivedData()); | 790 delegate.TakeReceivedData()); |
792 | 791 |
793 // Finish async network reads and writes. | 792 // Finish async network reads and writes. |
794 base::RunLoop().RunUntilIdle(); | 793 base::RunLoop().RunUntilIdle(); |
795 | 794 |
796 EXPECT_TRUE(data.AllWriteDataConsumed()); | 795 EXPECT_TRUE(data.AllWriteDataConsumed()); |
797 EXPECT_TRUE(data.AllReadDataConsumed()); | 796 EXPECT_TRUE(data.AllReadDataConsumed()); |
798 } | 797 } |
799 | 798 |
800 TEST_F(SpdyStreamTest, HeadersMustPreceedData) { | 799 TEST_F(SpdyStreamTest, HeadersMustPreceedData) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 889 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
891 | 890 |
892 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 891 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
893 EXPECT_THAT( | 892 EXPECT_THAT( |
894 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND), | 893 stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND), |
895 IsError(ERR_IO_PENDING)); | 894 IsError(ERR_IO_PENDING)); |
896 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 895 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
897 | 896 |
898 EXPECT_THAT(delegate.WaitForClose(), IsOk()); | 897 EXPECT_THAT(delegate.WaitForClose(), IsOk()); |
899 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 898 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
900 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 899 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
901 delegate.TakeReceivedData()); | 900 delegate.TakeReceivedData()); |
902 | 901 |
903 // Finish async network reads and writes. | 902 // Finish async network reads and writes. |
904 base::RunLoop().RunUntilIdle(); | 903 base::RunLoop().RunUntilIdle(); |
905 | 904 |
906 EXPECT_TRUE(data.AllWriteDataConsumed()); | 905 EXPECT_TRUE(data.AllWriteDataConsumed()); |
907 EXPECT_TRUE(data.AllReadDataConsumed()); | 906 EXPECT_TRUE(data.AllReadDataConsumed()); |
908 } | 907 } |
909 | 908 |
910 TEST_F(SpdyStreamTest, TrailersMustNotFollowTrailers) { | 909 TEST_F(SpdyStreamTest, TrailersMustNotFollowTrailers) { |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 | 1068 |
1070 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); | 1069 EXPECT_TRUE(stream->GetUrlFromHeaders().is_empty()); |
1071 | 1070 |
1072 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 1071 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
1073 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), | 1072 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequestHeaders(std::move(headers), |
1074 NO_MORE_DATA_TO_SEND)); | 1073 NO_MORE_DATA_TO_SEND)); |
1075 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); | 1074 EXPECT_EQ(kDefaultUrl, stream->GetUrlFromHeaders().spec()); |
1076 | 1075 |
1077 EXPECT_THAT(delegate.WaitForClose(), IsOk()); | 1076 EXPECT_THAT(delegate.WaitForClose(), IsOk()); |
1078 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); | 1077 EXPECT_EQ("200", delegate.GetResponseHeaderValue(spdy_util_.GetStatusKey())); |
1079 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 1078 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
1080 delegate.TakeReceivedData()); | 1079 delegate.TakeReceivedData()); |
1081 | 1080 |
1082 // Finish async network reads and writes. | 1081 // Finish async network reads and writes. |
1083 base::RunLoop().RunUntilIdle(); | 1082 base::RunLoop().RunUntilIdle(); |
1084 | 1083 |
1085 EXPECT_TRUE(data.AllWriteDataConsumed()); | 1084 EXPECT_TRUE(data.AllWriteDataConsumed()); |
1086 EXPECT_TRUE(data.AllReadDataConsumed()); | 1085 EXPECT_TRUE(data.AllReadDataConsumed()); |
1087 } | 1086 } |
1088 | 1087 |
1089 TEST_F(SpdyStreamTest, StatusMustBeNumber) { | 1088 TEST_F(SpdyStreamTest, StatusMustBeNumber) { |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 EXPECT_TRUE(stream->send_stalled_by_flow_control()); | 1380 EXPECT_TRUE(stream->send_stalled_by_flow_control()); |
1382 | 1381 |
1383 unstall_function.Run(stream, kPostBodyLength); | 1382 unstall_function.Run(stream, kPostBodyLength); |
1384 | 1383 |
1385 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 1384 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
1386 | 1385 |
1387 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 1386 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
1388 | 1387 |
1389 EXPECT_TRUE(delegate.send_headers_completed()); | 1388 EXPECT_TRUE(delegate.send_headers_completed()); |
1390 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); | 1389 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); |
1391 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); | 1390 EXPECT_EQ(SpdyString(), delegate.TakeReceivedData()); |
1392 EXPECT_TRUE(data.AllWriteDataConsumed()); | 1391 EXPECT_TRUE(data.AllWriteDataConsumed()); |
1393 } | 1392 } |
1394 | 1393 |
1395 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeIncreaseRequestResponse) { | 1394 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeIncreaseRequestResponse) { |
1396 RunResumeAfterUnstallRequestResponseTest( | 1395 RunResumeAfterUnstallRequestResponseTest( |
1397 base::Bind(&IncreaseStreamSendWindowSize)); | 1396 base::Bind(&IncreaseStreamSendWindowSize)); |
1398 } | 1397 } |
1399 | 1398 |
1400 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustRequestResponse) { | 1399 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustRequestResponse) { |
1401 RunResumeAfterUnstallRequestResponseTest( | 1400 RunResumeAfterUnstallRequestResponseTest( |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1462 EXPECT_TRUE(stream->send_stalled_by_flow_control()); | 1461 EXPECT_TRUE(stream->send_stalled_by_flow_control()); |
1463 | 1462 |
1464 unstall_function.Run(stream, kPostBodyLength); | 1463 unstall_function.Run(stream, kPostBodyLength); |
1465 | 1464 |
1466 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 1465 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
1467 | 1466 |
1468 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 1467 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
1469 | 1468 |
1470 EXPECT_TRUE(delegate.send_headers_completed()); | 1469 EXPECT_TRUE(delegate.send_headers_completed()); |
1471 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); | 1470 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); |
1472 EXPECT_EQ(std::string(kPostBody, kPostBodyLength), | 1471 EXPECT_EQ(SpdyString(kPostBody, kPostBodyLength), |
1473 delegate.TakeReceivedData()); | 1472 delegate.TakeReceivedData()); |
1474 EXPECT_TRUE(data.AllWriteDataConsumed()); | 1473 EXPECT_TRUE(data.AllWriteDataConsumed()); |
1475 } | 1474 } |
1476 | 1475 |
1477 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeIncreaseBidirectional) { | 1476 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeIncreaseBidirectional) { |
1478 RunResumeAfterUnstallBidirectionalTest( | 1477 RunResumeAfterUnstallBidirectionalTest( |
1479 base::Bind(&IncreaseStreamSendWindowSize)); | 1478 base::Bind(&IncreaseStreamSendWindowSize)); |
1480 } | 1479 } |
1481 | 1480 |
1482 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) { | 1481 TEST_F(SpdyStreamTest, ResumeAfterSendWindowSizeAdjustBidirectional) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1552 EXPECT_EQ(response_len, stream->raw_received_bytes()); | 1551 EXPECT_EQ(response_len, stream->raw_received_bytes()); |
1553 | 1552 |
1554 // FIN | 1553 // FIN |
1555 data.Resume(); | 1554 data.Resume(); |
1556 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 1555 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
1557 } | 1556 } |
1558 | 1557 |
1559 } // namespace test | 1558 } // namespace test |
1560 | 1559 |
1561 } // namespace net | 1560 } // namespace net |
OLD | NEW |