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

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

Issue 2141993002: Remove many-many SpdyMajorVersion and NextProto arguments and members. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove OnSynStream() and OnSynReply(). Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/base64.h" 10 #include "base/base64.h"
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/test/histogram_tester.h" 14 #include "base/test/histogram_tester.h"
15 #include "net/base/host_port_pair.h" 15 #include "net/base/host_port_pair.h"
16 #include "net/base/io_buffer.h" 16 #include "net/base/io_buffer.h"
17 #include "net/base/ip_endpoint.h" 17 #include "net/base/ip_endpoint.h"
18 #include "net/base/proxy_delegate.h" 18 #include "net/base/proxy_delegate.h"
19 #include "net/base/request_priority.h" 19 #include "net/base/request_priority.h"
20 #include "net/base/test_data_stream.h" 20 #include "net/base/test_data_stream.h"
21 #include "net/base/test_proxy_delegate.h" 21 #include "net/base/test_proxy_delegate.h"
22 #include "net/cert/ct_policy_status.h" 22 #include "net/cert/ct_policy_status.h"
23 #include "net/log/test_net_log.h" 23 #include "net/log/test_net_log.h"
24 #include "net/log/test_net_log_entry.h" 24 #include "net/log/test_net_log_entry.h"
25 #include "net/log/test_net_log_util.h" 25 #include "net/log/test_net_log_util.h"
26 #include "net/proxy/proxy_server.h" 26 #include "net/proxy/proxy_server.h"
27 #include "net/socket/client_socket_pool_manager.h" 27 #include "net/socket/client_socket_pool_manager.h"
28 #include "net/socket/next_proto.h"
29 #include "net/socket/socket_test_util.h" 28 #include "net/socket/socket_test_util.h"
30 #include "net/spdy/spdy_http_utils.h" 29 #include "net/spdy/spdy_http_utils.h"
31 #include "net/spdy/spdy_session_pool.h" 30 #include "net/spdy/spdy_session_pool.h"
32 #include "net/spdy/spdy_session_test_util.h" 31 #include "net/spdy/spdy_session_test_util.h"
33 #include "net/spdy/spdy_stream.h" 32 #include "net/spdy/spdy_stream.h"
34 #include "net/spdy/spdy_stream_test_util.h" 33 #include "net/spdy/spdy_stream_test_util.h"
35 #include "net/spdy/spdy_test_util_common.h" 34 #include "net/spdy/spdy_test_util_common.h"
36 #include "net/spdy/spdy_test_utils.h" 35 #include "net/spdy/spdy_test_utils.h"
37 #include "net/test/cert_test_util.h" 36 #include "net/test/cert_test_util.h"
38 #include "net/test/gtest_util.h" 37 #include "net/test/gtest_util.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 spdy_util_.ConstructSpdyGoAway(1)); 322 spdy_util_.ConstructSpdyGoAway(1));
324 MockRead reads[] = { 323 MockRead reads[] = {
325 CreateMockRead(*goaway, 0), 324 CreateMockRead(*goaway, 0),
326 }; 325 };
327 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 326 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
328 session_deps_.socket_factory->AddSocketDataProvider(&data); 327 session_deps_.socket_factory->AddSocketDataProvider(&data);
329 328
330 CreateNetworkSession(); 329 CreateNetworkSession();
331 CreateInsecureSpdySession(); 330 CreateInsecureSpdySession();
332 331
333 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
334
335 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_)); 332 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_));
336 333
337 // Read and process the GOAWAY frame. 334 // Read and process the GOAWAY frame.
338 base::RunLoop().RunUntilIdle(); 335 base::RunLoop().RunUntilIdle();
339 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); 336 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_));
340 EXPECT_FALSE(session_); 337 EXPECT_FALSE(session_);
341 } 338 }
342 339
343 // A session receiving a GOAWAY frame immediately with no active 340 // A session receiving a GOAWAY frame immediately with no active
344 // streams should then close. 341 // streams should then close.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 MockWrite writes[] = { 381 MockWrite writes[] = {
385 CreateMockWrite(*req1, 0), 382 CreateMockWrite(*req1, 0),
386 CreateMockWrite(*req2, 1), 383 CreateMockWrite(*req2, 1),
387 }; 384 };
388 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 385 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
389 session_deps_.socket_factory->AddSocketDataProvider(&data); 386 session_deps_.socket_factory->AddSocketDataProvider(&data);
390 387
391 CreateNetworkSession(); 388 CreateNetworkSession();
392 CreateInsecureSpdySession(); 389 CreateInsecureSpdySession();
393 390
394 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
395
396 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 391 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
397 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 392 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
398 test::StreamDelegateDoNothing delegate1(spdy_stream1); 393 test::StreamDelegateDoNothing delegate1(spdy_stream1);
399 spdy_stream1->SetDelegate(&delegate1); 394 spdy_stream1->SetDelegate(&delegate1);
400 395
401 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 396 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
402 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 397 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
403 test::StreamDelegateDoNothing delegate2(spdy_stream2); 398 test::StreamDelegateDoNothing delegate2(spdy_stream2);
404 spdy_stream2->SetDelegate(&delegate2); 399 spdy_stream2->SetDelegate(&delegate2);
405 400
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 452 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
458 MockWrite writes[] = { 453 MockWrite writes[] = {
459 CreateMockWrite(*req1, 0), 454 CreateMockWrite(*req1, 0),
460 }; 455 };
461 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 456 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
462 session_deps_.socket_factory->AddSocketDataProvider(&data); 457 session_deps_.socket_factory->AddSocketDataProvider(&data);
463 458
464 CreateNetworkSession(); 459 CreateNetworkSession();
465 CreateInsecureSpdySession(); 460 CreateInsecureSpdySession();
466 461
467 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
468
469 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 462 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
470 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 463 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
471 test::StreamDelegateDoNothing delegate1(spdy_stream1); 464 test::StreamDelegateDoNothing delegate1(spdy_stream1);
472 spdy_stream1->SetDelegate(&delegate1); 465 spdy_stream1->SetDelegate(&delegate1);
473 std::unique_ptr<SpdyHeaderBlock> headers1( 466 std::unique_ptr<SpdyHeaderBlock> headers1(
474 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 467 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
475 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND); 468 spdy_stream1->SendRequestHeaders(std::move(headers1), NO_MORE_DATA_TO_SEND);
476 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders()); 469 EXPECT_TRUE(spdy_stream1->HasUrlFromHeaders());
477 470
478 EXPECT_EQ(0u, spdy_stream1->stream_id()); 471 EXPECT_EQ(0u, spdy_stream1->stream_id());
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 MockWrite writes[] = { 517 MockWrite writes[] = {
525 CreateMockWrite(*req1, 0), 518 CreateMockWrite(*req1, 0),
526 CreateMockWrite(*req2, 1), 519 CreateMockWrite(*req2, 1),
527 }; 520 };
528 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 521 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
529 session_deps_.socket_factory->AddSocketDataProvider(&data); 522 session_deps_.socket_factory->AddSocketDataProvider(&data);
530 523
531 CreateNetworkSession(); 524 CreateNetworkSession();
532 CreateInsecureSpdySession(); 525 CreateInsecureSpdySession();
533 526
534 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
535
536 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 527 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
537 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 528 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
538 test::StreamDelegateDoNothing delegate1(spdy_stream1); 529 test::StreamDelegateDoNothing delegate1(spdy_stream1);
539 spdy_stream1->SetDelegate(&delegate1); 530 spdy_stream1->SetDelegate(&delegate1);
540 531
541 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 532 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
542 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 533 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
543 test::StreamDelegateDoNothing delegate2(spdy_stream2); 534 test::StreamDelegateDoNothing delegate2(spdy_stream2);
544 spdy_stream2->SetDelegate(&delegate2); 535 spdy_stream2->SetDelegate(&delegate2);
545 536
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 MockWrite writes[] = { 590 MockWrite writes[] = {
600 CreateMockWrite(*req1, 0), 591 CreateMockWrite(*req1, 0),
601 CreateMockWrite(*req2, 1), 592 CreateMockWrite(*req2, 1),
602 }; 593 };
603 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 594 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
604 session_deps_.socket_factory->AddSocketDataProvider(&data); 595 session_deps_.socket_factory->AddSocketDataProvider(&data);
605 596
606 CreateNetworkSession(); 597 CreateNetworkSession();
607 CreateInsecureSpdySession(); 598 CreateInsecureSpdySession();
608 599
609 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
610
611 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously( 600 base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
612 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 601 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
613 test::StreamDelegateDoNothing delegate1(spdy_stream1); 602 test::StreamDelegateDoNothing delegate1(spdy_stream1);
614 spdy_stream1->SetDelegate(&delegate1); 603 spdy_stream1->SetDelegate(&delegate1);
615 604
616 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously( 605 base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
617 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 606 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
618 test::StreamDelegateDoNothing delegate2(spdy_stream2); 607 test::StreamDelegateDoNothing delegate2(spdy_stream2);
619 spdy_stream2->SetDelegate(&delegate2); 608 spdy_stream2->SetDelegate(&delegate2);
620 609
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 724 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
736 MockWrite writes[] = { 725 MockWrite writes[] = {
737 CreateMockWrite(*req, 0), 726 CreateMockWrite(*req, 0),
738 }; 727 };
739 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 728 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
740 session_deps_.socket_factory->AddSocketDataProvider(&data); 729 session_deps_.socket_factory->AddSocketDataProvider(&data);
741 730
742 CreateNetworkSession(); 731 CreateNetworkSession();
743 CreateInsecureSpdySession(); 732 CreateInsecureSpdySession();
744 733
745 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
746
747 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 734 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
748 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 735 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
749 test::StreamDelegateDoNothing delegate(spdy_stream); 736 test::StreamDelegateDoNothing delegate(spdy_stream);
750 spdy_stream->SetDelegate(&delegate); 737 spdy_stream->SetDelegate(&delegate);
751 738
752 std::unique_ptr<SpdyHeaderBlock> headers( 739 std::unique_ptr<SpdyHeaderBlock> headers(
753 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 740 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
754 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 741 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
755 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 742 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
756 743
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 786 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
800 std::unique_ptr<SpdySerializedFrame> rst( 787 std::unique_ptr<SpdySerializedFrame> rst(
801 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); 788 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM));
802 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)}; 789 MockWrite writes[] = {CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5)};
803 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 790 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
804 session_deps_.socket_factory->AddSocketDataProvider(&data); 791 session_deps_.socket_factory->AddSocketDataProvider(&data);
805 792
806 CreateNetworkSession(); 793 CreateNetworkSession();
807 CreateInsecureSpdySession(); 794 CreateInsecureSpdySession();
808 795
809 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
810
811 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 796 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
812 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 797 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
813 test::StreamDelegateDoNothing delegate(spdy_stream); 798 test::StreamDelegateDoNothing delegate(spdy_stream);
814 spdy_stream->SetDelegate(&delegate); 799 spdy_stream->SetDelegate(&delegate);
815 800
816 std::unique_ptr<SpdyHeaderBlock> headers( 801 std::unique_ptr<SpdyHeaderBlock> headers(
817 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 802 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
818 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 803 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
819 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 804 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
820 805
(...skipping 29 matching lines...) Expand all
850 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 835 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
851 MockWrite writes[] = { 836 MockWrite writes[] = {
852 CreateMockWrite(*req1, 0), 837 CreateMockWrite(*req1, 0),
853 }; 838 };
854 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 839 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
855 session_deps_.socket_factory->AddSocketDataProvider(&data); 840 session_deps_.socket_factory->AddSocketDataProvider(&data);
856 841
857 CreateNetworkSession(); 842 CreateNetworkSession();
858 CreateInsecureSpdySession(); 843 CreateInsecureSpdySession();
859 844
860 EXPECT_EQ(HTTP2, session_->GetProtocolVersion());
861
862 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously( 845 base::WeakPtr<SpdyStream> spdy_stream = CreateStreamSynchronously(
863 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog()); 846 SPDY_REQUEST_RESPONSE_STREAM, session_, test_url_, MEDIUM, BoundNetLog());
864 test::StreamDelegateDoNothing delegate(spdy_stream); 847 test::StreamDelegateDoNothing delegate(spdy_stream);
865 spdy_stream->SetDelegate(&delegate); 848 spdy_stream->SetDelegate(&delegate);
866 849
867 std::unique_ptr<SpdyHeaderBlock> headers( 850 std::unique_ptr<SpdyHeaderBlock> headers(
868 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl))); 851 new SpdyHeaderBlock(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)));
869 852
870 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 853 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
871 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders()); 854 EXPECT_TRUE(spdy_stream->HasUrlFromHeaders());
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1363 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); 1346 spdy_stream->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND);
1364 1347
1365 base::RunLoop().RunUntilIdle(); 1348 base::RunLoop().RunUntilIdle();
1366 1349
1367 // Verify that there is one unclaimed push stream. 1350 // Verify that there is one unclaimed push stream.
1368 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1351 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1369 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( 1352 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(
1370 GURL("https://www.example.org/a.dat"))); 1353 GURL("https://www.example.org/a.dat")));
1371 1354
1372 // Unclaimed push body consumed bytes from the session window. 1355 // Unclaimed push body consumed bytes from the session window.
1373 EXPECT_EQ( 1356 EXPECT_EQ(kDefaultInitialWindowSize - kUploadDataSize,
1374 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2) - kUploadDataSize, 1357 session_->session_recv_window_size_);
1375 session_->session_recv_window_size_);
1376 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 1358 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
1377 1359
1378 // Shift time to expire the push stream. Read the second SYN_STREAM, 1360 // Shift time to expire the push stream. Read the second SYN_STREAM,
1379 // and verify a RST_STREAM was written. 1361 // and verify a RST_STREAM was written.
1380 g_time_delta = base::TimeDelta::FromSeconds(301); 1362 g_time_delta = base::TimeDelta::FromSeconds(301);
1381 data.Resume(); 1363 data.Resume();
1382 base::RunLoop().RunUntilIdle(); 1364 base::RunLoop().RunUntilIdle();
1383 1365
1384 // Verify that the second pushed stream evicted the first pushed stream. 1366 // Verify that the second pushed stream evicted the first pushed stream.
1385 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams()); 1367 EXPECT_EQ(1u, session_->num_unclaimed_pushed_streams());
1386 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url( 1368 EXPECT_EQ(1u, session_->count_unclaimed_pushed_streams_for_url(
1387 GURL("https://www.example.org/0.dat"))); 1369 GURL("https://www.example.org/0.dat")));
1388 1370
1389 // Verify that the session window reclaimed the evicted stream body. 1371 // Verify that the session window reclaimed the evicted stream body.
1390 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 1372 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
1391 session_->session_recv_window_size_);
1392 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 1373 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
1393 1374
1394 // Read and process EOF. 1375 // Read and process EOF.
1395 EXPECT_TRUE(session_); 1376 EXPECT_TRUE(session_);
1396 data.Resume(); 1377 data.Resume();
1397 base::RunLoop().RunUntilIdle(); 1378 base::RunLoop().RunUntilIdle();
1398 EXPECT_FALSE(session_); 1379 EXPECT_FALSE(session_);
1399 } 1380 }
1400 1381
1401 TEST_P(SpdySessionTest, FailedPing) { 1382 TEST_P(SpdySessionTest, FailedPing) {
(...skipping 1177 matching lines...) Expand 10 before | Expand all | Expand 10 after
2579 } 2560 }
2580 2561
2581 // Test that SpdySession::DoReadLoop reads data from the socket 2562 // Test that SpdySession::DoReadLoop reads data from the socket
2582 // without yielding. This test makes 32k - 1 bytes of data available 2563 // without yielding. This test makes 32k - 1 bytes of data available
2583 // on the socket for reading. It then verifies that it has read all 2564 // on the socket for reading. It then verifies that it has read all
2584 // the available data without yielding. 2565 // the available data without yielding.
2585 TEST_P(SpdySessionTest, ReadDataWithoutYielding) { 2566 TEST_P(SpdySessionTest, ReadDataWithoutYielding) {
2586 session_deps_.host_resolver->set_synchronous_mode(true); 2567 session_deps_.host_resolver->set_synchronous_mode(true);
2587 session_deps_.time_func = InstantaneousReads; 2568 session_deps_.time_func = InstantaneousReads;
2588 2569
2589 BufferedSpdyFramer framer(HTTP2); 2570 BufferedSpdyFramer framer;
2590 2571
2591 std::unique_ptr<SpdySerializedFrame> req1( 2572 std::unique_ptr<SpdySerializedFrame> req1(
2592 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2573 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2593 MockWrite writes[] = { 2574 MockWrite writes[] = {
2594 CreateMockWrite(*req1, 0), 2575 CreateMockWrite(*req1, 0),
2595 }; 2576 };
2596 2577
2597 // Build buffer of size kYieldAfterBytesRead / 4 2578 // Build buffer of size kYieldAfterBytesRead / 4
2598 // (-spdy_data_frame_size). 2579 // (-spdy_data_frame_size).
2599 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2580 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
2666 EXPECT_TRUE(data.AllReadDataConsumed()); 2647 EXPECT_TRUE(data.AllReadDataConsumed());
2667 } 2648 }
2668 2649
2669 // Test that SpdySession::DoReadLoop yields if more than 2650 // Test that SpdySession::DoReadLoop yields if more than
2670 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time 2651 // |kYieldAfterDurationMilliseconds| has passed. This test uses a mock time
2671 // function that makes the response frame look very slow to read. 2652 // function that makes the response frame look very slow to read.
2672 TEST_P(SpdySessionTest, TestYieldingSlowReads) { 2653 TEST_P(SpdySessionTest, TestYieldingSlowReads) {
2673 session_deps_.host_resolver->set_synchronous_mode(true); 2654 session_deps_.host_resolver->set_synchronous_mode(true);
2674 session_deps_.time_func = SlowReads; 2655 session_deps_.time_func = SlowReads;
2675 2656
2676 BufferedSpdyFramer framer(HTTP2); 2657 BufferedSpdyFramer framer;
2677 2658
2678 std::unique_ptr<SpdySerializedFrame> req1( 2659 std::unique_ptr<SpdySerializedFrame> req1(
2679 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2660 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2680 MockWrite writes[] = { 2661 MockWrite writes[] = {
2681 CreateMockWrite(*req1, 0), 2662 CreateMockWrite(*req1, 0),
2682 }; 2663 };
2683 2664
2684 std::unique_ptr<SpdySerializedFrame> resp1( 2665 std::unique_ptr<SpdySerializedFrame> resp1(
2685 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2666 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
2686 2667
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2727 EXPECT_TRUE(data.AllWriteDataConsumed()); 2708 EXPECT_TRUE(data.AllWriteDataConsumed());
2728 EXPECT_TRUE(data.AllReadDataConsumed()); 2709 EXPECT_TRUE(data.AllReadDataConsumed());
2729 } 2710 }
2730 2711
2731 // Regression test for https://crbug.com/531570. 2712 // Regression test for https://crbug.com/531570.
2732 // Test the case where DoRead() takes long but returns synchronously. 2713 // Test the case where DoRead() takes long but returns synchronously.
2733 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) { 2714 TEST_P(SpdySessionTest, TestYieldingSlowSynchronousReads) {
2734 session_deps_.host_resolver->set_synchronous_mode(true); 2715 session_deps_.host_resolver->set_synchronous_mode(true);
2735 session_deps_.time_func = SlowReads; 2716 session_deps_.time_func = SlowReads;
2736 2717
2737 BufferedSpdyFramer framer(HTTP2); 2718 BufferedSpdyFramer framer;
2738 2719
2739 std::unique_ptr<SpdySerializedFrame> req1( 2720 std::unique_ptr<SpdySerializedFrame> req1(
2740 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2721 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2741 MockWrite writes[] = { 2722 MockWrite writes[] = {
2742 CreateMockWrite(*req1, 0), 2723 CreateMockWrite(*req1, 0),
2743 }; 2724 };
2744 2725
2745 std::unique_ptr<SpdySerializedFrame> partial_data_frame( 2726 std::unique_ptr<SpdySerializedFrame> partial_data_frame(
2746 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE)); 2727 framer.CreateDataFrame(1, "foo ", 4, DATA_FLAG_NONE));
2747 std::unique_ptr<SpdySerializedFrame> finish_data_frame( 2728 std::unique_ptr<SpdySerializedFrame> finish_data_frame(
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2795 2776
2796 // Test that SpdySession::DoReadLoop yields while reading the 2777 // Test that SpdySession::DoReadLoop yields while reading the
2797 // data. This test makes 32k + 1 bytes of data available on the socket 2778 // data. This test makes 32k + 1 bytes of data available on the socket
2798 // for reading. It then verifies that DoRead has yielded even though 2779 // for reading. It then verifies that DoRead has yielded even though
2799 // there is data available for it to read (i.e, socket()->Read didn't 2780 // there is data available for it to read (i.e, socket()->Read didn't
2800 // return ERR_IO_PENDING during socket reads). 2781 // return ERR_IO_PENDING during socket reads).
2801 TEST_P(SpdySessionTest, TestYieldingDuringReadData) { 2782 TEST_P(SpdySessionTest, TestYieldingDuringReadData) {
2802 session_deps_.host_resolver->set_synchronous_mode(true); 2783 session_deps_.host_resolver->set_synchronous_mode(true);
2803 session_deps_.time_func = InstantaneousReads; 2784 session_deps_.time_func = InstantaneousReads;
2804 2785
2805 BufferedSpdyFramer framer(HTTP2); 2786 BufferedSpdyFramer framer;
2806 2787
2807 std::unique_ptr<SpdySerializedFrame> req1( 2788 std::unique_ptr<SpdySerializedFrame> req1(
2808 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2789 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2809 MockWrite writes[] = { 2790 MockWrite writes[] = {
2810 CreateMockWrite(*req1, 0), 2791 CreateMockWrite(*req1, 0),
2811 }; 2792 };
2812 2793
2813 // Build buffer of size kYieldAfterBytesRead / 4 2794 // Build buffer of size kYieldAfterBytesRead / 4
2814 // (-spdy_data_frame_size). 2795 // (-spdy_data_frame_size).
2815 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2796 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2889 // 2870 //
2890 // The above reads 26K synchronously. Since that is less that 32K, we 2871 // The above reads 26K synchronously. Since that is less that 32K, we
2891 // will attempt to read again. However, that DoRead() will return 2872 // will attempt to read again. However, that DoRead() will return
2892 // ERR_IO_PENDING (because of async read), so DoReadLoop() will 2873 // ERR_IO_PENDING (because of async read), so DoReadLoop() will
2893 // yield. When we come back, DoRead() will read the results from the 2874 // yield. When we come back, DoRead() will read the results from the
2894 // async read, and rest of the data synchronously. 2875 // async read, and rest of the data synchronously.
2895 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) { 2876 TEST_P(SpdySessionTest, TestYieldingDuringAsyncReadData) {
2896 session_deps_.host_resolver->set_synchronous_mode(true); 2877 session_deps_.host_resolver->set_synchronous_mode(true);
2897 session_deps_.time_func = InstantaneousReads; 2878 session_deps_.time_func = InstantaneousReads;
2898 2879
2899 BufferedSpdyFramer framer(HTTP2); 2880 BufferedSpdyFramer framer;
2900 2881
2901 std::unique_ptr<SpdySerializedFrame> req1( 2882 std::unique_ptr<SpdySerializedFrame> req1(
2902 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2883 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
2903 MockWrite writes[] = { 2884 MockWrite writes[] = {
2904 CreateMockWrite(*req1, 0), 2885 CreateMockWrite(*req1, 0),
2905 }; 2886 };
2906 2887
2907 // Build buffer of size kYieldAfterBytesRead / 4 2888 // Build buffer of size kYieldAfterBytesRead / 4
2908 // (-spdy_data_frame_size). 2889 // (-spdy_data_frame_size).
2909 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead); 2890 ASSERT_EQ(32 * 1024, kYieldAfterBytesRead);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2988 EXPECT_EQ(1u, observer.executed_count()); 2969 EXPECT_EQ(1u, observer.executed_count());
2989 EXPECT_TRUE(data.AllWriteDataConsumed()); 2970 EXPECT_TRUE(data.AllWriteDataConsumed());
2990 EXPECT_TRUE(data.AllReadDataConsumed()); 2971 EXPECT_TRUE(data.AllReadDataConsumed());
2991 } 2972 }
2992 2973
2993 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure 2974 // Send a GoAway frame when SpdySession is in DoReadLoop. Make sure
2994 // nothing blows up. 2975 // nothing blows up.
2995 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) { 2976 TEST_P(SpdySessionTest, GoAwayWhileInDoReadLoop) {
2996 session_deps_.host_resolver->set_synchronous_mode(true); 2977 session_deps_.host_resolver->set_synchronous_mode(true);
2997 2978
2998 BufferedSpdyFramer framer(HTTP2); 2979 BufferedSpdyFramer framer;
2999 2980
3000 std::unique_ptr<SpdySerializedFrame> req1( 2981 std::unique_ptr<SpdySerializedFrame> req1(
3001 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true)); 2982 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, MEDIUM, true));
3002 MockWrite writes[] = { 2983 MockWrite writes[] = {
3003 CreateMockWrite(*req1, 0), 2984 CreateMockWrite(*req1, 0),
3004 }; 2985 };
3005 2986
3006 std::unique_ptr<SpdySerializedFrame> resp1( 2987 std::unique_ptr<SpdySerializedFrame> resp1(
3007 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1)); 2988 spdy_util_.ConstructSpdyGetSynReply(nullptr, 0, 1));
3008 std::unique_ptr<SpdySerializedFrame> body1( 2989 std::unique_ptr<SpdySerializedFrame> body1(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 3039
3059 MockRead reads[] = { 3040 MockRead reads[] = {
3060 MockRead(SYNCHRONOUS, 0, 0) // EOF 3041 MockRead(SYNCHRONOUS, 0, 0) // EOF
3061 }; 3042 };
3062 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 3043 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
3063 session_deps_.socket_factory->AddSocketDataProvider(&data); 3044 session_deps_.socket_factory->AddSocketDataProvider(&data);
3064 3045
3065 CreateNetworkSession(); 3046 CreateNetworkSession();
3066 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); 3047 session_ = CreateFakeSpdySession(spdy_session_pool_, key_);
3067 3048
3068 EXPECT_EQ(HTTP2, session_->buffered_spdy_framer_->protocol_version()); 3049 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_send_window_size_);
3069 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 3050 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3070 session_->session_send_window_size_);
3071 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2),
3072 session_->session_recv_window_size_);
3073 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3051 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3074 } 3052 }
3075 3053
3076 // Tests the case of a non-SPDY request closing an idle SPDY session when no 3054 // Tests the case of a non-SPDY request closing an idle SPDY session when no
3077 // pointers to the idle session are currently held. 3055 // pointers to the idle session are currently held.
3078 TEST_P(SpdySessionTest, CloseOneIdleConnection) { 3056 TEST_P(SpdySessionTest, CloseOneIdleConnection) {
3079 ClientSocketPoolManager::set_max_sockets_per_group( 3057 ClientSocketPoolManager::set_max_sockets_per_group(
3080 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3058 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
3081 ClientSocketPoolManager::set_max_sockets_per_pool( 3059 ClientSocketPoolManager::set_max_sockets_per_pool(
3082 HttpNetworkSession::NORMAL_SOCKET_POOL, 1); 3060 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
3461 EXPECT_FALSE(session_); 3439 EXPECT_FALSE(session_);
3462 } 3440 }
3463 3441
3464 // SpdySession::{Increase,Decrease}RecvWindowSize should properly 3442 // SpdySession::{Increase,Decrease}RecvWindowSize should properly
3465 // adjust the session receive window size. In addition, 3443 // adjust the session receive window size. In addition,
3466 // SpdySession::IncreaseRecvWindowSize should trigger 3444 // SpdySession::IncreaseRecvWindowSize should trigger
3467 // sending a WINDOW_UPDATE frame for a large enough delta. 3445 // sending a WINDOW_UPDATE frame for a large enough delta.
3468 TEST_P(SpdySessionTest, AdjustRecvWindowSize) { 3446 TEST_P(SpdySessionTest, AdjustRecvWindowSize) {
3469 session_deps_.host_resolver->set_synchronous_mode(true); 3447 session_deps_.host_resolver->set_synchronous_mode(true);
3470 3448
3471 const int32_t initial_window_size = 3449 const int32_t initial_window_size = kDefaultInitialWindowSize;
3472 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3473 const int32_t delta_window_size = 100; 3450 const int32_t delta_window_size = 100;
3474 3451
3475 MockRead reads[] = { 3452 MockRead reads[] = {
3476 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF 3453 MockRead(ASYNC, ERR_IO_PENDING, 1), MockRead(ASYNC, 0, 2) // EOF
3477 }; 3454 };
3478 std::unique_ptr<SpdySerializedFrame> window_update( 3455 std::unique_ptr<SpdySerializedFrame> window_update(
3479 spdy_util_.ConstructSpdyWindowUpdate( 3456 spdy_util_.ConstructSpdyWindowUpdate(
3480 kSessionFlowControlStreamId, 3457 kSessionFlowControlStreamId,
3481 initial_window_size + delta_window_size)); 3458 initial_window_size + delta_window_size));
3482 MockWrite writes[] = { 3459 MockWrite writes[] = {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3526 3503
3527 MockRead reads[] = { 3504 MockRead reads[] = {
3528 MockRead(SYNCHRONOUS, 0, 0) // EOF 3505 MockRead(SYNCHRONOUS, 0, 0) // EOF
3529 }; 3506 };
3530 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 3507 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
3531 session_deps_.socket_factory->AddSocketDataProvider(&data); 3508 session_deps_.socket_factory->AddSocketDataProvider(&data);
3532 3509
3533 CreateNetworkSession(); 3510 CreateNetworkSession();
3534 session_ = CreateFakeSpdySession(spdy_session_pool_, key_); 3511 session_ = CreateFakeSpdySession(spdy_session_pool_, key_);
3535 3512
3536 const int32_t initial_window_size = 3513 const int32_t initial_window_size = kDefaultInitialWindowSize;
3537 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3538 const int32_t delta_window_size = 100; 3514 const int32_t delta_window_size = 100;
3539 3515
3540 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3516 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3541 3517
3542 session_->IncreaseSendWindowSize(delta_window_size); 3518 session_->IncreaseSendWindowSize(delta_window_size);
3543 EXPECT_EQ(initial_window_size + delta_window_size, 3519 EXPECT_EQ(initial_window_size + delta_window_size,
3544 session_->session_send_window_size_); 3520 session_->session_send_window_size_);
3545 3521
3546 session_->DecreaseSendWindowSize(delta_window_size); 3522 session_->DecreaseSendWindowSize(delta_window_size);
3547 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3523 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
(...skipping 11 matching lines...) Expand all
3559 CreateMockRead(*resp, 0), 3535 CreateMockRead(*resp, 0),
3560 MockRead(ASYNC, ERR_IO_PENDING, 1), 3536 MockRead(ASYNC, ERR_IO_PENDING, 1),
3561 MockRead(ASYNC, 0, 2) // EOF 3537 MockRead(ASYNC, 0, 2) // EOF
3562 }; 3538 };
3563 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3539 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3564 session_deps_.socket_factory->AddSocketDataProvider(&data); 3540 session_deps_.socket_factory->AddSocketDataProvider(&data);
3565 3541
3566 CreateNetworkSession(); 3542 CreateNetworkSession();
3567 CreateInsecureSpdySession(); 3543 CreateInsecureSpdySession();
3568 3544
3569 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 3545 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3570 session_->session_recv_window_size_);
3571 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3546 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3572 3547
3573 base::RunLoop().RunUntilIdle(); 3548 base::RunLoop().RunUntilIdle();
3574 3549
3575 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 3550 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3576 session_->session_recv_window_size_);
3577 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_); 3551 EXPECT_EQ(kUploadDataSize, session_->session_unacked_recv_window_bytes_);
3578 3552
3579 EXPECT_TRUE(session_); 3553 EXPECT_TRUE(session_);
3580 data.Resume(); 3554 data.Resume();
3581 base::RunLoop().RunUntilIdle(); 3555 base::RunLoop().RunUntilIdle();
3582 EXPECT_FALSE(session_); 3556 EXPECT_FALSE(session_);
3583 } 3557 }
3584 3558
3585 // The frame header is not included in flow control, but frame payload 3559 // The frame header is not included in flow control, but frame payload
3586 // (including optional pad length and padding) is. 3560 // (including optional pad length and padding) is.
3587 TEST_P(SpdySessionTest, SessionFlowControlPadding) { 3561 TEST_P(SpdySessionTest, SessionFlowControlPadding) {
3588 session_deps_.host_resolver->set_synchronous_mode(true); 3562 session_deps_.host_resolver->set_synchronous_mode(true);
3589 3563
3590 const int padding_length = 42; 3564 const int padding_length = 42;
3591 std::unique_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame( 3565 std::unique_ptr<SpdySerializedFrame> resp(spdy_util_.ConstructSpdyBodyFrame(
3592 1, kUploadData, kUploadDataSize, false, padding_length)); 3566 1, kUploadData, kUploadDataSize, false, padding_length));
3593 MockRead reads[] = { 3567 MockRead reads[] = {
3594 CreateMockRead(*resp, 0), 3568 CreateMockRead(*resp, 0),
3595 MockRead(ASYNC, ERR_IO_PENDING, 1), 3569 MockRead(ASYNC, ERR_IO_PENDING, 1),
3596 MockRead(ASYNC, 0, 2) // EOF 3570 MockRead(ASYNC, 0, 2) // EOF
3597 }; 3571 };
3598 SequencedSocketData data(reads, arraysize(reads), nullptr, 0); 3572 SequencedSocketData data(reads, arraysize(reads), nullptr, 0);
3599 session_deps_.socket_factory->AddSocketDataProvider(&data); 3573 session_deps_.socket_factory->AddSocketDataProvider(&data);
3600 3574
3601 CreateNetworkSession(); 3575 CreateNetworkSession();
3602 CreateInsecureSpdySession(); 3576 CreateInsecureSpdySession();
3603 3577
3604 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 3578 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3605 session_->session_recv_window_size_);
3606 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3579 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3607 3580
3608 base::RunLoop().RunUntilIdle(); 3581 base::RunLoop().RunUntilIdle();
3609 3582
3610 EXPECT_EQ(SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2), 3583 EXPECT_EQ(kDefaultInitialWindowSize, session_->session_recv_window_size_);
3611 session_->session_recv_window_size_);
3612 EXPECT_EQ(kUploadDataSize + padding_length, 3584 EXPECT_EQ(kUploadDataSize + padding_length,
3613 session_->session_unacked_recv_window_bytes_); 3585 session_->session_unacked_recv_window_bytes_);
3614 3586
3615 data.Resume(); 3587 data.Resume();
3616 base::RunLoop().RunUntilIdle(); 3588 base::RunLoop().RunUntilIdle();
3617 EXPECT_FALSE(session_); 3589 EXPECT_FALSE(session_);
3618 } 3590 }
3619 3591
3620 // Peer sends more data than stream level receiving flow control window. 3592 // Peer sends more data than stream level receiving flow control window.
3621 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) { 3593 TEST_P(SpdySessionTest, StreamFlowControlTooMuchData) {
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
3889 3861
3890 DropReceivedDataDelegate delegate(stream, msg_data); 3862 DropReceivedDataDelegate delegate(stream, msg_data);
3891 stream->SetDelegate(&delegate); 3863 stream->SetDelegate(&delegate);
3892 3864
3893 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 3865 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
3894 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 3866 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
3895 EXPECT_EQ(ERR_IO_PENDING, 3867 EXPECT_EQ(ERR_IO_PENDING,
3896 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 3868 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
3897 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3869 EXPECT_TRUE(stream->HasUrlFromHeaders());
3898 3870
3899 const int32_t initial_window_size = 3871 const int32_t initial_window_size = kDefaultInitialWindowSize;
3900 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3901 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3872 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
3902 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 3873 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
3903 3874
3904 base::RunLoop().RunUntilIdle(); 3875 base::RunLoop().RunUntilIdle();
3905 3876
3906 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 3877 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
3907 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_); 3878 EXPECT_EQ(kMsgDataSize, session_->session_unacked_recv_window_bytes_);
3908 3879
3909 stream->Close(); 3880 stream->Close();
3910 EXPECT_FALSE(stream); 3881 EXPECT_FALSE(stream);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
3955 3926
3956 test::StreamDelegateSendImmediate delegate(stream, msg_data); 3927 test::StreamDelegateSendImmediate delegate(stream, msg_data);
3957 stream->SetDelegate(&delegate); 3928 stream->SetDelegate(&delegate);
3958 3929
3959 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 3930 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
3960 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 3931 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
3961 EXPECT_EQ(ERR_IO_PENDING, 3932 EXPECT_EQ(ERR_IO_PENDING,
3962 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 3933 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
3963 EXPECT_TRUE(stream->HasUrlFromHeaders()); 3934 EXPECT_TRUE(stream->HasUrlFromHeaders());
3964 3935
3965 const int32_t initial_window_size = 3936 const int32_t initial_window_size = kDefaultInitialWindowSize;
3966 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
3967 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3937 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3968 3938
3969 // Write request. 3939 // Write request.
3970 base::RunLoop().RunUntilIdle(); 3940 base::RunLoop().RunUntilIdle();
3971 3941
3972 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 3942 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
3973 3943
3974 // Read response, but do not run the message loop, so that the body is not 3944 // Read response, but do not run the message loop, so that the body is not
3975 // written to the socket. 3945 // written to the socket.
3976 data.Resume(); 3946 data.Resume();
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
4040 4010
4041 test::StreamDelegateSendImmediate delegate(stream, msg_data); 4011 test::StreamDelegateSendImmediate delegate(stream, msg_data);
4042 stream->SetDelegate(&delegate); 4012 stream->SetDelegate(&delegate);
4043 4013
4044 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock( 4014 std::unique_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock(
4045 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize))); 4015 spdy_util_.ConstructPostHeaderBlock(kDefaultUrl, kMsgDataSize)));
4046 EXPECT_EQ(ERR_IO_PENDING, 4016 EXPECT_EQ(ERR_IO_PENDING,
4047 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND)); 4017 stream->SendRequestHeaders(std::move(headers), MORE_DATA_TO_SEND));
4048 EXPECT_TRUE(stream->HasUrlFromHeaders()); 4018 EXPECT_TRUE(stream->HasUrlFromHeaders());
4049 4019
4050 const int32_t initial_window_size = 4020 const int32_t initial_window_size = kDefaultInitialWindowSize;
4051 SpdySession::GetDefaultInitialWindowSize(kProtoHTTP2);
4052 EXPECT_EQ(initial_window_size, session_->session_send_window_size_); 4021 EXPECT_EQ(initial_window_size, session_->session_send_window_size_);
4053 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 4022 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
4054 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_); 4023 EXPECT_EQ(0, session_->session_unacked_recv_window_bytes_);
4055 4024
4056 // Send request and message. 4025 // Send request and message.
4057 base::RunLoop().RunUntilIdle(); 4026 base::RunLoop().RunUntilIdle();
4058 4027
4059 EXPECT_EQ(initial_window_size - kMsgDataSize, 4028 EXPECT_EQ(initial_window_size - kMsgDataSize,
4060 session_->session_send_window_size_); 4029 session_->session_send_window_size_);
4061 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_); 4030 EXPECT_EQ(initial_window_size, session_->session_recv_window_size_);
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
4652 4621
4653 // Read response headers & body. Body overflows the session window, and a 4622 // Read response headers & body. Body overflows the session window, and a
4654 // goaway is written. 4623 // goaway is written.
4655 data.Resume(); 4624 data.Resume();
4656 base::RunLoop().RunUntilIdle(); 4625 base::RunLoop().RunUntilIdle();
4657 4626
4658 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_FLOW_CONTROL_ERROR)); 4627 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_SPDY_FLOW_CONTROL_ERROR));
4659 EXPECT_FALSE(session_); 4628 EXPECT_FALSE(session_);
4660 } 4629 }
4661 4630
4662 TEST_P(SpdySessionTest, SplitHeaders) {
4663 GURL kStreamUrl("https://www.example.org/foo.dat");
4664 SpdyHeaderBlock headers;
4665 spdy_util_.AddUrlToHeaderBlock(kStreamUrl.spec(), &headers);
4666 headers["alpha"] = "beta";
4667
4668 SpdyHeaderBlock request_headers;
4669 SpdyHeaderBlock response_headers;
4670
4671 SplitPushedHeadersToRequestAndResponse(headers, HTTP2, &request_headers,
4672 &response_headers);
4673
4674 SpdyHeaderBlock::const_iterator it = response_headers.find("alpha");
4675 std::string alpha_val =
4676 (it == response_headers.end()) ? std::string() : it->second.as_string();
4677 EXPECT_EQ("beta", alpha_val);
4678
4679 GURL request_url = GetUrlFromHeaderBlock(request_headers, HTTP2);
4680 EXPECT_EQ(kStreamUrl, request_url);
4681 }
4682
4683 // Regression. Sorta. Push streams and client streams were sharing a single 4631 // Regression. Sorta. Push streams and client streams were sharing a single
4684 // limit for a long time. 4632 // limit for a long time.
4685 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) { 4633 TEST_P(SpdySessionTest, PushedStreamShouldNotCountToClientConcurrencyLimit) {
4686 SettingsMap new_settings; 4634 SettingsMap new_settings;
4687 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 4635 new_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
4688 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2); 4636 SettingsFlagsAndValue(SETTINGS_FLAG_NONE, 2);
4689 std::unique_ptr<SpdySerializedFrame> settings_frame( 4637 std::unique_ptr<SpdySerializedFrame> settings_frame(
4690 spdy_util_.ConstructSpdySettings(new_settings)); 4638 spdy_util_.ConstructSpdySettings(new_settings));
4691 std::unique_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush( 4639 std::unique_ptr<SpdySerializedFrame> pushed(spdy_util_.ConstructSpdyPush(
4692 nullptr, 0, 2, 1, "https://www.example.org/a.dat")); 4640 nullptr, 0, 2, 1, "https://www.example.org/a.dat"));
(...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after
5739 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5687 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5740 "spdy_pooling.pem"); 5688 "spdy_pooling.pem");
5741 ssl_info.is_issued_by_known_root = true; 5689 ssl_info.is_issued_by_known_root = true;
5742 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5690 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5743 5691
5744 EXPECT_TRUE(SpdySession::CanPool( 5692 EXPECT_TRUE(SpdySession::CanPool(
5745 &tss, ssl_info, "www.example.org", "mail.example.org")); 5693 &tss, ssl_info, "www.example.org", "mail.example.org"));
5746 } 5694 }
5747 5695
5748 } // namespace net 5696 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool_unittest.cc ('k') | net/spdy/spdy_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698